版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
题目:在线考试系统--后端设计与实现目录摘要 第1章绪论1.1课题研究的背景和意义考试作为大多数学校与教育机构培训的重要检测环节之一,在我国的教育制度下有着十分重要的作用。传统的考试需要经过命题、考试、阅卷、成绩四个主要的步骤,其中每一步骤都需要考试管理人员充分参与,使得考试变成了非常繁琐的过程,并且给教师带来了不断重复的高强度劳动[1]。随着计算机技术和物联网技术的高速发展,高校对课程进行考核的方式也在不断改变。为了改变传统轻实践重理论的考核方式,以及程序设计课程的特点,设计出基于web的在线网络考试系统,其可以在学生的学习过程中,对其课程的每章节的学习内容进行综合测评。该系统可以及时对学生进行评测,并且为教师掌握学生的学习情况提供了极大的便利[2]。在线考试系统将会成为高校考试信息化管理的一个发展趋势。一个功能完备的在线考试系统可以让学生实现模拟刷题、在线考试,在短时间内获得考试成绩并且及时查看错题,大大提高学生的考试效率,也减轻了教师的工作任务[3-4]。除此之外,在线考试的发展也有利于近年来国家提出的低碳、绿色环保、无纸化办公的理念。1.2国内外相关发展动态1.2.1国外的研究现状随着互联网技术的进步,使得各个行业都开始通过信息化的手段来进行管理,互联网技术也开始应用到了考试管理中,即形成了功能强大的在线考试系统来进行考试[5]。国外一些发达国家,利用互联网开展教育已经多年。在上世纪90年代的美国已经开始利用网络来进行教育活动并且进行考核。网络教育的出现,基本覆盖了所有专业学科的需求,使得传统的授课内容及方式,考核评价等方便都出现了较大的创新[6]。近年来,互联网技术发展迅速,在线考试的种类繁多。由于其表现出来的便捷性和超时空性,国际上许多的大型考试都使用了网络考试。例如:微软的MSCE、MCOBA认证考试、IBM认证考试CCNP认证、思科CCNA认证考试、雅思、托福考试等,都在想用对应的在线考试系统。1.2.2国内的研究现状相对于西方发达国家,国内在线教学平台起步较晚。但长期以来,我国致力于在线教育的研究与应用,并且随着互联网技术的发展,在线教育平台的发展也呈现出了高速的发展趋势。教育部与很多知名高校共同开展了在线教育及考试的工作,且已经构建了完备的在线考试系统。[7]近年来,随着高校招生和各大企业招聘的需求增加,在线考试系统得到了广泛应用。国内的许多认证考试也使用了在线考试系统,比如计算机等级考试和初级会计资格证考试等。计算机考试系统也在许多行业都得到了应用,比如驾校考试理论考试等[8]。国内比较成熟的在线教学平台包括清华大学的新叶教学平台、北京师范大学现代教育技术研究所开发的Vclass网络教学平台等,以及向牛客网这类拥有集成题库、在线自测、在线笔试、用户交流互动等功能的在线学习系统。1.3系统研究和可行性分析1.3.1系统研究在线考试系统,属于采用B/S架构的信息管理系统。B/S管理软件的用户在客户机上无需安装任何软件,使用浏览器即可访问系统。B/S建立在浏览器上,有更加丰富和生动的表现方式与用户交流,并且大部分难度较低,减少开发成本。这样的系统能够很好的在校园网中架构和实现。对于学校来说,系统管理人员只需要管理服务器即可,所有的客户端不需要做维护,可以提高工作效率。当用户的规模增大时,也不会增加升级所需要的工作量,只需要对服务器进行相应操作即可,可以减少系统管理人员的工作量。1.3.2可行性分析可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。通过系统化的调查,对客户提出的具体要求和提供的时间等资源进行详尽的研究,从而确保本系统在现有的技术和资源条件下能够最终实现并成功应用。系统的可行性分析主要包括经济上的可行性,技术上的可行性,操作上的可行性和法律上的可行性。系统可行性分析应当具有预见性、公正性、可靠性和科学性等特点[9-10]。经济可行性学校传统组织考试的过程包括教师命题、学校组织学生考试、教师阅卷、统计学生成绩等过程。在具体的实施中,耗费了大量的人力和物力。在线考试系统实现了真正的无纸化考试方式,达到了环保的效果,同时也节省了大量费用。在线考试系统的组卷、评卷和分析试卷等过程与传统的考试方式相比,缩短了时间,降低了人力和时间成本。从长远利益来说,本毕业设计的开发还是具有相当大的经济可行性的。技术可行性本系统后端主要使用Java的springboot框架完成开发,描述所用的技术操作可行性在线考试系统要想真正发挥其作用,还需要再现有的各级学校的软件和硬件条件上得以合理的应用。现在全国的所有高等院校都已经实现了网络化和数字化的校园。并且建立了属于自己的校园网,配置了大量的软件和硬件资源以及专门的管理人员,用于管理日常教学和工作。以高校的现有条件和管理水平,完全由能力满足在线考试系统在校园内的实施和应用。法律可行性由于本系统是在相关法律法规下实施完成的,所以不存在任何法律问题,在法律上是完全可行的。综合考虑经济、技术、操作和法律等方面的因素,该在线考试系统的开发工作可以开始执行1.4本文组织结构说明本文详细介绍了基于前后端分离技术的在线考试系统后端的设计、开发的全过程。从开始到程序设计的实现,将在以下几章中予以介绍:第1章:绪论,这一章主要是对本次毕业设计所开发的系统进行问题的定义,通过问题的定义明白需要做些什么,并且对开发内容做简单介绍;同时本章还对课题的研究背景与研究意义进行分析,对开发本系统的可行性分析还有对各章内容的简要介绍。第2章:开发环境、语言和相关技术介绍,主要是对本次开发涉及到的理论知识和用到的开发工具做相关阐述。第3章:系统需求分析,对在线考试系统的功能模块与性能进行分析第4章:总体设计:对在线考试系统后端的总体设计思想进行介绍,主要有系统的功能模块,各功能实现的流程图和数据库的设计。第5章:详细设计:主要介绍了在线考试系统的核心模块和所涉及的核心代码。第6章:系统测试与评价分析,主要是对系统所实现的功能模块来做测试,并作相关分析。第7章总结与展望,总结了本次设计过程中遇到的技术难题并做相关分析,对本系统尚未完善的地方作出下一步打算。
第2章开发环境、语言和相关技术介绍在确定系统的开发前景、意义、目标之后,就是选择开发工具以及运用相关的技术来开发系统。在模式上,我们选择B/S架构的操作模式,这样可以方便学生的考试和管理员的对试题题库的管理,使得用户无须安装客户端软件,只要打开浏览器即可登陆系统做相关操作。2.1前后端分离技术2.1.1传统开发模式传统的软件开发模式的特点是通过后台语言提供的模板来生成HTML页面,然后听过服务器将生成的页面返回给浏览器,由浏览器呈现给客户。以Java语言为例,在传统开发模式中,使用JSP作为模板引擎,JSP通过在HTML代码中使用Java代码或者特定的标签集合来封装动态逻辑。当客户端请求JSP页面时,服务器会将JSP编译成为servlet后执行。这样做的好处是开发效率较高,但是在JSP嵌入Java代码使得前后端逻辑耦合严重,前端人员在维护页面必须要会JSP,使得学习成本增高,并且项目上线后维护也十分不便。传统的开发模式框架图如图2.1所示:图2.1传统开发模式框架图2.1.2前后端分离框架在传统的web项目开发过程中,程序员不仅要负责后端还要负责前端,这种开发方式效率极低,并且具有高度耦合度。整个项目的前后端都是一个人设计实现,要求开发人员熟悉前后端开发技术,但是前后端开发技术多达十几种,对开发人员来说是一个极大的负担。在前后端分离开发的方式中,前端与后端程序员都只需要各司其职,前端值需要独立编写客户端代码,web端采用B/S框架[11],后端也只需要独立编写服务端代码,提供API数据接口即可,前端通过Ajax请求来访问后端的数据接口,并且把接口上获得的数据渲染到HTML页面上[12]。在这种开发模式下,前后端开发者只需要提前约定好接口文档,然后分别独立开发即可,前端可以造假数据进行测试,完全不需要依赖于后端,最终前后端完成集成即可,真正实现了前后端应用的解耦合,极大的提升了开发效率。前后端分离开发框架图如图2.2所示:图2.2前后端分离开发框架图2.1.3前后端分离的优点(1)有利于提升团队质量开发人员只需要对前端或者后端之中选择其一进行深入学习,并且随着不断学习和项目经验,开发人员会对自己负责的部分逐渐精通,编写代码的质量也越来越高[13]。在提高开发产品质量的同时,也提升了开发人员和团队的业务水平。(2)分工更加明确,提升工作效率前后端分离开发,使得前后端开发人员各司其职,两者并行开发,提高开发效率,加快项目上线速度。在程序出现错误时,可以快速定位问题位置,并由相关负责人进行修改,页面内部的布局和逻辑,页面与页面之间跳转时出现失误,页面与浏览器不兼容,页面的央视不合理等问题,全部由前端开发人员来负责。调用接口时数据出错,数据提交失败,请求超时等问题,全部由后端开发人员来解决。双方互不干扰,职责清晰。(3)分别部署,提高系统性能前后端分离开发使得之前的一个项目变成两个单独的项目,前端和后端项目分别部署在单独的服务器上,这会大大提高页面的响应速度。尤其是在大型项目与流量巨大的网站,这种方式尤为重要。前后端分离开发,其各部分代码中都只包括自己的部分,降低服务器运行的压力,从而提升了页面相应的速度。(4)代码的可维护性得以增强前后端代码基本实现解耦合,项目进行模块化开发。前端大量的代码以组件的方式得以复用,后端代码的逻辑更加清晰并也以模块的方式得以复用。前后端分离开发的模式为项目的维护和升级提供了较好的环境,以后相似的项目开发可以直接利用模块化代码,从而降低开发时间。2.2springboot框架Springboot是一个简化Spring开发的框架。它整合了很多优秀的框架,去繁从简,立即就能创建一个独立的,产品级的应用,此项目重使用springboot时只需要配置相应的springboot就可以用所有的spring组件,不用自己手动去进行xml配置[14]。所以采用SpringBoot框架可以快速容易地创建基于Spring框架的应用程序,让原本复杂的编码、配置、部署等过程都变得简单[15]。2.3JPA技术JPA全称JavaPersistenceAPI,是由EJB3.0软件专家组开发,作为JSR-220实现的一部分[16-17]。是一组用于将数据存入数据库的类和方法的集合,JPA通过JDK5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。用户不需要直接访问数据库,只需要操作对应的类对象就能完成数据的存取,提高数据的访问效率。2.4Swagger技术使用springboot框架,采用微服务的模式把本系统前后端分离进行开发,而后端大量的服务管理以及API的说明就显得尤为重要。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统作为服务器以同样的速度进行更新。将文件的方法、参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。它具有体积小,传输速度快,传输方式多样,严谨的结构化,支持跨域验证等优点。2.5JWT校验JWT(全称:JsonWebToken)是一种基于Json格式Webtoken,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息[18]。JWT认证技术,通过特定的算法生成用户唯一的令牌token对象,然后在用户数据请求过程中携带此token即可完成身份有效性校验,既保证了前后端分离又保护用户访问安全。JWT的构成简单,字节占用小,便于传输。由于其不在服务端保存会话信息,更易于应用的扩展[19-20]。2.6MySQLMySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一[21]。由于MySQL数据库体积小、速度快、总体拥有成本低、开发源代码,其有着广泛的应用,一般中小型网站的开发都选择MySQL作为网站数据库。2.7运行环境要求2.7.1硬件环境服务端:有足够大的内存可以运行数据库,IDEA和Chrome浏览器2.7.2软件环境(1)浏览器端:Chrome浏览器。(2)服务器端:MySQL数据库、IDEA。
第3章系统需求分析3.1系统总体功能业务分析本系统定位学生在线考试和教师、管理员对试题、试卷的维护工作,具体来说系统的总体功能包括以下几个方面:
(1)学生登陆与注册学生可以使用邮箱在线注册并登陆该系统;(2)在线考试学生注册并登陆后可进行在线考试,可以选择模拟考试与实时考试,考试完毕后可查看自己的考试详情;(3)学生信息维护管理员可以注册的学生信息进行查看,修改和删除操作;(4)试题管理管理员可以对考试试题进行查看,修改和删除管理,可以生成不同的试卷;(5)学生成绩管理管理员可以查看和删除学生的考试结果信息。3.2系统性能需求分析该系统除了要满足基本功能需求外,还满足以下的性能需求:
(1)管理员的前端页面能够兼容主流浏览器类型;(2)前端页面应具有用户友好型,操作简单便捷;(3)系统的设计应该易于将来的扩展与维护。
第4章在线考试系统的总体设计本章介绍在线考试系统的总体设计,主要包括系统总体的功能模块、各模块实现的流程图以及数据库的逻辑和物理设计。4.1设计目标本系统的设计目标是建立一个基于Web的程序设计在线考试系统,方便教师和学生的操作,给教学工作带来简便化。用户界面友好,操作简单,降低使用该系统前需要的培训,实施和使用中的维护时间。通过合理的网络设计及软、硬件的优化选型,可以保证本系统的可靠性与容错性,系统以用户需求为目标,以方便用户为原则,处处为使用者考虑。4.2系统功能模块根据系统功能分析,将整个在线考试系统的功能模块规划为以下的功能模块;如图4.1在线考试系统功能框架图所示:
图4.1在线考试系统功能模块图4.3各功能模块描述系统分为三大模块:学生模块、教师模块和管理员模块。4.3.1学生模块学生模块包括用户注册、登陆、修改密码、模拟刷题、参加考试、查看考试记录、查看考试错题等。用户注册:学生用户在考试系统首页点击注册账户,使用邮箱、密码、手机号填写验证码进行注册。用户登陆:学生用户可在考试系统首页通过用户名,密码进行登陆。修改密码:学生用户可以选择修改密码,在修改密码界面,通过输入旧密码验证的方式,输入新密码进行修改。参加考试:学生用户注册登陆后,可以在考试列表中参加相应的考试,做完题目后,可以提交试卷以结束考试。考试记录:学生用户注册登陆,并且参加过至少一次考试后,可进入我的考试界面,查看考试记录与错题分析。学生模块业务流程如图4.2所示:图4.2学生模块业务流程图4.3.2教师模块教师模块的功能在学生模块的基础上,增加了题目管理和创建考试的功能。用户登陆:教师用户在登陆界面通过用户名、密码进行登陆,登陆之后进入首页。修改密码:教师用户在我的界面里可以修改密码,输入旧密码验证之后,可以输入新密码就进行修改。题目管理:教师用户可以在题目管理页面进行题目的增加、删除、修改、查询等操作。考试管理:教师用户可以通过选择题目来创建考试,填写考试的时间和题目的难易度以及分值。教师模块具体业务流程如图4.3所示:
图4.3教师模块具体业务流程图4.3.3管理员模块管理员拥有最高权限,在老师的模块功能基础上,增加了管理用户的模块功能。基本信息管理:管理员拥有学生和教师用户拥有的全部功能。管理用户功能:管理员拥有最高全新啊,可以对用户进行添加、删除、修改、查询等操作,还可以赋予用户不同的角色,角色不同,其权限和对应的功能也不相同。管理员模块的具体业务流程如图4.4所示:图4.4管理员模块具体业务流程图4.4数据库表设计4.4.1数据库的E-R图设计E-R图,即实体—联系图,提供了表示实体型、属性和联系的方法,是用来描述现实世界的模型概念。本在线考试系统的E-R图如下图4.5所示:图4.5在线考试系统E-R图4.4.2数据库表设计数据库表设计主要是把概念结构设计的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。它包括数据项、记录及记录间的联系、安全性和一致性约束等等。导出的逻辑结构是否与概念模式一致,从功能和性能上是否满足用户的要求,要进行模式评价。本系统设计的数据库表主要包括:(1)action表主要用来存储前端操作,如增删改查等的权限表。如表4.1action表所示表4.1action表字段名称数据类型主键是否为空说明action_idint(11)YN前端页面操作表主键idaction_namevarchar(64)NN前端操作的名字action_descriptionvarchat(128)NY页面操作的描述defaulttinyint(1)NN当前操作是否需要校验,true为1,false为0(2)exam表是用来存储考试的详细信息表。如表4.2exam表所示表4.2exam表字段名称数据类型主键是否为空说明exam_idvarchar(32)YN考试表的主键exam_namevarchar(128)NN考试名称exam_avatarvarchar(512)NY考试的预览图exam_descriptionvarchar(256)NY考试描述exam_question_idsvarchar(2048)NY当前考试下的题目的id用-连在一起的字符串exam_question_ids_radiovarchar(512)NY当前考试下的题目单选题的id用-连在一起的字符串exam_question_ids_checkvarchar(512)NY当前考试下的题目多选题的id用-连在一起的字符串exam_question_ids_judgevarchar(512)NY当前考试下的题目判断题的id用-连在一起的字符串exam_scoreint(11)NN当前考试的总分数exam_score_radioint(11)NN当前考试每个单选题的分数exam_score_checkint(11)NN当前考试每个多选题的分数exam_score_judgeint(11)NN当前考试每个判断题的分数exam_creator_idvarchar(32)NN考试创建者的用户idexam_time_limitint(11)NN考试的时间限制,单位为分钟exam_start_datadatatimeNN考试有效期开始时间exam_end_datadatatimeNN考试有效期结束时间create_timedatatimeNN创建时间update_timedatatimeNN更新时间(3)exam_record表是用来存储考试记录的表。如表4.3exam_record表所示:表4.3exam_record表字段名称数据类型主键是否为空说明exam_record_idvarchar(32)YN考试记录表的主键exam_joiner_idvarchar(32)NN考试参与者的用户idexam_join_datadatetimeNN参加考试的时间exam_time_costint(11)NY完成考试所用的时间,单位分钟exam_join_scoreint(11)NN参与考试的实际得分exam_result_levelint(11)NY考试结果的等级(4)exam_record_level表是用来存储考试结果等级的表。如表4.4exam_record_level表所示:表4.4exam_record_level表字段名称数据类型主键是否为空说明exam_record_level_idint(11)YN考试结果等级表的主键exam_record_level_namevarchar(128)NN考试结果等级的名称exam_record_level_descriptionvarchar(512)NY考试结果等级的详细阐述(5)page是前端页面表。如表4.5page表所示:表4.5page表字段名称数据类型主键是否为空说明page_idint(11)YN前端页面表主键idpage_namevarchar(64)NN页面的名称,要唯一page_descriptionvarchar(128)NY页面的功能性描述action_idsvarchar(128)NY页面对应的操作权限列表,用-连接action的id(6)question表是用来存储考试记录的表。如表4.6question表所示:表4.6question表字段名称数据类型主键是否为空说明question_idvarchar(64)YN题目的主键question_namevarchar(64)NN题目的名字question_scoreint(11)NN题目的分数question_creator_idvarchar(32)NN题目创建者的用户idquestion_level_idint(11)NN题目难易度级别question_type_idint(11)NN题目的类型question_category_idint(11)NN题目科目的类型question_descriptionvarchar(256)NN题目额外的描述question_option_idsvarchar(256)NN题目的选项,用选项的id用-连在一起表示答案question_answer_option_idsvarchar(256)NN题目的答案,用选项的id用-连在一起表示答案create_timedatetimeNN创建时间update_timedatetimeNN更新时间(7)question_category表是用来存储题目类目的表。如表4.7question_category表所示:表4.7question_category表字段名称数据类型主键是否为空说明question_category_idint(11)YN问题类别表的主键question_category_namevarchar(64)NN问题类别名称question_category_descriptionvarchar(512)NN问题类别描述(8)question_level表是用来存储问题的难易度级别表。如表4.8question_level表所示:表4.8question_level表字段名称数据类型主键是否为空说明question_level_idint(11)YN题目难易度的主键question_level_namevarchar(64)NN题目难易度名称question_level_descriptionvarchar(128)NN题目难易度的描述(9)question_option表是用来存储题目的选项的表。如表4.9question_option表所示:表4.9question_option表字段名称数据类型主键是否为空说明question_option_idvarchar(64)YN题目选项表的主键question_option_contentvarchar(512)NN选项的内容question_option_descriptionvarchar(512)NN选项的额外描述(10)question_type表是用来存储题目类型的表。如表4.10question_type表所示:表4.10question_type表字段名称数据类型主键是否为空说明question_type_idint(11)YN题目类型表的主键question_type_namevarchar(64)NN题目类型名称question_type_descriptionvarchar(128)NN题目类型的描述(11)role是用来存储用户角色的表。如表4.11role表所示:表4.11role表字段名称数据类型主键是否为空说明role_idint(11)YN角色表主键idrole_namevarchar(32)NN角色名称role_descriptionvarchar(128)NN角色的描述role_detailvarchar(256)NN角色的详细功能阐述role_page_idsvarchar(256)NN当前角色所能访问的页面的id集合(12)user是用来存储用户基本信息的表。如表4.12user表所示:表4.12user表字段名称数据类型主键是否为空说明user_idvarchar(64)YN主键user_usernamevarchar(64)NN用户名user_nicknamevarchar(64)NN用户昵称user_passwordvarchar(64)NN用户密码user_role_idint(11)NN当前用户角色的iduser_avatarvarchar(512)NN用户的头像地址user_descriptionvarchar(512)NN用户的自我描述user_emailvarchar(128)NN用户邮箱user_phonevarchar(128)NN用户手机号create_timedatetimeNN创建时间update_timedatetimeNN更新时间
第5章详细设计本章介绍程序设计在线考试系统后端接口设计与实现模块的详细设计过程。5.1学生模块详细设计学生模块主要包括注册、登陆、修改密码、模拟刷题、参加考试、查看考试记录、查看错题等。5.1.1注册学生在用户的注册页面通过邮箱和手机号码进行注册。传递的参数如表5.1注册参数表所示:表5.1注册参数表接受参数email邮箱stringpassword密码stringpassword2确认密码stringmobile手机string返回参数id用户idstringusername用户名stringnickname用户昵称stringrole用户角色Integeravatar用户的头像地址stringdescription用户的自我描述stringemail用户邮箱stringphone用户手机号string与接收前端返回的注册信息有关的后端代码建立在UserController类中,部分代码如下:@RestController@Api(tags="UserAPIs")@RequestMapping("/user")publicclassUserController{@AutowiredprivateUserServiceuserService;@PostMapping("/register")@ApiOperation("注册")ResultVO<User>register(@RequestBodyRegisterDTOregisterDTO){ResultVO<User>resultVO;//注册信息的完善,还有唯一性校验没(用户名、邮箱和手机号)已经在user表中通过unique来设置了Useruser=userService.register(registerDTO);if(user!=null){//注册成功resultVO=newResultVO<>(ResultEnum.REGISTER_SUCCESS.getCode(),ResultEnum.REGISTER_SUCCESS.getMessage(),user);}else{resultVO=newResultVO<>(ResultEnum.REGISTER_FAILED.getCode(),ResultEnum.REGISTER_FAILED.getMessage(),null);}returnresultVO;}其中获得前端注册数据的API接口为:/user/register5.1.2登陆学生用户可以通过用户名,密码在首页登陆,传递的参数如表5.2的登陆参数表所示:表5.2登陆参数表接受参数username用户名stringpassword密码string返回参数id用户idstringusername用户名stringnickname用户昵称stringrole用户角色Integeravatar用户的头像地址stringdescription用户的自我描述stringemail用户邮箱stringphone用户手机号stringtokenstring与学生登陆有关的后端代码建立在UserController类中,部分代码如下:@PostMapping("/login")@ApiOperation("根据用户名或邮箱登录,登录成功返回token")ResultVO<String>login(@RequestBodyLoginQologinQo){//这里不用手机号是因为手机号和用户名难以进行格式区分,而用户名和//用户登录ResultVO<String>resultVO;Stringtoken=userService.login(loginQo);if(token!=null){//登录成功resultVO=newResultVO<>(ResultEnum.LOGIN_SUCCESS.getCode(),ResultEnum.LOGIN_SUCCESS.getMessage(),token);}else{//登录失败resultVO=newResultVO<>(ResultEnum.LOGIN_FAILED.getCode(),ResultEnum.LOGIN_FAILED.getMessage(),null);}returnresultVO;}与前端进行交互的API接口为:/user/login5.1.3参加考试学生点击考试参加,与参加考试有关的考试参数列表如表5.3参加考试参数表所示:表5.3参加考试参数表接受参数exam_name考试名称stringexam_description考试描述string返回参数exam_id考试idstringexam_question_ids考试的题目的id序列stringexam_question_ids_radio考试的单选题目的id序列stringexam_question_ids_check考试的多选题目的id序列stringexam_question_ids_judge考试的判断题目的id序列stringexam_score考试的总分数Integerexam_score_radio每个单选题的分数Integerexam_score_check每个多选题的分数Integerexam_score_judge每个判断题的分数Integerexam_time_limit考试时间限制dateexam_start_date考试开始时间dateexam_end_date考试结束时间date@GetMapping("/card/list")@ApiOperation("获取考试列表,适配前端卡片列表")ResultVO<List<ExamCardVo>>getExamCardList(){//获取考试列表卡片ResultVO<List<ExamCardVo>>resultVO;try{List<ExamCardVo>examCardVoList=examService.getExamCardList();resultVO=newResultVO<>(0,"获取考试列表卡片成功",examCardVoList);}catch(Exceptione){e.printStackTrace();resultVO=newResultVO<>(-1,"获取考试列表卡片失败",null);}returnresultVO;}与前端进行交互的API接口为:/exam/card/list@GetMapping("/detail/{id}")@ApiOperation("根据考试的id,获取考试详情")ResultVO<ExamDetailVo>getExamDetail(@PathVariableStringid){//根据id获取考试详情ResultVO<ExamDetailVo>resultVO;try{ExamDetailVoexamDetail=examService.getExamDetail(id);resultVO=newResultVO<>(0,"获取考试详情成功",examDetail);}catch(Exceptione){resultVO=newResultVO<>(-1,"获取考试详情失败",null);}returnresultVO;}与前端进行交互的API接口为:/exam/detail/{id}@PostMapping("/finish/{examId}")@ApiOperation("根据用户提交的答案对指定id的考试判分")ResultVO<ExamRecord>finishExam(@PathVariableStringexamId,@RequestBodyHashMap<String,List<String>>answersMap,HttpServletRequestrequest){ResultVO<ExamRecord>resultVO;try{//拦截器里设置上的用户idStringuserId=(String)request.getAttribute("user_id");//下面根据用户提交的信息进行判分,返回用户的得分情况ExamRecordexamRecord=examService.judge(userId,examId,answersMap);resultVO=newResultVO<>(0,"考卷提交成功",examRecord);}catch(Exceptione){e.printStackTrace();resultVO=newResultVO<>(-1,"考卷提交失败",null);}returnresultVO;}与前端进行交互的API接口为:/exam/finish/{examId}5.1.4查看考试与错题记录学生点击我的考试,与考试记录有关的参数列表如表5.4查看考试参数表所示:表5.4查看考试参数表接受参数exam_join_date参加考试的时间dateexam_time_cost完成考试所用时间dateexam_join_score参与者的实际得分Integerexam_result_level考试结果的等级Integer返回参数exam_join_date参加考试的时间dateexam_time_cost完成考试所用时间dateexam_join_score参与者的实际得分Integerexam_result_level考试结果的等级Integerexam_record_id考试记录的idstringexam_joiner_id考试参与者的用户idstring@GetMapping("/record/list")@ApiOperation("获取当前用户的考试记录")ResultVO<List<ExamRecordVo>>getExamRecordList(HttpServletRequestrequest){ResultVO<List<ExamRecordVo>>resultVO;try{//拦截器里设置上的用户idStringuserId=(String)request.getAttribute("user_id");//下面根据用户账号拿到他(她所有的考试信息),注意要用VO封装下List<ExamRecordVo>examRecordVoList=examService.getExamRecordList(userId);resultVO=newResultVO<>(0,"获取考试记录成功",examRecordVoList);}catch(Exceptione){e.printStackTrace();resultVO=newResultVO<>(-1,"获取考试记录失败",null);}returnresultVO;}@GetMapping("/record/detail/{recordId}")@ApiOperation("根据考试记录id获取考试记录详情")ResultVO<RecordDetailVo>getExamRecordDetail(@PathVariableStringrecordId){ResultVO<RecordDetailVo>resultVO;try{RecordDetailVorecordDetailVo=examService.getRecordDetail(recordId);resultVO=newResultVO<>(0,"获取考试记录详情成功",recordDetailVo);}catch(Exceptione){e.printStackTrace();resultVO=newResultVO<>(-1,"获取考试记录详情失败",null);}returnresultVO;}与前端进行交互的API接口为:/exam/record/list5.2教师模块详细设计5.2.1题目管理教师进行问题管理时,有关的参数列表如表5.5题目管理参数表所示:表5.5题目管理参数表接受参数question_name题目名字stringquestion_score题目分数stringquestion_description题目描述string返回参数question_id题目idstringquestion_name题目名字stringquestion_score题目分数stringquestion_creator_id题目创建者的用户idstringquestion_level_id题目难易度级别Integerquestion_type_id题目类型Integerquestion_category_id题目章节类型Integerquestion_description题目描述stringquestion_option_ids题目的选项id序列stringquestion_answer_option_ids题目的答案id序列stringcreate_time创建时间dateupdate_time更新时间date@PostMapping("/question/create")@ApiOperation("创建问题")ResultVO<String>questionCreate(@RequestBodyQuestionCreateSimplifyVoquestionCreateSimplifyVo,HttpServletRequestrequest){QuestionCreateVoquestionCreateVo=newQuestionCreateVo();//把能拷贝过来的属性都拷贝过来BeanUtils.copyProperties(questionCreateSimplifyVo,questionCreateVo);//设置创建者信息StringuserId=(String)request.getAttribute("user_id");questionCreateVo.setQuestionCreatorId(userId);System.out.println(questionCreateVo);try{examService.questionCreate(questionCreateVo);returnnewResultVO<>(0,"问题创建成功",null);}catch(Exceptione){e.printStackTrace();returnnewResultVO<>(-1,"创建问题失败",null);}}与前端进行交互的API接口为:/exam/question/create5.2.2考试管理老师进行考试管理有关的参数如表5.6考试管理参数表所示:表5.6考试管理参数表接受参数name题目名称stringscore题目分数stringcreator创建者stringlevel题目难度等级Integertype题目类型Integercategory问题章节stringdescription问题描述string@PostMapping("/create")@ApiOperation("创建考试")ResultVO<Exam>createExam(@RequestBodyExamCreateVoexamCreateVo,HttpServletRequestrequest){//从前端传参数过来,在这里完成考试的入库ResultVO<Exam>resultVO;StringuserId=(String)request.getAttribute("user_id");try{Examexam=examService.create(examCreateVo,userId);resultVO=newResultVO<>(0,"创建考试成功",exam);}catch(Exceptione){e.printStackTrace();resultVO=newResultVO<>(-1,"创建考试失败",null);}returnresultVO;}与前端交互有关的API接口为:/exam/create5.3管理员模块详细设计管理员模块包括学生和教师的所有功能和权限,在此不做赘述。
第6章系统测试与评价分析系统测试主要是为了尽早发现系统的一些bug并做修正,使系统正式发布后能够在一种较为稳定的状态下运行。6.1学生模块单元测试6.1.1注册测试注册测试如表6.1的注册测试用例表所示:表6.1注册测试用例表序号用户输入预期的输出结果实际的输出结果1密码与确认密码一致,使用邮箱登陆注册成功,跳转至登陆页面同预期的输出结果2邮箱不为空,密码为空提示密码不能为空同预期的输出结果3邮箱,密码不为空,手机号为空提示手机号不能为空同预期的输出结果4邮箱,密码,手机号不为空,验证码填写错误提示验证码错误同预期的输出结果5手机、密码不为空,邮箱为空提示邮箱不为空同预期的输出结果6密码与确认密码不一致提示两次密码输入不一致同预期的输出结果7用户已注册时再注册提示用户已存在同预期的输出结果6.1.2登陆测试登陆测试表如表6.2的登陆测试用例表所示:表6.2登陆测试用例表序号用户输入预期的输出结果实际的输出结果1账号或密码为空提示账号或密码不能为空同预期的输出结果2账号和密码不一致提示账号或密码不正确同预期的输出结果3账号和密码一致登陆成功,跳转在线考试系统首页同预期的输出结果6.1.3模拟刷题测试模拟刷题测试表如表6.3的模拟刷题测试用例表所示:表6.3模拟刷题测试用例表序号用户输入预期的结果实际的输出结果1选择模拟考试章节,该章节没有题库提示未找到相关题库同预期的输出结果2选择模拟考试章节,该章节有题库进入做题页面同预期的输出结果3做题时未选择答案提示当前题目未作答同预期的输出结果4做题时选择答案进入下一题目同预期的输出结果6.1.4正式考试测试正式考试测试如表6.4的正式考试测试用例表所示:表6.4正式考试测试用例表序号用户输入预期的输出结果实际的输出结果1做题时未选择答案提示当前题目未作答同预期的输出结果2做题时选择答案进入下一题目同预期的输出结果3做题时超时提示已到交卷时间同预期的输出结果6.1.5修改密码测试修改密码测试如表6.5的修改密码测试用例表所示:表6.5修改密码测试用例表序号用户输入预期的输出结果实际的输出结果1旧密码错误或者为空,新密码与确认密码一致提示原密码不正确同预期的输出结果2旧密码正确,新密码与确认密码不一致提示两次密码输入不一致同预期的输出结果3旧密码正确,新密码或确认密码为空提示新密码不能为空同预期的输出结果6.1.6考试记录测试考试记录测试如表6.6的考试记录测试用例表所示:表6.6考试记录用例表序号用户输入预期的输出结果实际的输出结果1选择考试记录显示考试名称,考试得分同预期的输出结果6.1.7错题记录测试错题记录测试如表6.7的错题记录测试用例表所示:表6.7错题记录测试用例表序号用户输入预期的输出结果实际的输出结果1选择我的考试,查看题目记录显示做错的题目,正确答案,你的答案同预期的输出结果6.2教师模块单元测试6.2.1登陆测试登陆测试如表6.8的登陆测试用例表所示:表6.8登陆测试用例表编号用户输入预期的输出结果实际的输出结果1账号或密码为空提示账号或密码不能为空同预期的输出结果2账号和密码不一致提示账号或密码不正确同预期的输出结果3账号和密码一致登陆成功,跳转教师页面首页同预期的输出结果6.2.2题目管理测试题目管理测试如表6.9的错题记录测试用例表所示:表6.9错题记录测试用例表编号用户输入预期的输出结果实际的输出结果1查询:输入题目显示题目信息同预期的输出结果2新增:填写新增题目信息提示操作成功同预期的输出结果3更新:填写修改题目信息提示操作成功同预期的输出结果4删除:选择确认删除提示确定删除?确认之后提示操作成功同预期的输出结果6.2.3创建考试测试创建考试测试如表6.10的创建考试测试用例表所示:表6.10创建考试测试用例表编号用户输入预期的输出结果实际的输出结果1查询:输入考试名称显示考试信息同预期的输出结果2新增:填写新增考试信息提示操作成功同预期的输出结果3修改:填写修改考试信息提示操作成功同预期的输出结果4删除:选择确认删除提示确定删除?确认之后提示操作成功同预期的输出结果6.3管理员模块单元测试6.3.1角色管理测试角色管理测试如表6.11的角色管理测试用例表所示。表6.11角色管理测试用例表编号用户输入预期的输出结果实际的输出结果1查询:输入角色名称显示角色信息同预期的输出结果2新增:填写新增角色信息提示操作成功同预期的输出结果3修改:填写修改角色信息提示操作成功同预期的输出结果4删除:选择确认
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿科护理沟通技巧查房
- 医联体模式下公卫危机的医疗资源整合
- 医联体后勤保障社会化服务
- 医联体内部治理结构优化实践
- 医疗隐私保护违法行为的行政处罚裁量基准
- 心绞痛的药物治疗与护理
- 医疗资源可持续发展框架
- 医疗质量评价中的人文指标构建
- 2025年安全演练培训课件
- 压力性损伤的护理职业团队合作
- 2026年及未来5年中国面粉加工行业市场发展现状及投资方向研究报告
- 女职工特殊保护 政策课件
- 2026年内蒙古建筑职业技术学院单招职业技能考试题库及参考答案详解(新)
- 2026年春季学期德育工作安排方案(德育四表)
- 互联网企业网络安全管理制度(标准版)
- 2026年春节后复工复产安全专题培训
- 2026年春人教PEP版(新教材)小学英语四年级下册(全册)教学设计(附目录)
- 2026内蒙古地质矿产集团有限公司社会招聘65人备考题库含答案详解(培优b卷)
- 2026年渭南职业技术学院单招职业技能考试题库带答案解析
- 智鼎在线测评题库IQT答案
- 1.1时代为我搭舞台(课件)-中职思想政治《心理健康与职业生涯》高教版2023基础模块
评论
0/150
提交评论