基于随机抽题组卷网络考试方法的实现与实践

2019-10-21 05:59李欣倍
中文信息 2019年10期
关键词:题库服务器

李欣倍

摘 要:在实行教考分离之后很多学校为检验各不同教师的教学水平和各学生的学习效果往往进行统一的考试(测试),为体现公平性考前往往由各任课教师自行出相当量的试题进行汇总组成题库,在考试时由计算机随机抽题进行组卷,本文正是由于这种需要对计算机随机抽题方法进行探讨。

关键词:随机 抽题 组卷 题库 服务器 带宽

中圖分类号: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 “

抽题失败,请重试!

”;

exit();}

//print_r($fzarr2);

}else{ if($l>0){$txn=count($idarr[$l-1]);}

$p=$p+$txn; $n=count($idarr[$l])-1;

$idtmp=array_?ll(0,$n+1,0);

$fztmp=array_?ll(0,$n+1,0);

$fztmp2=array_?ll(0,$n+1,0);

$indexarr=range(0,$n); //产生序号数组

shuf?e($indexarr); //产生随机序号

for($j=0;$j<=$n;$j++){

$idtmp[$j]=$idarr[$l][$indexarr[$j]];

if(@$fzarr[$p+$indexarr[$j]]){

$fzarr2[$p+$j]=$fzarr[$p+$indexarr[$j]];

}else{$fzarr2[$p+$j]=;}

}}

$idarr3[$l]=implode(“,”,$idtmp);

$idarr2[$l]=$idtmp;

}

$temp=explode(“/”,$path);

$sjname=$temp[count($temp)-1];

$sjname=str_replace(“.php”,””,$sjname);

$fn=$sjname;

date_default_timezone_set(‘PRC);

$now=date(‘Y-m-d H:i:s,time());

$sql=”update “.$banji.” set shijuanname=”.$sjname.”,page=”.implode(“;”,$idarr3).”,shijuanid=”.$shijuanid.”,?rst=”.$now.”,fenzhistr=”.implode(‘,,$fzarr2).” where id=”.$stu_id;

$f=opendatabase($nianji,$sql,1);

if(! $f){echo “抽题失败,请重试!”; exit();}

因資金制约本人利用自己的家庭电脑,WINDOWS7系统作为服务器,在校园局域网总带宽100M分配到学生机房的带宽约为50M, 本人实际中进行过不同科目的几次每次250人左右的考生同时进行网络考试,总体达到较好的效果,该算法不足之处是不能很好的实现每题进行均匀随机抽题的概率。

猜你喜欢
题库服务器
“勾股定理”优题库
“轴对称”优题库
“轴对称”优题库
通信控制服务器(CCS)维护终端的设计与实现
“整式的乘法与因式分解”优题库
中国服务器市场份额出炉
得形忘意的服务器标准
计算机网络安全服务器入侵与防御
服务器操作系统可信加固技术研究
职业技能鉴定国家题库技能实训项目研讨会举行