李欣倍
摘 要:在實行教考分離之后很多學校為檢驗各不同教師的教學水平和各學生的學習效果往往進行統(tǒng)一的考試(測試),為體現公平性考前往往由各任課教師自行出相當量的試題進行匯總組成題庫,在考試時由計算機隨機抽題進行組卷,本文正是由于這種需要對計算機隨機抽題方法進行探討。
關鍵詞:隨機 抽題 組卷 題庫 服務器 帶寬
中圖分類號:G64文獻標識碼:A文章編號:1003-9082(2019)10-0194-01
目前也有很多關于利用計算機隨機抽題組卷的辦法,有兩種情況,一種是在題庫中組成每套100分的試題若干套,考試時考生從這若干套考題中隨機抽取一套進行考試,該種方法的弊端就是考生抽取到同套試題的內容都是相同的,自由度,靈活度不夠自由;另一種情況就是在題庫中定義好一個考試的范圍,考試試題由考生隨機抽取該范圍內的每小題,比較靈活,本文是基于后者本人在實踐中的一種方法進行探討,其是在服務器端由出題教師定義好試題的范圍,由于受到服務器計算能力、網絡帶寬等因素的制約,這個范圍一般不要定義得太大,實踐中本人在服務器端定義兩倍的題量(服務器端隨機抽題組成200分的試題總量),考生端隨機抽取100分的試題,約250人的考生,一次性同時進行抽題考試,能達到較好的效果。
其一:考試范圍的考慮,抽題組卷時由出卷教師自由定義。
第一章,第二章,第三章,第四章,第五章,第六章,第七章等,以多選框的形式,讓出卷教師選定考試章節(jié)。
其二:基于題型的考慮,題型所占總分的分值由出題教師自定義:
其三:依據設定的考試范圍和題型及題型分值,自動隨機抽題組卷,其實現代碼如下:
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 “抽題失敗,請重試!