網上考試
隨著互連網技術的發展網上教學將成為人們接受再教育和終身教育的主要形式。在網上學校中,人們可以不受時間和空間的限制,隨時隨地選學任何地方的任何課程。網上學校的發展對網上考試的發展提出了迫切的要求。這裡是我用Asp和Access資料庫實現的一個網上考試系統。當使用者憑使用者名稱和口令登入時,系統首先檢查該使用者是否已參加過考試,若是則進行成績查詢,若否則從題庫中提取考題供使用者解答。等使用者提交答卷後,系統進行評分並將成績登記入庫。
一. 資料庫設計
首先建立一資料庫exercise.mdb,其中包括兩個表:user和test,user表中有包括三個欄位:
欄位名稱:user;欄位類型:文本;欄位大小:20。儲存使用者名稱
欄位名稱:passwd;欄位類型:文本;欄位大小:20。儲存使用者密碼
欄位名稱:score;欄位類型:數字;欄位大小:整型。儲存使用者成績
test表中有五個欄位:
欄位名稱:question;欄位類型:文本;欄位大小:255。儲存考試題目
欄位名稱:a;欄位類型:文本;欄位大小:100。儲存選項A的答案
欄位名稱:b;欄位類型:文本;欄位大小:100。儲存選項B的答案
欄位名稱:c;欄位類型:文本;欄位大小:100。儲存選項C的答案
欄位名稱:d;欄位類型:文本;欄位大小:100。儲存選項D的答案
欄位名稱:ans;欄位類型:文本;欄位大小:2。儲存正確答案
二.程式原代碼
下面是該系統中較核心的三段原程式,希望對開發類似系統的讀者取到拋磚引玉的作用,讀者也可對其進行改進以適應自己的系統。
以下為引用的內容: ‘Login.asp來源程式,檢驗使用者是否合法 < %@ Language=VBScript % > < % name=trim(request("name")) passwd=trim(request("passwd")) ‘檢查使用者是否輸入資訊 if name< >"" and passwd< >"" then Set conn = Server.CreateObject ("ADODB.Connection") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("exercise.mdb") set rs= server.createobject("adodb.recordset") sql= "select * from user where user='" &name& "' and passwd='" & passwd & "'" ‘檢查使用者的合法性 Set rs= conn.Execute(sql) if not(rs.eof) then 檢查使用者是否已參加過考試, 若是則進行成績查詢 if rs(“score”)< >0 then response.write rs(“user”)& “的考試成績是”&rs(“score”) else session("pass")=1 session(“user”)=name response.redirect “test.asp” end if else Response.Write "對不起, 使用者或口令不正確!!!" end if else end if % > < HTML > < HEAD > < META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0" > < TITLE >使用者口令檢查< /TITLE > < /HEAD > < BODY > < FORM action="login.asp" id=FORM1 method=post name=FORM1 > < P title="" > < /P > < P title="" > < /P > < P title="" align=center >使用者: < INPUT id=text1 name=name style="HEIGHT: 22px; WIDTH: 103px" >< /P > < P title="" align=center >口令: < INPUT id=password1 name=passwd style="HEIGHT: 23px; WIDTH: 101px" type=password >< /P > < P title="" align=center > < INPUT id=submit1 name=submit1 type=submit value=" 進入 " style="FONT-SIZE: medium; FONT-STYLE: normal; FONT-VARIANT: normal; FONT-WEIGHT: bold" title="" >< /P > < P title="" align=center > < /P > < /FORM > < /BODY > < /HTML >
‘test.asp來源程式,從題庫中提取試題供解答 < %@ Language=VBScript % > < % if session(“pass”)< >1 then response.redirect “login.asp” else end if Set conn = Server.CreateObject("ADODB.Connection") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("exercise.mdb") ‘提取試題 sql="select * from test" Set rs = conn.Execute( sql ) % > ‘計時函數 < SCRIPT LANGUAGE="JavaScript" > var isn1=null; var isn2=false; today=new Date();
function stopit(){ if(isn2){ clearTimeout(isn1); } isn2 = false; } function startit(){ stopit(); isnclock(); }
function isnclock(){ var now=new Date(); var hrs=now.getHours(); var min=now.getMinutes(); var sec=now.getSeconds(); document.clckh.disp.value=""+((hrs >12) ? hrs-12 : hrs); document.clckm.disp.value=((min< 10) ? "0" : "")+min; document.clcks.disp.value=((sec< 10) ? "0" : "")+sec; document.clck.disp.value=(hrs >=12) ? "p.m." : "a.m."; isn1=setTimeout("isnclock()",1000); isn2=true; } < /SCRIPT >
< HTML > < HEAD > < META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0" > < /HEAD > < BODY BGCOLOR="FFFFFF" > < center > ‘調用計時函數顯示時間 < TABLE BORDER=2 > < TR > < TD >Time< /TD >< TD >Hour< /TD >< TD >Min < /TD >< TD >Sec< /TD >< TD >< /TD > < /TR > < TR > < TD >< /TD > < TD VALIGN=TOP >< FORM NAME="clckh" > < INPUT TYPE="text" NAME="disp" SIZE=2 VALUE ="" > < /FORM >< /TD > < TD VALIGN=TOP >< FORM NAME="clckm" > < INPUT TYPE="text" NAME="disp" SIZE=2 VALUE ="" > < /FORM >< /TD > < TD VALIGN=TOP >< FORM NAME="clcks" > < INPUT TYPE="text" NAME="disp" SIZE=2 VALUE ="" > < /FORM >< /TD > < TD VALIGN=TOP >< FORM NAME="clck" > < INPUT TYPE="text" NAME="disp" SIZE=4 VALUE ="" > < /FORM >< /TD >< /TR > < /center > ‘顯示試題供解答 < FORM action="result.asp" id=FORM1 method=post name=FORM1 > < P > < /P > < P > < % i=1 rs.movefirst do while not rs.eof% > < P > < %=rs("question")% >< /P > < TABLE align=center border=1 cellPadding=1 cellSpacing=1 width="80%" > < TR > < TD style="WIDTH: 50%" width="50%" < INPUT name=ans< %=i% > type=radio value="A" > < %=rs("a")% >< /TD > < TD >< INPUT name=ans< %=i% > type=radio value="B" > < %=rs("b")% >< /TD >< /TR > < TR > < TD >< INPUT name=ans< %=i% > type=radio value="C" > < %=rs("c")% >< /TD > < TD >< INPUT name=ans< %=i% > type=radio value="D" > < %=rs("d")% >< /TD > < /TR > < /TABLE > < % i=i+1 rs.movenext loop % > < /P > < P > < /P > < P align=center >< INPUT id=submit1 name=submit1 type=submit value=Submit >< INPUT id=reset1 name=reset1 type=reset value=Reset >< /P >< /FORM > < /BODY > < /HTML >
|
以下為引用的內容: ‘result.asp來源程式,對使用者答卷評分, 並將分數記錄入庫 < %@ Language=VBScript % > < HTML > < HEAD > < META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0" > < /HEAD > < BODY > < P > < /P > < % name=session(“user”) dim score Set conn = Server.CreateObject("ADODB.Connection") conn.Open "driver= {Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("exercise.mdb") sql="select ans from test" Set rs = conn.Execute( sql ) ycorrect=0 rsCount=0 ‘給出正確答案並評分 Response.Write "正確答案:" Do while not rs.eof Response.Write rs("ans") rsCount=rsCount+1 if Request.Form(rsCount)=rs("ans") then ycorrect=ycorrect+1 end if rs.movenext loop Response.Write "< br >你的答案:" score=int(ycorrect/rscount*100) for i=1 to Request.Form.Count-1 Response.Write Request.Form(i) next Response.Write "< br >" Response.Write "你的成績:"&score if score< 60 then Response.Write " 你不及格!"&"< br >" else if score >=60 Response.Write " 及格"&"< br >" else Response.Write " 優秀!" ‘將成績登記入庫 strSql=”insert into user (result) values (”&score&”) where user=’”&name&”’” conn.execute(strSql) % > < /BODY > < /HTML > |