卜明磊 浙江廣廈建設職業技術學院
自第一臺計算機誕生至今,短短數十載,信息時代已然改變人們生產生活方式。本課題就是設計并實現一套基于HUSTOJ的高級語言考試系統。HUSTOJ遵守GPL協議,其開源的特性有利于實現代碼的二次開發并能為本系統所用。
通過本高級語言考試系統,管理員可以對教師、學生和題庫進行管理,教師可以根據具體情況從已有題庫中選擇所需題目進行人工組卷,也可對已有試卷進行查看,更也可以查看每次考試的統計信息,而這些統計信息是計算機自動運用數學知識運算所得,即高效又準確。學生可以通過考試系統完成在線評測并第一時間獲取自己成績,實時反饋,促進教育教學良好有序進行。
HUSTOJ作為一個開源在線評測系統已經被廣泛用于計算機程序設計比賽和編程能力測試中。通過分析它的源代碼我們可以發現,HUSTOJ由core和web兩個文件組成, web主要用于存放數據,core主要用于實現判題功能。其中,core分為三部分:judged(其中最核心部分是服務進程源碼judged.cc)、judge_client(其中最核心部分是判題進程源碼judged_client.cc)、sim(其中最核心部分是sim.sh,是一個第三方軟件,用于檢測相似度,防止作弊)。這里主要用到了judged和judge_client,因此在判題源碼分析中主要介紹服務進程源碼和判題進程源碼。
2.1.1 服務進程源碼分析
服務進程代碼(judged.cc)是由519行C語言編寫的源代碼組成,總大小為13.4KB。該源代碼實現的主要功能在第485行至519行的main函數中得以表現。首先創建家目錄(默認家目錄為home/judge)并進入,在確認輸入無誤后創建守護進程,然后在確認家目錄無誤且守護進程尚未運行后配置數據庫信息,通過執行SQL語句獲取符合要求的題目標記值信息(這里是對應的是題目的主鍵solution_id),之后計算機一直處于等待返回信息狀態,一旦接收到對應信號,則立馬結束判題服務進程,如果進程未結束則表示準備就緒。接下來進入循環體,該創建的守護進程就正式成為執行題目的判題守護進程并開始起作用,直到出現錯誤或題目全部已經答完。
2.1.2 判題進程源碼分析
判題進程代碼(judge_client.cc)是由1989行C語言編寫的源代碼組成,總大小為70.8KB。獲取題目solution_id并為之編號,在配置數據庫配置信息后驗證數據庫是否運行正常,結果(記錄在result中)共有0至13共14種情況,其中, result為4表示AC,即結果正確,其他數字對應代表一種出錯情況。判題進程源碼采用的是沙箱技術,通過創建一個虛擬環境并在其中運行,待得出結果后刪除它。這就保證了系統的安全性。
HUSTOJ數據庫共有17張數據表。中本系統調用的最主要數據表是記錄題目提交運行相關信息的表solution solution_id,problem_id,user_id,time,memory,in_date,result,language,ip,contest_id,valid,num,code_length,judgetime,pass_rate)和表 source_code(solution_id,source)。
值得注意的是,HUSTOJ數據表中不存在外鍵,數據的完整性由web中的PHP代碼保證。

