ccidnet????

出版日期:2002-07-01 总期号:474 本年期号:24

本期导读
热点聚焦
零组件
PC天地
数码与外设
软件.net
专题
社会培训
教育信息化
读者俱乐部
让我们的题库更通用

孙文力

  现在的很多考试采用无纸化考试,用计算机自动提取题库中的试题,效果不错。后来我们尝试着让学生自己使用题库进行自测练习,在这个过程中发现了一些问题,此文针对该问题提供了解决办法,供同行参考。


  发现问题


  我们试着将考试时使用的题库公布给学生,在组织测试时发现:一些学生答题之快令人惊叹!他们真的掌握得如此熟练吗?问问他们刚才做的题目及答案的具体内容是什么,怎么自己选了什么都说不出来呢?后来才知道是学生背了题库答案,因为题库中每题的答案选项都是固定的,他们只要记住相应的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