免费送源码:Java+C+++MySQL C++学生信息管理系统的设计与实现 计算机毕业设计原创定制

article/2025/7/6 22:29:07

目  录

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

Abstract

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 绪论

1.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 可行性分析

系统可行行分析是对系统对系统可行性进行一个探讨。在探讨系统的可行性上我们主要从技术上的可行性和经济上的可行性以及法律层面的可行性上进行分析,如果三个层面度通过,我们则认为系统是比较可行的。

3.1.1 技术可行性分析

学生信息管理系统存储所用mysql数据库Tomcat等应用可以为我们编写工作提供很多方便。系统使用C++语言进行开发,使系统的可扩展性和维护性更佳,减少C++配置代码,简化编程代码,目前C++语言也是很多企业选择的框架之一。

3.1.2 经济可行性分析

从经济可行性的角度考虑,工程在开发阶段要求有1台开发PC;生产阶段要求有web服务器,数据库服务器。一台个人PC在经济上并不存在太大问题,后期系统部署投产时,对服务器投资不会太大,在经济上相对可行。

3.1.3 法律可行性分析

系统从法律层面上来没有对第三方有其他放有法律层面的问题,系统数据库采用的Mysql 开源社区数据库、框架采用的是开源的C++。系统资讯和相关内容也是法律层面的。在源码的管理上采用git开源进行管理,所以在法律可行性上是成立的。

3.2 系统功能分析

3.2.1 功能性分析

学生信息管理系统我划分为了学生用户管理模块、教师用户模块和管理员模块这三大部分。

学生用户管理模块:

(1)课程信息:点击“课程信息”这个菜单,可以查看到系统中所有添加的课程信息,支持通过课程名称对课程信息进行查询,如果想要了解某一课程的详细信息,点击后面的“详情”会进入详情界面,如果想要选择某一课程,点击“选课”按钮,根据提示填写对应的信息,点击“提交”按钮,信息没有错题在数据库就会提交成功,选课成功;

(2)选课信息:点击“选课信息”这个按钮可以查看到自己提交的选课信息,支持通过课程名称进行查询选课信息,如果想要了解某一选课的详细信息,点击后面的“查看”会进入详情界面,也支持对自己选择的课程进行删除;

(3)学生成绩:点击“学生成绩”这个按钮可以查看到自己所有的学生的成绩,支持通过课程名称进行查询学生成绩信息;

教师端:

(1)注册登录:当教师想要对系统中所实现的功能进行查询管理的时候,就必须进行登录到系统当中,如果没有账号的话,在登录界面,点击“注册”按钮就会跳转到注册的界面,根据提示填写好注册信息,添加提交,教师的信息在数据库中就添加完成了,然后再输入填写好的账号和密码进行登录;

(2)课程信息:点击“课程信息”这个菜单,可以查看到自己的课程信息,支持通过课程名称对课程信息进行查询,如果想要了解某一课程的详细信息,点击后面的“详情”会进入详情界面;

(5)选课信息:点击“选课信息”这个按钮可以查看到选择自己课程的学生信息,支持通过课程名称进行查询选课信息,如果想要了解某一选课的详细信息,点击后面的“查看”会进入详情界面,同时可以对学生提交的选课进行成绩添加,选择某一选课,点击后面的“成绩按钮”,根据提示输入对应的信息,点击“提交”后,成绩就录入成功了;

(6)学生成绩:点击“学生成绩”这个按钮可以查看到自己添加的成绩,支持通过课程名称进行查询学生成绩信息,同时可以对所添加的学生成绩进行删除;

管理员管理模块:

(1)登录:管理员在后台可以输入用户名+密码进行登录,管理员的用户名和密码是在数据库中直接设定好的。

(2)用户管理:管理员可以对系统中所有的用户角色进行管控,包含了管理员、学生以及教师这三种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。

(3)课程信息:点击“课程信息”这一按钮可以查看到系统当中所有的课程信息,支持通过课程名称进行查询课程信息,如果想要添加新的课程,点击“添加”按钮,然后根据提示填写好课程的具体信息,点击提交所添加的课程信息在数据库就保存下来了,同时可以点击“选课”按钮,输入选课的学生信息进行提交,也可以选择要删除的课程直接点击“删除按钮”进行课程删除。

