前言:本站為你精心整理了網(wǎng)上考試系統(tǒng)設計范文,希望能為你的創(chuàng)作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。
摘要給出了用ASP和SQL技術實現(xiàn)網(wǎng)上考試系統(tǒng)的一個實例。
關鍵詞:ADOASPSQL
0.引言
隨著網(wǎng)絡技術的發(fā)展,傳統(tǒng)的考試形式已日益顯示出其不足。本文用asp技術和sql結構化查詢語言實現(xiàn)了網(wǎng)上的無紙化考試。
1.設計
系統(tǒng)基本原理是:用access建立一個數(shù)據(jù)庫文件,用來存儲試題及用戶的驗證信息。當用戶登陸時,首先提示要輸入驗證信息,當輸入用戶信息后,通過sql語言查詢此用戶是否合法,如果不合法,則顯示提示信息。否則,進入考試系統(tǒng),由服務器抽取試題并顯示到考生屏幕上。當考生做完題并遞交后,由系統(tǒng)自動評分并顯示成績。
在本系統(tǒng)中,數(shù)據(jù)庫的建立是用ACCESS實現(xiàn)的。其中包括兩個表:user和test。
User表存儲用戶信息,test表存儲考試內(nèi)容。
user表結構如下:
字段名類型含義
User文本存儲用戶名
Passwd文本存儲密碼
Score數(shù)字存儲成績
Test表結構如下:
字段名類型含義
Question文本存儲考試題目
A文本存儲選項A的答案
B文本存儲選項B的答案
C文本存儲選項C的答案
D文本存儲選項D的答案
Answer文體存儲正確答案
在提取用戶端信息以及反饋信息時用到了ASP的內(nèi)置對象?,F(xiàn)說明如下:
Request對象
可以使用Request對象訪問任何用HTTP請求傳遞的信息,包括從HTML表格用POST方法或GET方法傳遞的參數(shù)、cookie和用戶認證。本系統(tǒng)通過REQUEST獲取用戶輸入的用戶名和密碼。代碼為:
REQUEST.FORM(“name”)和REQUEST.FORM(“passwd”)。
Response對象
可以使用Response對象控制發(fā)送給用戶的信息。包括直接發(fā)送信息給濟覽器、重定向瀏覽器到另一個URL或設置Cookie的值。本系統(tǒng)通過RESPONSE將成績反饋給用戶。
RESPONSE.WRITE“你的成績是”&score
試題的讀取和成績的錄入是通過ADO來進行的。ADO(ActiveXDataObject,ActiveX數(shù)據(jù)對象)是一個ASP內(nèi)置的ActiveX服務器組件(ActiveXServerComponet),用于數(shù)據(jù)庫訪問,對數(shù)據(jù)庫進行查詢、插入、更新、刪除等操作。對數(shù)據(jù)庫的查詢是用SQL的select命令,成績的錄入是用SQL的update命令。
存取數(shù)據(jù)庫的具體步驟是:首先確定數(shù)據(jù)源,然后打開或連接數(shù)據(jù)庫,,并執(zhí)行響應的操作,執(zhí)行完畢關閉數(shù)據(jù)庫。以上操作是通過ADO對象來實現(xiàn)的。connection對象負責打開或連接數(shù)據(jù)庫,recordset對象負責存取數(shù)據(jù)表,execute負責執(zhí)行SQL命令。
設定數(shù)據(jù)來源的方法是:在服務器上打開“我的電腦”中的“控制面板”,雙擊“ODBC”;在“系統(tǒng)DSN”下選“添加”,選出預先設好的數(shù)據(jù)庫種類、名稱和位置。這里要用到的是access數(shù)據(jù)庫,數(shù)據(jù)源名稱為exam,主數(shù)據(jù)庫名稱為excise.mdb。打開或連接數(shù)據(jù)庫的方法是:先用Server.CreatObject取得對象“ADODB.Connection”的一個實例,然后用“Open”打開待訪問的數(shù)據(jù)庫:
SetConn=Server.CreatObject(“ADODB.Connection”)
Conn.Open“exam"
然后執(zhí)行SQL命令,即對數(shù)據(jù)庫進行操作,這里要使用Execute命令
setrs=server.createobject(“adodb.recordset")
sql=“select*fromrest"
setrs=conn.execute(sql)
2.具體實現(xiàn)
主頁文件index.asp的源代碼如下:
〈html〉
〈head〉
〈metahttp-equiv=”Content-Type"content=”text/html;charset=gb2312"〉
〈metaname=“GENERATOR"content=”MicrosoftFrontPage4.0"〉
〈metaname=“Progld"content=”Fronpage.Editor.Document"〉
〈title〉用戶口令檢查〈/title〉
〈/head〉
〈bodybgcolor=”#008080”〉
〈formmethod=”post"action=”login.asp"〉
〈palign=”center"〉〈fontsize=”6"face=”黑體"〉網(wǎng)上考試系統(tǒng)v4.0〈/font〉〈/p>
〈palign=”center"〉〈fontcolor=“#0000FF"〉作者:尹春勇孫如霞〈/font>〈/p〉
〈palign=”center"〉2002.4.24〈/p〉
〈palign=”center"〉用戶:〈inputtype=”text"name”name"size=”20"〉〈/p〉
〈palign=”center”〉口令:〈inputtype=”password”name=”passwd”size=“20"〉〈/p>
〈pailgn=”center"〉〈inputtype=”submit"value=“提交"name=“B1"〉
〈inputtype=“reset"value=”全部重寫"name=”B2"〉〈/p〉
〈/form〉
〈/body〉
〈/html〉
信息遞交后驗證源代碼login.asp如下:
〈%
name=request.form(“name")
passwd=request.form(“passwd")
setrs=server.createobject(“adodb.recordset”)
setconn=server.createobject(“adodb.connection")
connstr=“excise"
conn.openconnstr
sql=“select*fromuserwhereuser=`“&name&"’"
setrs=conn.execute(sql)
ifnot(rs.eof)then
ifrs(“score")〈〉Othen
response.writers(“user")&“的成績是"&rs(“score")
else
session(“pass")=1
session(“user")=name
response.redirect“test.asp"
endif
else
response.write“對不起,用戶和口令不正確!"
endif
%〉信息通過后抽取試題源代碼test.asp如下:
〈%@language=vbscript%〉
〈%
ifsession(“pass")〈〉1thenresponse.redirect”login.asp"
setrs=server.createobject(“adodb.recordset")
setconn=server.createobject(“adodb.connection")
connstr=“excise"
conn.openconnstr
sql=“select*fromtest"
setrs=conn.execute(sql)
%〉
〈html〉
〈bodybgcolor=“#COCOCO"〉
〈formmethod=“POST"action=“result.asp"〉
〈%
i=1
rs.movefirst
dowhilenot(rs.eof)%〉
〈%=i%〉
〈%=rs(“question")%〉
〈br〉〈hr〉
〈tableborder=“O"width=“100%"〉
〈tr〉
〈tdwidth=”50%"〉〈inputtype=radioname=ans〈%=i%〉value=”a"〉A〈%=rs(“a")%〉〈/td〉
〈tdwidth=“50%"〉〈inputtype=radioname=ans〈%=i%〉value=”b"〉B〈%=rs(“b")%〉〈/td〉
〈/tr〉
〈tr〉
〈tdwidth=”50%”〉〈inputtype=radioname=ans〈%=i%〉value=”c”〉C〈%=rs(“c”)%〈/td〉
〈tdwidth=”50%"〉〈inputtype=radioname=ans〈%=i%〉value=”d"〉D〈%=rs(“d")%〉〈/td〉
〈/tr〉
〈/table〉
〈%
i=i+1
rs.movenext
loop
%〉
〈inputtype=”submit"name=”submit1"value=”交卷"〉
〈inputtype=”reset"name=”reset1"value=“重做"〉
〈/form〉
〈/body〉
〈/html〉
評分源代碼result.asp如下:
〈%@language=vbscript%〉
〈%
setrs=server.createobject(“adodb.recorbset”)
setconn=server.createobje
ct(“adodb.connection")
connser=”excise"
conn.openconnstr
sql=”selectansfromtest"
setrs=conn.execute(sql)
correct=0
count=0
dowhilenotrs.eof
count=count+1
ifrequest.form(count)=rs(“ans")then
correct=correct+1
endif
rs.movenext
loop
scores=correct/count*100
response.write“你的成績是:"&scores
sql=”updateusersetscore=”&scores&whereuser=''''”&session(“user")&"''''"
conn.execute(sql)
%〉