卜明磊 浙江廣廈建設(shè)職業(yè)技術(shù)學(xué)院
自第一臺(tái)計(jì)算機(jī)誕生至今,短短數(shù)十載,信息時(shí)代已然改變?nèi)藗兩a(chǎn)生活方式。本課題就是設(shè)計(jì)并實(shí)現(xiàn)一套基于HUSTOJ的高級(jí)語言考試系統(tǒng)。HUSTOJ遵守GPL協(xié)議,其開源的特性有利于實(shí)現(xiàn)代碼的二次開發(fā)并能為本系統(tǒng)所用。
通過本高級(jí)語言考試系統(tǒng),管理員可以對(duì)教師、學(xué)生和題庫進(jìn)行管理,教師可以根據(jù)具體情況從已有題庫中選擇所需題目進(jìn)行人工組卷,也可對(duì)已有試卷進(jìn)行查看,更也可以查看每次考試的統(tǒng)計(jì)信息,而這些統(tǒng)計(jì)信息是計(jì)算機(jī)自動(dòng)運(yùn)用數(shù)學(xué)知識(shí)運(yùn)算所得,即高效又準(zhǔn)確。學(xué)生可以通過考試系統(tǒng)完成在線評(píng)測(cè)并第一時(shí)間獲取自己成績(jī),實(shí)時(shí)反饋,促進(jìn)教育教學(xué)良好有序進(jìn)行。
HUSTOJ作為一個(gè)開源在線評(píng)測(cè)系統(tǒng)已經(jīng)被廣泛用于計(jì)算機(jī)程序設(shè)計(jì)比賽和編程能力測(cè)試中。通過分析它的源代碼我們可以發(fā)現(xiàn),HUSTOJ由core和web兩個(gè)文件組成, web主要用于存放數(shù)據(jù),core主要用于實(shí)現(xiàn)判題功能。其中,core分為三部分:judged(其中最核心部分是服務(wù)進(jìn)程源碼judged.cc)、judge_client(其中最核心部分是判題進(jìn)程源碼judged_client.cc)、sim(其中最核心部分是sim.sh,是一個(gè)第三方軟件,用于檢測(cè)相似度,防止作弊)。這里主要用到了judged和judge_client,因此在判題源碼分析中主要介紹服務(wù)進(jìn)程源碼和判題進(jìn)程源碼。
2.1.1 服務(wù)進(jìn)程源碼分析
服務(wù)進(jìn)程代碼(judged.cc)是由519行C語言編寫的源代碼組成,總大小為13.4KB。該源代碼實(shí)現(xiàn)的主要功能在第485行至519行的main函數(shù)中得以表現(xiàn)。首先創(chuàng)建家目錄(默認(rèn)家目錄為home/judge)并進(jìn)入,在確認(rèn)輸入無誤后創(chuàng)建守護(hù)進(jìn)程,然后在確認(rèn)家目錄無誤且守護(hù)進(jìn)程尚未運(yùn)行后配置數(shù)據(jù)庫信息,通過執(zhí)行SQL語句獲取符合要求的題目標(biāo)記值信息(這里是對(duì)應(yīng)的是題目的主鍵solution_id),之后計(jì)算機(jī)一直處于等待返回信息狀態(tài),一旦接收到對(duì)應(yīng)信號(hào),則立馬結(jié)束判題服務(wù)進(jìn)程,如果進(jìn)程未結(jié)束則表示準(zhǔn)備就緒。接下來進(jìn)入循環(huán)體,該創(chuàng)建的守護(hù)進(jìn)程就正式成為執(zhí)行題目的判題守護(hù)進(jìn)程并開始起作用,直到出現(xiàn)錯(cuò)誤或題目全部已經(jīng)答完。
2.1.2 判題進(jìn)程源碼分析
判題進(jìn)程代碼(judge_client.cc)是由1989行C語言編寫的源代碼組成,總大小為70.8KB。獲取題目solution_id并為之編號(hào),在配置數(shù)據(jù)庫配置信息后驗(yàn)證數(shù)據(jù)庫是否運(yùn)行正常,結(jié)果(記錄在result中)共有0至13共14種情況,其中, result為4表示AC,即結(jié)果正確,其他數(shù)字對(duì)應(yīng)代表一種出錯(cuò)情況。判題進(jìn)程源碼采用的是沙箱技術(shù),通過創(chuàng)建一個(gè)虛擬環(huán)境并在其中運(yùn)行,待得出結(jié)果后刪除它。這就保證了系統(tǒng)的安全性。
HUSTOJ數(shù)據(jù)庫共有17張數(shù)據(jù)表。中本系統(tǒng)調(diào)用的最主要數(shù)據(jù)表是記錄題目提交運(yùn)行相關(guān)信息的表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數(shù)據(jù)表中不存在外鍵,數(shù)據(jù)的完整性由web中的PHP代碼保證。
本考試系統(tǒng)功能分為四大模塊:用戶登錄驗(yàn)證模塊、系統(tǒng)管理員模塊、教師模塊和學(xué)生模塊。
首先輸入正確的姓名、密碼,并選擇相應(yīng)的身份,然后單擊登錄按鈕即可。如果輸入無誤,則進(jìn)入相應(yīng)界面,否則顯示錯(cuò)誤提示信息。
4.2.1 教師管理
根據(jù)教師姓名、職稱和部門查詢教師信息,符合條件的教師信息(教師姓名、密碼、職稱、部門)以一張表格形式展現(xiàn),在信息的最后,管理員可以選擇修改該教師信息或刪除該教師信息。
4.2.2 學(xué)生管理
根據(jù)學(xué)生學(xué)號(hào)、姓名、專業(yè)和年級(jí)查詢學(xué)生信息,符合條件的學(xué)生信息(學(xué)生學(xué)號(hào)、姓名、密碼、性別、專業(yè)、年級(jí))以一張表格形式展現(xiàn),在信息的最后,管理員可以選擇修改該學(xué)生信息功能或刪除該學(xué)生信息
4.2.3 題庫管理
根據(jù)題目?jī)?nèi)容、題型、知識(shí)點(diǎn)和章節(jié)查詢題庫信息,符合條件的題庫信息(題目?jī)?nèi)容、題型、知識(shí)點(diǎn)、章節(jié))以一張表格形式展現(xiàn),在信息的最后,管理員可以選擇修改該題目或刪除該題目。
4.3.1 人工組卷
輸入試卷基本信息(試卷名稱、考試時(shí)間、選擇題數(shù)量、判斷題數(shù)量、填空題數(shù)量、程序題數(shù)量、選擇題分值、填空題分值、判斷題分值、程序題分值)后單擊提交,進(jìn)入組卷界面。單擊“選擇題”后題庫中的所有選擇題將顯示,教師可任意選取,不過必須與試卷基本信息中的題數(shù)相對(duì)應(yīng),否則最終提交將會(huì)無效。其他還有“填空題”、“判斷題”和“程序題”,于此類似。最后,單擊“提交”,在系統(tǒng)提示完成后組卷工作完成。
4.3.2 人工閱卷
從數(shù)據(jù)庫中選取該教師出的試卷,從中再選取未曾批改過的題目,將信息(學(xué)號(hào)、試卷編號(hào)、題目編號(hào)、考生答案、參考答案、機(jī)器批閱結(jié)果、是否已核對(duì)、更正)顯示出來。對(duì)于已核對(duì)的題目,則在“核對(duì)”中打鉤,并作為最終結(jié)果。如果遇到自動(dòng)批改試卷有出路的地方,則在“核對(duì)”中選中之后還需在更正一欄中填入正確得分。
4.3.3 試卷分析
選中條件信息(學(xué)號(hào)、試卷編號(hào)、題目編號(hào))進(jìn)行查閱試卷。在選中試卷?xiàng)l件之后單擊“查詢”,可以得到相應(yīng)學(xué)號(hào)、試卷編號(hào)、題目編號(hào)、得分、該題平均分以及排名統(tǒng)計(jì)信息。
4.3.4 試卷查詢
選中試卷?xiàng)l件信息(試卷編號(hào)、題目編號(hào)編號(hào))進(jìn)行查詢。在選中試卷?xiàng)l件之后單擊“查詢”,可以得到相應(yīng)試卷編號(hào)、題目編號(hào)、試卷名稱、題目?jī)?nèi)容和刪除信息。如果教師對(duì)該每一題目不滿意欲刪除,則可以通過單擊左鍵“刪除”來達(dá)到目的。
4.3.5 成績(jī)查詢
選中條件信息(學(xué)號(hào)、試卷編號(hào))進(jìn)行查閱。在選中條件之后單擊“查詢”,可以得到相應(yīng)學(xué)號(hào)、試卷名稱、題目編號(hào)、得分、平均分信息。
4.4.1 進(jìn)入考試
單擊導(dǎo)航欄中的“進(jìn)入考試”鏈接,顯示信息分為兩部分:功能區(qū)以及信息區(qū)。功能區(qū)位于上方。學(xué)生選擇試卷編號(hào)并單擊“進(jìn)入考試”按鈕進(jìn)入答題頁面。而信息區(qū)域顯示勵(lì)志故事,旨在激勵(lì)學(xué)生。答題頁面是本次考試試卷全部?jī)?nèi)容。每一道題目由題號(hào)、題目?jī)?nèi)容、題型和考生答案四部分構(gòu)成??荚囋凇翱忌鸢浮敝刑顚懘鸢负髥螕繇撁嫦路降摹疤峤弧卑粹o即可交卷。本系統(tǒng)采用系統(tǒng)自動(dòng)閱卷功能,在學(xué)生提交答案后系統(tǒng)自動(dòng)在后臺(tái)運(yùn)行批改程序,在第一時(shí)間得到結(jié)果。
4.4.2 成績(jī)查詢
選中條件信息(學(xué)號(hào)、試卷編號(hào))進(jìn)行查閱。在選中條件之后單擊“查詢”,可以得到相應(yīng)學(xué)號(hào)、試卷名稱、題目編號(hào)、得分、平均分信息。
因?yàn)榛贖USTOJ的高級(jí)語言考試系統(tǒng)是一套能夠?qū)崿F(xiàn)計(jì)算機(jī)自動(dòng)批改試卷的高級(jí)語言考試系統(tǒng),而本系統(tǒng)的研究重點(diǎn)是在LAMP( Linux + Apache + MySQL + PHP )的框架下,在自動(dòng)程序判題系統(tǒng)HUSTOJ的基礎(chǔ)上進(jìn)行自行設(shè)計(jì)并創(chuàng)建一套高級(jí)語言考試系統(tǒng)。可以毫不夸張地說,這是一個(gè)新的領(lǐng)域,而我就是一個(gè)純粹地探索者——在網(wǎng)絡(luò)地幫助下(特別是百度、谷歌等搜索引擎的幫助以及CSDN等網(wǎng)站的幫助),功能基本實(shí)現(xiàn)。
此次實(shí)現(xiàn)了高級(jí)語言考試系統(tǒng)的基本功能。其主要特色是借助HUSTOJ實(shí)現(xiàn)對(duì)程序的自動(dòng)判題。由于本系統(tǒng)是開源系統(tǒng),而且是參照工程化的已有項(xiàng)目搭建完成,所以結(jié)構(gòu)清晰,編程規(guī)范,為以后編程人員解讀代碼或再次開發(fā)提供了保障??傊?,對(duì)于本系統(tǒng)的未來努力方向總結(jié)如下:
(1)美觀性:增強(qiáng)界面美觀設(shè)計(jì),使界面更符合大眾對(duì)審美的需求;
(2)防作弊性:通過數(shù)學(xué)工具實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)計(jì)算,達(dá)到防作弊的效果;
(3)數(shù)據(jù)表現(xiàn)多樣性:對(duì)于各種統(tǒng)計(jì)信息,實(shí)現(xiàn)數(shù)據(jù)與圖形圖畫的轉(zhuǎn)換,實(shí)現(xiàn)諸如折線圖、圓餅圖等功能;
(4)安全性:對(duì)于每次用戶登錄(特別是文本框等數(shù)據(jù)輸入),都要通過多種手段進(jìn)行安全驗(yàn)證,比如正則表達(dá)式等。
[1]張浩斌.基于開放式云平臺(tái)的開源在線評(píng)測(cè)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)科學(xué)2012年增刊,第39 卷第11A 期:339-343,348.
[2]何莉輝,梁滄.基于ACM 國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽的學(xué)習(xí)模式[J].邊疆經(jīng)濟(jì)與文化,2008(6):95-96.
[3]網(wǎng)絡(luò)教育_維基百科[EB/OL]. http://zh.wikipedia.org/wiki/Linux.
[4]車明洙,紀(jì)洪波.一種基于ACM 程序設(shè)計(jì)競(jìng)賽在線評(píng)測(cè)系統(tǒng)解決方案 [J].微型機(jī)與應(yīng)用,2010(4):11-13.