
| 出版日期:2002-07-01 总期号:474 本年期号:24 |
|
让我们的题库更通用
孙文力 现在的很多考试采用无纸化考试,用计算机自动提取题库中的试题,效果不错。后来我们尝试着让学生自己使用题库进行自测练习,在这个过程中发现了一些问题,此文针对该问题提供了解决办法,供同行参考。 发现问题 我们试着将考试时使用的题库公布给学生,在组织测试时发现:一些学生答题之快令人惊叹!他们真的掌握得如此熟练吗?问问他们刚才做的题目及答案的具体内容是什么,怎么自己选了什么都说不出来呢?后来才知道是学生背了题库答案,因为题库中每题的答案选项都是固定的,他们只要记住相应的A、B、C、D就行了,看来我们需要对题库进行改进。 解决思路 我们需要让学生掌握一个知识点,最好的方法就是让答案随机地出现在A、B、C、D的不同位置上,这样对于同一题目,每次的答案选项都不同。 实施方法 以下是使用FoxPro2.5B实现上述思路的方法和部分程序。
图1 1、首先改建题库的结构(tiku.dbf),如图1,将题目和4个选项分别存在不同的字段中,另设一个数值型字段XT存储是否抽取该题的标志,值为0时表示没有抽取该题,值为1~24时,表示抽取了该题,同时其数值又与下表中对应的XT值共同确定该题4个选项的排列顺序。 2、另建一个表(xu.dbf)存储4个选项的排列顺序,如图2。
图2 3、以下是如何抽题、判断对错的源程序: set talk off clear all tm_no=1 use tiku &&&&打开原始题库准备抽题 repl all xt with 0 &&&&将抽题标志全部置0(未抽取) count to tms &&&&统计题库中的题目数量 do while tm_no〈=5 &&&&为简要说明我们抽5个题目 th=int(rand()*tms+1) &&&&随机产生一个1~题目数量之间的数(记录号) go th &&&&指针指向上一步产生的记录号 if xt=0 &&&&如果xt=0说明此题未被抽取 xh=int(rand()*24+1) &&&&产生一个1~24之间的数 repl xt with xh &&&&将上一步产生的数写入XT字段 tm_no=tm_no+1 &&&&抽取题目数加1 endif loop &&&&如果已被抽取则重新抽题 enddo copy to kstm for xt〈〉0 &&&&将抽取的题目拷贝生成考试题库 sele 1 use kstm &&&&在第一区打开考试题库 index on xt tag xt &&&&按XT 建立索引 use xu in 2 order tag xt &&&&在第二区打开选项顺序表 set relation to xt into xu &&&&将考试题库与选项顺序库按XT字段建立关联 store 1 to xuanze,js do while .not.eof() clear @ 1,5 say "第"+ltrim(STR(JS))+"题" &&&&显示题号 ? tm &&&&显示题目内容 aa=b-〉ans_a @row()+3,1 prom '\〈A '+&&aa &&&&显示A选项内容 bb=b-〉ans_b @row()+2,1 prom '\〈B '+&&bb &&&&显示B选项内容 cc=b-〉ans_c @row()+2,1 prom'\〈C '+&&cc &&&&显示C选项内容 dd=b-〉ans_d @row()+2,1 prom '\〈D '+&&dd &&&&显示D选项内容 menu to xuanze &&&&以菜单形式接收学生答案 do case case xuanze=1 &&&&如果学生选择A daan=b-〉ans_a &&&&变换成选择了第2区ans_A对应的值 case xuanze=2 &&&&如果学生选择B daan=b-〉ans_b &&&&变换成选择了第2区ans_B对应的值 case xuanze=3 &&&&以下类似以上操作 daan=B-〉ans_c case xuanze=4 daan=b-〉ans_d endcase if daan='ans_1' @15,15 say "完全正确" &&&&变换后学生选中ans_1字段,则显示正确 else @15,15 say '错!答案为:'+ans_1 &&&&否则显示正确选项 endif wait ' 按任意键做下一题 ' js=js+1 skip enddo close all clear return |
|||||||||||||||||||||||