[摘要]在21世紀(jì)的新時(shí)代,隨著計(jì)算機(jī)技術(shù)的發(fā)展及計(jì)算機(jī)的日益普及,在線考試與無(wú)紙化辦公一樣已成為大勢(shì)所趨。文章介紹在線考試系統(tǒng)的功能和設(shè)計(jì)方案。該考試系統(tǒng)主要包括管理員模塊、考試模塊和閱卷模塊三大功能模塊,根據(jù)管理員對(duì)考試科目、考試班級(jí)、試卷題型和題量的設(shè)置由系統(tǒng)隨機(jī)抽題生成試卷并顯示出來(lái)供考生做題。考生交卷后客觀題可由計(jì)算機(jī)自動(dòng)評(píng)分,主觀題可由閱卷教師在網(wǎng)上進(jìn)行批改,成績(jī)會(huì)自動(dòng)寫(xiě)入數(shù)據(jù)庫(kù)。文章重點(diǎn)介紹系統(tǒng)的界面結(jié)構(gòu)的整體規(guī)劃以及利用ASP及相關(guān)技術(shù)保障頁(yè)面的安全性,對(duì)需要進(jìn)行安全性保護(hù)的頁(yè)面禁止非法訪問(wèn)。系統(tǒng)嚴(yán)格控制整個(gè)考試過(guò)程,實(shí)行時(shí)間監(jiān)控,考試期間不允許刷新網(wǎng)頁(yè),考生需要在限定的考試時(shí)間內(nèi)交卷。
[關(guān)鍵詞]在線考試系統(tǒng);ASP技術(shù);SQL語(yǔ)言;VBScriptAccess數(shù)據(jù)庫(kù)
[作者簡(jiǎn)介]單天宇,海軍士官學(xué)校計(jì)算機(jī)教研室,安徽蚌埠,233020
[中圖分類號(hào)] G424.74 [文獻(xiàn)標(biāo)識(shí)碼] A [文章編號(hào)] 1007-7723(2009)04-0168-0004
一、引言
人類進(jìn)入21世紀(jì),科學(xué)技術(shù)突飛猛進(jìn),特別是信息技術(shù)和網(wǎng)路技術(shù)的迅速發(fā)展和廣泛應(yīng)用,在線考試與無(wú)紙化辦公一樣已成為大勢(shì)所趨。在線考試也越來(lái)越成為學(xué)校的好幫手,它的優(yōu)勢(shì)不但體現(xiàn)在人力上也體現(xiàn)在物力上?;赪EB的在線考試系統(tǒng)的自動(dòng)評(píng)閱、計(jì)分、成績(jī)存檔功能將有效地避免資源的浪費(fèi),有利于環(huán)保,減少人力,提高效率。
相比傳統(tǒng)的考試方式,在線考試系統(tǒng)的主要好處是:一方面可以動(dòng)態(tài)地管理各種考試信息,只要準(zhǔn)備好足夠大的題庫(kù),就可以按照要求自動(dòng)生成各種試卷;另一方面,考試時(shí)間靈活,可以在規(guī)定的時(shí)間段內(nèi)的任意時(shí)間參加考試;另外,計(jì)算機(jī)化的考試的最大特點(diǎn)是閱卷快,系統(tǒng)可以在考試結(jié)束時(shí)當(dāng)場(chǎng)給出客觀題考試成績(jī),計(jì)算機(jī)閱卷給了考生最大的公平感。
二、系統(tǒng)分析與總體方案設(shè)計(jì)
(一)系統(tǒng)需要解決的主要問(wèn)題
因?yàn)榭荚囀怯刑囟ǖ膶?duì)象的,所以考生進(jìn)入系統(tǒng)應(yīng)該進(jìn)行身份驗(yàn)證。鑒于考試環(huán)境一般為機(jī)房,考試者之間的距離很近,為了避免考試作弊,試卷的分值和題量都應(yīng)是相同的,但試題內(nèi)容并不相同。在線考試基于網(wǎng)絡(luò)環(huán)境,試卷應(yīng)該從服務(wù)器的數(shù)據(jù)庫(kù)隨機(jī)抽取試題后動(dòng)態(tài)生成。另外,系統(tǒng)還應(yīng)該對(duì)考試時(shí)間進(jìn)行控制,時(shí)間到了會(huì)要求考試者交卷??荚囌哌x擇答案提交后,客觀題應(yīng)該由計(jì)算機(jī)自動(dòng)判卷,主觀題由老師閱卷后存入數(shù)據(jù)庫(kù),考試完畢后,可以返回登錄界面或繼續(xù)考試。
(二)系統(tǒng)應(yīng)該具備的基本功能
身份驗(yàn)證:考生、管理員、閱卷老師的登錄驗(yàn)證。
用戶信息的管理:管理員可以增刪用戶。
試題庫(kù)管理:分科目對(duì)試題庫(kù)的管理,使試題的增刪、編輯更為簡(jiǎn)便。
試卷生成:從試題庫(kù)里隨機(jī)抽取試題生成一份試卷。
考試過(guò)程:系統(tǒng)嚴(yán)格控制整個(gè)考試過(guò)程,實(shí)行時(shí)間的監(jiān)控,考試期間禁止學(xué)生刷新網(wǎng)頁(yè),考生需要在限定的考試時(shí)間內(nèi)交卷。
計(jì)算機(jī)自動(dòng)閱卷:本系統(tǒng)客觀題,要求計(jì)算機(jī)能自動(dòng)閱卷;主觀題由老師閱卷。
(三)總體方案設(shè)計(jì)
根據(jù)對(duì)系統(tǒng)功能和需求,本考試系統(tǒng)按功能分為管理員模塊、學(xué)生考試模塊和評(píng)分模塊。
管理員模塊:主要實(shí)現(xiàn)管理員的登錄驗(yàn)證頁(yè)面的設(shè)計(jì)、管理員定制試卷頁(yè)面的設(shè)計(jì)及一些網(wǎng)絡(luò)安全方面的設(shè)計(jì)。
學(xué)生考試模塊:主要實(shí)現(xiàn)試卷的隨機(jī)生成,并顯示在網(wǎng)頁(yè)上供考生考試,考生做完試題的答案提交后,客觀題由計(jì)算機(jī)自動(dòng)評(píng)分且成績(jī)?nèi)霂?kù),主觀題的答案存入數(shù)據(jù)庫(kù)。
評(píng)分模塊:主要通過(guò)對(duì)該模塊的設(shè)計(jì)實(shí)現(xiàn)主觀試題的評(píng)分。從數(shù)據(jù)庫(kù)中調(diào)出考生在考試模塊做的主觀題答案,并顯示在網(wǎng)頁(yè)上,閱卷老師判卷后提交,主觀題的成績(jī)與考生先前由計(jì)算機(jī)評(píng)的客觀題的成績(jī)相加后入庫(kù)。
數(shù)據(jù)庫(kù)模塊:考慮考試系統(tǒng)要用到的數(shù)據(jù)信息,為本系統(tǒng)建立兩個(gè)數(shù)據(jù)庫(kù),分別為managers.mdb數(shù)據(jù)庫(kù)和student.mdb數(shù)據(jù)庫(kù)。其中managers庫(kù)中存放管理員的身份驗(yàn)證碼,student庫(kù)中存放考生的信息數(shù)據(jù)及考試試題數(shù)據(jù)。
根據(jù)以上的分析設(shè)計(jì)了系統(tǒng)總的流程框架圖(圖1):
本在線考試系統(tǒng)根據(jù)需求共設(shè)計(jì)了11個(gè)界面:
1.INDEX.HTM:考試系統(tǒng)主頁(yè)面,它提供了管理員、學(xué)生考試、教師閱卷共三個(gè)入口。
2.MANAGELOG.asp:管理員密碼輸入頁(yè)面。
3.STUDENTLOG.asp:學(xué)生密碼輸入頁(yè)面。
4.TEACHERLOG.asp:教師密碼輸入頁(yè)面。
5.MANAGE.ASP:管理員對(duì)試卷進(jìn)行定制的頁(yè)面。
6.MANAGEOK.ASP:管理員試卷定制完畢后返回的頁(yè)面。
7.TEST.ASP:出試卷頁(yè)面,即考生考試時(shí)的頁(yè)面。
8.TESTOK.ASP:學(xué)生交卷后返回的頁(yè)面。
9.TEACHHER.ASP:教師閱卷區(qū)的第一個(gè)頁(yè)面,顯示所有主觀題未被批改的學(xué)生的信息。
10.TEACHER2.ASP:教師閱卷區(qū)的第二個(gè)頁(yè)面,用于對(duì)某個(gè)學(xué)生的主觀題部分進(jìn)行批閱。
11.TEACHEROK.ASP:批改完一個(gè)學(xué)生的主觀題部分后返回的頁(yè)面。
它們之間的具體關(guān)系流程如圖2所示:
具體功能實(shí)現(xiàn):當(dāng)進(jìn)入系統(tǒng)主頁(yè)index.htm有三個(gè)可選入口:管理員入口、考生入口和閱卷入口。用戶要想登錄任何一個(gè)入口都要通過(guò)身份驗(yàn)證才能正確登錄進(jìn)行使用本系統(tǒng),具體的安全驗(yàn)證在第三部分有具體介紹。
如果用戶以管理員的身份登錄系統(tǒng)即進(jìn)入manage.asp頁(yè)(管理員對(duì)試卷進(jìn)行定制的頁(yè)面),在該頁(yè)管理員可以對(duì)考試班級(jí)、考試科目、試卷的初始化進(jìn)行設(shè)置。這些設(shè)置的數(shù)據(jù)通過(guò)表單提交到manageok.asp頁(yè)并用Application對(duì)象保存相關(guān)參數(shù)供test.asp頁(yè)調(diào)用。
如果用戶以考生的身份登錄,則進(jìn)入test.asp頁(yè)進(jìn)行考試??荚嚨脑嚲硎怯晒芾韱T初始化,并從數(shù)據(jù)庫(kù)的題庫(kù)中隨機(jī)抽題生成的試卷,試卷的題型、題數(shù)根據(jù)管理員在manage.asp頁(yè)的設(shè)置來(lái)定。在該頁(yè)考生要在規(guī)定的時(shí)間內(nèi),并遵守考試的規(guī)則進(jìn)行考試,考試完畢提交試卷,系統(tǒng)將對(duì)考生的客觀題自動(dòng)評(píng)分,主觀題的答案寫(xiě)入student.mdb庫(kù)的答卷表中,客觀題的成績(jī)存入student表的對(duì)應(yīng)考試科目字段中,該功能在testok.asp頁(yè)中實(shí)現(xiàn)。
如果用戶以閱卷教師的身份登錄,那么進(jìn)入teacher.asp頁(yè),該頁(yè)顯示了主觀題沒(méi)有被評(píng)分的所有學(xué)生的相關(guān)信息,教師可以選擇任何一個(gè)學(xué)生,進(jìn)入下個(gè)評(píng)分頁(yè)面teacher2.asp進(jìn)行評(píng)分,評(píng)分的結(jié)果提交到teacherok.asp頁(yè),該頁(yè)中代碼實(shí)現(xiàn)學(xué)生的主觀題成績(jī)與客觀題成績(jī)相加并存入數(shù)據(jù)庫(kù)。評(píng)閱完該考生的試卷,可以返回teacher.asp頁(yè),重復(fù)以上步驟來(lái)繼續(xù)批改其他學(xué)生的試卷。當(dāng)所有學(xué)生的試卷批改完畢,則評(píng)分結(jié)束。
三、具體設(shè)計(jì)階段
(一)ASP訪問(wèn)數(shù)據(jù)庫(kù)技術(shù)
在存取Web數(shù)據(jù)庫(kù)的過(guò)程中,ADO組件與ODBC驅(qū)動(dòng)程序是關(guān)鍵。通過(guò)它們,ASP能讓開(kāi)發(fā)者以兩種方式打開(kāi)Web數(shù)據(jù)庫(kù):全路徑DSN和DSN(Data Source Name)方法。
1. 用全路徑DSN方法打開(kāi)數(shù)據(jù)庫(kù)
首先用Server.CreateObject建立連接對(duì)象,再用\"Open\"方法打開(kāi)待訪問(wèn)查詢的數(shù)據(jù)庫(kù)。如在C:\\Inetpub\\wwwroot文件夾下的數(shù)據(jù)庫(kù)work.mdb,則打開(kāi)該數(shù)據(jù)庫(kù)的方法如下:
Set Conn=Server.CreateObject(\"ADODB.connection\")
Conn.Open\"driver={Microsoft Access Driver(*.MDB)};dbq=\" Server.MapPath(\"work.mdb\")
2.用DSN方法打開(kāi)數(shù)據(jù)庫(kù)
DSN方法是在前一種方法步驟之前再加一步:為數(shù)據(jù)庫(kù)指定DSN名稱。如用“控制面板”上的ODBC將Work的DSN名設(shè)為zzz,則打開(kāi)該數(shù)據(jù)庫(kù)的方法如下:
Set Conn=Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"zzz\"
由此可見(jiàn),兩者的區(qū)別僅在Conn.Open語(yǔ)句處,本系統(tǒng)采用了DSN方式訪問(wèn)數(shù)據(jù)庫(kù)。
(二)數(shù)據(jù)庫(kù)模塊的設(shè)計(jì)
根據(jù)需要,本系統(tǒng)共建立了managers 和 student兩個(gè)數(shù)據(jù)庫(kù)。
student(學(xué)號(hào)、姓名、密碼、成績(jī)1、成績(jī)2、……,成績(jī)n,是否登錄)
test(題號(hào)、題目、題型、選項(xiàng)1、選項(xiàng)2、選項(xiàng)3、選項(xiàng)4、選項(xiàng)5、分值、答案)
manager(管理員、密碼、類型)
記錄(序號(hào)、班級(jí)、科目)
答卷(學(xué)號(hào)、姓名、題目、答案、批改否)
班級(jí)名稱(班級(jí))
考試科目(科目名稱、考試時(shí)間)
根據(jù)設(shè)計(jì)這七張表的所要實(shí)現(xiàn)的功能的不同,也為了在具體編程過(guò)程中調(diào)用的方便,因此建立了managers 和 student兩個(gè)數(shù)據(jù)庫(kù)。
在具體編程時(shí)為了方便調(diào)試可以把student表添加一些記錄,做成存放具體的學(xué)生表, test表也可以添加相關(guān)試題和正確答案的記錄。在實(shí)際應(yīng)用中針對(duì)不同班級(jí)學(xué)生、不同科目的考試以及考試系統(tǒng)管理人員變化等情況,可以根據(jù)實(shí)際情況對(duì)兩個(gè)數(shù)據(jù)庫(kù)的各個(gè)表進(jìn)行添加、刪除等一些修改。
(三)管理員模塊的設(shè)計(jì)
該模塊的設(shè)計(jì)包括實(shí)現(xiàn)管理員對(duì)試卷的定制和頁(yè)面安全性的設(shè)計(jì)。
1.試卷定制
管理員通過(guò)身份驗(yàn)證后進(jìn)入定制試卷頁(yè)manage.asp對(duì)考試試卷進(jìn)行初始化。管理員可以對(duì)考試班級(jí)、考試科目、單項(xiàng)選擇題題數(shù)、多項(xiàng)選擇題題數(shù)、判斷題題數(shù)、填空題題數(shù)、簡(jiǎn)答題題數(shù)各項(xiàng)進(jìn)行設(shè)置。設(shè)置后通過(guò)表單提交到manageok.asp,在該頁(yè)對(duì)上頁(yè)的設(shè)置進(jìn)行保存,供test.asp頁(yè)生成試卷時(shí)作為參數(shù),用如下代碼實(shí)現(xiàn)保存:
保存考試科目名稱:
application(\"classname\")=request(\"select2\")
保存單項(xiàng)選擇題題數(shù):
application(\"choose1\")=request(\"text2\")
保存多項(xiàng)選擇題題數(shù):
application(\"choose2\")=request(\"text3\")
保存判斷題題數(shù):
application(\"judge\")=request(\"text4\")
保存填空題題數(shù):
application(\"blank\")=request(\"text5\")
保存簡(jiǎn)答題題數(shù):
application(\"answer\")=request(\"text6\")
保存考試班級(jí)名稱:
application(\"banji\")=request(\"select\")
2.頁(yè)面安全模塊的實(shí)現(xiàn)
由于本系統(tǒng)實(shí)現(xiàn)的是在線考試功能,那么必定要考慮系統(tǒng)的安全問(wèn)題。主要考慮是限制用戶的非法登錄和在考試過(guò)程中對(duì)考生的操作的限制,從而體現(xiàn)考試的公平性。
(1)禁止非法登錄:當(dāng)用戶進(jìn)入test.asp 頁(yè)面后,在瀏覽器的地址欄就會(huì)顯示該頁(yè)的地址:http://../../test.asp,那么當(dāng)用戶先知道了 test.asp的地址,為了禁止用戶不進(jìn)行身份驗(yàn)證而直接在瀏覽器的地址欄輸入test.asp的地址登錄,用如下代碼實(shí)現(xiàn):
<% if request(\"name\")=\"\" then %> '******判斷是否輸入用戶名
<p align=\"center\"><font size=\"5\" color=\"#FF0000\">登錄方法錯(cuò)誤?。。?font>
response.end
end if %>
上段程序通過(guò)簡(jiǎn)單的判斷是否輸入用戶名,如果輸入為空,那么瀏覽器輸出:登錄方法錯(cuò)誤!從而實(shí)現(xiàn)上述的安全問(wèn)題。其實(shí)只是上面一段代碼自然不行,如果只有上面一段的話,那么用戶隨便輸入用戶名后也是能登錄,這就是下面要解決的問(wèn)題。
2.身份驗(yàn)證的實(shí)現(xiàn)
<% If request(\"b1\")=\"登錄\" Then
sql=\"select * from \"application(\"banji\")\" where學(xué)號(hào)='\"request(\"stunum\")\"'\"
Set rs=conn.execute(sql)
If rs.bof Or rs.eof Then%>
//以上設(shè)置查詢語(yǔ)句,查詢學(xué)生所在的班級(jí)、學(xué)號(hào),并執(zhí)行這條語(yǔ)句,獲得班級(jí)、學(xué)號(hào)的所有記錄。如果錯(cuò)誤,給出下面的提示。
<p align=\"center\"><font size=\"5\" color=\"#FF0000\">該學(xué)生不存在,請(qǐng)您核實(shí)后再輸入</font></p>
<%response.End
Else
If request(\"pass\")<>rs(\"密碼\") Then %>
<p align=\"center\"><font size=\"5\" color=\"#FF0000\">密碼錯(cuò)誤,請(qǐng)您核實(shí)后再輸入</font></p>
<%response.End
end if
end if
end if %>
以上代碼使用考生用戶的登錄驗(yàn)證為例,管理員及閱卷老師的登錄驗(yàn)證方法與此相同。
3.為了限制考生反復(fù)登錄系統(tǒng)考試,用如下代碼實(shí)現(xiàn)
<%if rs(\"是否登錄\")=1 then %>
<p align=\"center\"><font size=\"5\" color=\"#FF0000\">該學(xué)號(hào)已登錄過(guò),不能再登錄</font></p> <% end if
sql=\"update\"application(\"banji\")\"set是否登錄=1 where 學(xué)號(hào)='\"request(\"stunum\")\"'\" conn.execute sql %>
4.實(shí)際上在考試當(dāng)中,我們是要給每個(gè)科目的考試設(shè)定一個(gè)時(shí)間的,考生必須在規(guī)定的時(shí)間里交卷,所以該系統(tǒng)在考生考試時(shí)對(duì)考生的登錄時(shí)間進(jìn)行記錄,并保存。對(duì)考生進(jìn)行倒計(jì)時(shí),到規(guī)定的是時(shí)間后立即交卷。但如果考生在考試時(shí)刷新了網(wǎng)頁(yè),那么倒計(jì)時(shí)從新開(kāi)始,就會(huì)延長(zhǎng)了其交卷的時(shí)間。為了避免考生刷新網(wǎng)頁(yè),禁止刷新的代碼如下:
<% if Session(\"Stu_Retset\")=1 then
response.Write(\"<center class='Xsmall'><p>對(duì)不起,您不遵守本考場(chǎng)規(guī)則,已被停止答題。</p><p>若要考試,你與考場(chǎng)老師聯(lián)系?。紁> <a href='studentlog.asp'>請(qǐng)點(diǎn)擊返回</a></center>\")
response.End()
end if
Session(\"Stu_Retset\")=1 %>
上面提到了實(shí)現(xiàn)限制考試時(shí)間的倒記時(shí)函數(shù),其具體代碼如下:
TimeNum=TimeGetF*60
Sub ChangeTime()
TimeNum=TimeNum-1
TimeNumF=TimeNum\\60
TimeNumM=TimeNum mod 60
if TimeNumF<10 and TimeNumM=10 and Flag<2 then
MsgBox(\"只剩下\"TimeNumF\"分!請(qǐng)抓緊時(shí)間!\")
Flag=Flag+1
Else if TimeNumF<5 and TimeNumM=10 and Flag<5 then
MsgBox(\"只剩下\"TimeNumF\"分!請(qǐng)?zhí)峤辉嚲?!\")
Flag=Flag+1
Else if TimeNumM=-5 then
close()
end if
window.status=\"你的時(shí)間還剩\"TimeNumF\"分\"TimeNumM\"秒\"
settimeout \"ChangeTime\",1000
end sub
以上主要介紹了實(shí)現(xiàn)系統(tǒng)的安全,以及考試的公平性所用的主要程序代碼。
四、結(jié)語(yǔ)
由于時(shí)間有限,所以在設(shè)計(jì)的時(shí)候還有一些缺陷。系統(tǒng)的主要缺陷是后臺(tái)的管理方面。管理員直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行添加刪除考生的信息,以及試題庫(kù)信息,使管理起來(lái)比較麻煩且數(shù)據(jù)庫(kù)的可擴(kuò)展性都不是很好。另外,由于在此之前無(wú)類似系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn),該系統(tǒng)只是實(shí)現(xiàn)了簡(jiǎn)單的身份驗(yàn)證功能,系統(tǒng)的安全性方面也存在一定的不足。
在整個(gè)過(guò)程中使筆者真正體會(huì)到了需求分析與總體設(shè)計(jì)的重要性。在設(shè)計(jì)過(guò)程中考慮問(wèn)題不夠全面,處理設(shè)計(jì)中的一些數(shù)據(jù)庫(kù)中各表之間關(guān)系、以及控制數(shù)據(jù)的問(wèn)題時(shí),方法比較簡(jiǎn)單,造成了系統(tǒng)性能的下降。
[參考文獻(xiàn)]
[1]鄧文淵,陳惠貞,等.ASP與網(wǎng)絡(luò)數(shù)據(jù)庫(kù)技術(shù)[M].北京:中國(guó)鐵道出版社,2003.
[2]廖彬山,高峰霞.ASP動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)教程[M]. 北京:清華大學(xué)出版社,2000.
[3]唐青松,顏亮 .ASP應(yīng)用開(kāi)發(fā)全攻略寶典[M].北京:中國(guó)水利水電出版社,2000.
[4]石志國(guó),新東方電腦教材研發(fā)室.ASP動(dòng)態(tài)網(wǎng)站編程[M].北京:清華大學(xué)出版社,2001.
[5]尚俊杰.網(wǎng)絡(luò)程序設(shè)計(jì)——ASP[M].北京:北方交通大學(xué)出版社,2002.