问题背景
应用IT技术建成题库,并基于题库随机抽取试题组卷,现在已经是实现考试规范化和科学化的重要手段了。实际应用中,随机抽题也能避免多人串题等作弊行为,有效督促考生主动学习,真正达到考试的原本目的。
目前,随机抽题考试主要用在在线考试,而且是随抽随考。比如常见的驾照考试,理论考试都是上机从题库中随机抽题考试,彰显了考试的公平、公正、公开。再如,企事业单位内部阶段性或针对某些重要文件的考试考核,也经常会用到随机抽题考试。
问题分析
针对“随机生成一套在线考试试题”这个问题,有两个核心需求:
另外,对于客观题,其实还应该有能自动评分的功能。
那么,这些需求怎么还和报表工具发生关系了呢?这是因为:
1、在线考试的试题,其实就是可填报的报表,俗称填报表;
2、随机按需抽题,能不能抽出来就看你报表数据集的处理能力了。
解决方案
对多数报表工具来说,支持填报不是问题,关键的是实现随机抽题的能力如何。很多工具或许能搞,但基本也都很麻烦,几乎清一色需要自定义类。
那么润乾报表呢?
当然可以轻松搞定!
下面,我们就以一套由单选、多选、判断题组成的试卷为例看看润乾报表是如何轻松解决的:
要求:从题库中随机抽取7道单选、7道多选、6道判断题,每题后提供由考生录入答案的入口。效果如下(橙色底色的格子用于录入答案)
题库结构如下
包括所属考试类别、考题上传人、考试时间、考题类型、题目、分值、选项等等。
具体做法:
这里我们选取行式填报表,按考题类型依次呈现。
重点!!!涉及到随机抽题,所以我们采用集算器脚本。如果不用,那就像前面说的会很麻烦,需要借助复杂的自定义或存储过程各种临时表实现。集算器脚本实现就简单很多,如下图所示:
其中:
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
考试内容已经与前面的考试人不同。
录入答案并提交后,表示整个过程考试完成。
实际的在线考试需要搭建完整的考试系统,其中还包括用户登录、根据权限查看考试列表、查看考试成绩、考过的不允许立即再考、考试提醒、超时自动提交、试卷评阅等等功能和流程。填报表可以嵌入在涉及到数据采集的任何环节,只需要根据需求选择合适的嵌入位置,其他的就是细节的做法问题了。
比如,定时提交可以参考:http://c.raqsoft.com.cn/article/1534475614440
在填报表中使用会话变量可以参考:http://c.raqsoft.com.cn/article/1534475589399
要还是不会做怎么办?可以随时咨询支持人员(企业QQ:800025723)啊
[平1]tit的定义?