在线考试系统设计思路

摘要:
在线考试系统大致包括这些部分,下面逐一分析这些模块和需求。1.创建试题库的意义是根据知识点创建试题。例如,要创建期中考试,只需要在试题数据库中选择知识点1和2。在实际的网上考试中,后三种题型很少使用,换卷子难免会耗费大量人力。

0.模块

近日对在线考试系统有些想法,所以写下来和大家讨论一下,顺便自己也记录一下这些想法。

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

 在线考试系统设计思路第1张

1.试题库

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

     然后分析一下试题的类型,实际生活中试题类型基本有这几种:单选,判断,多选,填空,问答,作文。前3种题型是可以通过判断自动打分的,后三种只能通过人工阅卷。实际在线考试中很少用到后三种的试题,并且必然消耗大量的人力改卷。所以在这里只考虑单选,判断,多选的考试试题类型。

     试题选项和答案Json的形式保存在试题表中的,主要考虑到这些选项并不常用也很少关于选项的查询,所以试题表不需要在多余的选项表,试题在编辑的和浏览操作可以通过反序列化json内容。最重要的是当生成试卷的时候这些选项json是要复制起来相当方便,这样避免当试卷生成以后,试题被修改造成试卷逻辑混乱。

 

2.试卷配置

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

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

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

 

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

 

 3.学员

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

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

 

 

4.考试过程

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

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

 

5.Api

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

  •   考试添加学员
  •   查询成绩(批量或者单个)
  •   创建试卷配置
  •  学员获得试卷(被推送试卷)时发邮件通知,并告知考试地址
  •  提供试卷快速访问地址,也就是学员点击这个地址以后输入账号(或者SSO登录)直接进入考试页面

 

 

 

免责声明:文章转载自《在线考试系统设计思路》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSS文字两端对齐netty源码-server端绑定端口流程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

kubelet 配置管理 (一)

Kubelet解释说,首先,Kubelet的运行环境是Kubernets集群中节点上的每个工作节点都需要运行Kubelet来与ApiServer kubeadmjoin进程通信。如果您使用kubeadm集群管理工具来安装集群,政府提供了两种方法来使用共享令牌apiserver address:port(特定命令格式:kubeadmjoinapiserver...

微信小程序中使用Vant Weapp的ActionSheet上拉菜单出现的样式问题

以下修改的源码均在action-sheet组件中。在index.wxss:2.下方的取消按钮不居中,通过审查元素发现它的宽带已经超出了手机屏幕的宽度,出现的滚动条导致的,具体什么原因导致暂时不知,解决方案是给.van-action-sheet__cancel添加样式box-sizing:border-box可解决。在index.wxss:.van-actio...

如何在linux下安装idea

[通过正式安装包安装]http://www.jetbrains.com/在官方网站上下载相应版本。终极旗舰社区版本,将其解压缩到本地对应目录,然后执行/idea.sh命令。安装后,可以在启动程序中找到创意图标。...

MySQL学习笔记:字符串前后补全0

遇到一个要求:如果位数小于6,则需要使用函数LPAD()和RPAD()自动完成6位。LPAD使用字符串padstr填充并完成左侧的str,直到其长度达到len个字符,并返回str。...

echarts折线图 鼠标移入改变小点显示样式

=undefined){res+=nameList[i].seriesName+':'+nameList[i].data+'%'+''}}res=res.split;returnres[0]+''+res[1];}}echarts折线图的鼠标移动上去小点显示样式修改tooltip:{trigger:'axis',formatter:function{varr...

Sublime Text3注册激活和部分配置

此时,我们可以输入要安装的插件包ConvertToUTF85。设置中文对齐方式、字体等//设置默认代码“default_encoding”:“UTF-8”,//显示代码“show_encoding”:true,//显示行号“show_line_endings”:true,//设置字号“font_size”:14,//设置字体对齐方式“font_options...