在线考试系统设计思路

0.模块数据库

近日对在线考试系统有些想法,因此写下来和你们讨论一下,顺便本身也记录一下这些想法。json

在线考试系统大体有这几部份内容,下面逐一分析这些模块和需求浏览器

 

1.试题库缓存

    建立试题库的意义在于根据知识点建立试题,好比建立一个期中的考试,只须要在试题库中选择知识点12。而期末考试须要选择知识点1234。这样相似将试题分组更有利于试题的重复的利用,建立试卷配置中也能更快的找到试题。服务器

     而后分析一下试题的类型,实际生活中试题类型基本有这几种:单选,判断,多选,填空,问答,做文。前3种题型是能够经过判断自动打分的,后三种只能经过人工阅卷。实际在线考试中不多用到后三种的试题,而且必然消耗大量的人力改卷。因此在这里只考虑单选,判断,多选的考试试题类型。异步

     试题选项和答案Json的形式保存在试题表中的,主要考虑到这些选项并不经常使用也不多关于选项的查询,因此试题表不须要在多余的选项表,试题在编辑的和浏览操做能够经过反序列化json内容。最重要的是当生成试卷的时候这些选项json是要复制起来至关方便,这样避免当试卷生成之后,试题被修改形成试卷逻辑混乱。性能

 

2.试卷配置spa

  这个模块是系统中最重要的模块,配置一张试卷的流程以下   。blog

  • 选择考试学员或者配置为开放试卷让学员自由进入考试(练习考试)
  • 其余选项配置试卷,好比:考试开始时间,结束时间,及格分数线
  • 设置考试引用的题库。
  • 设置大题和分数,好比:第一大题单选10题每题5分,第二大题单选10题每题10
  • 组卷就是将题库的题目填充到大题中,组卷能够分自动组卷,或者手动组卷。
  • 生成试卷是根据组卷配置将每张试卷的试题抽取出来,生成一个JSON结果集合。学员考试时,直接读取这个集合。

(要注意的是,生成的试卷JSON结果集合不能修改可是能够停用试卷,防止学员考过之后的试卷被修改,形成以前的数据和当前的不匹配)内存

 

讨论在线考试系统的性能瓶颈在于,大批量学员同时开始考试时,系统配卷消耗大量的性能。个人处理方式是全部的试卷都预先生成,教师能够选择随机由系统组卷仍是手动组卷。系统组卷设置一个组卷份数好比100份,当1000个学生同时进入考试时,将1000张试卷随机分配一张给学员,生成的份数越多随机率越高.若是教师只想给让全部学员考同一份试卷,只须要手动组一张试卷便可

 

 3.学员

      学员是参与考试的主体,学员经过注册或者是后台导入的方式进入系统。若是是注册还须要对应的审核功能。学员有两种方式参加考试和练习,一种是主动选择这张考卷,一种是被推送这张考卷,只有被推送的学生才能能参加考试。有些比较复杂的系统还会有考试的预先报名。经过审核之后才能获取考试的权限。

     学员的表结构相对简单没什么可讨论的,只是建议学员的主表应该和登陆表分开,学员应该能够支持多种帐号登录,好比注册邮箱、准考证、身份证等登陆方式。

 

 

4.考试过程

      这里咱们从学员进入考试提及,当学员点击进入时,随机分配一个试卷给学员。页面加载试卷的内容。 而后开辟一个内存空间用hash形式保存学员根据“本次考试ID_试题ID”保存学员的本次考试的答题记录,学员每次点击选项,都向服务器提交本题的数据,提交数据时须要带上时间戳,防止先提交的数据后到达。当学员不当心关闭页面,或者电脑死机从新打开浏览器的时候,咱们将缓存中的数据显示在页面上,让学员继续考试。

     改卷是一个异步的操做,后台一个C/s程序实时扫描数据库,查找已完成答卷而且未改卷的试卷,在内存中提取学员的考试数据一一比对,评卷完成之后将内存的答题内容序列化JSON保存起来(相似试题的保存方式,也能够考虑保存成文本文件)。查看试卷时先加载试卷,而后加载学员的答卷内容。

 

5.Api

  Api模块经过REST的方式提供这几个服务。

  •   考试添加学员
  •   查询成绩(批量或者单个)
  •   建立试卷配置
  •  学员得到试卷(被推送试卷)时发邮件通知,并告知考试地址
  •  提供试卷快速访问地址,也就是学员点击这个地址之后输入帐号(或者SSO登陆)直接进入考试页面
相关文章
相关标签/搜索