摘要
随着高校规模的扩大和教务管理复杂度的增加,传统的手工管理方式已经无法满足现代教务管理的需求。为此,本文提出了一款基于python的教务管理信息系统。系统后端利用基于python语言的Django框架进行开发。Python作为一种流行的编程语言,具有简洁易学、开发速度快、可扩展性强等特点。Python在数据处理、网络编程、自动化运维等方面具有广泛的应用,将其应用于教务管理信息系统,可以有效提高系统开发效率和稳定性。
本文首先阐述了系统的研究背景和意义;然后对系统进行了可行性、功能性等分析;接着详细介绍了系统的设计原理和实现细节,包括数据库设计、系统架构、主要功能模块等;最后对系统进行了部署和测试。通过本系统的的成功实施,将有利于提升教务管理效率和质量,推动教育事业的繁荣发展。
关键词:教务管理;Python;Django
Abstract
With the expansion of university scale and the increasing complexity of academic management, traditional manual management methods can no longer meet the needs of modern academic management. Therefore, this article proposes a Python based educational management information system. The backend of the system is developed using the Django framework based on Python language. Python, as a popular programming language, has the characteristics of simplicity, easy learning, fast development speed, and strong scalability. Python has a wide range of applications in data processing, network programming, and automated operation and maintenance. Applying it to educational management information systems can effectively improve system development efficiency and stability.
This article first elaborates on the research background and significance of the system; Then, feasibility and functionality analyses were conducted on the system; Then, the design principles and implementation details of the system were introduced in detail, including database design, system architecture, main functional modules, etc; Finally, the system was deployed and tested. The successful implementation of this system will be beneficial for improving the efficiency and quality of educational management, and promoting the prosperous development of the education industry.
Keywords: Academic management; Python; Django
1 绪论
1.1 研究背景
在信息化快速发展的今天,大数据、云计算和人工智能等技术已经到各行各业,教育行业也不例外。教务管理是教育管理的重要组成部分,涉及课程设置、成绩管理等多个方面。传统的教务方式已经无法满足现代教育的需求。因此,需要一种高效、准确、易用的教务管理信息系统来提高教务管理的效率和质量。Python作为一种流行的编程语言,具有简洁易学、开发速度快、可扩展性强等特点。Python在数据处理、网络编程、自动化运维等方面具有广泛的应用,将其应用于教务管理信息系统,可以有效提高系统开发效率和稳定性。
随着科技的进步,教育信息化已经成为全球教育改革的重要方向。基于Python的教务管理信息系统的研究意义体现在以下几个方面:
首先,可以提高教务管理效率。传统的教务管理方式往往依赖于纸质文档和手工操作,这种方式不仅效率低下,而且容易出错。通过Python开发教务管理信息系统,可以自动化许多繁琐的任务,如课程安排、考试成绩录入等,从而显著提高教务管理的效率。
其次,可以促进教育信息化发展。教务管理信息系统是教育信息化的重要组成部分。通过Python开发教务管理信息系统,不仅可以满足当前的教育管理需求,还可以为未来教育信息化的发展提供技术基础和经验借鉴。
最后,可以推动Python在教育领域的应用。Python作为一种强大且易学的编程语言,在教育领域有着广泛的应用前景。基于Python的教务管理信息系统的研究和实践,可以推动Python在教育领域的应用和发展,为更多的教育工作者和技术人员提供学习和实践的机会。
1.3论文结构与章节安排
论文将分层次进行编排,除去论文摘要致谢文献参考部分,正文部分主要结构如下:
第一章:绪论,此章节对所设计和实现的系统的背景以及意义进行详细的论述以及说明,同时进行了论文整体框架的结构的简要介绍。
第二章:相关技术介绍,此章节主要对系统设计开发过程中所使用的技术进行介绍,主要包括Django框架、Python语言和MySQL数据库的介绍。
第三章:系统分析,此章节所做的主要的工作是对系统进行了技术、经济和操作方面可行性的分析;对系统实行了总体功能的需求、用例分析。
第四章:系统总体设计,主要是对系统的功能结构进行设计,并对系统数据库的概念结构以及物理结构的设计进行了分析。
第五章:系统详细设计与实现,根据系统功能的划分,分别的对系统所需要实现的前台客户功能和后台管理员功能进行了分析和说明。
第六章:系统测试,主要介绍了系统测试目的和对系统的部分功能界面进行测试并对测试结果作出总结。
第七章:结论,主要对系统的开发设计工作进行总结。
2 相关技术介绍
Django是高水准的Python编程语言驱动的一个开源模型.视图,控制器风格的Web应用程序框架,它起源于开源社区。使用这种架构,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外,在Django框架中,还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性。Django 项目源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有:
1.3.1 用于创建模型的对象关系映射;
1.3.2 为最终用户设计较好的管理界面;
1.3.3 URL 设计;
1.3.4 设计者友好的模板语言;
1.3.5 缓存系统。
Django(发音:[`dʒæŋɡəʊ]) 是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计。Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。
Django 根据比利时的爵士音乐家Django Reinhardt命名,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。
由于Django在近年来的迅速发展,应用越来越广泛,被著名IT开发杂志SD Times评选为2013 SD Times 100,位列“API、库和框架”分类第6位,被认为是该领域的佼佼者。
早在上个世纪90年代,Python就由吉多·范罗苏姆进行创造,自诞生之日起,Python就一直深深的受到了程序开发者的广泛喜爱,它作为计算机主要的编程语言,一直到今。Python语言是真的是一种纯面向对象的计算机语言,在Python的世界中,所有的方法、数据类型、符号等都是以类的方式存在的,最顶层的就是Object,所有的类都是对object的继承。继承是Python中的核心思想,与C语言不同的是,子类只有一个父类,这样的好处就是操作更加的简便,让人更容易理解,在代码的书写上也会容易较多。Python另外一个特性就是多态性,调用父类接口的方法可以实现子类的实现,这样的好处就是很好的对实现方法进行了隐藏(封装),而且又能够把API进行公开,一举两得。接口思想很好的诠释了想象对象的思想,让面向对象编程渐渐转向面向接口编程。如今,随着编程思想的继续发展,Python也加入了一些函数式编程的思想,这样的好处就是让编程代码更加的简洁与方便。本管理系统采用Python编程语言进行后台的开发,一是鉴于标准化制定以后,Python语言常用于大型商业应用程序后台系统中,生态稳定;二是也希望通过本系统的开发提高自己编写Python代码的能力。
MySQL数据库已经成为网络上的一种强大的工具,它能够支持多个用户,并且能够根据客户端和服务端的需求进行调整,从而满足不同的需求。在这里,服务端和客户端只是一种软件上的概念,而我们所使用的计算机硬件则没有必要完全相互匹配。
MySQL作为一种备受推崇的关联性DBMS,其卓越的性能和易于操作的特性,以及其在多种操作环境中的灵活性,让其成为了最受青睐的应用之选。此外,MySQL还具有良好的跨平台性,让软件开发人员更加满意。与传统的关联式数据库系统形式大相径庭,MySQL拥有一套完善的数据库管理策略,以确保用户的安全、稳健、安全。MySQL具备良好的容错、安全、快速、稳健的特点,使得MySQL成为一款相当流行的数据库管理工具。
MySQL拥有一种独特的权限分配机制,可以根据用户的身份和业务逻辑,为用户提供更多的选择,从而大大提高了MySQL的安全性和完整性,远超过其他关系型数据库。
MySQL具有强大的功能,能够处理各种数据类型,包括动态、静态、多种语言,从而使用户能够轻松访问多种数据。
MySQL具有多种功能,它能够支持多种平台的开发,并且支持多种编程语言,使得用户能够轻松访问和使用MySQL数据库。
3系统分析
3.1 可行性分析
(1)技术可行性
Python是一种广泛使用、成熟且稳定的高级编程语言,拥有大量的开发资源和社区支持。Python的语法清晰简洁,易于学习,特别适合开发快速、可维护的软件系统。此外,Django是一个开源的高级Python Web框架,具有快速开发、易于部署、功能丰富等。结合Django框架的特性,可以快速搭建一个稳定、高效的基于python的教务管理信息系统。因此,从技术层面分析是可行的。
(2)经济可行性
Python是开源的,可以免费使用,且其学习曲线平缓,降低了开发人员的培训成本。此外,Python社区活跃,有大量的免费资源和开源项目可供参考。Python运行在多种平台上,包括Windows、Linux等,不需要额外的许可证费用。此外,Python的运维成本也相对较低。因此,从经济层面分析是可行的。
(3)操作可行性
操作方面主要考虑的是用户在使用以及管理人员在管理的时候,是否简单可行,没有任何计算机基础的用户能否使用,教务管理信息系统系统的操作界面设计简洁明了、易于操作,而且大学生已经普遍具备了使用计算机和互联网的基本技能。而且管理员在管理方面也只需简单的增删改查即可完成。因此在操作上也是可行的。
系统流程是用一些特定的符合和线条来进行演示用户在使用系统时的过程,在进行系统分析的时候,业务流程可以帮助开发人员更好的理解业务,发现错误,完善系统。
用户通过登录才能访问系统及权限以内的功能,对此将实现各种应用及管理等功能,用户登录流程图如下图3-1所示。
图3-1 登录流程图
3.2.2数据删除流程
如果系统里面存在一些没有用的数据,相关的管理人员还可以对这些数据进行删除,数据删除时流程图如下图3-3所示。
图3-2 数据删除流程图
按照基于python的教务管理信息系统的角色,主要包括学生用户、教师用户和管理员这三大功能模块,主要包括登录、系统用户、课程分类管理、公告信息管理、课程信息管理、考试成绩管理等功能板块,具体内容如下:
- 登录:用户登录界面用于已注册用户进行账号登录,用户需要输入正确的用户名和密码才能成功登录系统。登录界面会对用户的输入的信息进行验证,验证通过后即可完成登录。
- 后台首页:系统用户可以查看后台首页展示的相关信息。
- 系统用户:系统用户管理界面是一个用于管理系统中的用户信息和权限的页面。管理员可以在该界面上查看已注册的用户列表,包括用户名、角色等相关信息。同时,管理员也可以添加新用户、编辑现有用户信息或删除不再需要的用户账号。教师账户和学生账户信息由管理员添加。
- 课程分类管理:管理员负责课程分类信息的添加,可以查看课程分类列表中某一课程分类的详情,可以对列表信息进行查询和删除操作。
- 公告信息管理:公告信息由管理员负责添加发布,学生用户/教师用户可以公告信息列表中某一公告的详情和下载相关文章;系统用户可以通过公告标题、发布时间进行查询公告信息。课程信息管理:教师用户可以添加课程信息;可以查看课程信息列表中某一课程的详情并提交成绩信息;管理员可以添加课程信息和查看课程信息列表中某一课程详情和成绩信息;学生用户可以查看课程信息列表中某一课程的详情,可以通过课程类型、课程名称来查询课程信息。
- 考试成绩管理:教师用户可以查看考试成绩列表中某一学生的课程学分的详情;管理员可以查看考试成绩列表中某一课程成绩详情;学生用户可以查看考试成绩列表中某一课程的考试详情;用户可以通过课程名称、考试时间来查询考试成绩信息。
- 我的:系统用户点击我的头像的下拉菜单“个人信息”进入页面可以修改个人头像、昵称、邮箱信息。教师用户/学生用户点击“详情”进入页面可以修改更多个人信息,如出生年份、所属院系等信息。用户点击我的头像下拉菜单“修改密码”进入页面填写原密码、新密码、确认新密码信息后点击“提交”,系统验证输入的信息无误后即可完成密码的修改,修改后可以用新密码登录系统。点击“退出”即可退出登录。
3.4 系统用例分析
通过2.3功能的分析,得出了本系统的用例图:
学生用户用例图如下图3-3所示。
图3-3学生用户用例图
教师用户用例图如下图3-4所示。
图3-4教师用户用例图
管理员用例图如下图3-5所示。
3.5本章小结
本章主要通过对基于python的教务管理信息系统的可行性分析、流程分析、功能需求分析、系统用例分析,确定整个系统要实现的功能。同时也为系统的代码实现和测试提供了标准。
4 系统总体设计
本章主要讨论的内容包括基于python的教务管理信息系统的架构设计、功能模块设计、数据库系统设计。
4.1 系统架构设计
本系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图4-1系统架构设计图
表现层(UI):又称UI层,主要完成本系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本系统时的舒适度。UI的界面设计也要适应不同版本的系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成本系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于本系统的数据是放在服务端的MySQL数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本系统的数据存储和管理功能。
4.2 系统功能模块设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了系统中的用例。那么接下来就要开始对本系统的主要功能和数据库开始进行设计。基于根据前面章节的需求分析得出,其总体设计模块图如图4-1所示。

图4-2 系统功能模块图
4.3 数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
4.3.1 数据库概念结构设计
下面是整个基于python的教务管理信息系统中主要的数据库表总E-R实体关系图。

图4-3 系统总E-R关系图
4.3.2 数据库逻辑结构设计
通过上一小节中基于python的教务管理信息系统中总E-R关系图上得出一共需要创建很多个数据表。在此主要罗列几个主要的数据库表结构设计。
表access_token (登陆访问时长)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
表announcement_information (公告信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | announcement_information_id | int | 10 | 0 | N | Y | 公告信息ID | |
2 | announcement_title | varchar | 64 | 0 | Y | N | 公告标题 | |
3 | release_time | date | 10 | 0 | Y | N | 发布时间 | |
4 | publisher | varchar | 64 | 0 | Y | N | 发布人 | |
5 | announcement_content | text | 65535 | 0 | Y | N | 公告内容 | |
6 | related_documents | varchar | 255 | 0 | Y | N | 相关文件 | |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表auth (用户权限管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表course_classification (课程分类)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | course_classification_id | int | 10 | 0 | N | Y | 课程分类ID | |
2 | course_type | varchar | 64 | 0 | Y | N | 课程类型 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表course_information (课程信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | course_information_id | int | 10 | 0 | N | Y | 课程信息ID | |
2 | lecturer | int | 10 | 0 | Y | N | 0 | 授课教师 |
3 | teachers_name | varchar | 64 | 0 | Y | N | 教师姓名 | |
4 | affiliated_department | varchar | 64 | 0 | Y | N | 所属院系 | |
5 | course_id | varchar | 64 | 0 | Y | N | 课程编号 | |
6 | course_name | varchar | 64 | 0 | Y | N | 课程名称 | |
7 | course_type | varchar | 64 | 0 | Y | N | 课程类型 | |
8 | course_images | varchar | 255 | 0 | Y | N | 课程图片 | |
9 | class_time | varchar | 64 | 0 | Y | N | 上课时间 | |
10 | class_location | varchar | 64 | 0 | Y | N | 上课地点 | |
11 | course_hours | varchar | 64 | 0 | Y | N | 课程学时 | |
12 | course_credit | varchar | 64 | 0 | Y | N | 课程学分 | |
13 | course_overview | text | 65535 | 0 | Y | N | 课程概述 | |
14 | course_content | text | 65535 | 0 | Y | N | 课程内容 | |
15 | attendance_rules | text | 65535 | 0 | Y | N | 考勤规则 | |
16 | course_students | int | 10 | 0 | Y | N | 0 | 课程学生 |
17 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
18 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
19 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表exam_scores (考试成绩)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | exam_scores_id | int | 10 | 0 | N | Y | 考试成绩ID | |
2 | lecturer | int | 10 | 0 | Y | N | 0 | 授课教师 |
3 | teachers_name | varchar | 64 | 0 | Y | N | 教师姓名 | |
4 | affiliated_department | varchar | 64 | 0 | Y | N | 所属院系 | |
5 | course_name | varchar | 64 | 0 | Y | N | 课程名称 | |
6 | course_type | varchar | 64 | 0 | Y | N | 课程类型 | |
7 | course_hours | varchar | 64 | 0 | Y | N | 课程学时 | |
8 | course_credit | varchar | 64 | 0 | Y | N | 课程学分 | |
9 | course_students | int | 10 | 0 | Y | N | 0 | 课程学生 |
10 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
11 | exam_time | date | 10 | 0 | Y | N | 考试时间 | |
12 | exam_location | varchar | 64 | 0 | Y | N | 考试地点 | |
13 | exam_scores | varchar | 64 | 0 | Y | N | 考试成绩 | |
14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表hits (用户点击)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表student_users (学生用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | student_users_id | int | 10 | 0 | N | Y | 学生用户ID | |
2 | student_no | varchar | 64 | 0 | N | N | 学生学号 | |
3 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
4 | student_gender | varchar | 64 | 0 | Y | N | 学生性别 | |
5 | birth_year | varchar | 64 | 0 | Y | N | 出生年份 | |
6 | enrollment_time | date | 10 | 0 | Y | N | 入学时间 | |
7 | affiliated_department | varchar | 64 | 0 | Y | N | 所属院系 | |
8 | professional_name | varchar | 64 | 0 | Y | N | 专业名称 | |
9 | class_name | varchar | 64 | 0 | Y | N | 班级名称 | |
10 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
11 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表teacher_users (教师用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | teacher_users_id | int | 10 | 0 | N | Y | 教师用户ID | |
2 | teacher_no | varchar | 64 | 0 | N | N | 教师工号 | |
3 | teachers_name | varchar | 64 | 0 | Y | N | 教师姓名 | |
4 | teacher_gender | varchar | 64 | 0 | Y | N | 教师性别 | |
5 | birth_year | varchar | 64 | 0 | Y | N | 出生年份 | |
6 | date_of_employment | date | 10 | 0 | Y | N | 入职时间 | |
7 | affiliated_department | varchar | 64 | 0 | Y | N | 所属院系 | |
8 | teacher_education | varchar | 64 | 0 | Y | N | 教师学历 | |
9 | teacher_title | varchar | 64 | 0 | Y | N | 教师职称 | |
10 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
11 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表upload (文件上传)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
表user (用户账户:用于保存用户登录信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
表user_group (用户组:用于用户前端身份和鉴权)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
整个基于python的教务管理信息系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
5 系统详细设计与实现
5.1用户登录模块
用户登录界面用于已注册用户进行账号登录,用户需要输入正确的用户名和密码才能成功登录系统。登录界面会对用户的输入的信息进行验证,验证通过后即可完成登录。其界面如下图5-1所示。

图5-1用户登录界面图
登录代码如下:
def Login(self, ctx):
print("===================登录=====================")
ret = {
"error": {
"code": 70000,
"message": "账户不存在",
}
}
body = ctx.body
password = md5hash(body["password"]) or ""
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if obj:
user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})
if user_group and user_group['source_table'] != '':
user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']}, {"like": False})
if user_obj['examine_state'] == '未通过':
ret = {
"error": {
"code": 70000,
"message": "账户未通过审核",
}
}
return ret
if user_obj['examine_state'] == '未审核':
ret = {
"error": {
"code": 70000,
"message": "账户未审核",
}
}
return ret
if obj["state"] == 1:
if obj["password"] == password:
timeout = timezone.now()
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
ctx.request.session[token] = obj["user_id"]
service_select("access_token").Add(
{"token": token, "user_id": obj["user_id"]}
)
obj["token"] = token
ret = {
"result": {"obj": obj}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "用户账户不可用,请联系管理员",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
公告信息由管理员负责添加发布,学生用户/教师用户可以公告信息列表中某一公告的详情和下载相关文章;系统用户可以通过公告标题、发布时间进行查询公告信息。其界面展示如下图5-2所示。

图5-2公告信息管理界面图
教师用户可以添加课程信息;可以查看课程信息列表中某一课程的详情并提交成绩信息;管理员可以添加课程信息和查看课程信息列表中某一课程详情和成绩信息;学生用户可以查看课程信息列表中某一课程的详情,可以通过课程类型、课程名称来查询课程信息。其界面如下图5-3所示。

图5-3 课程信息管理界面图
教师用户可以查看考试成绩列表中某一学生的课程学分的详情;管理员可以查看考试成绩列表中某一课程成绩详情;学生用户可以查看考试成绩列表中某一课程的考试详情;用户可以通过课程名称、考试时间来查询考试成绩信息。其界面如下图5-4所示。

图5-4 考试成绩管理界面图
系统用户管理界面是一个用于管理系统中的用户信息和权限的页面。管理员可以在该界面上查看已注册的用户列表,包括用户名、角色等相关信息。同时,管理员也可以添加新用户、编辑现有用户信息或删除不再需要的用户账号。教师账户和学生账户信息由管理员添加。其界面如下图5-5所示。

图5-5系统用户界面图
添加的代码如下:
def Add(self, ctx):
body = ctx.body
unique = self.config.get("unique")
obj = None
if unique:
qy = {}
for i in range(len(unique)):
key = unique[i]
qy[key] = body.get(key)
obj = self.service.Get_obj(qy)
if not obj:
error = self.Add_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("add_before", ctx, None)
if error["code"]:
return {"error": error}
result = self.service.Add(body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Add_after(ctx, result)
if res:
result = res
res = self.Events("add_after", ctx, result)
if res:
result = res
return {"result": result}
else:
return {"error": {"code": 10000, "message": "已存在"}}
管理员负责课程分类信息的添加,可以查看课程分类列表中某一课程分类的详情,可以对列表信息进行查询和删除操作。其界面如下图5-9所示。

图5-6课程分类管理界面图
删除的代码如下:
def Del(self, ctx):
if len(ctx.query) == 0:
errorMsg = {"code": 30000, "message": "删除条件不能为空!"}
return errorMsg
result = self.service.Del(ctx.query, self.config)
if self.service.error:
return {"error": self.service.error}
return {"result": result}
系统用户点击我的头像的下拉菜单“个人信息”进入页面可以修改个人头像、昵称、邮箱信息。教师用户/学生用户点击“详情”进入页面可以修改更多个人信息,如出生年份、所属院系等信息。其界面如下图5-7所示。

图5-7个人信息管理界面图
修改的代码如下:
def Set(self, ctx):
error = self.Set_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("set_before", ctx, None)
if error["code"]:
return {"error": error}
query = ctx.query
if 'page' in query.keys():
del ctx.query['page']
if 'size' in query.keys():
del ctx.query['size']
if 'orderby' in query.keys():
del ctx.query['orderby']
result = self.service.Set(ctx.query, ctx.body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Set_after(ctx, result)
if res:
result = res
res = self.Events("set_after", ctx, result)
if res:
result = res
return {"result": result}
系统用户点击我的头像下拉菜单“修改密码”进入页面填写原密码、新密码、确认新密码信息后点击“提交”,系统验证输入的信息无误后即可完成密码的修改,修改后可以用新密码登录系统。其界面如下图5-8所示。

图5-8修改密码界面图
6系统测试
6.1系统测试的目的
系统测试的目的是确保系统的功能完整、性能稳定,并验证系统是否符合预期的设计和需求。通过系统测试,可以发现和修复潜在的错误和缺陷,提高系统的质量和可靠性。同时,系统测试还可以评估系统在不同条件下的性能表现,包括并发性能、响应时间和容错能力等。通过全面的系统测试,可以确保系统在正式上线前达到高品质的状态。
6.2 测试用例
系统测试包括:用户登录功能测试、公告信息查看功能测试、课程分类添加功能测试、密码修改功能测试,如表6-1、6-2、6-3、6-4所示:
用户登录功能测试:
表6-1 用户登录功能测试表
测试用例编号 | 测试描述 | 预期结果 | 实际结果 | 是否通过 |
TC001 | 使用正确的用户名和密码进行登录 | 成功登录系统,跳转到用户首页 | 登录成功,跳转到用户首页 | 通过 |
TC002 | 使用不存在的用户名进行登录 | 显示错误提示信息:用户名不存在 | 显示错误提示信息:用户名不存在 | 通过 |
TC003 | 使用正确的用户名和错误的密码进行登录 | 显示错误提示信息:密码错误 | 显示错误提示信息:密码错误 | 通过 |
TC004 | 不输入用户名和密码直接点击登录按钮 | 显示错误提示信息:用户名和密码不能为空 | 显示错误提示信息:用户名和密码不能为空 | 通过 |
公告信息查看功能测试:
表6-2 公告信息查看功能测试表
测试用例编号 | 测试描述 | 预期结果 | 实际结果 | 是否通过 |
TC001 | 打开公告信息页面,检查是否能够正确展示公告信息列表信息 | 公告信息列表显示正确 | 公告信息列表显示正确 | 通过 |
TC002 | 点击公告信息详情按钮,检查是否能正常打开页面 | 公告信息详情页面显示正确 | 公告信息详情页面显示正确 | 通过 |
TC003 | 检查服务项目搜索功能 | 根据发布时间搜索到相关公告信息并正确展示 | 根据发布时间搜索到公告信息并正确展示 | 通过 |
管理员添加课程分类信息界面测试:
表6-3 管理员添加服务分类信息界面测试表
测试用例编号 | 测试描述 | 预期结果 | 实际结果 | 是否通过 |
TC001 | 使用合法的信息添加一个新的课程分类信息 | 课程分类成功添加到系统 | 课程分类成功添加到系统 | 通过 |
TC002 | 使用已存在的课程分类名称添加一个课程分类信息 | 显示错误提示信息:课程分类名称已存在 | 显示错误提示信息:课程分类名称已存在 | 通过 |
TC003 | 添加课程分类信息时不输入必填信息 | 显示错误提示信息:必填字段不能为空 | 显示错误提示信息:必填字段不能为空 | 通过 |
TC004 | 使用不存在的关键字进行搜索 | 搜索结果为空 | 搜索结果为空 | 通过 |
表6-4密码修改功能测试表
测试用例编号 | 测试描述 | 预期结果 | 实际结果 | 是否通过 |
TC001 | 输入正确的原密码和新密码进行修改 | 密码成功修改 | 密码成功修改 | 通过 |
TC002 | 输入错误的原密码和新密码进行修改 | 显示错误提示信息:原密码错误 | 显示错误提示信息:原密码错误 | 通过 |
TC003 | 不输入原密码和新密码直接点击修改按钮 | 显示错误提示信息:密码不能为空 | 显示错误提示信息:密码不能为空 | 通过 |
6.3 测试结果
通过编写基于python的教务管理信息系统的测试用例,已经检测完毕系统测试包括:用户登录功能测试、公告信息查看功能测试、课程分类添加功能测试、密码修改功能测试。通过这四大模块为智慧游客服务系统的设计与实现的后期推广运营提供了强力的技术支撑。
7 结论
在基于python的教务管理信息系统开发之前,需要先对用户的具体需求进行分析。包括系统的可行性分析、功能需求分析以及其他需求等。在可行性分析过程中,对系统实现的技术性、经济性等方面进行了分析。总体上证明了系统实施的可行性。
本文总结了基于python的教务管理信息系统开发背景与意义,然后阐述了系统的具体业务需求,并根据系统需求对系统结构以及功能模块等进行了详细地设计,将整个系统划分为多个不同的功能模块。在分析系统功能需求时,对整个系统的总体架构以及功能模块等进行了分析,并选择合适的系统开发技术完成了对各个模块的开发工作。系统开发完成之后进行了部署,同时进行了系统的测试过程,通过测试证明了系统在功能以及性能等方面都达到了预期的要求,具有较高的稳定性与可靠性。
参考文献
[1]郑晶晶.巧用Python实现课程成绩数据分析的探究[J].数字技术与应用,2023,41(12):123-127.
[2]蔡黎亚,李淑萍.Python语言处理各类空值的方法研究[J].电脑知识与技术,2023,19(34):38-40+58.
[3]魏晓玲,刘红英.基于Python和Django框架的琴房管理系统设计与实现[J].无线互联科技,2023,20(22):51-53.
[4]谢春丽.浅谈Python语言的发展与应用分析[J].中国新通信,2023,25(22):77-79.
[5]段晓英,曾光,陈兴劼.高职院校教务管理信息系统设计与应用研究——面向教师评价[J].办公自动化,2023,28(22):25-28.
[6]郭鹤楠.基于Django和Python技术的网站设计与实现[J].数字通信世界,2023,(06):60-62.
[7]袁田利,李辉.高校教务管理信息化建设的应用与实践[J].吉林农业科技学院学报,2023,32(01):23-26.
[8]祝春标.试析开放教育有效教务管理与运行机制[J].中国多媒体与网络教学学报(中旬刊),2023,(02):133-136.
[9]陈杰志,钟雪梅.教务网络管理系统优化方案的研究与实践[J].黑龙江科学,2022,13(15):75-76+79.
[10]朱丽.综合教务管理信息系统的研究与分析[J].轻工科技,2021,37(12):81-82.
[11]蔡雅端.浅谈基于项目管理理念的高校教学管理信息化建设——以XX高校为例[J].黑河学院学报,2021,12(11):51-52+104.
[12]赵玉芳.H教育机构教务信息管理系统设计与实现[D].河北经贸大学,2021.DOI:10.27106/d.cnki.ghbju.2021.000727.
[13]孙澄宇,于军,鲁志海.基于“互联网+”的高校实验室智能管理信息系统构建[J].数字技术与应用,2021,39(10):129-131.
[14]朱帅.“信息系统三大能力”在高职教务管理系统中的运用[J].佳木斯职业学院学报,2021,37(08):155-156.
[15]魏然.探讨高校教务管理系统信息化研究与应用[J].中国多媒体与网络教学学报(上旬刊),2021,(07):7-9.
[16]高红梅,卫龙.数据挖掘在高校教务管理中的应用研究与思考[J].技术与市场,2021,28(04):131-134+137.
[17]游韬,宋伟.探讨教务管理信息系统升级设计——以某职业技术学院为例[J].江西电力职业技术学院学报,2021,34(02):15-17.
[18]Chao H L ,Fa S S .Construction of College Students’ Physical Health Data Sharing System Based on Django Framework[J].Journal of Sensors,2021,2021
[19]FUIOR F .Introduction in Python frameworks for web development[J].Romanian Journal of Information Technology and Automatic Control,2021,31(3):
[20]Oswald C .Statistics Using Python[M].Mercury Learning and Information:2023-12-12
致 谢
首先,我要感谢我的论文指导老师。在论文完成的整个过程中,指导老师始终给予我无微不至的关爱与指导。在论文写作的过程中,导师那耐心细致的指导,以及提出的具有建设性的意见,都给予了我极大的帮助,让我受益匪浅。导师严谨的治学态度、敬业精神以及高水平的教学能力,都给我树立了追求卓越的典范,这对我以后的人生道路和学业成就都产生了极大的积极影响。
此外,我还要感谢我班的同学们,他们既是我的同窗好友,又是我的良师益友。正是由于你们的支持和关怀,使得我在大学期间的学习和生活都变得异常充实。感谢那些在大学期间给予我帮助的所有老师和同学们,是你们给予了我在学业道路上的前进动力。
当然,我也不能忘记我的父母,是他们用无私的爱抚养我成人。你们的养育之恩我将永生难忘,将来我一定会用我的成绩回报你们。在成长的道路上,我会不断努力,不负众望,用实际行动来回报你们对我的期望。
点赞+收藏+关注 →私信免费领取本源代码、数据