考试系统案例之 -- 随机生成考题
问题背景
应用 IT 技术建成题库,并基于题库随机抽取试题组卷,现在已经是实现考试规范化和科学化的重要手段了。实际应用中,随机抽题也能避免多人串题等作弊行为,有效督促考生主动学习,真正达到考试的原本目的。
目前,随机抽题考试主要用在在线考试,而且是随抽随考。比如常见的驾照考试,理论考试都是上机从题库中随机抽题考试,彰显了考试的公平、公正、公开。再如,企事业单位内部阶段性或针对某些重要文件的考试考核,也经常会用到随机抽题考试。
问题分析
针对“随机生成一套在线考试试题”这个问题,有两个核心需求:
要能考,也就是能让考生填答案,体现可填报可提交的功能(又不能靠意念提交入库,哈哈);
要能随机抽,不同人不同考题;同时也要能按要求随机抽,不能一套题只有判断、一套只有选择,必须难易均衡,不能让考生碰运气。
另外,对于客观题,其实还应该有能自动评分的功能。
那么,这些需求怎么还和报表工具发生关系了呢?这是因为:
1、在线考试的试题,其实就是可填报的报表,俗称填报表;
2、随机按需抽题,能不能抽出来就看你报表数据集的处理能力了。
解决方案
对多数报表工具来说,支持填报不是问题,关键的是实现随机抽题的能力如何。很多工具或许能搞,但基本也都很麻烦,几乎清一色需要自定义类。
那么润乾报表呢?
当然可以轻松搞定!
下面,我们就以一套由单选、多选、判断题组成的试卷为例看看润乾报表是如何轻松解决的:
要求:从题库中随机抽取 7 道单选、7 道多选、6 道判断题,每题后提供由考生录入答案的入口。效果如下(橙色底色的格子用于录入答案)
题库结构如下
包括所属考试类别、考题上传人、考试时间、考题类型、题目、分值、选项等等。
具体做法:
设计表样
这里我们选取行式填报表,按考题类型依次呈现。
根据行式填报表规则,将第 5/6 行所有单元格设置为数值格。
将 A5:H6 多有单元格设置不可编辑(仅 I 列允许编辑以便录入答案)避免改题
设置数据处理(来源)
重点!!!涉及到随机抽题,所以我们采用集算器脚本。如果不用,那就像前面说的会很麻烦,需要借助复杂的自定义或存储过程各种临时表实现。集算器脚本实现就简单很多,如下图所示:
其中:
B1:根据考试题目,查询出所有的(从模拟角度出发,不考虑海量题库,假设可以全部读入内存)考题;
C1:单独查下考题和时间;
A3:过滤出所有的判断题;
B3:过滤出所有的单选题;
C3:过滤出所有的多选题;
A4:获取考题类型的总题数,用于确定抽取考题的位置。比如判断类总题数是 100,要求抽取 7 题,我们在 1-100 内随机产生 7 个随机数,对应到 100 条记录按位置取出即可,其他类型以此类推。
A5-C7:随机获取 7 个数值(即考题记录位置)存放在 B4 序列;
A8:判断只抽 6 题,所以我们从 B4 去掉一个位置;
A9:按位置分别抽取判断、单选及多选题记录,并赋值给 exam_from 对象(即随机抽取的所有考题);
定义单元格表达式 (字段名称)
B3:tit.EXAM_TIME
E3:tit.EXAM_NAME
A5:exam_from.EXAM_TYPE
B5:EXAM_CONTENT
C5:EXAM_SCORE
D5:EXAM_A
E5:EXAM_B
F5:EXAM_C
G5:EXAM_D
H5:EXAM_E
I5:可不设置,按照“答案”为字段名采集数据
设置数据处理(回填考生提交的答案)
其中:
B1:给采集的 tit[平 1] 对象增加考试人数据;
A2:tit 对象和采集的答案 exam 对象做关联;
B2:new 出包含考题信息、答案及考试人的数据对象;
C2:为提交对象增加是否已答卷和是否已评卷的状态;
D2:执行提交,将采集答案信息提交到答题库表存放;
预览效果
当考试人为 monkey1,考试为“产品测试 2”的 url:
考题内容如下:
切换其他考试人,考试人为 monkey2,考试题同样为“产品测试 2”的 url:
考试内容已经与前面的考试人不同。
录入答案并提交后,表示整个过程考试完成。
实际的在线考试需要搭建完整的考试系统,其中还包括用户登录、根据权限查看考试列表、查看考试成绩、考过的不允许立即再考、考试提醒、超时自动提交、试卷评阅等等功能和流程。填报表可以嵌入在涉及到数据采集的任何环节,只需要根据需求选择合适的嵌入位置,其他的就是细节的做法问题了。
比如,定时提交可以参考 搞定填报表定时提交
在填报表中使用会话变量可以参考 填报表如何获取外部参数(如登录账号信息)
要还是不会做怎么办?可以随时咨询支持人员(企业 QQ:800025723)啊
更多填报相关问题请查看:填报相关问题分类导航
* 填报表能不能像 word 那样定时自动保存?
* 行式填报表轻松搞定流水号
* 巧用标志字段实现填报数据的暂存与锁定
* 数据填报修改时如何增加操作人员信息
* 业务填报数据及时入库
* 填报流水号,缺省表达式设置
👍