摘 要: 針對計算機實驗室提供的考試服務,筆者設計了一個具有服務器管理模塊和考試控制模塊的考試平臺。采用VBScript結合數據庫技術實現服務器管理模塊,采用.NET平臺以C#語言實現了考試控制模塊,考試控制模塊借助廣播發出考試控制指令,考試機上的駐守程序接收并執行相應的考試控制指令。經過多年的實際運行表明該考試平臺能夠為多種考試提供服務。
關鍵詞: 局域網 考試平臺 計算機考試
高校計算機類實驗室通常不僅要承擔計算機相關課程的實驗教學工作,而且要承擔計算機相關課程考試、計算機等級考試、職稱計算機考試,以及社會性選拔考試等工作。在這些種類繁多考試中,部分考試有專門的考試系統,例如全國計算機等級考試。但眾多其他的考試卻沒有一個能夠統一的考試平臺,每次考試時,實驗室工作人員的準備工作量都很大,考試的過程管理、考試結果的收集都很困難。所以設計一個能夠適應大多數計算機考試的考試平臺就顯得很有必要。
1.系統分析
計算機考試平臺涉及的主要內容有以下幾個方面:1)考試賬號管理:考試賬號管理需要對每一個考生分配一個登錄賬號和密碼,并分配獨立且安全地存儲空間;2)試卷發放:試卷可以按要求隨機或預先定義的方式發放;3)考試結果收集:考試結果收集需要快捷方便;4)考試時間控制:考試時間控制需要準確,特別是考試結束時一定要通過技術手段防止學生耗時間;5)考場信號發送:考場中的各種指令必須及時有效地傳送給每一個考生。
2.系統架構
為了實現考試平臺中的這五個主要內容,考試平臺分為兩個主要控制模塊:考試服務器管理模塊和考試過程控制模塊。考試服務器管理模塊主要負責完成考試賬號管理、試卷分發和試卷收集的考試管理功能;考試過程控制模塊主要完成考試時間控制、考試信號發送及考試現場清理等。
整個系統采用Windows Server 2003作為考試服務器,借助Windows的賬號服務實現考試用戶身份驗證、Windows文件系統。
3.系統設計
3.1服務器管理模塊
服務器管理模塊主要采用Windows腳本實施管理,具體地采用VBScript語言編程實現,主要完成考生用戶創建、考生目錄創建、考生目錄權限設置、考生目錄共享等,考生報名庫采用Access數據庫存放,通過在腳本中利用ADO讀取考生信息完成這些功能。其中讀取數據庫后將考生信息填充在一個ADODB.RecordSet對象Rs中。下面是幾個關鍵功能的示例代碼,其他模塊的實現代碼風格類似。
1)創建考生賬號:
subCreatUser()
setobj=GetObject(\"WinNT://\"DNS)
rs.MoveFirst
While(not rs.eof)
setusr=obj.Create(\"user\",rs(\"KSXH\"))
usr.SetPassword(\"ak*%#1#%_$!@\")
usr.Description=rs(\"KSXB\")rs(\"KSZY\")rs(\"KSXM\")
usr.SetInfo
setusr=nothing
rs.MoveNext
Wend
end sub
2)創建考生目錄并設置權限
Sub CreatFoldr()
setfs=createObject(\"Scripting.FileSystemObject\")
setws=WScript.CreateObject(\"WScript.Shell\")
Set fs=CreateObject(\"Scripting.FileSystemObject\")
Set f=fs.OpenTextFile(SCRIPTFILE,FORWRITING,true)
rs.MoveFirst
While(not rs.eof)
myFoldr=ROOTFOLDR rs(\"KSXH\")
setFoldr=fs.CreateFolder(myFoldr)
setFoldr=nothing
’設置權限
f.Write \"cacls \"myFoldr \" /g \"DNS\"\\" rs(\"KSXH\") \":F \"DNS\"\administrator:F f.Writechr(13)chr(10) Wend f.Close ws.run SCRIPTFILE end sub 3)目錄共享 Sub FoldrShar() set cont=GetObject(\"WinNT://\"FILESERVER\"/LanmanServer,FileService\") rs.MoveFirst While(not rs.eof) set fs1=cont.Create(\"FileShare\",\"j\"rs(\"KSXH\")) fs1.path=ROOTFOLDR rs(\"KSXH\") fs1.MaxUserCount=-1 fs1.SetInfo set fs1=nothing rs.movenext Wend end sub 3.2考試過程模塊 考試過程模塊由考試機駐守程序和考試控制管理端組成,考試控制端完成。采用.NET平臺,C#語言開發而成。 1)考試機駐守程序完成考生登錄(見圖一)和接受并執行考試控制管理端的遠程命令功能。 考生在登錄界面填寫正確的考號和密碼后點擊網絡登錄,即可完成考生盤的映射,并打開預先配置好的考試軟件。其中映射考生盤的關鍵代碼如下: stringServerIP = @\"\\192.168.8.200\"; stringUserName = txbID.Text.Trim(); stringUserPwd = txbPwd.Text.Trim(); Utility.DriveMap.Map2NetDrive(ServerIP + @\"\\" + UserName, \"H:\", UserName, UserPwd); lbmsg.Text = \"登陸成功!\";this.Refresh(); Utility.Command.Execute(\"Explorer\", \"h:\\\", 1); 在映射好考生盤后,界面隱藏,程序在后臺駐守,監聽、接受并執行相應的考試指令。其中監聽的實現方法是在8899端口監聽。具體代碼如下: Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPointiep = new IPEndPoint(IPAddress.Any, 8899); socket.Bind(iep); ep = (EndPoint)iep; byte[] bytes = new byte[1024]; while (true){ socket.ReceiveFrom(bytes, ref ep); receiveData=System.Text.Encoding.Unicode.GetString(bytes); receiveData = receiveData.TrimEnd('\u0000'); hide = true; cmd = receiveData; if (cmd != \"\"){ break; } } socket.Close(); socket = 1; 駐守程序在接收到指令后,分解指令并執行,就可以直接完成將控制端發送的考試控制指令。 2)考試控制端,主要采用廣播的方式利用UDP協議基于套接字向子網中廣播發送考試控制指令,發送的考試控制指令主要有屏幕鎖屏、允許登錄、清理考試機程序、考試時間核定、提交試卷、重啟或關閉計算機等,并可以通過考試控制端預先設置好的流程管理考試機,實現考試指令的自動發送、實現考試時間的自動控制。其中發送廣播信息的關鍵代碼如下: public static void SendMessage(string msg) { Socketsocket=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); IPEndPointiep=new IPEndPoint(IPAddress.Broadcast,8899); socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Broadcast,1); byte[]bytes = System.Text.Encoding.Unicode.GetBytes(msg); socket.SendTo(bytes,iep); socket.Close(); } 4.結論 考試系統設計完成后,在重慶三峽學院數學與計算機科學學院及計算機中心成功運行5年,支撐了多門計算機課程教學科目的考試工作,特別多次支撐重慶市非計算機專業的計算機等級考試及人事局主持的職稱計算機考試等。具有運行效果良好、操作簡單、系統穩定、效率高、安全性好的特點。 參考文獻: [1][美]金斯利-休斯(Kingsley-Hughes,A),[美]金斯利-休斯(Kingsley-Hughes,K).VBScript程序員參考手冊[M].清華大學出版社,2009. [2]郝秀蘭.Windows Server 2003網絡管理實用教程[M].人民郵電出版社,2011. [3][美]瑞奇特著.周靖譯.CLR via C#(第3版)[M].清華大學出版社,2010.