李欣倍
摘 要:在实行教考分离之后很多学校为检验各不同教师的教学水平和各学生的学习效果往往进行统一的考试(测试),为体现公平性考前往往由各任课教师自行出相当量的试题进行汇总组成题库,在考试时由计算机随机抽题进行组卷,本文正是由于这种需要对计算机随机抽题方法进行探讨。
关键词:随机 抽题 组卷 题库 服务器 带宽
中圖分类号:G64文献标识码:A文章编号:1003-9082(2019)10-0194-01
目前也有很多关于利用计算机随机抽题组卷的办法,有两种情况,一种是在题库中组成每套100分的试题若干套,考试时考生从这若干套考题中随机抽取一套进行考试,该种方法的弊端就是考生抽取到同套试题的内容都是相同的,自由度,灵活度不够自由;另一种情况就是在题库中定义好一个考试的范围,考试试题由考生随机抽取该范围内的每小题,比较灵活,本文是基于后者本人在实践中的一种方法进行探讨,其是在服务器端由出题教师定义好试题的范围,由于受到服务器计算能力、网络带宽等因素的制约,这个范围一般不要定义得太大,实践中本人在服务器端定义两倍的题量(服务器端随机抽题组成200分的试题总量),考生端随机抽取100分的试题,约250人的考生,一次性同时进行抽题考试,能达到较好的效果。
其一:考试范围的考虑,抽题组卷时由出卷教师自由定义。
第一章,第二章,第三章,第四章,第五章,第六章,第七章等,以多选框的形式,让出卷教师选定考试章节。
其二:基于题型的考虑,题型所占总分的分值由出题教师自定义:
其三:依据设定的考试范围和题型及题型分值,自动随机抽题组卷,其实现代码如下:
include(“zsksj/”.$kemu.”/”.$nianji.”/randmsg.php”); //随机卷组卷信息文件,记录题型‘题型分值,考试范围内所有试题ID号
$txnumarr=explode(‘;,$txnum);//
$txfsarr=explode(‘;,$txfs);//题型分值数组
$txfzarr=explode(‘;,$txfz);//
$txansnumarr=explode(‘;,$txansnum);
for($l=0;$l<$inum;$l++){//$inum为题型数
$txn=0;$idtmp=array();$f=0;$tmpfz2=array();
if($sjtype==2){//当为随机卷时
$temp=array(); $start=1;
if($txnumarr[$l]>$txfsarr[$l]){
$end=$txfsarr[$l];}else{$end=$txnumarr[$l];}
if($itemarr[$l]==danxuan|| $itemarr[$l]==panduan){
if(?oor($txfsarr[$l]/4)<1){$start=1;}else{
$start=?oor($txfsarr[$l]/4);}
}
if($itemarr[$l]==duoxuan){
if(?oor($txfsarr[$l]/5)<1){$start=1;}else{
$start=?oor($txfsarr[$l]/5);}
}
for($i=0;$i<$txnumarr[$l];$i++){
$temp[$i]=$i;
}
$f=0; $tmpfz=explode(‘,,$txfzarr[$l]);
$tmpansnum=explode(‘,,$txansnumarr[$l]);
//echo “
题型:”.$itemarr[$l].” start=”.$start.”end=”.$end.”题型分值:”.$txfsarr[$l].”
”;
for($i=$start;$i<=$end;$i++){
for($j=0;$j<$end;$j++){
$s=0;$idnum=array();
if($i==1){
$idnum[0]=array_rand($temp,$i);
}else{
$idnum=array_rand($temp,$i);
}
for($k=0;$k<$i;$k++){
$idtmp[$k]=$idarr[$l][$idnum[$k]];
$tmpfz2[$k]=$tmpfz[$idnum[$k]];
$s=$s+$tmpfz2[$k]*$tmpansnum[$idnum[$k]];
}
//echo “ S=”.$s.” ”;
if($s==$txfsarr[$l]){$f=1;break;}
}
if($f==1){
for($k=0;$k $fzarr2[$p+$k]=$tmpfz2[$k]; } $txn=count($tmpfz2); $p=$p+$txn; break; } } if($f==0){echo “抽题失败,请重试!