基于springboot在线考试系统
摘 要
在线考试系统的研究旨在设计和开发一个基于互联网技术的在线测试平台,为教育机构提供便捷、高效的课堂测验和评估服务。该系统通过结合教育理论与技术手段,提供多种题型、自动评分和实时反馈等功能,以促进学生学习效果的提升。springboot在线考试系统主要功能模块包括系统用户、联系老师管理、留言管理、系统管理、考试管理等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用springboot框架、Java技术、Ajax技术进行业务系统的编码及其开发。
关键词:在线考试系统;springboot框架;MySQL数据库
Based on springboot online exam system
Abstract
The research of online examination system aims to design and develop an online testing platform based on Internet technology, providing convenient and efficient classroom testing and evaluation services for educational institutions. This system combines educational theory and technological means to provide various question types, automatic scoring, and real-time feedback functions, in order to promote the improvement of student learning effectiveness. The main functional modules of the springboot online exam system include system users, contact teacher management, message management, system management, exam management, etc. The system adopts an object-oriented development model for software development and hardware installation, which can well meet practical needs. The corresponding software installation and program coding work are improved, and MySQL is used as the main storage unit for backend data. The springboot framework is adopted Encoding and development of business systems using Java and Ajax technologies.
Key words:Online examination system; springboot framework; MySQL database
目 录
随着互联网技术的快速发展和普及,教育信息化成为教育领域的重要趋势。在线教育、远程学习等新模式的兴起,推动了对教育技术工具和平台的需求。在线考试系统作为教育信息化的一部分,可以提供更加便捷、高效的测验和评估方式。
每个学生都有自己的学习特点和进度,因此需要个性化的学习支持和评估。传统的纸质测验往往无法满足个性化需求,而在线考试系统可以根据学生的答题情况和表现,提供针对性的反馈和辅导,促进学生的个性化学习。在线考试系统可以帮助教师更好地了解学生的学习情况和掌握程度。通过实时的答题数据和自动评分功能,教师可以及时调整教学内容和方法,提高教学效果和学生参与度。
传统纸质测验消耗大量纸张和印刷成本,不利于环境保护和资源节约。而在线考试系统的研究与应用可以实现无纸化测验,减少对自然资源的消耗,符合可持续发展的理念。
-
- 研究意义
“互联网+”模式的兴起让传统的考试模式发生了根本性的变化,在线网络考试模式的出现和流行,一方面提高了考务人员的工作效率,同时也让学生学习测试的速度和效率进一步提升。学生可以在教室、寝室、电子阅览室等有电脑有网络的地方随时进行在线的模拟练习,也可以直接进行考试。
在线考试系统的研究意义如下:
1.将考试成本大幅度降低,更加提高工作效率智能组卷在线考试系统可以减少教师工作量,解放出卷、印卷、阅卷、批卷的重复性工作,让教师能更好的将心思参与教学中。智能组卷也可以进一步保证试卷难度和质量,有利于实现考试的作用,更好的进行选拔人才和教学测试,同时也节约了考试成本。
2.不受时空限制参与考试,不被考场人数限制在线考试系统可以不用受到所在地域、考场人数、考场数量、考试时间等限制在网络上就可以十分方便的组合试卷,并直接在计算机网络上进行各种考试。这种在线考试的模式已经成为当前考试模式中的一个重要组成部分。
3.公平公正,在线考试系统并不需要安排专门的教师进行监考,完全避免人为因素导致的试卷质量不佳或监考不严谨,保证考试的公平公正。
4.客观准确性和保密性,智能组卷在线考试系统根据给定设置进行组合试卷,所有知识点出现的概率相等,最大限度保证试卷的客观性、可调控性、准确性。当教师调用智能组卷的功能,试卷才被组合出来,能大大提高试卷保密性。在线考试系统可以保证考试范围的准确性,体现考生的真实水平,并且可以产生多套试卷进行抽题选择,更加降低了泄题的风险,使考试的效果得到进一步的体现。
-
- 国内外研究现状
我国在1994年才正式接入互联网,1995年张树新创立瀛海威,国内第一家网络服务运营商正式提供网络服务,自此之后,中国互联网事业才开始起步,网络这一名词才逐渐进入人们的生活。所以,我国在在线考试系统方面的起步和发展也比较晚,现在却无从查起到底谁是第一个提供在线考试服务的,在目前看来,我国的在线考试类型的网站发展十分迅速,所提供的服务也几乎覆盖了大多数包括中小学、大学及各种技能证书培训的课程,并且服务内容丰富,分类庞杂紊乱,但是其中的大多数在功能上相似,内容相仿。我国在在线考试方面的成果很多,但在通用性和系统功能上不能满足大多数类型的考试。如北师大的网络教学系统,在测试过程中已经基本实现了自动进行测试,采用了客户端/服务器的两层结构,但使用的环境只是学校的局域网,系统的扩展性也很差。例如一些院校的教务系统提供的由学生在计算机上进行的评教活动,类似于在线考试系统,由每一位在学校的机房登录教务系统进行在线评教,系统必须在学校的机房登录,必须在机房的教务客户端中登录系统,系统的界面中显示的题目数量过少,并且做完一个题目后就不能更改,最后必须手动提交结果,整体来说操作难度较大,并不适合对计算机不熟悉的学生使用。还有一些培训机构中的教学系统,采用的也是客户端/服务器结构,系统的功能上有许多冗余,有关在线考试方面的内容,如考试题目、试卷、阶段性测试等内容更新速度太慢,不利于考试随学随考,易用性方面也有待提高。另外还有过关性质的驾照上机考试,可能是受系统的限制,系统的题库在很长时间内没有任何的更新和变化,在通用性和易用性方面也有很大的提升空间。从总体来说我国目前在在线考试方面的成果丰富,但在系统的功能方面还需要完善,系统之间的对接互连方面没有统一的标准,系统的易用性方面还需要做很大的努力。
在国外,在线考试系统使教学过程变得更加的灵活,并且已经广泛地应用在了许多的领域中。例如在美国的研究生入学资格考试中的计算机水平测试,以前的惯例是一年进行两次考试,在应用了在线考试系统之后学生每个工作日都可以在线进行考试。系统可以更加便捷地对考试题库进行维护,并且可以适应多种试题形式。在国外的考试中应用较多的是许多的计算机水平考试,例如美国的ICCP的大部分认证考试,充分运用了网络条件,使考试从未如此的便捷易操作,已经有相当多的成果和经验。还有早已经在美国、法国等几个国家普及的英语托福在线考试,摒弃了以前一直沿用的纸质考试形式,并且在考试过程和内容上丰富了许多以前没有的测试,使考试更加全面、客观、人性化,更加真实地反映考生的知识掌握水平。并且在此后不久,雅思考试也采取了在线考试的形式,雅思考试的维护团队也迅速建立起来,进一步促进雅思考试的网络化。这些不同类型的在线考试系统一般都是针对某一特定的领域,具有题库量大、针对性强、安全可靠等特点。
以上的大多数都是基于C/S架构的,基于B/S架构的系统还较少,本论文则采用了更适合在线考试系统的B/S架构。一些在线考试系统的试题题库安排不利于重新使用,题库过于封闭,题目类型不能满足考试需求。
-
- 论文结构与章节安排
本文共分为六章,章节内容安排如下:
第一章:引言。第一章主要介绍了课题研究的背景与意义以及技术和本文的研究内容与主要工作。
第二章:系统分析。第二章主要从系统的可行性、功能等方面进行需求分析。
第三章:系统总体设计。第三章主要对系统功能模块、数据库进行功能设计。
第四章:系统详细设计。第四章主要介绍了系统各个用户的功能、系统界面的实现。
第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试。
开发任何一个系统,都要对其可行性进行分析,对其时间和资源上的限制进行考虑,这样可以减少系统开发的风险。同时,分析之后不仅能够合理的运用人力,还能在各方面资源的消耗上得到节省。下面就对技术、经济两个方面来介绍。
实用性方面,本次设计的主要任务是实现课堂练习、在线考试、考试成绩管理等功能,符合当前潮流的发展。从用户角度出发,采用网络上的便捷方式,实现线上业务,使得业务流程更系统,也更方便用户的体验,比较实用。
经济性方面,由于本课题中设计的springboot在线考试系统的主要目的是为了实现学生可以随时进行在线测试,也就是能够可以直接投入使用的信息化软件。系统的主要成本主要是集中在对使用数据后期继续维护及其管理更新这个操作上。但是一旦系统投入到实际的运行及使用之后就能够很好的提高使用的效率,同时这个springboot在线考试系统所带来的实际应用方面的价值是远远的超过了实际系统进行开发与维护方面的成本,因此,从经济上来说开发这个软件是可行的。
学生用例图如下所示。
![](https://i-blog.csdnimg.cn/direct/510e3611c42848db9c594436306b9d02.png)
图2-1 学生用例图
![](https://i-blog.csdnimg.cn/direct/0fdd4a5c61f2426eb41172f9513e467b.png)
图2-2 管理员用例图
![](https://i-blog.csdnimg.cn/direct/989ac1ab634e432587289d87070caede.png)
图2-3 教师用例图
学生用户功能如下:
学生注册账号:用户填写个人信息,并验证手机号码。
登录:根据账号密码进行登录操作。
校园公告:用户可以对系统发布的公告进行浏览、查看。
考试中心:用户可以根据考试类型浏览考试题目,并选中某个考试进行在线考试操作,例如:考试名称、答题时长、总分等。
我的账户:用户点击我的账户,可以对学生基本资料进行修改与密码的修改。
教师用户功能如下:
登录:教师凭账户以及密码进行登录。
试题管理:对试题进行增删改查。
错题记录管理:对错题记录进行增删改查。
试卷列表:对试卷进行增删改查。
管理员功能如下:
修改密码:管理员可以随时修改自己进入系统的登录密码,以保证系统的安全性。
系统管理:管理员可以对前台首页轮播图进行管控。
考试管理:对考试信息进行维护管理。
用户管理:对学生用户以及教师用户进行维护管理。
资源管理:管理员点击“资源管理”这一菜单,可以对其下校园资讯以及资讯分类进行增删改查。
首先主要考虑的是系统功能软件,在具体设计的环节上,是不是能够较好的满足各类用户的基本功能需求,如果不能较好的满足用户需求,那么这个系统的存在是没有价值的。软件系统的非功能性求分析,从7个方面展开,一个是性能分析,针对系统;一个是安全分析,针对系统,一个是完整度分析,针对系统,一个是可维护分析,针对系统,一个是可扩展性分析,针对系统,一个是适应业务的性能分析。面对在线考试系统存在的性能、安全、扩展、完整度等7个方面性能综合比对分析后发现,需要相应的非功能性需求分析。
安全性对每一个系统来说都是非常重要的。安全性很好的系统可以保护用户的信息不被窃取。提高系统的安全性不仅是对师生用户的负责,更是对学校的负责。尤其针对于在线考试系统来说,必须要有很好的安全性来保障整个系统。
系统具有对使用者有权限控制,针对角色的不通限制使用者的权限,以此来确保系统的安全性。
数据库中的数据是从外界输入的,当数据的输入时,由于种种原因,输入的数据会无效,或者是脏数据。因此,怎样保证输入的数据符合规定,成为了数据库系统,尤其是多用户的关系数据库系统首要关注的问题。
因此,在写入数据库时,要保证数据完整性、正确性和一致性。
对系统的数据流进行分析,系统的使用者分为二类,一般用户,管理员。系统主要对界面信息传送,登录信息的验证,注册信息的接收,用户各种操作的响应做处理。
系统顶层数据流图如下图所示。
![](https://i-blog.csdnimg.cn/direct/56bbe2b14a3840a3aec70e203a01f461.png)
图2-4 顶层数据流图
要判断用户是是什么身份,是根据登录的数据来判断后,跳转到对应的功能界面。在系统的内部用户就可以对数据进行操作,数据库中心就可以接收到系统传输的有效数据流来对数据sql语句进行对应操作。
系统底层数据流图如下图所示。
![](https://i-blog.csdnimg.cn/direct/7f0cc76cfb9d4e979d83037a5d006717.png)
图2-5 底层数据流图
系统可以分为前台和后台两部分,每一种操作后系统都返回操作结果。前台和后台的数据连接主要通过数据库,既分别对数据库做不同的操作。
springboot在线考试系统的结构设计一般是基于三个不同的层次,分别是Web层、业务处理层以及数据访问层。在这之中,Web层由View层和Controller层组成,其中业务层主要负责处理特定的业务逻辑,而数据访问层则主要负责与数据库的互动。
下面的图展示了系统的结构设计。
在此架构设计中,View层主要负责展示用户界面和进行用户互动,而Controller层则负责接收用户的请求并执行相关的业务逻辑操作。Business层的主要职责是处理特定的业务流程,如试题的管理和答题的记录等事宜。Data Access Layer(DAL)的主要职责是与数据库互动,并为数据提供读取和存储的能力。Model层被视为系统的关键数据结构,它涵盖了元数据的扩展部分和数据的访问部分。
![](https://i-blog.csdnimg.cn/direct/97ef29614ade4f8f883ae4a6fdf4bde6.png)
图3-1系统架构图
springboot在线考试系统总体分为前端用户模块和后端管理员模块。
两个模块表现上是分别独立存在,但是访问的数据库是一样的。每一个模块的功能都是根据先前完成的需求分析,并查阅相关资料后整理制作的。
登录模块:登录模块是进入系统的入口,所有用户必须登录后才能访问系统。登录需要输入用户名和密码,如果多次尝试登录需要输入验证码。登录时需要选择用户的角色,是一般用户还是管理员登录等。登录成功后,会通过数据库获取用户的权限,并跳转至用户的主页面。
试题信息数据模块:可分为试题信息数据浏览、试题信息数据检索、试题信息数据维护三个模块,教师对试题信息数据有维护的权限,发布新的试题信息数据、更新已有的试题信息数据等。
在线考试管理模块:在线考试管理分为考试添加、修改。在线考试信息由教师进行修改、添加、删除操作。
![](https://i-blog.csdnimg.cn/direct/f407678cdadc4103b41583a5d5c7cd06.png)
图3-2在线考试系统功能模块图
根据前面的数据流程图,结合系统的功能模块设计,设计出符合系统的各信息实体。
系统ER图如下图所示。
![](https://i-blog.csdnimg.cn/direct/4e63b45329324550b0bae86957f977c9.png)
图3-3 系统ER图
springboot在线考试系统所拥有的数据表有以下:学生信息表,在线考试表,试题信息表,学生成绩表。
由于数据表较多,只展示系统主要数据表,如下表所示。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | exam_question_id | mediumint | 8 | 0 | N | Y | ||
2 | subject_name | varchar | 255 | 0 | Y | N | 科目名称 | |
3 | type | varchar | 20 | 0 | Y | N | 类型 | |
4 | title | varchar | 255 | 0 | Y | N | 题目 | |
5 | question_item | varchar | 500 | 0 | Y | N | 选项 | |
6 | answer | varchar | 500 | 0 | Y | N | 参考答案 | |
7 | score | double | 9 | 2 | Y | N | 总分 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
2 | title | varchar | 125 | 0 | N | N | 标题: | |
3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | praise_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: |
8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
2 | title | varchar | 64 | 0 | Y | N | 标题: | |
3 | content | varchar | 255 | 0 | Y | N | 内容: | |
4 | url | varchar | 255 | 0 | Y | N | 链接: | |
5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | student_users_id | int | 10 | 0 | N | Y | 学生用户ID | |
2 | student_name | varchar | 64 | 0 | Y | N | 学生姓名 | |
3 | student_id | varchar | 64 | 0 | N | 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 | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | subject_id | int | 10 | 0 | N | Y | ||
2 | name | varchar | 255 | 0 | Y | N | ||
3 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | |
4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | exam_id | mediumint | 8 | 0 | N | Y | 考试id | |
2 | subject_name | varchar | 255 | 0 | Y | N | ||
3 | name | varchar | 32 | 0 | N | N | 考试名称:[2,32] | |
4 | duration | int | 10 | 0 | Y | N | 答题时长 | |
5 | score | double | 9 | 2 | Y | N | 总分 | |
6 | status | varchar | 10 | 0 | Y | N | 状态:启用、禁用 | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
9 | user_id | int | 10 | 0 | Y | N | 出题人 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | exam_question_id | mediumint | 8 | 0 | N | Y | ||
2 | subject_name | varchar | 255 | 0 | Y | N | 科目名称 | |
3 | type | varchar | 20 | 0 | Y | N | 类型 | |
4 | title | varchar | 255 | 0 | Y | N | 题目 | |
5 | question_item | varchar | 500 | 0 | Y | N | 选项 | |
6 | answer | varchar | 500 | 0 | Y | N | 参考答案 | |
7 | score | double | 9 | 2 | Y | N | 总分 | |
8 | question_order | int | 10 | 0 | Y | N | 排序 | |
9 | exam_id | mediumint | 7 | 0 | Y | N | 所属试卷 | |
10 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_answer_id | mediumint | 8 | 0 | N | Y | ||
2 | user_id | mediumint | 7 | 0 | N | N | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
3 | exam_id | mediumint | 7 | 0 | N | N | 0 | 考试id |
4 | score | double | 9 | 2 | Y | N | 0.00 | 分数 |
5 | answers | text | 65535 | 0 | Y | N | 答案 | |
6 | score_detail | text | 65535 | 0 | Y | N | 评分详情 | |
7 | objective_score | double | 9 | 2 | Y | N | 0.00 | 客观题得分 |
8 | subjective_score | double | 9 | 2 | Y | N | 0.00 | 主观题得分 |
9 | score_state | tinyint | 4 | 0 | Y | N | 0 | 评分状态 |
10 | nickname | varchar | 255 | 0 | Y | N | 提交人 | |
11 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | teacher_users_id | int | 10 | 0 | N | Y | 教师用户ID | |
2 | teachers_name | varchar | 64 | 0 | Y | N | 教师姓名 | |
3 | teacher_id | varchar | 64 | 0 | N | 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 | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 文件类型 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
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 | 会员折扣 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_answer_id | mediumint | 8 | 0 | N | Y | ||
2 | subject_name | varchar | 255 | 0 | Y | N | 科目名称 | |
3 | question_item | varchar | 255 | 0 | Y | N | 选项 | |
4 | title | varchar | 255 | 0 | Y | N | 题目 | |
5 | type | varchar | 255 | 0 | Y | N | 题目类型 | |
6 | exam_id | mediumint | 7 | 0 | N | N | 0 | 考试id |
7 | score | double | 9 | 2 | Y | N | 0.00 | 分数 |
8 | answers | text | 65535 | 0 | Y | N | 用户提交的答案 | |
9 | answer | text | 65535 | 0 | Y | N | 参考答案 | |
10 | score_detail | text | 65535 | 0 | Y | N | 评分详情 | |
11 | objective_score | double | 9 | 2 | Y | N | 0.00 | 客观题得分 |
12 | subjective_score | double | 9 | 2 | Y | N | 0.00 | 主观题得分 |
13 | score_state | tinyint | 4 | 0 | Y | N | 0 | 评分状态 |
14 | nickname | varchar | 255 | 0 | Y | N | 提交人 | |
15 | user_id | int | 10 | 0 | N | N | 提交人ID | |
16 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
-
- 表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 | 更新时间: |
- 系统实现
在线考试系统的详细设计与实现主要是根据前面的在线考试系统的需求分析和在线考试系统的总体设计来设计页面并实现业务逻辑。主要从在线考试系统界面实现、业务逻辑实现这两部分进行介绍。
4.1系统前台功能实现
4.1.1系统主页功能实现
用户进入首页之后会显示如下的一个窗口。系统以上中下的布局进行展示,首先映入眼帘的是系统的在线考试、校园公告、联系老师,其主界面展示如下图4.1所示。
如下图:
![](https://i-blog.csdnimg.cn/direct/1c1ff4df64384cbabf7c45cf2c902dcf.png)
图4.1在线考试系统首页界面
4.1.2用户登录功能实现
在线考试系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到在线考试系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4.2所示。
![](https://i-blog.csdnimg.cn/direct/ebb08f0c90de45cba6ac68da1909a108.png)
图4.2在线考试系统登录界面
登录关键代码如下:
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
Duration duration = Duration.ofSeconds(7200L);
redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
4.1.3 我的账户功能实现
当用户点击右上角“我的”这个按钮,会出现子菜单,点击“我的账户”可以对个人的资料、登录系统的密码进行设置管理,我的账户界面如下图4.3所示。
![](https://i-blog.csdnimg.cn/direct/ac58254dbd82410ab6886745a3a78b60.png)
图4.3我的账户界面
4.1.4校园资讯功能实现
用户点击“校园资讯”菜单显示所有的校园资讯信息,可以按照条件进行校园资讯的筛选或者输入关键词进行局部搜索,点击可以进入校园资讯详细展示界面,在此界面用户可以收藏、点赞和评论。具体的实现界面如下图4.4所示:
![](https://i-blog.csdnimg.cn/direct/15451058473e4224a41b9c26bfdc798e.png)
图4.4校园资讯界面
4.1.5考试中心功能实现
当用户点击导航栏“考试中心”后可以进行在考试操作,点击进入考试试卷界面,具体的实现界面如下图4.5所示:
![](https://i-blog.csdnimg.cn/direct/dd1bb4839a704a81ad058cdfeea48404.png)
图4.5考试界面
4.2系统后台功能实现
4.2.1后台用户登录功能实现
在线考试系统中的后台的管理员是可以通过自己的账户名和密码进行登录的,当管理员输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到在线考试系统的首页中;否则将会提示相应错误信息,登录界面如下图4.6所示。
![](https://i-blog.csdnimg.cn/direct/5006a801f5554d0495c7063ef97eadcb.png)
图4.6后台登录界面
4.2.2用户管理功能实现
管理员在用户管理模块,可以对用户信息进行管理,用户管理模块由管理员,学生,教师组成,这里以教师用户管理为例,具体的实现界面如下图:
![](https://i-blog.csdnimg.cn/direct/79cd955e31fb493b93b1c1e027e97b94.png)
图4.7用户管理界面
用户管理关键代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
4.2.3考试管理功能实现
教师点击“考试管理”这一按钮就会展示其下子菜单,选择“科目列表”在这个界面,教师可以对科目信息添加,编辑,删除,具体的实现界面如下图:
![](https://i-blog.csdnimg.cn/direct/6bfe17c45397407cbf6f8bfed8cbe0f5.png)
图4.8考试管理界面
4.2.试题库管理功能实现
教师在“试题库”界面的这一菜单下可以对试题库进行查询,修改、添加、删除,具体的实现界面如下图:
![](https://i-blog.csdnimg.cn/direct/1ba3fab9b9c94984a6b6cb71de9962dc.png)
图4.9试题库界面
4.2.5校园公告管理功能实现
管理员点击“校园公告管理”菜单可以查看到系统中的所有校园公告信息,对已经存在的校园公告,管理员可以修改,也可以添加新的校园公告或者删除校园公告,具体的实现界面如下图:
![](https://i-blog.csdnimg.cn/direct/59c63e4a175547b1baffd245c18765cb.png)
图4.10校园公告管理界面
校园公告管理关键代码如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
4.2.6资源管理功能实现
管理员点击“资源管理”菜单能够对其下子菜单校园资讯以及资讯分类进行增删改查,具体的实现界面如下图:
![](https://i-blog.csdnimg.cn/direct/2211d6f876524f748cd47016be2d8e3b.png)
图4.11资源管理界面
资源管理关键代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
public void delete(Map<String,String> query,Map<String,String> config){
QueryWrapper wrapper = new QueryWrapper<E>();
toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
baseMapper.delete(wrapper);
log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());
}
对任何系统而言,测试都是必不可少的环节,测试可以发现系统存在的很多问题,所有的软件上线之前,都应该进行充足的测试之后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。
下表是试题功能的测试用例,检测了试题中对试题信息的增加,删除,修改,查询操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表5-1 试题的测试用例
功能描述 | 用于试题 | |
测试目的 | 检测试题时的各种操作的运行情况 | |
测试数据以及操作 | 预期结果 | 实际结果 |
点击添加试题,必填项合法输入,点击保存 | 提示添加成功 | 与预期结果一致 |
点击添加试题,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改试题,必填项修改为空,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改试题,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击删除试题,选择试题删除 | 提示删除成功 | 与预期结果一致 |
点击搜索试题,输入存在的试题名 | 查找出试题 | 与预期结果一致 |
点击搜索试题,输入不存在的试题名 | 不显示试题 | 与预期结果一致 |
下表是错题记录功能的测试用例,检测了错题记录中对错题记录信息的增加,删除,修改,查询操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表5-2 错题记录的测试用例
功能描述 | 用于错题记录 | |
测试目的 | 检测错题记录时的各种操作的运行情况 | |
测试数据以及操作 | 预期结果 | 实际结果 |
点击添加错题记录,必填项合法输入,点击保存 | 提示添加成功 | 与预期结果一致 |
点击添加错题记录,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改错题记录,必填项修改为空,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改错题记录,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击删除错题记录,选择错题记录删除 | 提示删除成功 | 与预期结果一致 |
点击搜索错题记录,输入存在的错题记录名 | 查找出错题记录 | 与预期结果一致 |
点击搜索错题记录,输入不存在的错题记录名 | 不显示错题记录 | 与预期结果一致 |
下表是试卷列表管理功能的测试用例,检测了试卷列表管理中分类列表的操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表5-3 试卷列表管理的测试用例
功能描述 | 用于试卷列表管理 | |
测试目的 | 检测试卷列表管理时各种操作的情况 | |
测试数据以及操作 | 预期结果 | 实际结果 |
使用阿里云PTS(Performance Testing Service)性能测试服务对线上系统进行压力测试。线上服务器环境为:1核心CPU,1G内存,1Mbps公网带宽,Centos7.0操作系统。
压测过程中使用了2台并发机器,每台机器20个用户并发,对系统主页,登录,数据查询和数据维护等模块进行并发访问,测试结果是有40个用户并发时,数据管理相关页面的响应时间甚至达到了7s,通过查看服务器出网流量发现已经达到1381kb/s,可以看出服务器的带宽已经达到峰值,如果系统使用5Mbps的带宽,系统的响应时间和TPS将会大大增加。在整个测试的过程中,CPU的使用率占用仅8%,也提现出带宽瓶颈对系统的影响非常严重。
随着计算机互联网技术的迅猛发展,各行各业都已经实现采用计算机相关技术对日益放大的数据进行管理。本研究针对springboot在线考试系统需求建模,数据建模及过程建模分析设计并实现在线考试系统的过程。给出系统应用架构并分析优劣势,通过功能分解图,系统组件图描述功能需求。设计建立了数据库,给出系统关键数据结构的定义。通过类关系图描述组件间的协作关系,给出各个类的定义方法。通过描述每一个类的字段,属性及方法实现springboot在线考试系统的前后端代码。最终给出系统集成整合方法,完成springboot在线考试系统的设计与实现。系统投入运行时,各功能均运行正常。系统的每个界面的操作符合常规逻辑,对使用者来说操作简单,界面友好。整个系统的各个功能设计合理,体现了人性化。
但是由于自己在系统开发过程中对一些用到的相关知识和技术掌握不够牢固,再加上自身开发经验欠缺,因此系统在有些方面的功能还不够完善,考虑的不够全面,因此整个系统还有待日后逐步完善。
参考文献
[1]李崇奇,肖曼. 生物化学云班课开放式在线考试系统建设及应用 [J/OL]. 基础医学教育, 2024, (02): 164-168[2024-03-09]. https://doi.org/10.13754/j.issn2095-1450.2024.02.16.
[2]徐少军,李宗哲,梅杰等. 基于Springboot+Vue框架的质量检验监督管理系统研发 [J]. 纺织标准与质量, 2024, (01): 11-14+21.
[3]束方鹏,张逸. 基于SpringBoot框架的数据转换系统及方法[P]. 江苏省: CN117289914B, 2024-02-02.
[4]瞿守江,李星,吴建平等. 一种基于NLP的在线考试系统[P]. 北京市: CN117473976A, 2024-01-30.
[5]张慧琴. 面向“四新”建设的高校富媒体在线考试模式探赜 [J]. 黑龙江教育(理论与实践), 2024, (01): 8-11.
[6]余久久,张继山,吴宁等. 智慧校园视域下基于LAMP的在线考试系统敏捷设计与实现 [J]. 西昌学院学报(自然科学版), 2023, 37 (04): 48-54.
[7]吴昊,张丹. 基于SpringBoot框架的大学生网上兼职系统设计与实现 [J]. 电脑知识与技术, 2023, 19 (35): 68-72.
[8]Devendra S S ,Rajashri K . Determinants of adoption and usage of the online examination portal (OEP) in Indian universities [J]. Education + Training, 2023, 65 (6-7): 827-847.
[9]Islam M M ,Nabil K S ,Murad A S , et al. The Development and Deployment of an Online Exam System: A Web Application [J]. Asian Journal of Research in Computer Science, 2023, 16 (2): 1-11.
[10]李文杰. 基于SpringBoot与Vue框架的公益性教育咨询平台系统研发[D]. 山东大学, 2023.
[11]Mori T ,Takeuchi S ,Maruyama K , et al. Proposal of deformation history integral‐type hysteresis model considering performance change of high‐damping rubber bearings and verification using substructure real‐time online testing system for seismically isolated structure [J]. Japan Architectural Review, 2023, 6 (1):
[12]刘欣,李亮亮,牛聪. 基于Vue和SpringBoot框架的流域监管平台的研究和应用[C]// 《中国防汛抗旱》杂志社,中国水利学会减灾专业委员会,水利部防洪抗旱减灾工程技术研究中心(中国水利水电科学研究院防洪抗旱减灾研究中心). 第十一届防汛抗旱信息化论坛论文集. 黄河水利委员会信息中心;郑州黄河河务局;, 2021: 5.
[13]张健. 基于混合算法的自动组卷在线考试系统[D]. 扬州大学, 2021.
[14]朱启成, 易思创在线考试系统. 安徽省, 安徽易思创信息技术有限公司, 2020-12-17.
致谢
“致谢”意味着论文的结束,也意味着自己的毕业设计顺利完成,同时也代表了自己的大学生涯即将结束,我即将要离开自己敬爱的老师和亲爱的同学们,在这里我首先要感谢的就是所有的老师,“春满江山绿满园,桃李争春露笑颜,东西南北春常在,唯有师恩留心间”,他们无论在我的学业还是在我的生活上付出了所有,对我谆谆教诲;其次我要感谢我的指导老师,他在我的整个毕业设计当中起着引导作用,每当我有困难的时候,他总会第一时间帮助我,引导我进行解决问题,而不是直接告诉我答案,“授人以鱼不如授人以渔”,指导老师的这种做法让我受益终生,同时我也从指导老师身上学习到了许多的开发技巧以及检验,这对我今后的开发起着十分重要的作用;再次,我需要感谢我的同学、室友,他们不仅仅在毕业设计上给我许多帮助意见,在大学同窗四年,他们给过我的帮助太多了,我对他们有太多的不舍,无法用言语表示,我相信在以后的人生道路上只要想到他们,我心里就会很温暖,这种友情是任何感情替代不了的;最后我还要感谢家人,感谢自己,感谢家人对我的支持,感谢自己在学业上的坚持,我相信我以后的道路会越来越好。
请关注点赞+私信博主,免费领取项目源码