• 基于Python、wxpython的高校教务系统设计与实现


    全套资源下载地址:https://download.csdn.net/download/sheziqiong/86796950
    全套资源下载地址:https://download.csdn.net/download/sheziqiong/86796950
    目录
    第1章 需求分析 1
    1.1 业务场景 1
    1.2 业务属性 1
    1.3 业务逻辑图 2
    第2章 系统设计 3
    2.1 数据库设计 3
    2.2 系统功能实现分析 5
    第3章 关键技术介绍 11
    3.1 初始化准备数据: 12
    3.2 首先获得文件模态框选择后的文件路径: 13
    第4章 软件说明书 15
    4.1登录界面和注册界面: 15
    4.2管理员界面: 15
    4.3教师界面: 16
    4.4学生管理: 17
    第5章 结论与展望 19
    参考资料 19
    2.2 系统功能实现分析

    1. 管理员功能实现
      学院信息管理:主要是对学院表的添加、修改、删除等功能,初始化时将学院表里面的数据读出放到界面的表格里面。事件响应主要包括:点击单元格后将点击行的数据放到界面的相应的控件里面。然后可以对选择数据进行修改等操作。
      学系信息管理、教师信息管理、班级信息管理:这里的基本操作和学院信息的管理差不多,这里主要添加了一个功能切换按钮,就是可以改变当前状态为添加还是修改。当点击单元格、不同按钮时,需要设置一下所有按钮的使能情况,这样才能符合功能的需要。
      学生信息管理:这里在上面信息管理的基础上添加了多条件筛选功能,可以通过学院、学系、班级来筛选学生信息。(由于不同的学院的学系和班级是不同的,所有当用户在选择学院后,系统会根据用户选择自动填充学系下拉框,选择学系后,根据学系所有班级填充班级筛选下拉框)。

    修改资料:对管理员的基本信息进行数据库操作即可(这里需要注意的是:不是所有信息都可以修改的,比如:ID这类固定的是不能修改的)。
    修改密码:这一部分需要加多重验证,原密码错误不能修改密码,新密码和确定密码不相同不能修改密码,新密码为空不能修改密码。

    开课管理,选课管理,开启考试,成绩录入,查看成绩,发布公告,查看公告:作为管理员,这里主要是对教师的开课进行管理,基本功能和教师权限差不多(由于篇幅原因,这里统一在教师业务实现分析介绍)。

    1. 教师功能实现
      个人信息管理:对教师表基本信息的修改。
      修改密码:与前面管理员的密码修改方式一样。
      开课管理:教师可以添加开设新的课程(填写下方控件内容,然后点击新增,保证填写数据类型正确时,就会将新开课程添加到数据库的开课表中);这里也设置了一个切换状态的按钮,这个是用来切换操作类型是添加课程还是修改课程信息;修改和删除按钮只能在点击课程为自己所开设的情况下才能对其进行修改和删除操作;界面上方有两个查看按钮:查看自己开课情况、查看全部老师开课情况。

    学生选课情况:可以通过不同的课程号来查看本课程的学生选课情况,数据库里面有一个选课表,当学生添加选课时,数据可更新后,这里就可以实时显示。

    教师查看课表:课程表是通过一个表格控件实现的,我们从数据库里面获得老师所开的所有课程,分别拿到课程名、上课地点、星期几,第几节等信息,这样就可以根据所拿到的信息,在视图中显示出来。

    学生签到情况:在数据库中有了一个专门纪录签到的表,老师可以通过不同的课程号来查看本课程的学生签到情况:学生学号,姓名,学院,班级,以及签到时间。还可以通过条件筛选,也可以查看所有课程的学生签到情况。

    考试安排:任课老师可以对自己的所开设的课程的考试信息进行设置和修改,主要是对数据库中的开课表进行操作,任课老师可以设置课程的考试时间,考试地点,开始形式等相关信息。

    成绩录入:教师可以通过课程号来筛选选课学生的成绩单,也可以筛选全部学生的成绩单,将筛选出来的结果在界面上显示出来,这里是对学生表、选课表、开课表三表的查询操作。点击单元格后,可以将所点击行的信息,用一个字符串保存下来,然后在界面的下面以提示的形式显示。导入成绩的实现,这里我写了一个专门用来读写文件的类,当用户点击导入成绩按钮后,用户可以选择自己需要导入的成绩名单,只要格式正确就会将结果显示到界面的表格视图中,这个时候名单并没有导入数据库,界面上的导入按钮会变成确定导入按钮,当教师点击确定导入按钮后,才会导入数据库。这里会出现这么一种情况:成绩名单中有这名同学,而学生表中没有这名同学,这样就会导致界面上就筛选不出这名同学的信息,但在成绩表中会出现这位同学的成绩,当然这也是符合现实需要的。

    查看成绩:这里就是对选课表里面的成绩部分的相关信息进行操作,按不同的需要,将筛选的结果显示到界面上。

    学生评价情况:在学生评教后,教师可以查看全校的教师的评教情况,主要是对教师开课表进行筛选显示操作。

    公告:教师和管理员可以发布公告,在数据库中建立了一个公告表,当教师或者管理员发布公告时,就是对这个公告表进行插入(包括发布者姓名、发布时间、发布内容等信息)。
    查看公告:对公告内容在界面显示。
    返回主页:跟换主界面的主画板,将里面的内容清空。
    退出系统:直接关闭程序。

    1. 学生功能实现
      个人信息:读取学生表,显示所需内容。
      修改密码:这里和前面教师的修改密码方法一样的。
      学生选课:点击单元格,显示点击行的信息到下方的空间框中。查看全部老师开课情况,这时新增选课按钮启用,退选课程按钮禁用,当用户查看自己选课情况时,三个按钮全部开启,可以退选自己所选课程。

    个人选课情况:在数据库的选课表中筛选出学号为自己的选课纪录,然后显示到自己界面,可以单击查看详情。
    查看课表:根据自己的选课情况,将自己的选课在课表中填充起来,方法和教师的课表生成方法类似。
    学生签到:我设置的签到原则是,一个学生,每天只能签到一次。所有在数据库中我建立了一个签到表(课程号、学号、签到的具体时间(这个时间用来在界面显示学生签到的具体时间,不是主键),签到的日期(这为一个主键,这个就是用来实现上面的需求防止学生一天同一门课多次签到))。本文转载自http://www.biyezuopin.vip/onews.asp?id=15596

    查看考试时间:对自己所选课程的考试时间进行查看。
    成绩查看:学生可以查看自己所选课程的成绩。
    学生评教:学生可以对自己所选课程进行评教,评价等级可以为好评或者差评,当为好评时,将老师开设课程的评教等级加一,当为差评时,将本门课程的评教等级在原来的基础上减去一。

    查看公告:查看管理员和教师所发布的公告。
    返回主页,退出系统。

    
    # 教师界面的主窗体
    
    import wx
    from Util.MyFrame import MyFrame
    
    from TeacherFrame.Panel_1_1 import Panel_1_1  # 教师个人信息管理
    from TeacherFrame.Panel_1_2 import Panel_1_2  #教师修改密码
    from TeacherFrame.Panel_2_1 import Panel_2_1 # 教师开课
    from TeacherFrame.Panel_2_2 import Panel_2_2 # 教师开课情况
    from TeacherFrame.Panel_3_1 import Panel_3_1 # 教师查看课表
    from TeacherFrame.Panel_3_2 import Panel_3_2 # 教师查看查看学生签到情况
    from TeacherFrame.Panel_4_1 import Panel_4_1 # 教师开启考试
    from TeacherFrame.Panel_4_2 import Panel_4_2 # 教师录入成绩
    from TeacherFrame.Panel_4_3 import Panel_4_3 # 教师查看成绩
    from TeacherFrame.Panel_5_1 import Panel_5_1 # 查看学生评教
    from TeacherFrame.Panel_6_1 import Panel_6_1 # 发布公告
    from TeacherFrame.Panel_6_2 import Panel_6_2 # 发布公告
    
    
    class TeacherMainFrame(MyFrame):
        def __init__(self,person):
            super().__init__(person=person,title="教务管理系统---教师窗口",
                             size=(800, 600))
    
            self.panel_1_1 = None  #
            self.panel_1_2 = None  #
            self.panel_1_3 = None
            self.panel_1_4 = None
            self.panel_1_5 = None
            self.panel_2_1 = None
            self.panel_2_2 = None
            self.panel_3_1 = None
            self.panel_3_2 = None
            self.panel_3_3 = None
            self.panel_3_4 = None
            self.panel_4_1 = None
            self.panel_4_2 = None
            self.panel_4_3 = None
            self.panel_5_1 = None
            self.panel_6_1 = None
            self.panel_6_2 = None
            self.hide()
            # 贴主界面图
            img = wx.Image('res/001.jpg', wx.BITMAP_TYPE_ANY).ConvertToBitmap()
            self.bitmap = wx.StaticBitmap(self, -1, img, (0, 0))
    
            self.font16 = wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.NORMAL, False)
            self.SetFont(self.font16)
            self.Center()
    
            # 创建菜单栏 == 个人信息管理
            menu_1 = wx.Menu()
            menu_1_1 = wx.MenuItem(menu_1, 11, text="个人信息", kind=wx.ITEM_NORMAL)
            menu_1_2 = wx.MenuItem(menu_1, 12, text="修改密码", kind=wx.ITEM_NORMAL)
            menu_1.Append(menu_1_1)
            menu_1.Append(menu_1_2)
    
            # 创建菜单栏 == 课程管理
            menu_2 = wx.Menu()
            menu_2_1 = wx.MenuItem(menu_1, 21, text="开课管理", kind=wx.ITEM_NORMAL)
            menu_2_2 = wx.MenuItem(menu_1, 22, text="选课情况", kind=wx.ITEM_NORMAL)
            menu_2.Append(menu_2_1)
            menu_2.Append(menu_2_2)
    
            # 创建菜单栏 == 上课安排
            menu_3 = wx.Menu()
            menu_3_1 = wx.MenuItem(menu_3, 31, text="查看课表", kind=wx.ITEM_NORMAL)
            menu_3_2 = wx.MenuItem(menu_3, 32, text="学生签到", kind=wx.ITEM_NORMAL)
            menu_3.Append(menu_3_1)
            menu_3.Append(menu_3_2)
    
            # 创建菜单栏 == 课程考核
            menu_4 = wx.Menu()
            menu_4_1 = wx.MenuItem(menu_4, 41, text="考试安排", kind=wx.ITEM_NORMAL)
            menu_4_2 = wx.MenuItem(menu_4, 42, text="成绩录入", kind=wx.ITEM_NORMAL)
            menu_4_3 = wx.MenuItem(menu_4, 43, text="查看成绩", kind=wx.ITEM_NORMAL)
            menu_4.Append(menu_4_1)
            menu_4.Append(menu_4_2)
            menu_4.Append(menu_4_3)
    
            # 创建菜单栏 == 评教管理
            menu_5 = wx.Menu()
            menu_5_1 = wx.MenuItem(menu_5, 51, text="查看学生评教", kind=wx.ITEM_NORMAL)
            menu_5.Append(menu_5_1)
    
            # 创建菜单栏 == 公告
            menu_6 = wx.Menu()
            menu_6_1 = wx.MenuItem(menu_6, 61, text="发布公告", kind=wx.ITEM_NORMAL)
            menu_6_2 = wx.MenuItem(menu_6, 62, text="查看公告", kind=wx.ITEM_NORMAL)
            menu_6.Append(menu_6_1)
            menu_6.Append(menu_6_2)
    
            # 系统
            menu_7 = wx.Menu()
            menu_7_1 = wx.MenuItem(menu_7, 71, text="回到首页", kind=wx.ITEM_NORMAL)
            menu_7_2 = wx.MenuItem(menu_7, wx.ID_EXIT, text="退出", kind=wx.ITEM_NORMAL)
            menu_7.Append(menu_7_1)
            menu_7.Append(menu_7_2)
    
            # 将上面创建的菜单项 加入 到菜刀条里面
            menuBar = wx.MenuBar()
            menuBar.Append(menu_1, '&个人信息管理')
            menuBar.Append(menu_2, '&课程管理')
            menuBar.Append(menu_3, '&上课安排')
            menuBar.Append(menu_4, '&课程考核')
            menuBar.Append(menu_5, '&评教管理')
            menuBar.Append(menu_6, '&公告')
            menuBar.Append(menu_7, '&系统')
    
            menuBar.SetFont(self.font16)
            self.SetMenuBar(menuBar)
            self.Bind(wx.EVT_MENU, self.menuhandler)
    
        def menuhandler(self, event):
            id = event.GetId()
            print(id)
            self.hide() # 隐藏其他面板
            self.bitmap.Hide() # 隐藏图片
            if id == 11:  # 教师个人信息(修改)
                self.panel_1_1 = Panel_1_1(self)
                self.panel_1_1.Show()
                self.SetTitle("教师个人信息---教师窗口")
            if id == 12:  # 修改密码
                self.panel_1_2 = Panel_1_2(self)
                self.panel_1_2.Show()
                self.SetTitle("修改密码---教师窗口")
            if id == 21:  # 教师开课
                pass
                self.panel_2_1 = Panel_2_1(self)
                self.panel_2_1.Show()
                self.SetTitle("教师开课---教师窗口")
            if id == 22:  # 教室开课情况
                self.panel_2_2 = Panel_2_2(self)
                self.panel_2_2.Show()
                self.SetTitle("教师开课情况---教师窗口")
            if id == 31:  # 参看课表
                self.panel_3_1 = Panel_3_1(self)
                self.panel_3_1.Show()
                self.SetTitle("查看课表---教师窗口")
            if id == 32:  # 查看学生签到情况
                self.panel_3_2 = Panel_3_2(self)
                self.panel_3_2.Show()
                self.SetTitle("查看学生签到情况---教师窗口")
            if id == 41:  # 开启考试
                self.panel_4_1 = Panel_4_1(self)
                self.panel_4_1.Show()
                self.SetTitle("开启考试---教师窗口")
            if id == 42:  # 成绩录入
                if self.panel_4_2 is None:
                    self.panel_4_2 = Panel_4_2(self)
                self.panel_4_2.Show()
                self.SetTitle("成绩录入---教师窗口")
            if id == 43:  # 教师查看成绩
                self.panel_4_3 = Panel_4_3(self)
                self.panel_4_3.Show()
                self.SetTitle("教师查看成绩---教师窗口")
            if id == 51:  # 查看学生评教
                self.panel_5_1 = Panel_5_1(self)
                self.panel_5_1.Show()
                self.SetTitle("查看学生评教---教师窗口")
            if id == 61:  # 发布公告
                self.panel_6_1 = Panel_6_1(self)
                self.panel_6_1.Show()
                self.SetTitle("发布公告---教师窗口")
    
            if id == 62:  # 发布公告
                self.panel_6_2 = Panel_6_2(self)
                self.panel_6_2.Show()
                self.SetTitle("查看公告---教师窗口")
    
            if id == 71:  # 返回主页
                self.bitmap.Show()
                self.SetTitle("教务管理系统---教师窗口")
    
            if id == wx.ID_EXIT:# 退出教务系统
                self.Close()
                # frame = LoginFrame()
                # frame.Show()
    
        # 隐藏面板
        def hide(self):
            if self.panel_1_1 is not None:
                self.panel_1_1.Hide()
            if self.panel_1_2 is not None:
                self.panel_1_2.Hide()
            if self.panel_2_1 is not None:
                self.panel_2_1.Hide()
            if self.panel_2_2 is not None:
                self.panel_2_2.Hide()
            if self.panel_3_1 is not None:
                self.panel_3_1.Hide()
            if self.panel_3_2 is not None:
                self.panel_3_2.Hide()
            if self.panel_4_1 is not None:
                self.panel_4_1.Hide()
            if self.panel_4_2 is not None:
                self.panel_4_2.Hide()
            if self.panel_4_3 is not None:
                self.panel_4_3.Hide()
            if self.panel_5_1 is not None:
                self.panel_5_1.Hide()
            if self.panel_6_1 is not None:
                self.panel_6_1.Hide()
            if self.panel_6_2 is not None:
                self.panel_6_2.Hide()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    全套资源下载地址:https://download.csdn.net/download/sheziqiong/86796950
    全套资源下载地址:https://download.csdn.net/download/sheziqiong/86796950

  • 相关阅读:
    试玩ESP32S3 BOX Lite
    MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
    Postman(1): postman的介绍和安装
    mac环境下搭建frida环境并连接网易mumu模拟器
    MySQL实训--原神数据库
    HTML文件跳转不了Java文件
    (续)SSM整合之spring笔记(IOC ,:bean的作用域,bean的生命周期,bean的后置处理器)(P080—P083)
    云服务器ECS_云主机_服务器托管_计算-阿里云
    河流动力学总结
    java毕业设计点播影院运营系统mybatis+源码+调试部署+系统+数据库+lw
  • 原文地址:https://blog.csdn.net/newlw/article/details/126687422