(5)选课信息:点击“选课信息”这个按钮可以查看到所有的选课信息,支持通过课程名称进行查询选课信息,如果想要了解某一选课的详细信息,点击后面的“查看”会进入详情界面,同时可以对学生提交的选课进行成绩添加,选择某一选课,点击后面的“成绩”按钮,根据提示输入对应的信息,点击“提交”后,成绩就录入成功了;

(6)学生成绩:点击“学生成绩”这个按钮可以查看到所有学生的成绩,支持通过任课教师或者教师工号进行查询学生成绩信息,同时可以对所添加的学生成绩进行删除;

3.2.2 非功能性分析

学生信息管理系统的非功能性需求比如学生信息管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:

表3-1学生信息管理系统非功能需求表

安全性

主要指学生信息管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。

可靠性

可靠性是指学生信息管理系统能够按照用户提交的指示进行操作,经过测试,可靠性90%以上。

性能

性能是影响学生信息管理系统占据市场的必要条件,所以性能最好要佳才好。

可扩展性

比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。

易用性

用户只要跟着学生信息管理系统的页面展示内容进行操作,就可以了。

可维护性

学生信息管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题

3.3 系统用例分析

学生信息管理系统的完整UML用例图分别是图3-1和图3-2。

图3-1就是管理员角色的用例展示。

图3-1 学生信息管理系统管理员角色用例图

图3-2就是学生用户角色的用例展示。

图3-2 学生信息管理系统学生用户角色用例图

图3-3就是教师用户角色的用例展示。

图3-3 学生信息管理系统教师用户角色用例图

3.4 系统流程分析

(1)数据流程

开发学生信息管理系统最主要的一个目的就是实现用户对课程的选课,图3-3就是系统的数据流图。

图3-3课程选课操作展开图

(2)业务流程

分析完学生信息管理系统的数据流,那么接下来我们来看系统的业务流程,图3-4就是业务流程图:

图3-4业务流程图

3.5本章小结

本章主要通过对学生信息管理系统的可行性分析、功能需求分析、系统用例分析、系统流程分析,确定整个学生信息管理系统要实现的功能。同时也为学生信息管理系统的代码实现和测试提供了标准。

4 系统设计

本章主要讨论的内容包括学生信息管理系统的功能模块设计、数据库系统设计。

4.1 系统架构设计

4.1.1整体功能模块设计

在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本学生信息管理系统中的用例。那么接下来就要开始对本学生信息管理系统的架构、主要功能和数据库开始进行设计。学生信息管理系统根据前面章节的需求分析得出,其总体设计模块图如图4-1所示。

图4-1 学生信息管理系统功能模块图

4.2 数据库设计

数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。

4.2.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关系图

4.2.2 数据库逻辑结构设计

通过上一小节中学生信息管理系统中总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

更新时间

4.3本章小结

整个学生信息管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。

5 系统实现

对学生信息管理系统进行了详细设计及实现,主要在前文学生信息管理系统需求分析基础上,结合学生信息管理系统总体设计,对网页进行了设计,实现了业务逻辑。主要介绍了学生信息管理系统的两个组成部分:界面的实现,业务逻辑的实现。

5.1登录界面

管理员、教师和学生在登录界面输入账号+密码,点击“登录”按钮,系统在用户数据库表中会对管理员、教师和学生的账号进行匹配,账号+密码正确的话,就会登录到系统中各个用户的主管理界面,否则提示对应的信息,返回到登录的界面,其主界面展示如下图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-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.

致  谢

在本文的最后,我要由衷地感谢我的导师和团结友爱的同学们,在大学生活即将结束之际给予了我无尽的帮助和鼓励。我找不到合适的词语来表达我对他们深深的感激之情。特别感谢我的导师,在选题过程中与我进行了深入的交流,并在毕业设计期间给予了指导。四年的学习生活让我受益良多,老师们丰富的学术知识和认真负责的态度让我受益匪浅。在此,我衷心感谢曾经给予我帮助和指导的所有老师!

我们的论文得益于许多学者的贡献,他们的研究成果为我们提供了宝贵的指导,使我们能够更好地完成这篇文章。感谢我的同学和朋友,在我写作和排版过程中给予热情的帮助,使我能够顺利完成这篇论文。

