測(cè)驗(yàn)代碼
Exam.asp 提供一系列的題目和以單選按鈕為格式的選項(xiàng)。為了使測(cè)驗(yàn)更具挑戰(zhàn)性,還要有時(shí)間限制。我設(shè)置了一個(gè)裝載時(shí)自動(dòng)啟動(dòng)的時(shí)鐘,將其時(shí)間設(shè)為20秒。剩余的時(shí)間在屏幕底部的狀態(tài)窗口中顯示。時(shí)間因素同題目個(gè)數(shù)一樣可以改變。為了在每次會(huì)員想要參加考試時(shí),都從數(shù)據(jù)庫(kù)中選擇不同的題目,我使用了隨機(jī)函數(shù)。在數(shù)據(jù)庫(kù)中,題目的個(gè)數(shù)固定為10個(gè),每次會(huì)員回答5個(gè)問(wèn)題。所有的題目都一起顯示出來(lái),然后開(kāi)始計(jì)時(shí)。以下代碼是計(jì)時(shí)器的函數(shù):
< script language="JavaScript" >
var ck=0;
var tf=0;
var timeUp=0;
var timeLeft=0;
var tcount=0;
TimerFunc();
function TimerFunc() {
tf=window.setTimeout("TimerFunc();",1000);
tcount++;
timeLeft=20 - tcount;
window.status = timeLeft + " Seconds remaining";
}
< /script >
要注意,沒(méi)有時(shí)間限制的測(cè)驗(yàn)是沒(méi)有樂(lè)趣的。
這頁(yè)的查詢是這樣的:
id = Request.QueryString ("section")
session("id") = id
sql_tblname = "select tbl_name from paper where id="&id
Set RS_tblname = Application("Conn").Execute(sql_tblname)
subject= RS_tblname(0)
MyString = Split(subject,"tbl",-1,1)
查詢字符串存儲(chǔ)在一個(gè) session("id")中, 按順序啟動(dòng)查詢。這個(gè)SQL聲明的目的是從試卷表格中找到表格名。使用split 函數(shù)的目的是從結(jié)果中去掉tbl。(我使用了表格名前加tbl前綴的命名慣例)。一旦找到了表格名,就開(kāi)始了向指定表格的查詢。為了使應(yīng)用程序更有意思,我使用了隨機(jī)函數(shù),生成從1到10之間的任意數(shù)字。這些數(shù)字用來(lái)從指定的科目表格中選取id:
sql_details = "select a.id, a.question, a.choice1, a.choice2,a.choice3, " &_
" a.choice4 from " & subject & " a where a.id="&MyArray(Counter)
在這個(gè)查詢中,id,question、 choice1、 choice2、 choice3、 choice4 都是科目表格中的域名。
MyArray(Counter) 是已經(jīng)生成的隨機(jī)數(shù)字。
測(cè)驗(yàn)結(jié)束后,結(jié)果被存儲(chǔ)起來(lái)并被增加到數(shù)據(jù)庫(kù)的細(xì)節(jié)表格中。這樣會(huì)員就能看到測(cè)驗(yàn)的結(jié)果了。(在本例中,我只保留了科目的一個(gè)記錄和百分制的分?jǐn)?shù)。還可以有一個(gè)時(shí)間-日期標(biāo)志。)