基于Java技术的考试系统关键点研究

2022-12-25 21:29苏婉怡揣小龙赵国松王煜尧
无线互联科技 2022年18期
关键词:代码页面考试

苏婉怡,揣小龙,赵国松,王煜尧

(吉林农业科技学院,吉林 吉林 130000)

0 引言

随着计算机软件应用技术在高校的普及,线上教育教学模式已成为一种新的教育手段和方法。传统的笔试考试已经难以满足课程考试的需求,线上考试系统成为一种新的考试方法,一种当前高校课程考核的新手段[1]。

线上考试已经是一个成熟的技术领域,考试系统通过在线的方式可以随时随地进行考试,不再受众多因素约束。试卷会根据设置好的参数进行随机组卷,通过极简化的操作流程减少了管理人员不必要的重复操作,后续能够实现自动化处理。

1 系统框架

Spring Boot是基于Spring的全新单体框架,与Spring相比,集成了第三方库配置,使搭建和开发变得更容易,让开发人员更加注重业务模块,增加了功能的多样性[2]。

Spring Cloud是一套当下流行的微服务框架,是Spring Boot的有序集合,将各个独立的Spring Boot系统通过接口间的调用组合起来,形成一个微服务系统[3]。

通过深入分析系统所需的功能,发现使用Spring Cloud框架会更方便。各子系统间粘连性不高,可进行独立的开发,更节约开发成本和时间。

2 数据库设计

首先,对系统功能进行需求分析,做出功能模块。其次,根据功能模块得到所需的各种属性,根据属性做出系统各个功能的表。最后,为避免将多属性写进一张表里出现错误,将其分为多个部分。当有些功能需要共同使用的表的数量超过一个时,使用数据库的左链接可以得到相关信息。

3 系统设计中的关键问题及解决方法

3.1 考试方面

3.1.1 试题模块

题库的导入导出使用的是EasyExcel技术,EasyExcel是Excel的开源项目,在节约内存的条件下支持读写Excel。

导入Excel表格,前端将通过API传值到后端,之后存入数据库。前端即为编写页面,负责将文件的值传到后端。

后端的编写:首先,引入依赖;其次,在controller层写一个接口承接前端传输的数据,读取Excel数据的方法为“ExcelUtil.readExcel(file)”;随后通过在service 接口层中写入这个方法的接口,实现类里有存入题目的方法体;最后,在dao数据层使用实现类中的方法体和数据的添加代码,可以将题目存入数据库中进行使用。

3.1.2 试卷模块

本系统具有自动组卷功能,在此功能中使用了遗传算法。遗传算法借鉴了达尔文进化论中自然选择和遗传学中基因突变、基因重组原理的方法[4]。

(1)设试题库中有m道题,将这m道题编为A1,A2,A3……,当A1为1时该题被选中,A1为0时则该题未被选中。需要注意的是,编码时应将相同类型的题目放在一起。同时,为了避免试卷中出现重复的知识点,各知识点在每条染色体中的编码必须相同。

(2)生成随机初始体Z(0),设群体规模为H,根据经验或试验数据,在100~250中确定适应度数。

(3)将个体按照适应度逐一递减的顺序进行排序,如个体适应度值没达到规定范围,则对该个体进行淘汰,并从库中选择新的个体替代。

(4)相同题型整段进行交叉。令RANDOM(N)为0,n的随机数i(N为题型数,i为整数),若交叉条件满足RANDOM(N)

(5)题目的适应度值达到预先设定值时,在输出最优解后,算法停止。

3.1.3 防切屏模块

为了控制切屏次数,首先,要在Vue生命周期的mounted里面添加一个监听事件visibilitychange;其次,为事件添加一个函数,在此函数中获取页面元素的状态document.VisibilityState;最后,调用后台接口,获取在考试管理中是否设置了开启切屏功能以及可切屏的最大次数和剩余次数的数据。

Window.addEventListener(“visibilitychage”, this.pageHidden)

上述即为添加事件监听页面显示与隐藏事件的代码,当页面的内容变得可见或者被隐藏时,就会触发visibilitychange事件[5]。

3.1.4 答题模块

本系统采用前后端分离的架构实现该功能,当用户答完一道题后,通过API传到后端。使用Ajax中的get,post,put等方法传递参数,参数通常是通过juery或者是body体传递。

数据传到后端业务层后,先经由controller层,该层是控制类,是前端请求的入口,负责前后端的交互一层。随后到达service业务层,该层包括了service接口和serviceImpl实现类,其中service接口可实现接口与实现类的解耦,代码的调用先于代码的实现,可以先写好接口,用于controller层的调用,后续再到实现类去实现与数据库交互接口,编写方法体。最后在dao层,该层Java与数据库连接,使用实现类中的方法体和具体数据库添加、修改、删除的代码,即可将用户的答案存入数据库中。

3.1.5 时间模块

