吳立峰 丁陟凌


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