考试系统案例之 -- 随机生成考题

问题背景

应用 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:

http://localhost:6868/demo/reportJsp/showInput.jsp?sht=%2Finput%2FANS_Test.sht&ks_user=monkey1&exam_names= 产品测试 2

考题内容如下:

切换其他考试人,考试人为 monkey2,考试题同样为“产品测试 2”的 url:

http://localhost:6868/demo/reportJsp/showInput.jsp?sht=%2Finput%2FANS_Test.sht&ks_user=monkey2&exam_names= 产品测试 2

考试内容已经与前面的考试人不同。

录入答案并提交后,表示整个过程考试完成。

实际的在线考试需要搭建完整的考试系统,其中还包括用户登录、根据权限查看考试列表、查看考试成绩、考过的不允许立即再考、考试提醒、超时自动提交、试卷评阅等等功能和流程。填报表可以嵌入在涉及到数据采集的任何环节,只需要根据需求选择合适的嵌入位置,其他的就是细节的做法问题了。

比如,定时提交可以参考 搞定填报表定时提交

在填报表中使用会话变量可以参考 填报表如何获取外部参数(如登录账号信息)

要还是不会做怎么办?可以随时咨询支持人员(企业 QQ:800025723)啊

更多填报相关问题请查看:填报相关问题分类导航
* 填报表能不能像 word 那样定时自动保存?
* 行式填报表轻松搞定流水号
* 巧用标志字段实现填报数据的暂存与锁定
* 数据填报修改时如何增加操作人员信息
* 业务填报数据及时入库
* 填报流水号,缺省表达式设置