李欣倍
摘 要:在實(shí)行教考分離之后很多學(xué)校為檢驗(yàn)各不同教師的教學(xué)水平和各學(xué)生的學(xué)習(xí)效果往往進(jìn)行統(tǒng)一的考試(測(cè)試),為體現(xiàn)公平性考前往往由各任課教師自行出相當(dāng)量的試題進(jìn)行匯總組成題庫,在考試時(shí)由計(jì)算機(jī)隨機(jī)抽題進(jìn)行組卷,本文正是由于這種需要對(duì)計(jì)算機(jī)隨機(jī)抽題方法進(jìn)行探討。
關(guān)鍵詞:隨機(jī) 抽題 組卷 題庫 服務(wù)器 帶寬
中圖分類號(hào):G64文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1003-9082(2019)10-0194-01
目前也有很多關(guān)于利用計(jì)算機(jī)隨機(jī)抽題組卷的辦法,有兩種情況,一種是在題庫中組成每套100分的試題若干套,考試時(shí)考生從這若干套考題中隨機(jī)抽取一套進(jìn)行考試,該種方法的弊端就是考生抽取到同套試題的內(nèi)容都是相同的,自由度,靈活度不夠自由;另一種情況就是在題庫中定義好一個(gè)考試的范圍,考試試題由考生隨機(jī)抽取該范圍內(nèi)的每小題,比較靈活,本文是基于后者本人在實(shí)踐中的一種方法進(jìn)行探討,其是在服務(wù)器端由出題教師定義好試題的范圍,由于受到服務(wù)器計(jì)算能力、網(wǎng)絡(luò)帶寬等因素的制約,這個(gè)范圍一般不要定義得太大,實(shí)踐中本人在服務(wù)器端定義兩倍的題量(服務(wù)器端隨機(jī)抽題組成200分的試題總量),考生端隨機(jī)抽取100分的試題,約250人的考生,一次性同時(shí)進(jìn)行抽題考試,能達(dá)到較好的效果。
其一:考試范圍的考慮,抽題組卷時(shí)由出卷教師自由定義。
第一章,第二章,第三章,第四章,第五章,第六章,第七章等,以多選框的形式,讓出卷教師選定考試章節(jié)。
其二:基于題型的考慮,題型所占總分的分值由出題教師自定義:
其三:依據(jù)設(shè)定的考試范圍和題型及題型分值,自動(dòng)隨機(jī)抽題組卷,其實(shí)現(xiàn)代碼如下:
include(“zsksj/”.$kemu.”/”.$nianji.”/randmsg.php”); //隨機(jī)卷組卷信息文件,記錄題型‘題型分值,考試范圍內(nèi)所有試題ID號(hào)
$txnumarr=explode(‘;,$txnum);//
$txfsarr=explode(‘;,$txfs);//題型分值數(shù)組
$txfzarr=explode(‘;,$txfz);//
$txansnumarr=explode(‘;,$txansnum);
for($l=0;$l<$inum;$l++){//$inum為題型數(shù)
$txn=0;$idtmp=array();$f=0;$tmpfz2=array();
if($sjtype==2){//當(dāng)為隨機(jī)卷時(shí)
$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 “抽題失敗,請(qǐng)重試!