本考試系統功能分為四大模塊:用戶登錄驗證模塊、系統管理員模塊、教師模塊和學生模塊。
首先輸入正確的姓名、密碼,并選擇相應的身份,然后單擊登錄按鈕即可。如果輸入無誤,則進入相應界面,否則顯示錯誤提示信息。
4.2.1 教師管理
根據教師姓名、職稱和部門查詢教師信息,符合條件的教師信息(教師姓名、密碼、職稱、部門)以一張表格形式展現,在信息的最后,管理員可以選擇修改該教師信息或刪除該教師信息。
4.2.2 學生管理
根據學生學號、姓名、專業和年級查詢學生信息,符合條件的學生信息(學生學號、姓名、密碼、性別、專業、年級)以一張表格形式展現,在信息的最后,管理員可以選擇修改該學生信息功能或刪除該學生信息
4.2.3 題庫管理
根據題目內容、題型、知識點和章節查詢題庫信息,符合條件的題庫信息(題目內容、題型、知識點、章節)以一張表格形式展現,在信息的最后,管理員可以選擇修改該題目或刪除該題目。
4.3.1 人工組卷
輸入試卷基本信息(試卷名稱、考試時間、選擇題數量、判斷題數量、填空題數量、程序題數量、選擇題分值、填空題分值、判斷題分值、程序題分值)后單擊提交,進入組卷界面。單擊“選擇題”后題庫中的所有選擇題將顯示,教師可任意選取,不過必須與試卷基本信息中的題數相對應,否則最終提交將會無效。其他還有“填空題”、“判斷題”和“程序題”,于此類似。最后,單擊“提交”,在系統提示完成后組卷工作完成。
4.3.2 人工閱卷
從數據庫中選取該教師出的試卷,從中再選取未曾批改過的題目,將信息(學號、試卷編號、題目編號、考生答案、參考答案、機器批閱結果、是否已核對、更正)顯示出來。對于已核對的題目,則在“核對”中打鉤,并作為最終結果。如果遇到自動批改試卷有出路的地方,則在“核對”中選中之后還需在更正一欄中填入正確得分。
4.3.3 試卷分析
選中條件信息(學號、試卷編號、題目編號)進行查閱試卷。在選中試卷條件之后單擊“查詢”,可以得到相應學號、試卷編號、題目編號、得分、該題平均分以及排名統計信息。
4.3.4 試卷查詢
選中試卷條件信息(試卷編號、題目編號編號)進行查詢。在選中試卷條件之后單擊“查詢”,可以得到相應試卷編號、題目編號、試卷名稱、題目內容和刪除信息。如果教師對該每一題目不滿意欲刪除,則可以通過單擊左鍵“刪除”來達到目的。
4.3.5 成績查詢
選中條件信息(學號、試卷編號)進行查閱。在選中條件之后單擊“查詢”,可以得到相應學號、試卷名稱、題目編號、得分、平均分信息。
4.4.1 進入考試
單擊導航欄中的“進入考試”鏈接,顯示信息分為兩部分:功能區以及信息區。功能區位于上方。學生選擇試卷編號并單擊“進入考試”按鈕進入答題頁面。而信息區域顯示勵志故事,旨在激勵學生。答題頁面是本次考試試卷全部內容。每一道題目由題號、題目內容、題型和考生答案四部分構成??荚囋凇翱忌鸢浮敝刑顚懘鸢负髥螕繇撁嫦路降摹疤峤弧卑粹o即可交卷。本系統采用系統自動閱卷功能,在學生提交答案后系統自動在后臺運行批改程序,在第一時間得到結果。
4.4.2 成績查詢
選中條件信息(學號、試卷編號)進行查閱。在選中條件之后單擊“查詢”,可以得到相應學號、試卷名稱、題目編號、得分、平均分信息。
因為基于HUSTOJ的高級語言考試系統是一套能夠實現計算機自動批改試卷的高級語言考試系統,而本系統的研究重點是在LAMP( Linux + Apache + MySQL + PHP )的框架下,在自動程序判題系統HUSTOJ的基礎上進行自行設計并創建一套高級語言考試系統??梢院敛豢鋸埖卣f,這是一個新的領域,而我就是一個純粹地探索者——在網絡地幫助下(特別是百度、谷歌等搜索引擎的幫助以及CSDN等網站的幫助),功能基本實現。
此次實現了高級語言考試系統的基本功能。其主要特色是借助HUSTOJ實現對程序的自動判題。由于本系統是開源系統,而且是參照工程化的已有項目搭建完成,所以結構清晰,編程規范,為以后編程人員解讀代碼或再次開發提供了保障??傊瑢τ诒鞠到y的未來努力方向總結如下:
(1)美觀性:增強界面美觀設計,使界面更符合大眾對審美的需求;
(2)防作弊性:通過數學工具實現數據統計計算,達到防作弊的效果;
(3)數據表現多樣性:對于各種統計信息,實現數據與圖形圖畫的轉換,實現諸如折線圖、圓餅圖等功能;
(4)安全性:對于每次用戶登錄(特別是文本框等數據輸入),都要通過多種手段進行安全驗證,比如正則表達式等。
[1]張浩斌.基于開放式云平臺的開源在線評測系統設計與實現[J]. 計算機科學2012年增刊,第39 卷第11A 期:339-343,348.
[2]何莉輝,梁滄.基于ACM 國際大學生程序設計競賽的學習模式[J].邊疆經濟與文化,2008(6):95-96.
[3]網絡教育_維基百科[EB/OL]. http://zh.wikipedia.org/wiki/Linux.
[4]車明洙,紀洪波.一種基于ACM 程序設計競賽在線評測系統解決方案 [J].微型機與應用,2010(4):11-13.