感谢在大学时期遇见的朋友们,你们给了我无数的温暖和快乐,让我对这个校园充满留恋之情。最后,感谢我的父母、辅导员、班长和室友们,他们对我在大学生活中的关心和理解,让我能够保持乐观并追求自己热爱的事物。虽然我有限的能力,但我努力完善这篇论文,并真诚希望老师和同学们能够给予宝贵的指导和意见!

免费领源码,麻烦一键三连,私信博主。谢谢。


http://www.hkcw.cn/article/icIcRPFUli.shtml

相关文章

达梦DTS数据迁移工具生产篇(MySQL->DM8)

本文章使用的DTS工具为 2024年9月18日的版本&#xff0c;使用的目的端DM8数据库版本为2023年12月的版本&#xff0c;注意数据库版本和DTS版本之间跨度不要太大&#xff0c;以免出现各种兼容性的报错。若发现版本差距过大时&#xff0c;请联系达梦技术服务工程师处理。 1. 迁移…

MySQL 数据库备份与还原

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月18日 专栏&#xff1a;MySQL教程 思维导图 备份 (Backup) 与 冗余 (Redundancy) 的核心区别: &#x1f3af; 备份是指创建数据的副本并将其存储在不同位置或介质&#xff0c;主要目的是在发生数据丢失、损坏或逻辑错误时进…

MySQL Binlog 日志查看方法及查看内容解析

一、Binlog 日志概述 Binlog&#xff08;二进制日志&#xff09;记录了 MySQL 数据库执行的所有更改数据的操作&#xff0c;包括INSERT、UPDATE、DELETE等。它对于数据恢复、主从复制以及审计等方面有着至关重要的作用。 二、查看 Binlog 日志方法 开启 Binlog 日志功能 默…

【金仓数据库征文】金仓数据库(KingbaseES)迁移与集群部署实战:从MySQL到KES的全流程解析

随着企业信息化和数字化转型的加速&#xff0c;企业对数据库的要求不仅仅局限于基础的数据存储功能&#xff0c;更涉及到性能、可扩展性、安全性、以及持续的系统升级能力。因此&#xff0c;数据库迁移已经成为现代企业升级IT架构时的一个重要步骤。特别是在国产化替代的浪潮中…

【MySQL】 基本查询(下)

欢迎拜访:雾里看山-CSDN博客 本篇主题:【MySQL】 基本查询(下) 发布时间:2025.2.18 隶属专栏:MySQL 目录 Update语法案例Delete删除数据语法案例截断表语法案例插入查询结果语法案例聚合函数函数介绍案例group by子句的使用语法having和where案例结语Update 语法 UPDATE …

MySQL开大招了! 三十周年庆典推出四项 OCP 认证免费

&#x1f389; MySQL 30岁生日大礼包&#xff01;OU掏家底了&#xff01; 狠心决定&#xff1a;4.20-7.31期间 &#x1f525;全系列MySQL课程四大认证 &#x1f525;原价$2,500/人的考试资格 通&#xff01;通&#xff01;免&#xff01;费&#xff01; &#x1f4a1;30年只此一…

Kettle9.1链接mysql报错: Connection failed. Verify all connection parameters and confirm that the appropr

Connection failed. Verify all connection parameters and confirm that the appropriate driver is installed. The server time zone value ‘D1’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC 连接失败。验证所…

2025最新版|八股文面试题库+答案详解(附高频考点解析)

我相信大多 Java 开发的程序员或多或少经历过 BAT 一些大厂的面试&#xff0c;也清楚一线互联网大厂 Java 面试是有一定难度的&#xff0c;小编经历过多次面试&#xff0c;有满意的也有备受打击的。因此呢小编想把自己这么多次面试经历以及近期的面试真题来个汇总分析&#xff…

库室门禁报警系统|多功能控制器运用

库室门禁报警系统 库室门禁报警系统是一套综合性的安全防护体系&#xff0c;它集成了门禁控制、入侵报警、视频监控等多种功能。门禁控制功能通过对人员进出权限的精准管理&#xff0c;严格限制无关人员进入库室。系统可根据人员的身份、职务、工作需求等设定不同的权限&#…

【我给AI出题-1】DCMTK的storescu在发送医学图像给服务器时,能否指定客户端的端口号?

