文章目录
- 1.适用人群
- 2.你将收获
- 3.项目介绍
- 4.系统需求分析
- 4.1 需求特性分析
- 4.2 功能需求分析
- 5.系统设计
- 5.1 系统总体结构设计
- 5.2 数据库设计
- 5.2.1 数据库概念原则设计
- 5.2.2 数据库各部分模块设计
- 5.2.3 数据库表设计
- 6.系统详细设计
- 6.1 系统各模块功能设计
- 6.1.1 登录模块
- 6.1.2 注册模块
- 6.1.3 我的主页模块
- 6.1.4 我的试卷模块
- 6.1.5 考试中心模块
- 6.1.6 我的班级模块
- 6.1.7 我的题目模块
- 7 系统测试
- 7.1 系统的功能测试
- 7.1.1.登录模块
- 7.1.2.注册模块
- 7.1.3.我的主页模块
- 7.1.4.我的试卷模块
- 7.1.5.考试中心模块
- 7.1.6 我的班级模块
- 7.1.7.我的题目模块
- 8.系统测试结论
- 9.源码获取
1.适用人群
本课程主要是针对计算机专业相关正在做毕业设计或者是需要实战项目的Java开发学习者。
2.你将收获
提供:项目源码、项目文档、数据库脚本、软件工具等所有资料
从零开始手把手教学部署运行本系统
该项目附带的源码资料可作为毕设使用
提供技术答疑和远程协助指导,帮助调试并解决后期项目运行问题
3.项目介绍
该系统分为首页、试卷管理、考试管理、班级管理、注册登录等模块。除了实现基本的增删改查,分页等功能,还根据用户类型的不同,设置了不同的权限。数据库方面除了基本的表,还创建了视图和触发器。系统前后端分离,前端采用Ajax技术进行数据传输,后端采用maven管理项目的构建,持久层使用的是Mybatis实现,数据源利用的是SpringIoC注入,对各层解耦,大大提高了程序的可扩展性,易于维护。
4.系统需求分析
4.1 需求特性分析
在线考试管理系统的评价标准具有以下几个特征:
- 项目基础要求特性:项目的开发必须满足在用户使用期间不能引起崩溃和强退等问题,这是用户使用需求的底线。在此基础上,也要满足用户交互体验,在满足操作的简单和清楚明了上,也要使得网站的前端界面的美化方面和网站设计每个部分的合理等。
- 项目安全和隐私需求:安全和隐私的问题是不容忽视。每个学生之间的问题、试卷和班级等数据应该是相互隔离的,一个同学不能访问另一个同学的问题、试卷等数据。学生之间在同一班级中时也应该可以相互发现。老师之间也应该是相互隔离的。但是老师在相同班级时,一个老师可以修改另一个老师在相同班级中的试卷数据。老师和学生之间的数据互通主要是在同一班级中时通过老师发布试卷到班级,就可以作为学生的考试试卷。
- 项目的维护和更新上:作为一个在线考试管理系统,题目划分随题目更改而大小的变化。所以项目在起初的设计上必须要有很好的扩展性和维护性,这将对未来程序更改打下坚实的基础。大题的思路是,将每个模块进行独立的划分,并且他们之间尽量不存在强耦合的关联,也就是更改部分模块其他的变动尽量缩小。开发过程中,每个模块要有明确的目的和核心代码为中心,并且必要和详细的注释也要带有,来增强代码的阅读性。这些开发中的规范和约束都是为了以后维护和更新的便利打基础。
4.2 功能需求分析
项目从功能的角度上可分为试卷、问题、班级和考试四个模块。这四个部分详细需求如下:
- 试卷模块的功能需求:首先是创建试卷的功能,学生和老师都有创建试卷的权限,老师创建试卷可以添加到班级成为学生的考试,学生创建试卷可以自己进行模拟考试,自己练习。老师和学生在创建试卷完成后都可以进行试卷的相关操作,例如修改、删除、查询试卷和查看试卷详情。还可以往试卷中添加题目,查看试卷中的题目。
- 问题模块的功能需求:创建问题的功能,对问题进行查看、修改、删除和查询的功能。学生老师都拥有问题模块所有的权限。
- 班级模块的功能需求:这个模块和其他模块有所不同,老师可以创建班级,创建完成之后,可以对班级进行修改、删除、查询和查看试卷详情。而学生只能通过班级ID加入班级,并且只能查看班级详情,不能进行修改、删除等操作。老师还可以往班级中添加自己创建的试卷,添加完成之后就会成为学生的考试。
- 考试模块的功能需求:老师考试模块和试卷模块相同,可以对考试进行修改、删除等操作。学生则只能进行考试。考试界面中可以显示题目,每次显示一个题目,做完之后可以点击上一题或下一题按钮进行选择题目,也可以在右侧创建一个选择题目的模块,显示所有的题目,点击每道题目的按钮进行选择。题目根据题目类型的不同,单选题显示单选框、多选题显示多选框、填空题和简答题显示输入框。在右上角有一个提交答案的按钮,点击之后,如果答案没有做完,会跳转到未做的题目并且提示还有题目没有做完。如果题目做完了则会弹出确认框,确认是否提交试卷,点击确认之后会提交试卷。
5.系统设计
5.1 系统总体结构设计
基于SSM的在线考试系统的主要模块有我的主页、我的试卷、考试中心、我的班级、我的题目、登录和注册等模块。登录之后根据登录人员的身份不同可分为学生和老师,学生和老师都可以进行试卷、问题的添加、删除、修改和查看。老师可以创建班级,创建之后会显示班级ID,将班级ID告诉学生之后,学生可以通过班级ID加入班级。老师将自己创建的试卷添加到班级之后就是学生的考试试卷。学生对考试试卷没有修改删除的权利,只能进行查看和做题。系统结构设计图如图所示
5.2 数据库设计
5.2.1 数据库概念原则设计
数据库设计应该满足数据表之间的关系合理,也应该在数据冗余和数据处理速度中进行平衡。具体来讲,首先要明确实体间的关系,使关系合理。设计应该符合实体之间关系。在数据库的设计里面,主键与外键的设计极为重要。主键是确定该表中某一属性的唯一字段,主键与外键的合理化使用可以确保实体之间的连接,这与第一条关系密切。
5.2.2 数据库各部分模块设计
数据库中最重要的表是用户表。用户表里面通过外键连接用户ID表分为学生和老师,老师的权限比较大,其最为特殊的权限是可以创建班级,然后添加试卷到班级。而且可以将学生移出班级。学生则可以通过班级ID加入班级,但是学生也可以自己退出班级。老师和班级、学生和班级都是多对多的关系。学生的做题记录是一个独立的模块,满足数据库概念原则的设计理念,做题记录表中除了存储学生ID,试卷ID和问题ID还有学生做的答案。
用户表之外还有班级表、试卷表、问题表。班级表中既有老师又有学生。试卷表中存储的是用户自己创建的试卷,老师用户创建的试卷添加到班级中之后就会成为学生考试试卷,而学生用户的试卷创建之后只能用作自己练习使用。问题表中存储了所有的问题,问题表和试卷表通过多对多的关系来确定那每份试卷中都是有哪些问题。由于用户表和班级表、用户表和试卷表、试卷表和问题表还有用户表和问题表是多对多的关系,所以还有用户班级主键表、用户试卷主键表、试卷问题主键表和用户问题主键表。
数据库中除了创建了表还有视图和触发器,视图将带有外键的表联立起来中将表中的数据全部显示出来,触发器在用户添加问题时,自动在用户问题主键表中添加外键数据。还可以在班级中添加学生后,让班级的班级人数记录自动增加一个;移除学生后,班级人数自动减少一个。
数据库的E-R图如图所示:
5.2.3 数据库表设计
在线考试管理系统的数据库是MySQL数据库,在保证数据库概念原则的设计理念下,数据库使用10张表,以下则是设计的本系统所需要的表的设计:
用户表用来记录相应的用户信息,所以拥有用户ID、用户名、密码、电子邮箱、注册时间、用户身份外键ID等字段。详情如表3-1所示。
用户表user
字段名 | 类型 | 说明 |
---|---|---|
id | int | 用户的id |
username | varchar(50) | 用户名 |
password | varchar(100) | 密码 |
varchar(50) | 用户的电子邮箱 | |
register | datatime | 注册的时间 |
identity | int | 用户身份外键ID |
问题表是用记录相应的问题信息情况的,该表含有问题ID、问题、选项A、选项B、选项C、选项D、答案、问题类型外键ID、问题的创建人等字段信息。详情如表3-2所示。
问题表question
字段名 | 类型 | 说明 |
---|---|---|
id | int | 问题的ID |
q_name | varchar(1000) | 问题 |
q_ansA | varchar(1000) | 选项A |
q_ansB | varchar(1000) | 选项B |
q_ansC | varchar(1000) | 选项C |
q_ansD | varchar(1000) | 选项D |
ans | varchar(1000) | 答案 |
q_type | int | 问题类型外键ID |
creatperson | int | 问题的创建人 |
班级表是用记录相应的班级信息情况的,该表含有班级ID、班级名称、班级详情、班级人数、班级创建时间和班级创建人等字段信息。详情如表3-3所示。
班级表clazz
字段名 | 类型 | 说明 |
---|---|---|
id | int | 班级ID |
c_name | varchar(500) | 班级名称 |
c_detail | varchar(1000) | 班级详情 |
creatperson | int | 班级创建人 |
creattime | datetime | 班级创建时间 |
classSize | int | 班级人数 |
试卷表,用来记录相应的试卷信息情况的,所以设有试卷ID、试卷名称、试卷创建时间、试卷创建人和总分等字段。详情如表3-4所示。
试卷表exampaper
字段名 | 类型 | 说明 |
---|---|---|
id | int | 试卷ID |
name | varchar(50) | 试卷名称 |
creatTime | datetime | 试卷创建时间 |
creatperson | int | 试卷创建人 |
questionnumber | int | 试卷问题个数 |
考试问题详情表,用来记录相应的考试问题详情信息情况,包含试卷ID、问题ID、用户ID、所选答案和答题时间。详情如表3-5所示。
考试问题详情表examquestiondetail
字段名 | 类型 | 说明 |
---|---|---|
e_id | int | 试卷ID |
q_id | int | 问题ID |
u_id | int | 用户ID |
choose | varchar(1000) | 所选答案 |
time | datetime | 答题时间 |
用户身份表,用来记录用户的身份信息值,含有用户身份ID,以及对应的用户身份。详情如表3-6所示。
用户身份表identity
字段名 | 类型 | 说明 |
---|---|---|
id | int | 用户身份ID |
identity | varchar(50) | 用户身份 |
问题类型表,用来记录问题类型信息,包含问题类型ID和问题类型。。
问题类型表questiontype
字段名 | 类型 | 说明 |
---|---|---|
id | int | 问题类型ID |
typename | varchar(50) | 问题类型 |
试卷问题主键表,试卷和问题是多对多的关系,因此需要用试卷问题主键表来记录试卷和问题多对多的关系,包含有试卷ID和问题ID。详情如表3-8所示。
试卷问题主键表exampaper_question_key
字段名 | 类型 | 说明 |
---|---|---|
e_id | int | 试卷ID |
q_id | int | 问题ID |
班级试卷主键表,试卷和班级是多对多的关系,因此需要用班级试卷主键表来记录试卷和班级多对多的关系,包含有试卷ID和班级ID。详情如表3-9所示。
班级试卷主键表 class_exampaper_key
字段名 | 类型 | 说明 |
---|---|---|
c_id | int | 班级ID |
e_id | int | 试卷ID |
班级用户主键表,用户和班级是多对多的关系,因此需要用班级用户主键表来记录用户和班级多对多的关系,包含有用户ID和班级ID。详情如表3-10所示。
班级用户主键表clazz_user_key
字段名 | 类型 | 说明 |
---|---|---|
c_id | int | 班级ID |
u_id | int | 用户ID |
6.系统详细设计
6.1 系统各模块功能设计
6.1.1 登录模块
首先,用户的登陆可以使用用户名和密码或者电子邮箱和密码进行登录,在输入账号和密码后,点击登录会有非空校验,如果为空会进行提示。不为空会将数据发送到后台进行校验。如果账号密码错误,会进行提示账号密码错误。如果账号密码正确,则登录成功并从后端返回完整的用户信息,前端获取到用户信息之后会将用户信息存储到Cookie之中,当用户下次打开页面之后会先从Cookie中找用户信息,如果找到了则直接显示登录后的页面,否则会进行登录。Cookie的过期时间是三十天,三十天之后需要重新进行登录,也可以点击退出登录,这时会删除Cookie信息然后可以进行重新登录。登录成功之后会跳转到主页。主页会显示用户的身份,一共有两种身份学生和老师。
6.1.2 注册模块
如果用户还没有账号密码可以点击注册按钮进入注册页面进行注册,注册时需要填入用户名、密码、电子邮箱和选择自己的身份是学生或者老师。然后点击注册,会进行非空校验,通过后会将数据传到后台进行注册。如果注册失败则会提示注册失败让其重新注册,如果注册成功就会直接进入主页。
6.1.3 我的主页模块
用户登录后会进入主页,最上面显示早中晚上好和用户的名称进行问候,根据用户的不同分为用户名加老师和用户名加同学,例如:早上好,Tom老师。我的主页会显示用户的大致信息,有部分试卷、部分班级、部分考试和部分题目。在主页可以创建试卷输入试卷名称进行试卷的创建。老师可以点击创建班级按钮进出班级创建页面,学生则是加入班级按钮,点击之后输入班级ID加入班级。点击查看考试进入考试中心查看所有的考试试卷,还可以点击创建题目进入创建题目的页面。
左边框会显示我的主页、我的试卷、考试中心、我的班级和我的题目等五个模块。点击之后可以进入不同的模块。
6.1.4 我的试卷模块
点击左边框的我的试卷可以进入我的试卷模块。这个模块会通过表格的模式显示自己所创建的所有试卷,会通过分页的方式进行显示,每页显示10个试卷。当试卷数不满10个时则会显示所有的试卷。每行显示一个试卷的信息。右上角是一个创建试卷的按钮,点击之后可以输入试卷名称进行创建试卷。试卷显示内容为试卷名、题目数量、创建时间、创建者和操作。操作根据用户的不同显示也不同。老师会显示修改、删除和查看题目三个按钮。学生除了这三个按钮还有一个开始考试的按钮。点击修改按钮会在试卷名那栏显示一个输入框和提交按钮,在输入框中输入新的试卷名称,点击提交就可以成功修改试卷的名称。点击删除按钮会弹出一个确认框,询问是否确认删除这个试卷,并且提示纸卷中的题目并不会删除,点击确认就会删除试卷,点击取消则会取消删除试卷。点击查看题目会进入题目详情界面。
题目详情界面会通过表格的方式显示出这个试卷中所有的题目。题目详情显示内容为题目名、题目类型和操作。题目类型分为单择题、多选题、填空题和问答题。操作中是查看按钮和删除按钮,删除按钮点击后会弹出一个确认框并询问是否确认从这个试卷中删除这道题目。点击确认就会将这个题目从试卷中删除,但是并不会真正的删除题目,题目还会显示在我的题目界面。点击查看按钮会进入查看题目界面。这个界面会同过不可修改的输入框的形式显示出题目的所有信息、比如题目名、题目类型和答案,如果题目类型是单选题和多选题还会显示选项A、选项B、选项C和选项D。右上角还有一个修改按钮,点击之后,输入框会变成可输入的模式,并且在下方显示重置和提交按钮。修改题目详情之后点击提交则会修改题目。
题目详情界面表格左上角显示这个试卷的名称,右上角显示一个添加题目的按钮。添加题目的按钮点击之后会在题目详情表格下面显示一个我的题目的表格。我的题目表格会通过分页的方式显示所有的题目,每页显示十个题目。显示内容是题目名、题目类型、操作和选择。操作中和题目详情表格一样含有查看按钮和删除按钮,功能也是一样的。选择中则是多选框,可以选择题目。表格右上角是全选按钮和提交按钮,全选按钮点击之后则会选择当前显示的所有题目,提交按钮点击之后会把选择的题目添加到当前试卷之中。
而且学生的界面会在我的试卷表格下面多一个做题记录表格。做题记录会显示试卷名、题目数量、做题时间和操作四个部分操作中会有一个查看详情的按钮,点击之后会进入做题记录详情界面。做题记录详情界面会以表格的模式显示所有的题目和自己选择和填写的答案。
6.1.5 考试中心模块
点击左边框的考试中心可以进入考试中心模块。考试中心模块会以分页的方式,以每页十个显示自己所在班级的所有试卷,内容分为试卷名、题目数量、创建时间、所属班级和操作。操作中根据用户类型的不同分为老师操作和学生操作,老师操作分为修改、删除和查看题目。这和我的试卷模块中的老师操作相同。而学生操作中只有开始考试按钮。点击之后会进入考试界面。考试界面中会显示题目,每次显示一个题目,做完之后可以点击上一题或下一题按钮进行选择题目,也可以在选择题目表格中点击每道题目的按钮进行选择。题目根据题目类型的不同,单选题显示单选框、多选题显示多选框、填空题和简答题显示输入框。在右上角有一个提交答案的按钮,点击之后,如果答案没有做完,会跳转到未做的题目并且提示还有题目没有做完。如果题目做完了则会弹出确认框,确认是否提交试卷,点击确认之后会提交试卷。
学生在考试中心模块还会在考试中心表格下面显示做题记录表格,这个做题记录表格和我的试卷中的表格相同,只不过显示的内容不同。考试中心模块的做题记录表格显示的是作考试中心的试卷留下的做题记录,而我的试卷模块中的做题记录表格显示的是作自己创建的试卷留下的做题记录。
6.1.6 我的班级模块
点击左边框的我的班级可以进入我的班级模块。这个模块会通过表格的方式显示自己所有的班级,会通过分页的方式进行显示,每页显示十个班级。当班级数不满十个时则会显示所有的班级。每行显示一个班级的信息。显示内容有班级名称、班级详情、班级人数、创建时间、班主任和操作。操作根据根据用户类型的不同,内容也不同。用户是学生时操作中只有查看班级按钮。用户是老师时操作中有修改按钮、删除按钮和查看班级按钮。点击修改按钮会在所在行的班级名称和班级详情中显示输入框和一个提交按钮,输入要修改的班级名称和班级详情点击提交就可以进行修改。点击删除按钮会弹出提示框询问是否确认删除班级,点击确认就会删除班级。但是班级中的学生和试卷并不会删除。
点击查看班级按钮会进入班级详情界面,界面中有两个表格,一个是班级学生表格,另一个是班级试卷表格。班级学生表格中的有上角会显示班级ID,表格内容有姓名、类型、电子邮箱和操作。类型分为老师和学生,操作中有移除班级按钮,但是类型为老师的班级人移除班级按钮是失效的,不可点击的。学生用户中班级所有的移除班级按钮都是不可点击的。班级试卷表格根据用户类型的不同,显示不同,老师用户中表格右上角有个添加试卷的按钮,点击之后会在班级试卷表格的下面显示我的试卷表格,会显示老师自己创建的所有试卷,显示内容为试卷名、试卷题目数量、创建时间、创建者、操作和选择,操作和我的试卷中的操作一样包含修改、删除和查看题目按钮,按钮功能也相同,选择中是多选框。右上角有全选按钮和提交按钮,选择之后点击提交就可以将试卷提交到班级中。而学生用户的班级试卷中右上角是没有添加纸卷的。班级试卷的内容为试卷名称、题目数量、创建时间、创建者和操作。操作中和我的试卷中的操作相同。
班级表格右上角根据用户类型的不同,内容也不同。用户是老师时是一个创建班级的按钮,用户是学生是是一个加入班级的按钮。点击创建班级的按钮会进入创建班级的界面,在界面中输入班级名称和班级详情然后点击提交就可以创建班级。点击加入班级会显示一个输入框和一个提交按钮,在输入框中输入班级ID并点击提交就可以加入班级。
6.1.7 我的题目模块
点击左边框的我的题目可以进入我的题目模块。我的题目模块有一个我的题目表格,我的题目表格会通过分页的方式显示所有的题目,每页显示十个题目。显示内容是题目名、题目类型和操作。题目类型分为单择题、多选题、填空题和问答题。操作中含有查看按钮和删除按钮。操作中是查看按钮和删除按钮,删除按钮点击后会弹出一个确认框并询问是否确认删除这道题目。点击确认就会删除这个题目。点击查看按钮会进入查看题目界面。这个界面会同过不可修改的输入框的形式显示出题目的所有信息、比如题目名、题目类型和答案,如果题目类型是单选题和多选题还会显示选项A、选项B、选项C和选项D。右上角还有一个修改按钮,点击之后,输入框会变成可输入的模式,并且在下方显示重置和提交按钮。修改题目详情之后点击提交则会修改题目。
我的题目表格右下角有一个分页栏,显示现在是哪一页和两边邻近的四页,最左边是返回首页按钮,最右边是返回尾页按钮。
7 系统测试
在线考试管理系统使用IDEA作为开发平台、使用MySQL5.5数据库、服务器使用的是Tomcat。前端使用BootStrap前端框架,使用JavaScript和JQuery前端技术来实现网页的动态效果和页面跳转弹框等操作。后端使用SSM框架和MVC三层架构。现在对整个系统进行完整的测试。
7.1 系统的功能测试
7.1.1.登录模块
登录界面,可以使用邮箱和密码或者用户名和密码进行登录,输入之后,然后点击登录按钮来登录系统。登录界面所示。
登录界面
7.1.2.注册模块
注册页面,在注册页面注册时需要输入用户名、密码和电子邮箱,然后选择注册账户类型是学生还是老师,点击注册就可以注册成功,注册界面如图所示。
7.1.3.我的主页模块
登陆后的主界面,可以查看自己的部分试卷、班级 、考试和题目。也可以点击响应的按钮进行操作。登入后的界面如图所示。
7.1.4.我的试卷模块
点击左边栏中的我的试卷可以进入我的试卷模块,模块根据用户身份的不同可分为学生我的试卷界面和老师我的试卷界面,学生我的试卷和老师我的试卷中都有删除、修改和查看题目按钮。学生我的试卷中试卷操作中有一个开始做题按钮。在学生我的试卷中还有一个做题记录表格,其中有查看详情按钮。老师我的试卷界面中的试卷操作是没有开始做题按钮的,并且也没有做题记录表格。学生我的试卷界面如图、老师我的试卷界面如图所示。
学生我的试卷界面
老师我的试卷界面
做题记录界面
做题界面
试卷题目详情界面
7.1.5.考试中心模块
点击左边栏中的考试中心可以进入考试中心模块,考试中心模块根据用户身份的不同可分为学生考试中心界面和老师考试中心界面,学生考试中心中考试操作中有一个开始做题按钮,点击之后可以进入做题界面,这里的做题界面和我的试卷中的做题界面是相同的。在学生考试中心中还一个做题记录表格,点击查看详情可以进入做题记录界面,这里的做题记录界面和我的试卷中的做题记录界面也是相同的。老师考试中心界面中的考试操作是没有开始做题按钮的,并且也没有做题记录表格。考试中心界面如图所示。
7.1.6 我的班级模块
点击左边栏中的我的班级可以进入我的班级模块,我的班级模块根据用户身份的不同可分为学生我的班级界面和老师我的班级界面,学生我的班级中班级操作中有一个加入班级按钮,点击之后可以输入班级ID加入班级。在学生我的班级操作中只有一个查看班级按钮,老师我的班级界面中的班级操作中有三个按钮,分别是修改、删除和查看班级按钮。
7.1.7.我的题目模块
点击左边栏中的我的题目可以进入我的题目模块,我的题目模块主要是自己所创建的所有题目,题目操作中有一个查看和删除按钮,点击之后可以进入题目详情页面。在题目详情页面中可以进行题目的修改。
8.系统测试结论
在对系统的所有模块进行统一的测试后,基本达成了上述要求,系统运行成功且稳定。实现了试卷、题目、班级的增删改查,老师创建班级、将试卷添加到班级以及学生加入班级和进行考试的基本要求。
9.源码获取
精彩专栏推荐订阅:在下方专栏👇🏻
Java精品项目源码大全
https://blog.csdn.net/bruceliu_code/category_9538286.html
欢迎大家点赞、收藏、关注、评论啦 、查看下方二维码👇🏻获取联系方式👇🏻