吳立峰 丁陟凌
摘要:本文基于高效學(xué)生和考試的需要。利用計(jì)算機(jī)技術(shù)實(shí)現(xiàn)在線考試系統(tǒng)的架構(gòu)和設(shè)計(jì),在現(xiàn)有成熟的模式基礎(chǔ)上,以自適應(yīng)考試的模式,形成了本系統(tǒng)。本系統(tǒng)在Windows XP下,以IIS5.1(lntemet InformationServer)網(wǎng)絡(luò)信息服務(wù)為應(yīng)用服務(wù)器,通過(guò)ASPNET(C#)、SQL Server 2000來(lái)進(jìn)行專業(yè)開(kāi)發(fā),實(shí)現(xiàn)在線考試系統(tǒng)的應(yīng)用,本系統(tǒng)采用WEB技術(shù),采用的是三層體系(B/S)結(jié)構(gòu)模型,即從用戶端到服務(wù)器再到數(shù)據(jù)庫(kù)的一個(gè)貫穿線,應(yīng)該說(shuō)安全性上還應(yīng)用上都表現(xiàn)的不錯(cuò);在功能上可以在相同水平的前提下實(shí)現(xiàn)隨機(jī)生成試卷,可以有A\B卷,保證每套試卷的題目?jī)?nèi)容不同。同時(shí)還避免了“碰題”,即使碰上了順序也打亂了。對(duì)于在線考試效率的提高和維護(hù)來(lái)說(shuō)都性價(jià)比很高。
關(guān)鍵詞:在線考試;ASP.NET;SQLServer;Browser/Server;C#
一、計(jì)算機(jī)配置與系統(tǒng)結(jié)構(gòu)要求
(一)搭建ASP.NET開(kāi)發(fā)適應(yīng)環(huán)境
從“開(kāi)始”進(jìn)入到控制面板命令,雙擊網(wǎng)絡(luò)圖標(biāo),跳出來(lái)網(wǎng)絡(luò)對(duì)話框;通過(guò)添加所需的組件來(lái)完成基礎(chǔ)搭建軍,并在供應(yīng)商列表框中選微軟提供的協(xié)議,而另外需要在網(wǎng)絡(luò)協(xié)議列表框中點(diǎn)擊TCP/IP協(xié)議選項(xiàng),勾選后再單擊確定“添加協(xié)議”完成涅黏出安裝[1]。
(二)安裝和配置IIS
安裝HS進(jìn)入通道與搭建ASPNET相同,在“添加或刪除程序”里找到“添加或刪除組件”選項(xiàng),在彈出微軟窗口后,在“Internet信息服務(wù)”這項(xiàng)中,點(diǎn)“詳細(xì)信息”審查IIS所包含的各種組件[2]。
從“主目錄”進(jìn)入。主目錄默認(rèn)地址:“C:\inetpub\wwwroot”,權(quán)限為讀取、記錄訪問(wèn)和索引資源。
(三)題庫(kù)管理
(1)試題分類進(jìn)行類型管理,這里要實(shí)現(xiàn)的是五個(gè)方面:一是試卷類別的分類和細(xì)分;二是添加、刪除、修改這三個(gè)基本的功能;三是如何做到排序不亂,這個(gè)很重要;四是應(yīng)用功能的緩存時(shí)間的設(shè)計(jì);五是基于題庫(kù)自動(dòng)更新的管理。
(2)考試試題進(jìn)行分類管理,主要實(shí)現(xiàn)三個(gè)功能:一是試題的添加、刪除以及修改;二是實(shí)現(xiàn)試題的選擇;三是試題的A/B卷功能;
(3)試題答案要進(jìn)行分類管理,主要實(shí)現(xiàn)三個(gè)功能:一是試題的答案的管理,需要滿足添加、刪除和修改和編輯的功能;二是試題答案的自我糾錯(cuò)功能;三是試題答案隱藏功能。
(四)在線答題
(1)在線答題過(guò)程中需要進(jìn)行動(dòng)態(tài)化隨機(jī)處理,那么需要達(dá)成的效果是試卷的不同,也就是在使用隨機(jī)函數(shù)動(dòng)態(tài)過(guò)程中,要進(jìn)行計(jì)復(fù)好不同試題從題庫(kù)中生成整張?jiān)嚲淼哪芰Α?/p>
(2)顯示整套試題。
(五)系統(tǒng)功能模塊劃分
數(shù)據(jù)庫(kù)、數(shù)據(jù)訪問(wèn)和業(yè)務(wù)邏輯層,是本系統(tǒng)統(tǒng)的幾大構(gòu)件。
從二大數(shù)據(jù)庫(kù)、數(shù)據(jù)訪問(wèn)層及業(yè)務(wù)邏輯層的具體描述情況來(lái)看主要滿足如下:
(1)數(shù)據(jù)庫(kù)層是最為基本的系統(tǒng)數(shù)據(jù)的底層一級(jí),它重要性就是要滿足整個(gè)系統(tǒng)的穩(wěn)定和系充在存儲(chǔ)所有數(shù)據(jù)上的容量。
(2)數(shù)據(jù)訪問(wèn)層是動(dòng)態(tài)化的結(jié)構(gòu),需要在數(shù)據(jù)庫(kù)的運(yùn)行基礎(chǔ)上,應(yīng)用程序通過(guò)該層訪問(wèn)數(shù)據(jù)庫(kù)。從數(shù)據(jù)訪問(wèn)層的基本架構(gòu)來(lái)看,對(duì)于數(shù)據(jù)庫(kù)的基本的功能化選擇、添加等操作能滿足,同時(shí)也有權(quán)力對(duì)于數(shù)據(jù)更新和刪除等操作可以進(jìn)行重復(fù)。
UserDB類數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn)如下:
(六)在線答題
在線答疑模塊是一個(gè)復(fù)雜的模塊。系統(tǒng)首先根據(jù)試卷的總分、難度系數(shù)等來(lái)實(shí)答題模塊的要求,并在生成一組隨機(jī)試卷,并根據(jù)不同題型在答題頁(yè)面上顯示每個(gè)試題。隨機(jī)組卷過(guò)程中有兩個(gè)回歸過(guò)程。右邊的回歸過(guò)程返回到隨機(jī)生成試卷的狀態(tài)。當(dāng)不滿足試卷類型條件時(shí),會(huì)發(fā)生回歸過(guò)程;左側(cè)的回歸過(guò)程返回隨機(jī)獲取試卷類型的狀態(tài)。當(dāng)不滿足試卷類型條件時(shí),會(huì)發(fā)生回歸過(guò)程。對(duì)于系統(tǒng)中同一類型的試卷,其難度系數(shù)控制在最大難度系數(shù)和最小難度系數(shù)之間。
(七)表設(shè)計(jì)
1.角色表(Roles)
角色表存儲(chǔ)用戶的角色信息,字段說(shuō)明如表I所示:
用戶可以使用此表設(shè)置用戶的角色。
2.考生表(Exammees)
通過(guò)存儲(chǔ)的方式來(lái)實(shí)現(xiàn)考生表的靜態(tài)功能,實(shí)現(xiàn)參加考試考生信息的表達(dá),引用用戶表Users的主鍵UserID作為該表的外鍵??忌淼淖侄握f(shuō)明如表2所示。
管理員(教師)登錄后,可以通過(guò)此表查看考生參加的考試和考試成績(jī)。創(chuàng)建考生表的SQL腳本文件如下:
USE test1
GO
Create Table Exammees
Kinds)
問(wèn)題種類表存儲(chǔ)問(wèn)題種類的信息,如選擇題和判斷題。該表的字段說(shuō)明如表3所示。
創(chuàng)建問(wèn)題種類表的SQL腳本文件如下:
USE test1
存儲(chǔ)在圖片表里的相關(guān)信息,具體的字段說(shuō)明請(qǐng)看表4所示。
創(chuàng)建圖片表的SQL腳本文件如下:
USE test1
GO
Create Table Exarninees
(
系數(shù)值。表中的title字段指示問(wèn)題的標(biāo)題,系統(tǒng)使用該標(biāo)題顯示特定的問(wèn)題、它僅用作問(wèn)題標(biāo)題的可選字段。由于問(wèn)題的描述很長(zhǎng),標(biāo)題字段不夠。如果問(wèn)題描述較短,也可以使用該字段。便于描述開(kāi)發(fā)過(guò)程中boby字段的存儲(chǔ)問(wèn)題,它的型號(hào)為Text,可以存儲(chǔ)很長(zhǎng)的文本(見(jiàn)表5)
創(chuàng)建圖片表的SQL腳本文件如下:
USE test1
Create Table Questions
存儲(chǔ)于題庫(kù)中的問(wèn)題答案表對(duì)于答案信息的處理,該表的處理是通過(guò)引用問(wèn)題表Question的QuestionID、圖片表Pictures的PictureID作為表的外鍵。向題答案表的字段說(shuō)明如表6所示。
二、具體設(shè)計(jì)及實(shí)現(xiàn)
(一)用戶登錄和注冊(cè)
1.界面設(shè)計(jì)
用戶登錄通過(guò)loginl.aspx頁(yè)面實(shí)現(xiàn)。它的代碼脆藏文件是loginl.aspx.es文件。用戶登錄是應(yīng)用程序的主要入口。用戶只能通過(guò)此項(xiàng)進(jìn)入系統(tǒng)。
由于用戶有三種身份角色:考生、教師和管理員,在設(shè)計(jì)登錄頁(yè)面時(shí)·需要提供每一個(gè)角色相應(yīng)的選擇框。用戶通過(guò)輸入用戶名和密碼即可以登錄界面使用。沒(méi)有注冊(cè)的當(dāng)然也可以注冊(cè)后再使用。
2.用戶登錄
用戶“登錄”后btnLogin_Cliek(),就開(kāi)始了驗(yàn)證后實(shí)現(xiàn)用戶登錄的真實(shí)有效的過(guò)程。如果彈出密碼錯(cuò)誤對(duì)話框,那就說(shuō)明登陸不對(duì),需要進(jìn)行調(diào)整,如果繼續(xù)錯(cuò)誤只能找回密碼了。
3.用戶注冊(cè)
添加新用戶有兩種方法:一種是從后臺(tái)用戶管理添加用戶,另一種是注冊(cè)用戶。用戶注冊(cè)只能添加候選用戶,不能添加管理員用戶。由于管理員用戶可以直接進(jìn)入系統(tǒng)后臺(tái)管理界面,用戶在前臺(tái)注冊(cè)該角色不安全,系統(tǒng)管理混亂系統(tǒng)數(shù)據(jù)安全受到威脅。下面介紹前臺(tái)用戶注冊(cè)的實(shí)現(xiàn)??紤]到用戶注冊(cè)需要輸入用戶名、用戶密碼、用戶郵箱等信息,我們可以設(shè)計(jì)。
添加新用戶有兩種方法:一種是從后臺(tái)用戶管理添加用戶,另一種是注冊(cè)用戶。用戶注冊(cè)只能添加候選用戶,不能添加管理員用戶。由于管理員用戶可以直接進(jìn)入系統(tǒng)后臺(tái)管理界面,用戶在前臺(tái)注冊(cè)該角色不安全,系統(tǒng)管理混亂,系統(tǒng)數(shù)據(jù)安全受到威脅。下面介紹前臺(tái)用戶注冊(cè)的實(shí)現(xiàn)??紤]到用戶注朋需要輸入用戶名、用戶密碼、用戶郵箱等信息,我們可以設(shè)計(jì)。
(二)題庫(kù)設(shè)計(jì)
在這個(gè)界面中,用戶作為管理員,實(shí)現(xiàn)了對(duì)判斷題和多項(xiàng)選擇題的管理,以及成績(jī)管理和學(xué)生管理。
1.選擇題管理
(1)數(shù)據(jù)綁定
通過(guò)頁(yè)面selection.aspx來(lái)實(shí)現(xiàn)的,selection.aspx.cs是它的代碼隱藏文件。
實(shí)現(xiàn)數(shù)據(jù)綁定的代碼是:添加delete按鈕,當(dāng)用戶點(diǎn)擊該按鈕時(shí),觸發(fā)event delete命令響應(yīng)事件,
(2)修改試題
在DataGrid中添加編輯按鈕,當(dāng)用戶單擊該按鈕時(shí),事件EditCommand事件被觸發(fā)從而響應(yīng)該事件_
當(dāng)用戶不需要修改試題時(shí),可以點(diǎn)擊“取消”按鈕,取消對(duì)試題的修改。此事件由cancelcommand事件響應(yīng),代碼如下:
private void DataGridl_CanceiCommand(object source,System.Web.UI.WebControls.DataGrdCommandEventArgs e)
this.DataGndl.Editltemlndex=-1;
this.BindToDataGtid();
}
用戶修改試題對(duì)應(yīng)內(nèi)容后,需要將修改后的內(nèi)容發(fā)送到數(shù)據(jù)庫(kù),由事件UpdateCommand響應(yīng)。代碼如下:
private void DalaGridl_UpdateCommand(object source,System.Web.UI.WebControls.DataGndCommandEventArgs e)
}
(3)添加試題
當(dāng)單擊添加選擇題時(shí),頁(yè)面轉(zhuǎn)入選擇題添加頁(yè)面addSelect.aspx。如圖7所示。
當(dāng)用戶單擊提交按鈕時(shí),事件IbtnTijiao_Click()觸發(fā),該事件實(shí)現(xiàn)將管理員編寫(xiě)的題目添加到數(shù)據(jù)庫(kù)中,其代碼為:
private void lbtnTipao_Click(object sender,System.EvemAcgs e)
{
if(this.Is Valid)
{
cript'>alert('添加失??!');");
}
}
}
2.判斷題管理
判斷題管理由rightOrWrong.aspx頁(yè)面實(shí)現(xiàn),它的頁(yè)面設(shè)計(jì)和功能實(shí)現(xiàn)的代碼和選擇題管理類似。
(三)在線答題實(shí)現(xiàn)
1.界面設(shè)計(jì)
系統(tǒng)的在線答題功能由頁(yè)面kaoShi.aspx和頁(yè)面examination.aspx實(shí)現(xiàn),它們的代碼隱藏文件分別為kaoShi.aspx.cs和examination.aspx.cs文件。
在隨機(jī)生成試卷的過(guò)程中,應(yīng)用程序首先調(diào)用函數(shù)CreateExammePaper()生成整套試卷。該函數(shù)遞歸調(diào)用自己,直到生成試卷。
private ArrayList CreateIntegerExaminePaper(int nTotalMark,int minDefficult,intmaxDefficult,ArrayList KindList)
{//定義函數(shù)的局部變量
if(KmdList.Count<=0)
{
return((ArrayList)null);st.Count;i++)
{//調(diào)用CreateSpecialKindQuestion函數(shù)生成特定題型
ArrayList tempList=CreateSpecialKindQuestion(((QuestionKinds)KindList[i]).KindNum,((QuestionKinds)KindList[i]).KindID);
for(intj=0;j { QuestionIDList.Add(tempList[j]); } } //添加到結(jié)果中 for(int k=0;k {//構(gòu)造檢查試卷的參數(shù) allMark+=((QuestionDetails)QuestionIDList[k]).Mark; deffieultParm+=((QuestionDetails)QuestionIDList[k]).Mark* ((QuestionDetails)QuestionIDList[k]).Defficult; } //檢查試卷是否成功,如果成功則中止該函數(shù),否則遞歸調(diào)用 if(allMark==nTotalMark&&defficultParm>=100*minDefficult*QuestionIDList.Count&&defficultParm<=100*maxDefficult*QuestionIDList.Count) 2.在線答題 函數(shù)BindQuestionData()實(shí)現(xiàn)了上述頁(yè)面初始化過(guò)程: private void BmdQuestionData() { ArrayList QuestionIDList=newArrayList(); if(Session[Session.SessionID+Session["UserName"].ToString()]!=null) { QuestionIDList=(ArrayList)Session[Session.SessionID+Session["UserName"].ToString()]; AnswcrDB answer=new AnswerDB(); Sq1DataReader reca=answer.GetAnswers(nQuestionID); radioList.DataSource=reca; radioList.DataTextField="Body"; radioList.Data ValueField="AnswerID"; radioList.DataBind(); reca.Close(); } 在數(shù)據(jù)綁定時(shí),問(wèn)題DataList控件觸發(fā)事件QuestionList_ItemDataBound(),并在事件中調(diào)用函數(shù)BindAnswerList()綁定問(wèn)題答案數(shù)據(jù)。綁定數(shù)據(jù)步驟如下: (1)通過(guò)參數(shù)。的函數(shù)FindControl()找到需要綁定數(shù)據(jù)的RadioButtonList控件,命名為answerList。 (2)判斷answerList控件是否為空,若為空,則中止函數(shù)。 (3)若answerList控件不為空,則調(diào)用函數(shù)BindAnswerList()綁定answerList控件的答案數(shù)據(jù)。 事件QuestionList_ItemDataBound()代碼如下: (1)提交試卷顯示成績(jī) 當(dāng)用戶點(diǎn)擊交卷按鈕后,應(yīng)將用戶的答題結(jié)果與試題答案進(jìn)行對(duì)比,并給出相應(yīng)的分值寫(xiě)入數(shù)據(jù)表,最后讀取成績(jī)表Grade中的記錄集并顯示考試得分。 三、測(cè)試運(yùn)行與維護(hù) (一)網(wǎng)站測(cè)試通過(guò)后再運(yùn)行 (1)由不同的身份的操作者來(lái)進(jìn)行全面的測(cè)試,同時(shí)還要測(cè)試檢查在網(wǎng)站上所有鏈接是否合理和正確,功能是否能用,文字內(nèi)容等是否有錯(cuò)誤,還有UI等效果是否正確,有美學(xué)價(jià)值。 (2)在測(cè)試中要對(duì)于整個(gè)網(wǎng)站應(yīng)該有一個(gè)完整的架構(gòu)來(lái)進(jìn)行對(duì)比,特別是網(wǎng)站上的欄目結(jié)構(gòu)圖和欄目的功能和表達(dá)的內(nèi)容是否合適,它應(yīng)該清楚地表達(dá)各個(gè)網(wǎng)站之間的協(xié)調(diào)關(guān)系。 (二)網(wǎng)站的維護(hù)很重要 (1)維護(hù)服務(wù)器及相關(guān)軟硬件,評(píng)估可能出現(xiàn)的問(wèn)題,制定響應(yīng)時(shí)間。 (2)數(shù)據(jù)庫(kù)維護(hù),有效利用數(shù)據(jù)是網(wǎng)站維護(hù)的重要組成部分,數(shù)據(jù)庫(kù)維護(hù)應(yīng)引起重視。 參考文獻(xiàn): [1]鄒建峰.ASPNE7開(kāi)發(fā)技術(shù)詳解[M].人民郵電出版社,2005. [2]周良忠.C#精髓[M].人民郵電出版社,2002. [3]劉愛(ài)民.基于.net技術(shù)的在線考試系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦開(kāi)發(fā)與應(yīng)用,2011(07).