本文由Markdown语法编辑器编辑完成。 封面图像由: "即梦AI"创作&#xff0c;提示词: “几个AI工具&#xff0c;在一起激烈地讨论问题&#xff0c;包括: 豆包&#xff0c;kimi, deepseek, chatgpt, csdn的图标&#xff0c;作为人物形象. 可以生成吉普力的风格.” 1.…

研华工控机安装Windows10系统,适用UEFI(GPT)格式安装

主要硬件 主板&#xff1a;AIMB-787 、CPU&#xff1a;i5-6500 U盘启动工具&#xff1a;通过网盘分享的文件&#xff1a;rufus-3.20.zip 链接: https://pan.baidu.com/s/1YlFfd-_EhFHCG4sEHBQ8dQ?pwdQT12 提取码: QT12 Win10 22H2 Pro 纯净版系统&#xff1a;通过网盘分享…

ubuntu系统安装Pyside6报错解决

目录 1&#xff0c;问题&#xff1a; 2&#xff0c;解决方法&#xff1a; 2.1 首先查看pypi是否有你需要包的镜像&#xff1a; 2.2 其它方案&#xff1a; 2.3 如果下载很慢&#xff0c;可以换源&#xff1a; 2.4 查看系统架构 Windows Ubuntu 1&#xff0c;问题&#xf…

第六十一节:深度学习-使用 OpenCV DNN 模块

一、OpenCV DNN模块:传统与AI的桥梁 在深度学习席卷计算机视觉领域的今天,OpenCV作为最广泛使用的视觉库,通过其强大的DNN(Deep Neural Networks)模块架起了传统算法与深度学习之间的桥梁。该模块允许开发者在无需依赖原始深度学习框架的情况下,直接加载和运行预训练模型…

MySql(七)

目录 创建表 准备数据 1.更新表中的数据 1&#xff09;不带条件修改 修改eno表中的性别为女 查看表中的数据 修改表中的性别为女 2&#xff09;带条件修改 修改张三的性别为男 查看表 把地址为木星的修改为火星 一次修改多个列 删除数据 1&#xff09;语法&#xff08;删除表中…

算力租赁革命:弹性模式如何重构数字时代的创新门槛​

一、算力革命&#xff1a;第四次工业革命的核心驱动力​ 在科技飞速发展的当下&#xff0c;我们正悄然迎来第四次工业革命。华为创始人任正非在一场程序设计竞赛中曾深刻指出&#xff0c;这场革命的基础便是大算力。随着 5G、人工智能、大数据、物联网等信息技术的迅猛发展&am…

【sa-token】 sa-token非 web 上下文无法获取 HttpServletRequest。

Springboot cloud gateway集成sa-token中报错 cn.dev33.satoken.exception.NotWebContextException: 非 web 上下文无法获取 HttpServletRequestat cn.dev33.satoken.spring.SpringMVCUtil.getRequest(SpringMVCUtil.java:45) ~[sa-token-spring-boot-starter-1.38.0.jar:?]官…

动态规划-300.最长递增子序列-力扣(LeetCode)

一、题目解析 子数组vs子序列 回过头来&#xff0c;我们分析题目给出的条件&#xff0c;其中要注意的是严格递增这个字眼 二、算法原理 1、状态表示 我们想要知道的是最长递增子序列长度&#xff0c;所以dp[i]表示&#xff1a;以i位置元素为结尾的所有子序列中最长递增子序列…

MySQL中怎么看是否走了索引

学生表 创建普通索引 create index index_name on student (name); 1.使用EXPLAIN查看执行计划(核心) explain select * from student where name 李明 key字段&#xff1a;显示实际使用的索引名称。若值为NULL&#xff0c;表示未使用索引&#xff1b;若显示具体索引名&…

<< C程序设计语言第2版 >> 练习 1-23 删除C语言程序中所有的注释语句

1. 前言 本篇文章介绍的是实现删除C语言源文件中所有注释的功能.希望可以给C语言初学者一点参考.代码测试并不充分, 所以肯定还有bug, 有兴趣的同学可以改进. 原题目是: 练习1-23 编写一个删除C语言程序中所有的注释语句. 要正确处理带引号的字符串与字符常量. 在C语言中, 注释…

数据结构与算法之中缀表达式的求值

栈 栈的一个实际需求 请输入一个表达式计算式&#xff1a;[7*22-51-53-3]点击计算【如下图】 栈的介绍 栈的英文为stack(stack)。栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表…