摘要:安全知識的學(xué)習(xí)和掌握是對安全管理人員最基本的工作要求。為了克服傳統(tǒng)的考試工作的不足,以ASP.NET和SQL Server2000為主要開發(fā)工具,介紹了一個基于B/S模式的在線考試系統(tǒng)的設(shè)計與實現(xiàn)方法。該系統(tǒng)實現(xiàn)了數(shù)據(jù)庫訪問、用戶判斷、自動閱卷和自動生成試卷的功能,并給出了設(shè)計過程和實現(xiàn)代碼。
關(guān)鍵詞:安全知識;在線考試;B/S;ASP.NET
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)36-2689-03
Design and Implementation of Safety Examination System based on the ASP.NET Mode
ZHAO Na, QI Ming-xia, LIU Hong-cui
(The College of Mechanical Engineering of China University of Petroleum(East China), Dongying 257061, China)
Abstract: The study and mastery of Safety knowledge is the basic job requirements. To overcome the shortcomings of traditional examinations,taking ASP.NET and SQL Server2000 as the main development kits,the design and implementation of an on-line examination system based on B/S mode are introduced. Access to database,judge user,auto-score test paper and ways to auto-form test paper by means of an on-line examination system are introduced. Planning procedures and program codes here are also explained.
Key words: safety knowledge; online examination; B/S; ASP.NET
1 引言
隨著人類社會對“安全問題”的關(guān)注,安全問題日益重要,它已經(jīng)滲透各個領(lǐng)域。為了提高安全管理人員的安全管理水平,幫助安全管理人員實現(xiàn)學(xué)習(xí)與實踐的協(xié)調(diào)統(tǒng)一。目前,各地出現(xiàn)了一批在線測評系統(tǒng)和實現(xiàn)類似功能的系統(tǒng),如上海交通大學(xué)遠(yuǎn)程教育中心開發(fā)的遠(yuǎn)程考試系統(tǒng)、計算機(jī)的等級考試和MICROSOFT,CISCO等計算機(jī)公司的資格認(rèn)證考試等。因此,提出安全知識考試系統(tǒng)的設(shè)計與開發(fā)。通過設(shè)計和建設(shè)網(wǎng)絡(luò)拓?fù)浼軜?gòu)、安全信息系統(tǒng)、數(shù)據(jù)庫基礎(chǔ)結(jié)構(gòu)、信息共享與管理、信息的發(fā)布與管理,從而方便安全間信息發(fā)布、信息交流和信息共享[1]。
2 關(guān)鍵技術(shù)及實現(xiàn)
2.1 系統(tǒng)的安全可靠性[2-3]
SQL 2000對用戶的訪問訪問進(jìn)行兩個階段的驗證:
1) 認(rèn)證階段(Authentication):SQL Server對用戶登錄進(jìn)行驗證,用戶就可以連接到SQL Server服務(wù)器,否則服務(wù)器拒絕用戶登錄,從而保證系統(tǒng)安全。
2) 許可確認(rèn)階段(Permission Validation):用戶認(rèn)證通過后,系統(tǒng)檢查用戶是否具有訪問服務(wù)器上的數(shù)據(jù)庫和執(zhí)行用戶動作的權(quán)限。
2.2 系統(tǒng)的可擴(kuò)展性
“在線考試系統(tǒng)”建立在公共語言運行環(huán)境(Command Language Runtime)上,采用面向?qū)ο蠹夹g(shù),充分利用網(wǎng)絡(luò)服務(wù)(Web Service)和組件(Component)的特性,設(shè)計時代碼和數(shù)據(jù)表現(xiàn)分離,結(jié)構(gòu)清晰,方便系統(tǒng)維護(hù)和擴(kuò)展。
2.3 系統(tǒng)的高性能
ASP.NET與舊版本的ASP相比,在基礎(chǔ)結(jié)構(gòu)上有了根本性的變化,ASP.NET在執(zhí)行腳本時要經(jīng)過兩個編譯:從腳本語言到MSIL(Microsoft Intermediate Language,微軟中間語言)和從MSIL到可執(zhí)行的機(jī)器碼,擺脫了解釋型語言的陰影,當(dāng)同一頁面被訪問多次時,ASP.NET的執(zhí)行速度快于舊版本的ASP。[2]
3 系統(tǒng)總體設(shè)計流程
系統(tǒng)總體設(shè)計流程如圖1所示,考試系統(tǒng)分四個階段,即準(zhǔn)備階段、登錄階段、考試中階段和考后階段。
4 考試系統(tǒng)功能實現(xiàn)
4.1 連接數(shù)據(jù)庫
當(dāng)我們要連接到SQL Server數(shù)據(jù)庫的時候,我們需要在ASP.NET頁的頂部包含<%@Import Namespace=\"System. Data\".SQLClient%>這條指令,這樣我們便可以連接到SQL Server數(shù)據(jù)庫并操作數(shù)據(jù)庫中的數(shù)據(jù)。
現(xiàn)在就可以訪問該命名空間的類了。比如說SQLConnection類,該類允許連接到SQL Server數(shù)據(jù)庫。下面是聲明類的一個實例:
Dim myConnection As SqlConnection
myConnection=New SqlConnection(\"user id=sa;password=123; \" _\"server=201DMT20;database=\"TestOnline\")
4.2 登錄頁面
這個頁面比較簡單只有三個表單元素,其中兩個文本框用來輸入用戶名和密碼,按鈕則用來相應(yīng)表單的事件。
登錄頁面使用了一個用戶記錄表。在登錄頁面里需要引用這個表的用戶名,密碼字段進(jìn)行用戶身份鑒別。如果用戶身份通過驗證的話,系統(tǒng)登錄頁面還要記錄用戶的詳細(xì)信息,留待以后的系統(tǒng)頁面使用。
當(dāng)能夠在數(shù)據(jù)庫中檢索到用戶,則設(shè)置3個session變量的值,一個是pass,一個是user,一個是password,其中user是比較重要,在以后的頁面會經(jīng)常用到。程序部分代碼如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
As ystem.EventArgs) Handles Button1.Click
……
sSql = \"select * from 用戶記錄 where 用戶名='\" userid.Text \"' _
and 密碼='\" password.Text \"'\"
'操作SQL Server中的數(shù)據(jù)
mycommand = New SqlCommand(sSql, myConnection)
command.ExecuteNonQuery()'執(zhí)行查詢語句
'從SQL Server數(shù)據(jù)庫中檢索數(shù)據(jù)
Dim myReader As SqlDataReader = myCommand.ExecuteReader
If myReader.Read() Then
Session(\"user\") = userid.Text
Session(\"pass\") = \"1\"
Session(\"password\") = password.Text
Response.Redirect(\"s_index.aspx\")
End If
End Sub
在這里特別強(qiáng)調(diào)一點,如果系統(tǒng)管理員要想登錄到該考試系統(tǒng)中,必須以普通用戶的身份先登錄,雖然這個功能好像比較麻煩,但對于系統(tǒng)的安全還是有一定的好處。

圖1 系統(tǒng)總體設(shè)計流程
4.3 試卷類型選擇頁面
在這一部分,系統(tǒng)選擇試題類型頁面使用了一個試卷名稱表。在系統(tǒng)試題選擇頁面里需要引用這個表的試卷名稱,試題分?jǐn)?shù),答題時間等字段。在表格中將它們顯示出來。程序的部分代碼如下所示:
Private Sub Page_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load
……
while(dr.read())
papername=dr(\"試卷名稱\")
chji=dr(\"總分\")
danwei=dr(\"時間\")
End while
End Sub
4.4 考試頁面
在這一部分,我們主要的工作是使用隨機(jī)變量來生成考試試題,但是使用隨機(jī)變量必須知道它的取值區(qū)間,所以這里我們首先完成從試題表里面把各種試題的題目數(shù)量讀取出來,分門別類的進(jìn)行統(tǒng)計。
然后要實現(xiàn)的就是考試試卷的題目了。這里特別強(qiáng)調(diào)是隨機(jī)算法的設(shè)計,我們以單選題為例,隨機(jī)生成五個數(shù),存入數(shù)組中,然后將題庫中的編號與五個隨機(jī)數(shù)相同的讀出來,并顯示給用戶。程序的部分代碼如下所示:
Dim imax = dxtl '題庫中題目數(shù)目
Dim iget=5 '生成題目總數(shù)
Dim n'循環(huán)變量
Dim iRnd'臨時保存生成的隨機(jī)數(shù)
Dim sl(4)'用來存放隨機(jī)數(shù)的數(shù)組
Dim bFlag'轉(zhuǎn)移控制標(biāo)志
Dim bflag1 '轉(zhuǎn)移控制標(biāo)志,用來判斷是否重復(fù)
bflag1 = True
bFlag = True
n = 0
Do While n < iget
Randomize()
iRnd = Int(imax * Rnd(imax) + 0) + 1
If bFlag = True Then
sl(0) = iRnd
bFlag = False
n = n + 1
Else
bflag1 = True
i = 0
'i變量用于將生成的隨機(jī)數(shù)與前面所生成的隨機(jī)數(shù)進(jìn)行比較,不相同則存入數(shù)組
Do While i < n
If iRnd = sl(i) Then
bflag1 = False
Exit Do
End If
i = i + 1
Loop
If bflag1 = True Then
sl(n) = iRnd
n = n + 1'有一個符合要求的隨機(jī)數(shù)則加1
End If
End If
Loop
4.5 判分頁面
系統(tǒng)判分頁面使用了暫時試卷表。在系統(tǒng)登錄頁面里需要引用這個表的試題類型、試題題目、試題分?jǐn)?shù)、用戶答案、以及試題答案等字段。先是讀取試題類型以及用戶答案,然后將用戶答案跟試題答案進(jìn)行對比,從而判定用戶答案是否正確。
定義一個變量daaa,如果daaa等于“正確”則daaa=1,如果等于“錯誤”daaa=0,如果為空,daaa=\" \"。然后判斷,daaa是否等于試題庫中的答案,如果等于,定一個df變量,使它等于試題庫中的分?jǐn)?shù),再設(shè)一個總分變量score,使score=score+df,然后,利用sql語句,更新數(shù)據(jù)庫。這樣,判斷就完成了。
5 開發(fā)的難點
5.1 隨機(jī)選題的算法
這一部分主要是隨機(jī)數(shù)的設(shè)置與避免相同題目的抽取,我們可以使用Rnd函數(shù)實現(xiàn)隨機(jī)數(shù)的抽取。然后設(shè)定某項題型需要考試的題數(shù),然后通過獲取試題表中所有試題的總數(shù),接下來就以這個總數(shù)來生成隨機(jī)試題的數(shù)組。
5.2 自動判分功能的實現(xiàn)
首先建一個試題暫存表,然后在生成一個“用戶+表名”的正式表,用來存儲用戶答題的所有信息,然后讀取這些記錄,進(jìn)行判分。
5.3 程序的移植
為了方便程序的移植,我們把與數(shù)據(jù)庫的連接寫在webconfig文件里面更方便,并且易于修改。由于webconfig是底層的東西,可以保證程序的安全性,可以通過如下代碼實現(xiàn):
<appSettings>
<add key=\"myConnection\"
value=\"uid=sa;password=123;database=TestOnline;server=201DMT20;\" />
</appSettings>
6 結(jié)束語
由于采用了B/S結(jié)構(gòu),系統(tǒng)具有良好的可維護(hù)性和可擴(kuò)充性,如果考試科目內(nèi)容有所調(diào)整,只要對題庫作調(diào)整即可。而ASP.NET技術(shù)的運用使得在線考試系統(tǒng)靈活易用,具有良好的安全性和可擴(kuò)展性。該系統(tǒng)可以提高安全管理人員對安全生產(chǎn)、管理知識、生產(chǎn)法及法律知識技術(shù)等方面的基本知識的掌握,以及對安全生產(chǎn)的事故預(yù)防方法及技術(shù)措施基本知識的掌握。
參考文獻(xiàn):
[1] 周敏文,譚海文. 淺析我國安全生產(chǎn)信息化建設(shè)的現(xiàn)狀與對策[J].露天采礦技術(shù),2005(6):36-39,43.
[2] Buczek G. ASP.NET開發(fā)人員指南[M].北京:清華大學(xué)出版社,2002.
[3] 朱如龍. SQL Server數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)技術(shù)[M].北京:機(jī)械工業(yè)出版社,2004.