规定时间收卷是每场考试的结果,线上考试同样也不例外。在Java中实现收卷功能主要应用了具有定时调用、能固定时间执行功能的Timer和TimerTask类。

首先,定义一个Run方法中包含任务代码的TimerTask的子类;其次,要实例化Timer类,创建计时器后台线程,将任务对象(new RemindTask () )实例化;最后,用schedule方法指定执行计划,用一个参数delay延迟执行的毫秒数,即在delay毫秒后第一次执行来表示TimerTask对象,另一个参数period则是重复执行的时间间隔,表示开始执行前的延时时间。

3.1.6 判卷模块

判卷的本质是题库中的正确答案与提交答案的对比。这个模块在bean中实例化对象,后端controller层编写判卷的接口。调用题库系统先遍历题库,找到同一个题,然后使用一个增强for循环,里面用if语句判断题库中的正确答案与提交的答案是否相同,相同则加分,不相同则不加分。一直重复这两个操作完成所有题。前端显示分数的接口来承接后端接口,前端即可显示用户得分。

3.2 用户方面

3.2.1 密码模块

考试周期较长是考试的特征。每个学生注册账号,难免会出现状况,所以编写密码模块。

用户需要提交账号和新密码,前端接收到信息,通过接口将参数传给后台controller层。给controller类的方法创建外来资源访问的名称和相对应的请求方法,接收到前台传来的账号和密码参数值后,生成6位随机数,并使用MD5方法对前台传来用户输入的密码进行加密处理,随后再加盐值生成出最终数据库所需存储的用户密码,将用户新密码的明码和随机生成的6位盐值存储于数据库中,最后把经过加密的密码加入map。

3.2.2 用户登录模块

为避免在考试过程中出现切换客户端的情况,要保证用户登录的唯一性,以确保考试不会出现多人登录同一个账号,进行多人答同一套试卷的行为,即一端登录另一端便会强制下线。考试中每个人都需要一个Session,人数越多对Session的需求也越多,而大量Session存在服务器上会占用许多内存,容易使服务器崩溃而导致系统无法使用,因此使用Cookie而非Session。

登录时以用户的id为key在缓存中保存时间戳,在Cookie中以一个全局变量为key保存时间戳。Cookie保存在浏览器本地,缓存保存在服务端。用户在另一个终端登录,会触发相同的代码,更新在服务端的缓存key相同,时间戳value就会发生变化。

接下来在每个页面的引入功能写入功能js文件即可,写一个实现每次载入页面都会定时器10执行的查询后台的flag对应的缓存value,并与本地Cookie中的时间戳相比较,如果不一致,则说明用户在别的客户端登录过,可以清空Cookie强制退出,由于后一次登录更改服务器缓存的时间戳,所以前一次的登录会被强制退出。

3.3 资源管理方面

3.3.1 数据模块

首先,在前端HTML中添加视频上传的页面,在js中添加上传视频/图片的方法和组件,视频/图片上传的前端执行便完成。其次,新建一个文件,写视频播放的页面,再写接口将前端的值传到后端,在后端controller层写两个接口。随后,在service业务层中,写service接口和serviceImpl实现类。需要添加这两个数据库视频表和图片的实体类,这里的变量必须和数据库的字段一样,否则会报错。最后,在dao层写用于后端链接数据库增、删、改、查等操作的接口,视频便能存入数据库。

3.3.2 视频模块

编写前端代码。写出进度条模型用代码,运行代码检查是否正确,确认无误后将写完的代码放进项目中,并且修改进度条下数据的获取途径,改为request。

写两个接口,一个用于获取进度条数据,一个用于刷新进度条数据。前端写好这两个接口是实现前后端数据交互的过程之一。

该项目中的进度条主要用来体现观看视频的进度,而观看视频进度主要代码逻辑在于观看的时间和视频总时间的比较,进度条的数据计算方式是:百分数=(观看的时间/视频的总时间)×100%。在controller层中新增两个接口接前端,随后在service业务层中,写service接口和serviceImpl实现类。最后在dao层,这层Java与数据库连接,将进度存入数据库中,下次观看时直接从上次观看处继续播放。

4 结语

线上教育已经成为一种新兴的辅助教育模式,为了更充分地发挥线上教育优势,本系统结合线上教育的实际情况,使用前后端分离的Spring Cloud框架做了线上考试系统。数据处理使用Redis缓存,MySQL储存用户信息,保证学习和考试功能的正常运行。在考试系统实现过程中,对关键问题进行分析,并确定解决问题相关技术和方法,例如:使用了遗传算法来自动组卷、广度优先遍历题库,哈希算法来处理密码等,这些算法和技术为线上辅助教学及考试提供保障。虽然为系统顺利开发实现做了充足的准备,也具备了系统开发实现的条件,但是这些算法都只是针对客观题设计实现,无法完成主观题相关解答。

猜你喜欢
代码页面考试
刷新生活的页面
创世代码
创世代码
创世代码
创世代码
网站结构在SEO中的研究与应用
浅析ASP.NET页面导航技术