最近需要实现一个子模块,在线考试系统,写下来和大家讨论一下,顺便自己也记录一下这些想法。
1、题库管理
创建试题库的意义在于根据知识点创建试题,比如创建一个期中的考试,只需要在试题库中选择知识点1,2。而期末考试需要选择知识点1,2,3,4。这样类似将试题分组更有利于试题的重复的利用,创建试卷配置中也能更快的找到试题。
然后分析一下试题的类型,实际生活中试题类型基本有这几种:单选,判断,多选,填空,解答,作文。前3种题型是可以通过判断自动打分的,后三种只能通过人工阅卷。实际在线考试中很少用到后三种的试题,并且必然消耗大量的人力改卷。所以在这里只考虑单选,判断,多选的考试试题类型。
2、试卷配置
这个模块是系统中最重要的模块,配置一张试卷的流程如下 。
- 选择考试学员或者配置为开放试卷让学员自由进入考试(练习考试)
- 其他选项配置试卷,比如:考试开始时间,结束时间,及格分数线
- 设置考试引用的题库。
- 设置大题和分数,比如:第一大题单选10题每题5分,第二大题单选10题每题10分
- 组卷就是将题库的题目填充到大题中,组卷可以分自动组卷,或者手动组卷。
- 生成试卷是根据组卷配置将每张试卷的试题抽取出来,生成一个集合。学员考试时,直接读取这个集合。
3、学员
学员是参与考试的主体,学员通过前台注册的方式进入系统。学员有两种方式参加考试和练习,一种是主动选择这张考卷,这种一般是一些免费享受的功能,一种是被推送这张考卷,这种一般是参加直播课或者线下课的学生,或者一些体验活动。有些比较复杂的系统还会有考试的预先报名。通过审核以后才能获取考试的权限。
4、考试过程
这里我们从学员进入考试说起,当学员点击进入时,随机分配一个试卷给学员。页面加载试卷的内容。 然后开辟一个内存空间用hash形式保存学员根据“本次考试ID_试题ID”保存学员的本次考试的答题记录,学员每次点击选项,都向服务器提交本题的数据,提交数据时需要带上时间戳,防止先提交的数据后到达。当学员不小心关闭页面,或者电脑死机重新打开浏览器的时候,我们将缓存中的数据显示在页面上,让学员继续考试。
改卷是一个异步的操作,后台一个C/S程序实时扫描数据库,查找已完成答卷并且未改卷的试卷,在内存中提取学员的考试数据一一比对,评卷完成以后将内存的答题内容保存起来(类似试题的保存方式,也可以考虑保存成文本文件)。查看试卷时先加载试卷,然后加载学员的答卷内容。
Comments