目 录
1 绪论 1
1.1选题背景 1
1.2课题研究意义 1
1.3论文结构与章节安排 1
2 相关技术介绍 3
2.1 C++语言 3
2.2 Mysql数据库 3
3 系统分析 3
3.1 可行性分析 3
3.1.1 技术可行性分析 3
3.1.2 经济可行性分析 3
3.1.3 法律可行性分析 3
3.2 系统功能分析 3
3.2.1 功能性分析 3
3.2.2 非功能性分析 5
3.3 系统用例分析 5
3.4 系统流程分析 6
3.5 本章小结 6
4 系统设计 9
4.1 系统架构设计 9
4.1.1整体功能模块设计 9
4.2 数据库设计 10
4.2.1 数据库概念结构设计 11
4.2.2 数据库逻辑结构设计 11
4.3 本章小结 12
5 系统实现 25
5.1登录界面 25
5.2选课信息管理界面 25
5.3学生成绩管理界面 26
5.4个人信息界面 27
5.5修改密码界面 27
5.6系统用户管理界面 28
5.7学生信息管理界面 29
5.8课程信息管理界面 30
6系统测试 33
6.1 系统测试用例 33
6.2 系统测试结果 34
结论 35
参考文献 36
致 谢 37
从20世纪20年代开始,计算机技术逐渐渗透到人们的日常生活和工作中,成为重要的辅助工具。随着科技的进步,计算机变得越来越普及,深入到每个家庭,改变了我们的工作方式和交流方式。网络办公和网络教学逐渐取代了传统的手工记录管理方式,使得跨区域的交流变得轻松便捷。
随着高等教育的普及,学生数量持续增加。特别是在最近,由于疫情的影响,传统的学生信息查询管理方式显得越发不便。手工查询管理不仅降低了工作效率,还增加了老师和学校的工作量,同时也不便于学生进行查询。因此,开发一个基于C++的学生信息管理系统显得尤为重要。该系统以实际需求为背景,通过系统管理员对学生、教师等相关人员以及与学生相关的课程、成绩等数据进行统一的管理,确保资料的完整性和便捷性。教师和学生可以通过简单的注册和登录流程,进入系统,对课程、选课、成绩和学校通知进行查询和管理。
系统前台采用C++编写,为用户呈现一个直观、友好的操作界面。后台逻辑部分,采用C++作为主要编程语言,结合适当的数据结构和算法,确保系统的稳定性和高效性。此外,为了提升系统的可扩展性和可维护性,可以考虑采用模块化设计,将不同功能模块拆分成独立的组件,便于后期的升级和维护。
关键词:学生信息管理;C++;MYSQL
Since the 1920s, computer technology has gradually penetrated into people's daily lives and work, becoming an important auxiliary tool. With the advancement of technology, computers have become increasingly popular and have penetrated into every household, changing our way of work and communication. Online office and online teaching have gradually replaced traditional manual record management methods, making cross regional communication easier and more convenient.
With the popularization of higher education, the number of students continues to increase. Especially recently, due to the impact of the epidemic, traditional student information query management methods have become increasingly inconvenient. Manual query management not only reduces work efficiency, but also increases the workload of teachers and schools, and is not convenient for students to query. Therefore, developing a student information management system based on C++is particularly important. The system is based on actual needs and is managed uniformly by system administrators for students, teachers, and other related personnel, as well as course and grade data related to students, to ensure the completeness and convenience of information. Teachers and students can enter the system through a simple registration and login process to query and manage courses, course selection, grades, and school notifications.
The system front-end is written in C++, presenting users with an intuitive and user-friendly operating interface. The backend logic part adopts C++as the main programming language, combined with appropriate data structures and algorithms, to ensure the stability and efficiency of the system. In addition, in order to improve the scalability and maintainability of the system, modular design can be considered to separate different functional modules into independent components, which is convenient for later upgrades and maintenance.
Keywords: Student information management; C++; MYSQL
1 绪论
在21世纪经济飞速发展的今天,各种办公辅助软件瘦到了各个行业的欢迎,比如企业的ERP软件、家庭的财务管理软件、教育的学籍管理软件等都收到了使用者的追崇,对于教育事业来说,目前大部分的学校已经开发出了很多的web管理系统供学生和教师进行在线学习、管理,比如学籍系统、考试系统等,通过这些系统能够方便的对于数据维护以及学生及其相关信息进行管理,而且目前其在教学方面的应用涉及了政治、经济、文化等多个领域。
总体来说,当下的教育不再是以传统的单个教师面向一群学生形式课程教学形式为主,而是在原有的基础上增加了以各种不同辅助教学形式的多元化教学占据主流,这种改变正是因为计算机网络在和教育结合后,由网络形式的在线教学的众多优点所决定的。本课题所研究的学生信息管理系统,以计算机网络技术为主,就学生信息管理方面,进行了各种功能的设计以及实现,所实现的系统就管理员以及学生两个部分来说,主要包括管理员子系统和学生子系统两方面的功能,实现了系统用户、选课信息、社会实践、学生成绩、校园文化、学期分类等功能。
1.2课题研究意义
学生信息管理系统是学校业务发展的重要组成部分,被越来越多的学校所重视。从一方面来说,对于大多数学校,学生信息管理系统帮助他们更好的完成对学生相关信息的查询管理;另外一个方面,学生可以在线查看课程、社团、成绩,将会吸引更多的学生使用,多样化的选择以及管理过程中完全的透明流程可以获得用户的认可,提高用户的粘性。通过学生信息管理系统,学生可以在系统上完成学生相关的信息的查询,不需到各个教师办公室或者教务处进行查询,实现用户足不出户便可进行查询学生信息的功能。
本文将基于C++设计用于学校的学生信息管理系统,按照以用户需求为中心的理念,以全方位、高质量、高效率满足用户需求为目标,为学校提供功能更加强大的学生信息管理系统。计算机信息化技术纳入学生信息管理系统的重要技术环节不但可以提高学生信息管理效率,减轻管理人员的工作负担,更方便了学生查看课程,从而进行社团,查询成绩等,对于学校的未来发展和改进的影响是深远的。学校的管理者可以线上管理所有的信息,其内部结构的合理化程度直接影响学校管理者的最终决策,因此足够的信息量和快捷方便的管理方式是学生信息管理系统必备的。
1.3论文结构与章节安排
本文共分为六章,章节内容安排如下:
第一章为引言,此章节对所设计和实现的系统的背景和意义进行详细的论述以及说明,同时进行了论文整体框架的结构的简要介绍。
第二章为系统需求分析,章节所做的主要的工作是对系统进行了技术、经济和操作方面可行性的分析;对系统实行了总体功能的需求、用例分析。
第三章为系统的设计,主要是对系统的功能结构进行设计,并对系统数据库的概念结构以及物理结构的设计进行了分析。
第四章就是对系统的实现,根据系统功能的划分,分别的对系统所需要实现的前台客户功能和后台管理员功能进行了分析和说明。
第五章:系统测试。主要对系统的部分界面进行测试并对主要功能进行测试
第六章:总结。
2相关技术介绍
2.1C++语言
C++语言作为一种高效、灵活的编程语言,广泛应用于各个领域,包括系统软件、游戏开发、嵌入式系统等。其面向对象编程的特性和丰富的标准库为开发人员提供了强大的工具,帮助他们实现复杂的功能和高性能的应用程序。
通过C++编程,开发者可以利用其强大的功能和灵活性,快速构建稳健、高效的软件系统,并在不同平台上实现跨平台的应用程序开发。C++的底层操作能力和高性能特点使其成为许多开发人员和企业首选的编程语言,为创造各种类型的应用程序提供了坚实基础。
2.2Mysql数据库
MySQL是一个开源的关系型数据库管理系统(RDBMS),由MySQL AB公司开发,后被甲骨文收购。它使用C和C++编写,可运行于多种操作系统如Unix、Linux和Windows。MySQL功能强大、简单易用、管理便捷,且运行速度快、可靠安全。它支持多线程和多CPU,能满足多种应用场景的需求。
MySQL提供丰富的数据类型,如数值、日期时间、字符串和二进制等,以及多种存储引擎如InnoDB、MyISAM和MEMORY,可根据需要灵活选择。它提供大量数据库操作命令,如创建、修改、删除数据库和表格,以及数据的增删改查等。此外,它还支持多种索引,以提高查询性能。
MySQL在全球范围内应用广泛,是许多大型网站和独立软件开发商的首选。其开源、免费、高效、灵活和易用的特点,使其成为当前速度最快的SQL数据库之一。
3 系统分析
系统可行行分析是对系统对系统可行性进行一个探讨。在探讨系统的可行性上我们主要从技术上的可行性和经济上的可行性以及法律层面的可行性上进行分析,如果三个层面度通过,我们则认为系统是比较可行的。
3.1.2 经济可行性分析
从经济可行性的角度考虑,工程在开发阶段要求有1台开发PC;生产阶段要求有web服务器,数据库服务器。一台个人PC在经济上并不存在太大问题,后期系统部署投产时,对服务器投资不会太大,在经济上相对可行。
学生信息管理系统我划分为了学生用户管理模块、教师用户模块和管理员模块这三大部分。
学生用户管理模块:
(1)课程信息:点击“课程信息”这个菜单,可以查看到系统中所有添加的课程信息,支持通过课程名称对课程信息进行查询,如果想要了解某一课程的详细信息,点击后面的“详情”会进入详情界面,如果想要选择某一课程,点击“选课”按钮,根据提示填写对应的信息,点击“提交”按钮,信息没有错题在数据库就会提交成功,选课成功;
(2)选课信息:点击“选课信息”这个按钮可以查看到自己提交的选课信息,支持通过课程名称进行查询选课信息,如果想要了解某一选课的详细信息,点击后面的“查看”会进入详情界面,也支持对自己选择的课程进行删除;
(3)学生成绩:点击“学生成绩”这个按钮可以查看到自己所有的学生的成绩,支持通过课程名称进行查询学生成绩信息;
教师端:
(1)注册登录:当教师想要对系统中所实现的功能进行查询管理的时候,就必须进行登录到系统当中,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,教师的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录;
(2)课程信息:点击“课程信息”这个菜单,可以查看到自己的课程信息,支持通过课程名称对课程信息进行查询,如果想要了解某一课程的详细信息,点击后面的“详情”会进入详情界面;
(5)选课信息:点击“选课信息”这个按钮可以查看到选择自己课程的学生信息,支持通过课程名称进行查询选课信息,如果想要了解某一选课的详细信息,点击后面的“查看”会进入详情界面,同时可以对学生提交的选课进行成绩添加,选择某一选课,点击后面的“成绩按钮”,根据提示输入对应的信息,点击“提交”后,成绩就录入成功了;
(6)学生成绩:点击“学生成绩”这个按钮可以查看到自己添加的成绩,支持通过课程名称进行查询学生成绩信息,同时可以对所添加的学生成绩进行删除;
管理员管理模块:
(1)登录:管理员在后台可以输入用户名+密码进行登录,管理员的用户名和密码是在数据库中直接设定好的。
(3)课程信息:点击“课程信息”这一按钮可以查看到系统当中所有的课程信息,支持通过课程名称进行查询课程信息,如果想要添加新的课程,点击“添加”按钮,然后根据提示填写好课程的具体信息,点击提交所添加的课程信息在数据库就保存下来了,同时可以点击“选课”按钮,输入选课的学生信息进行提交,也可以选择要删除的课程直接点击“删除按钮”进行课程删除。
(5)选课信息:点击“选课信息”这个按钮可以查看到所有的选课信息,支持通过课程名称进行查询选课信息,如果想要了解某一选课的详细信息,点击后面的“查看”会进入详情界面,同时可以对学生提交的选课进行成绩添加,选择某一选课,点击后面的“成绩”按钮,根据提示输入对应的信息,点击“提交”后,成绩就录入成功了;
(6)学生成绩:点击“学生成绩”这个按钮可以查看到所有学生的成绩,支持通过任课教师或者教师工号进行查询学生成绩信息,同时可以对所添加的学生成绩进行删除;
3.2.2 非功能性分析
学生信息管理系统的非功能性需求比如学生信息管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:
安全性 | 主要指学生信息管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指学生信息管理系统能够按照用户提交的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响学生信息管理系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着学生信息管理系统的页面展示内容进行操作,就可以了。 |
可维护性 | 学生信息管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
学生信息管理系统的完整UML用例图分别是图3-1和图3-2。
图3-1就是管理员角色的用例展示。
图3-1 学生信息管理系统管理员角色用例图
图3-2就是学生用户角色的用例展示。
图3-2 学生信息管理系统学生用户角色用例图
图3-3就是教师用户角色的用例展示。
图3-3 学生信息管理系统教师用户角色用例图
开发学生信息管理系统最主要的一个目的就是实现用户对课程的选课,图3-3就是系统的数据流图。
图3-3课程选课操作展开图
分析完学生信息管理系统的数据流,那么接下来我们来看系统的业务流程,图3-4就是业务流程图:
本章主要通过对学生信息管理系统的可行性分析、功能需求分析、系统用例分析、系统流程分析,确定整个学生信息管理系统要实现的功能。同时也为学生信息管理系统的代码实现和测试提供了标准。
4 系统设计
本章主要讨论的内容包括学生信息管理系统的功能模块设计、数据库系统设计。
4.1 系统架构设计
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本学生信息管理系统中的用例。那么接下来就要开始对本学生信息管理系统的架构、主要功能和数据库开始进行设计。学生信息管理系统根据前面章节的需求分析得出,其总体设计模块图如图4-1所示。
图4-1 学生信息管理系统功能模块图
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
在数据库概念模型设计的时候,一般都采用E-R实体图进行展示,在实体图中可以展示出数据库表中的所有字段名称,本学生信息管理系统中的主要的数据库E-R模型图如下图所示。
图4-2 学生用户信息E-R关系图
图4-3学生成绩E-R关系图
图4-4 选课信息E-R关系图
图4-5课程信息E-R关系图
下面是整个学生信息管理系统中主要的数据库表总E-R实体关系图。
图4-6 学生信息管理系统总E-R关系图
通过上一小节中学生信息管理系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表course_information (课程信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | course_information_id | int | 10 | 0 | N | Y | 课程信息ID | |
2 | teacher | int | 10 | 0 | Y | N | 0 | 任课教师 |
3 | teacher_no | varchar | 64 | 0 | Y | N | 教师工号 | |
4 | teachers_name | varchar | 64 | 0 | Y | N | 教师姓名 | |
5 | course_id | varchar | 64 | 0 | N | N | 课程编号 | |
6 | course_name | varchar | 64 | 0 | Y | N | 课程名称 | |
7 | class_time | varchar | 64 | 0 | Y | N | 上课时间 | |
8 | classroom | varchar | 64 | 0 | Y | N | 上课教室 | |
9 | course_cover | varchar | 255 | 0 | Y | N | 课程封面 | |
10 | course_credit | varchar | 64 | 0 | Y | N | 课程学分 | |
11 | course_hours | varchar | 64 | 0 | Y | N | 课程学时 | |
12 | course_overview | text | 65535 | 0 | Y | N | 课程概述 | |
13 | course_content | text | 65535 | 0 | Y | N | 课程内容 | |
14 | course_scheduling | text | 65535 | 0 | Y | N | 排课安排 | |
15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表course_selection_information (选课信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | course_selection_information_id | int | 10 | 0 | N | Y | 选课信息ID | |
2 | teacher | int | 10 | 0 | Y | N | 0 | 任课教师 |
3 | teacher_no | varchar | 64 | 0 | Y | N | 教师工号 | |
4 | teachers_name | varchar | 64 | 0 | Y | N | 教师姓名 | |
5 | course_id | varchar | 64 | 0 | Y | N | 课程编号 | |
6 | course_name | varchar | 64 | 0 | Y | N | 课程名称 | |
7 | class_time | varchar | 64 | 0 | Y | N | 上课时间 | |
8 | classroom | varchar | 64 | 0 | Y | N | 上课教室 | |
9 | course_credit | varchar | 64 | 0 | Y | N | 课程学分 | |
10 | course_hours | varchar | 64 | 0 | Y | N | 课程学时 | |
11 | student_users | int | 10 | 0 | Y | N | 0 | 学生用户 |
12 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
13 | reason_for_course_selection | text | 65535 | 0 | Y | N | 选课原因 | |
14 | examine_state | varchar | 16 | 0 | N | N | 未审核 | 审核状态 |
15 | examine_reply | varchar | 16 | 0 | Y | N | 审核回复 | |
16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表student_grades (学生成绩)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | student_grades_id | int | 10 | 0 | N | Y | 学生成绩ID | |
2 | teacher | int | 10 | 0 | Y | N | 0 | 任课教师 |
3 | teacher_no | varchar | 64 | 0 | Y | N | 教师工号 | |
4 | teachers_name | varchar | 64 | 0 | Y | N | 教师姓名 | |
5 | course_id | varchar | 64 | 0 | Y | N | 课程编号 | |
6 | course_name | varchar | 64 | 0 | Y | N | 课程名称 | |
7 | class_time | varchar | 64 | 0 | Y | N | 上课时间 | |
8 | classroom | varchar | 64 | 0 | Y | N | 上课教室 | |
9 | course_credit | varchar | 64 | 0 | Y | N | 课程学分 | |
10 | course_hours | varchar | 64 | 0 | Y | N | 课程学时 | |
11 | student_users | int | 10 | 0 | Y | N | 0 | 学生用户 |
12 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
13 | course_grades | varchar | 64 | 0 | Y | N | 课程成绩 | |
14 | exam_scores | varchar | 64 | 0 | Y | N | 考试成绩 | |
15 | ranking | varchar | 64 | 0 | Y | N | 排名名次 | |
16 | teacher_comments | text | 65535 | 0 | Y | N | 教师评语 | |
17 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
18 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表student_information (学生信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | student_information_id | int | 10 | 0 | N | Y | 学生信息ID | |
2 | student_users | int | 10 | 0 | Y | N | 0 | 学生用户 |
3 | student_no | varchar | 64 | 0 | Y | N | 学生学号 | |
4 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
5 | student_gender | varchar | 64 | 0 | Y | N | 学生性别 | |
6 | student_phone_number | varchar | 64 | 0 | Y | N | 学生电话 | |
7 | student_age | varchar | 64 | 0 | Y | N | 学生年龄 | |
8 | college_name | varchar | 64 | 0 | Y | N | 学院名称 | |
9 | professional_name | varchar | 64 | 0 | Y | N | 专业名称 | |
10 | enrollment_date | date | 10 | 0 | Y | N | 入学日期 | |
11 | home_address | varchar | 64 | 0 | Y | N | 家庭地址 | |
12 | emergency_contact | varchar | 64 | 0 | Y | N | 紧急联系人 | |
13 | student_status_information | text | 65535 | 0 | Y | N | 学籍信息 | |
14 | personal_information | text | 65535 | 0 | Y | N | 个人信息 | |
15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表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 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | 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 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
整个学生信息管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
5 系统实现
对学生信息管理系统进行了详细设计及实现,主要在前文学生信息管理系统需求分析基础上,结合学生信息管理系统总体设计,对网页进行了设计,实现了业务逻辑。主要介绍了学生信息管理系统的两个组成部分:界面的实现,业务逻辑的实现。
管理员、教师和学生在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员、教师和学生的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其主界面展示如下图5-1所示。
图5-1 登录界面图
登录的逻辑代码如下所示。
static int Login(Document& doc, Document& query, const Request& req, Response& res, acl::db_handle* db, const char* tableName)
{
std::set<std::string> set = getColType(*db, acl::string().format("SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = '%s'", tableName));
acl::string sql;
std::string username = doc["username"].GetString();
sql.format("select * from `user` where username = '%s';", username.c_str());
const acl::db_row* one = getOneRow(*db, sql);
if (one == NULL) {
FailedJson(res, utf8_encode(s2ws("账号不存在!")));
return -1;
}
std::string state((*one)["state"]);
std::string password((*one)["password"]);
std::string user_id((*one)["user_id"]);
std::string tokenstring = user_id + ";" + username + ";" + password;
string token = EncryptionAES(tokenstring);
const char* user_group = (*one)["user_group"];
acl::db_handle* db2 = pool->peek_open();
if (db2 == NULL)
{
FailedJson(res, "peek db2 connection error");
return -1;
}
sql.format("select * from `user_group` where name = '%s';", user_group);
const acl::db_row* one2 = getOneRow(*db2, sql);
if (one2 == NULL)
{
FailedJson(res, utf8_encode(s2ws("账号不存在!")));
return -1;
}
std::string source_table((*one2)["source_table"]);
if (source_table.length() > 0) {
sql.format("select * from `%s` where user_id = '%s';", source_table.c_str(), user_id.c_str());
one2 = getOneRow(*db2, sql);
if (one2 == NULL)
{
FailedJson(res, utf8_encode(s2ws("账号不存在!")));
return -1;
}
std::string examine_state((*one2)["examine_state"]);
if (examine_state == utf8_encode(s2ws("未通过"))) {
FailedJson(res, utf8_encode(s2ws("账户未通过审核!")), 70000);
return -1;
}
else if (examine_state == utf8_encode(s2ws("未审核"))) {
FailedJson(res, utf8_encode(s2ws("账户未审核!")), 70000);
return -1;
}
pool->put(db2);
}
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
writer.StartObject();
writer.Key("result");
writer.StartObject();
writer.Key("obj");
writer.StartObject();
for (int i = 0; i < one->length(); i++) {
const char* field = one->field_name(i);
writer.Key(field);
int iValue = one->field_int(i, -1);
if (set.find(field) != set.end()) {
writer.Int(iValue);
}
else {
const char* value = (*one)[field];
value = value == NULL ? "" : value;// utf8_encode(s2ws(value)).c_str();
writer.String(value);
}
}
writer.Key("token");
writer.String(token.c_str());
writer.EndObject();
writer.EndObject();
writer.EndObject();
std::string str = MD5(doc["password"].GetString()).toStr();
if (state == std::string("1")) {
if (password == str) {
string data = strBuf.GetString();
res.set_content(data.c_str(), "text/html;charset=utf-8");
XLOG_INFO_GREEN("res:{}", data.c_str());
return 0;
}
else {
FailedJson(res, "password error");
return -1;
}
}
return ReturnStatus(res, 0);
}
5.2选课信息管理界面
教师点击“选课信息”这个按钮可以查看到自己提交的选课信息,支持通过课程名称或者上课时间进行查询选课信息,如果想要了解某一选课的详细信息,点击后面的“查看”会进入详情界面,也支持对自己选择的课程进行删除;管理员可以对教师提交的选课进行成绩添加,选择某一选课,点击后面的“成绩”按钮,根据提示输入对应的信息,点击“提交”后,成绩就录入成功了。界面展示如下图5-2所示。
图5-2选课信息界面图
选课信息管理关键代码如下:
static int del(Document& doc, Document&, const Request& req, Response& res, acl::db_handle* db, const char* tableName)
{
string sqlWhere;
if (BuildSqlWhere(doc, db, sqlWhere, tableName) == false) {
FailedJson(res, "BuildSqlWhere error");
return -1;
}
acl::string sql = BuildDeleteSql(tableName, sqlWhere);
XLOG_INFO("sql {}", sql.c_str());
acl::query query;
query.create_sql(sql);
if ((*db).exec_update(query) == false)
{
FailedJson(res, "del error");
return (-1);
}
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
writer.StartObject();
writer.Key("result");
writer.Bool(true);
writer.EndObject();
string data = strBuf.GetString();
res.set_content(data.c_str(), "application/json");
return 0;
}
5.3学生成绩管理界面
教师点击“学生成绩”这个按钮可以查看到自己所有的学生的成绩,支持通过教师工号或者教室姓名进行查询学生成绩信息,管理员可以对所添加的学生成绩进行删除,学生成绩界面如下图5-3所示。
图5-3学生成绩管理界面图
学生成绩管理关键代码如下:
static int setData(Document& doc, Document& doc2, const Request& req, Response& res, acl::db_handle* db, const char* tableName) {
auto obj = doc.GetObj();
string sqlWhere, update;
auto obj2 = doc2.GetObj();
for (auto item1 = obj2.begin(); item1 != obj2.end(); item1++) {
string key = string(item1->name.GetString());
if (key == "page" || key == "size" || key == "orderby" || key == "field" || key == "groupby" || key == "_min" || key == "_max") {
continue;
}
if (item1->value.IsInt64()) {
sqlWhere += " and " + key + "=" + "'" + std::to_string(item1->value.GetInt64()) + string("'");
}
else {
sqlWhere += " and " + key + "=" + "'" + string(item1->value.GetString()) + string("'");
}
}
for (auto item1 = obj.begin(); item1 != obj.end(); item1++)
{
string key = string(item1->name.GetString());
if (key == "page" || key == "size" || key == "orderby" || key == "field" || key == "groupby" || key == "_min" || key == "_max") {
continue;
}
if (key.find("_id") != string::npos) {
if (item1->value.IsInt64()) {
sqlWhere += " and " + key + "=" + "'" + std::to_string(item1->value.GetInt64()) + string("'");
}
else {
sqlWhere += " and " + key + "=" + "'" + string(item1->value.GetString()) + string("'");
}
}
if (item1->value.IsInt64()) {
//sqlWhere += " and " + key + "=" + "'" + std::to_string(item1->value.GetInt()) + string("'");
update += "`" + key + "`=" + "'" + std::to_string(item1->value.GetInt64()) + string("',");
}
else {
//sqlWhere += " and " + key + "=" + "'" + string(item1->value.GetString()) + string("'");
update += "`" + key + "`=" + "'" + string(item1->value.GetString()) + string("',");
}
}
acl::string sql = acl::string().format("update `%s` set %s where 1=1 %s;", tableName, update.substr(0, update.length() - 1).c_str(), sqlWhere.c_str());
XLOG_INFO("sql {}", sql.c_str());
if ((*db).sql_update(sql.c_str()) == false)
{
FailedJson(res, "set error");
return (-1);
}
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
writer.StartObject();
writer.Key("result");
writer.Bool(true);
writer.EndObject();
string data = strBuf.GetString();
res.set_content(data.c_str(), "application/json");
return 0;
}
5.4个人信息界面
管理员点击“个人信息”按钮,可以对个人的头像、昵称、手机号码等信息进行更新;选课信息详情界面如下图5-4所示。
图5-4个人信息界面图
5.5修改密码界面
管理员点击“修改密码”按钮,可以对登录密码进行更改,首先输入原密码,然后再输入新密码和确认密码,当原密码正确,输入两次新密码一致,则修改成功,否则给出错误提示信息。修改密码界面如图5-5所示。
图5-5修改密码界面图
5.6系统用户管理界面
管理员可以对系统中所有的用户角色进行管控,包含了管理员、学生以及教师这三种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户,这里以教师用户为例。系统用户管理界面如下图4-6所示。
图5-6系统用户管理界面图
系统用户管理关键代码如下:
static int list_group(Document& doc, Document& query, const Request& req, Response& res, acl::db_handle* db, const char* tableName)
{
if (!doc.HasMember("groupby"))
{
FailedJson(res, utf8_encode(s2ws("缺少参数")));
return -1;
}
string groupby_field = doc["groupby"].GetString();
string queryFields = groupby_field + ",count(1) as count";
string sqlWhere;
if (BuildSqlWhere(doc, db, sqlWhere, tableName) == false) {
FailedJson(res, "BuildSqlWhere error");
return -1;
}
sqlWhere += " group by " + groupby_field;
acl::string sql = BuildSelectSql(tableName, queryFields, sqlWhere);
XLOG_INFO("sql {}", sql.c_str());
const acl::db_rows* result = getRows(*db, sql.c_str());
if (result == NULL) {
FailedJson(res, "getRows error");
return -1;
}
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
writer.StartObject();
writer.Key("result");
writer.StartObject();
writer.Key("count");
writer.Int((*db).length());
writer.Key("list");
writer.StartArray();
const std::vector<acl::db_row*>& rows = result->get_rows();
for (int y = 0; y < (*db).length(); y++) {
const acl::db_row* one = (*db)[y];
writer.StartObject();
for (int i = 0; i < one->length(); i++) {
const char* field = one->field_name(i);
writer.Key(field);
const char* value = (*one)[field];
value = value == NULL ? "" : value;// utf8_encode(s2ws(value)).c_str();
writer.String(value);
}
writer.Key("0");
std::string::size_type sz; // alias of size_t
int count = std::stoi((*one)[(size_t)1], &sz);
writer.Int(count);
writer.Key("1");
writer.String((*one)[(size_t)0]);
writer.EndObject();
}
writer.EndArray();
writer.EndObject();
writer.EndObject();
string data = strBuf.GetString();
res.set_content(data.c_str(), "application/json");
return 0;
}
5.7学生信息管理界面
管理员和学生点击“学生信息”这个按钮可以查看到系统中的学生信息,支持通过学生用户或者学生学号或者学生姓名进行查询学生信息,如果想要添加新的学生信息,点击“添加”按钮然后根据提示输入学生信息,点击“提交”后,在学生信息界面就会显示新增的学生信息,可以点击某一学生信息查看学生信息的详情,也可以直接点击“删除”进行删除学生信息。界面如下图5-7所示。
图5-7学生信息管理界面图
5.8课程信息管理界面
点击“课程信息”这个菜单,可以查看到系统中所有添加的课程信息,支持通过课程名称对课程信息进行查询,如果想要了解某一课程的详细信息,点击后面的“详情”会进入详情界面,学生和管理员如果想要选择某一课程,点击“选课”按钮,根据提示填写对应的信息,点击“提交”按钮,信息没有错误在数据库就会提交成功,选课成功,界面如下图5-8所示。
图5-8课程信息管理界面图
6系统测试
系统测试包括:用户登录功能测试、选课信息展示功能测试、课程信息添加、课程信息搜索、密码修改,如表6-1、6-2、6-3、6-4、6-5所示:
表6-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码能否成功登录系统 |
前提 | 未登录状态 |
测试流程 | 1. 进入登录页面 |
2. 输入正确的用户名和密码 | |
预期结果 | 成功登录系统,跳转到登录成功界面 |
实际结果 | 实际结果与预期结果一致 |
结论 | 通过 |
选课信息查看功能测试:
表6-2 选课信息查看功能测试表
用例名称 | 选课信息查看 |
目的 | 测试选课信息查看功能 |
前提 | 用户已登录 |
测试流程 | 点击选课信息列表 |
预期结果 | 可以查看所有的选课信息 |
实际结果 | 实际结果与预期结果一致 |
结论 | 通过 |
管理员添加课程信息管理界面测试:
表6-3 管理员添加课程信息管理界面测试表
用例名称 | 管理员添加课程信息管理界面 |
目的 | 测试管理员添加课程信息功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1. 管理员点击课程信息,然后点击添加按钮 |
2. 填写相关信息并提交 | |
预期结果 | 提交后,页面首页会显示新的课程信息 |
实际结果 | 实际结果与预期结果一致 |
结论 | 通过 |
课程信息搜索功能测试:
表6-4课程信息搜索功能测试表
用例名称 | 课程信息搜索功能 |
目的 | 测试课程信息搜索功能 |
前提 | 无 |
测试流程 | 1. 在搜索框中填入搜索关键字 |
2. 点击搜索按钮 | |
预期结果 | 页面显示包含搜索关键字的课程信息 |
实际结果 | 实际结果与预期结果一致 |
结论 | 通过 |
密码修改搜索功能测试:
表6-5 密码修改功能测试表
用例名称 | 密码修改功能测试 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1. 修改密码并完成填写 |
2. 点击提交按钮 | |
预期结果 | 使用新密码可以成功登录系统 |
实际结果 | 实际结果与预期结果一致 |
结论 | 通过 |
6.2 系统测试结果
通过编写学生信息管理系统的测试用例,已经检测完毕用户登录模块、选课信息展示模块、课程信息添加模块、课程信息搜索模块、密码修改模块,通过这五大模块为学生信息管理系统的后期推广运营提供了强力的技术支撑。
开发学生信息管理系统前,首先要进行用户需求分析,明确系统可行性,功能需求等要求。可行性分析主要包括技术可行性,经济可行性以及管理可行性,从而保证系统的实施可行性。
论文概述了学生信息管理系统产生的背景及现状,对具体业务需求做了进一步说明,根据需要对系统结构及功能模块做了详细的设计,把系统分为几个不同功能模块。在功能需求分析部分,对整个系统架构及功能模块进行分析,选择合适的系统开发技术,完成各模块开发。完成研制之后,对系统进行部署与试验,试验结果验证了该系统无论从功能上还是从性能上均满足预期需求,且稳定性与可靠性均比较高。
参考文献
[1]邓彪. 一种高校学生信息管理系统和方法[P]. 湖北省: CN117350667A, 2024-01-05.
[2]Chen W . Construction of Student Information Management System for Universities Based on Cloud Computing Platform [J]. Applied Mathematics and Nonlinear Sciences, 2024, 9 (1):
[3]周方. 基于Web的学生信息管理系统中的数据库研究与设计 [J]. 信息记录材料, 2024, 25 (01): 197-199.
[4]袁爱平,陈畅,孙士兵等. 基于SSM框架的高校学生信息管理系统设计与实现 [J]. 工业控制计算机, 2023, 36 (12): 127-129.
[5]吴香艳. 基于C#和.NET的班级学生信息管理系统设计与实现 [J]. 无线互联科技, 2023, 20 (22): 47-50.
[6]唐婷,聂丽霞. 基于大数据技术的高校学生信息管理系统设计 [J]. 电脑知识与技术, 2023, 19 (30): 62-64.
[7]刘佳乐,赵雨,厚露露等. 基于Java Web的学生信息管理系统 [J]. 现代信息科技, 2023, 7 (19): 21-24. DOI:10.19850/j.cnki.2096-4706.2023.19.005.
[8]Cannur G ,Alev E ,Müesser N . An enriched decision-making satisfaction model for student information management systems [J]. International Journal of Information Management Data Insights, 2023, 3 (2):
[9]李宝密. 基于B/S架构的学生信息管理系统的设计与开发 [J]. 软件, 2023, 44 (06): 101-103.
[10]And E O J E C . Retracted: The Security of Student Information Management System Based upon Blockchain [J]. Journal of Electrical and Computer Engineering, 2022, 2022
[11]梁延燕, 昱飞学生信息管理系统V1.0. 河南省, 三门峡东来传媒有限公司, 2020-10-26.
[12]左丹. 高校学生信息管理系统需求分析和评价体系设计[C]// 人文学术:过程与方法. [出版者不详], 2019: 7.
[13]熊锦辉. 基于B/S结构的学生信息管理系统的设计与实现[D]. 北京邮电大学, 2019.
致 谢
在本文的最后,我要由衷地感谢我的导师和团结友爱的同学们,在大学生活即将结束之际给予了我无尽的帮助和鼓励。我找不到合适的词语来表达我对他们深深的感激之情。特别感谢我的导师,在选题过程中与我进行了深入的交流,并在毕业设计期间给予了指导。四年的学习生活让我受益良多,老师们丰富的学术知识和认真负责的态度让我受益匪浅。在此,我衷心感谢曾经给予我帮助和指导的所有老师!
我们的论文得益于许多学者的贡献,他们的研究成果为我们提供了宝贵的指导,使我们能够更好地完成这篇文章。感谢我的同学和朋友,在我写作和排版过程中给予热情的帮助,使我能够顺利完成这篇论文。
感谢在大学时期遇见的朋友们,你们给了我无数的温暖和快乐,让我对这个校园充满留恋之情。最后,感谢我的父母、辅导员、班长和室友们,他们对我在大学生活中的关心和理解,让我能够保持乐观并追求自己热爱的事物。虽然我有限的能力,但我努力完善这篇论文,并真诚希望老师和同学们能够给予宝贵的指导和意见!
免费领源码,麻烦一键三连,私信博主。谢谢。