陳宇 黃仲洋 張健
【摘要】離散結(jié)構(gòu)是計算機及相關(guān)專業(yè)核心課程,本文在介紹離散結(jié)構(gòu),LAMP架構(gòu)的基礎(chǔ)上,提出了基于LAMP的離散數(shù)學在線評測題庫系統(tǒng)設(shè)計,實現(xiàn)了對學生提交的程序源代碼進行自動編譯、連接、運行、測試、評審等過程并返回測試結(jié)果,采用了多進程的并發(fā)處理、信號處理、進程通信、文件管理等技術(shù),使得該自動測評系統(tǒng)在實際應(yīng)用過程中發(fā)揮良好的性能,完成了日常編程訓練和考試評測等活動,該系統(tǒng)的實現(xiàn)可以提高離散結(jié)構(gòu)課程的自動化、高效率、公正性等方面。
【關(guān)鍵詞】離散結(jié)構(gòu) 在線評測 LAMP系統(tǒng)架構(gòu)
【中圖分類號】G642.0 【文獻標識碼】A 【文章編號】2095-3089(2015)04-0029-03
The Exploration of Online Judge System Design of Discrete Structures Based on LAMP
Chen Yu,Huang Zhongyang,Zhang jian
(School of information and computer engineering, Northeast Forestry University,Harbin 150040, China)
【Abstract】 Discrete Structures is the core courses of the computer and the related majors, This article describes the basic Discrete Structures and LAMP architecture. Automatic interpretation of source code submitted by the user, linking, running, testing, appraisal process and returning the test results are realized. A multi-process, concurrent processing, signal processing, process communication, document management and other technologies are used. Consequently, the said automatic evaluation system has good performance in the practical application, completing a routine program of training and various types of online programming contest and realizing the automation of competition process, high efficiency, fairness and other features.
【Key words】 Discrete Structures; Online Judge; LAMP architecture
1.離散數(shù)學
離散結(jié)構(gòu)是研究離散量的結(jié)構(gòu)及其相互關(guān)系的數(shù)學學科,是現(xiàn)代數(shù)學的一個重要分支。離散的含義是指不同的連接在一起的元素,主要是研究基于離散量的結(jié)構(gòu)和相互間的關(guān)系,其對象一般是有限個或可數(shù)個元素。離散結(jié)構(gòu)在各學科領(lǐng)域,特別在計算機科學與技術(shù)領(lǐng)域有著廣泛的應(yīng)用,同時離散數(shù)學也是計算機專業(yè)的許多專業(yè)課程,如程序設(shè)計語言、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、編譯技術(shù)、人工智能、數(shù)據(jù)庫、算法設(shè)計與分析、理論計算機科學基礎(chǔ)等必不可少的先行課程。通過離散數(shù)學的學習,不但可以掌握處理離散結(jié)構(gòu)的描述工具和方法,為后續(xù)課程的學習創(chuàng)造條件,而且可以提高抽象思維和嚴格的邏輯推理能力,為將來參與創(chuàng)新性的研究和開發(fā)工作打下堅實的基礎(chǔ)[1-4]。
2.LAMP架構(gòu)
LAMP是Linux+Apache+MySQL+PHP 的縮寫。現(xiàn)如今,LAMP 架構(gòu)可以說是基于Web 的開發(fā)中的最佳技術(shù)解決方案。拋開 Linux 不談,Apache 服務(wù)器、MySQL 數(shù)據(jù)庫管理系統(tǒng)和 PHP 腳本語言本身都是各自獨立的開源軟件,都有著相當健壯的功能。當把三者結(jié)合在一起時,三者構(gòu)成的整體可以擁有高度的兼容性,構(gòu)成了一個強大的 Web開發(fā)平臺。 在 LAMP 平臺中開發(fā)的項目,由于各個開源的軟件已經(jīng)非常成熟,所以在軟件方面的投資成本很低,適合系統(tǒng)平臺的開發(fā)。因此現(xiàn)在越來越多的供應(yīng)商、用戶和企業(yè)投資者日已認識到,使用 LAMP 開源軟件的組成平臺構(gòu)建以及運行各種商業(yè)應(yīng)用和協(xié)作構(gòu)建各種網(wǎng)絡(luò)應(yīng)用程序,變得更加具有競爭力,更加吸引客戶。無論是從性能、質(zhì)量還是價格上 LAMP 都將成為企業(yè)和征服信息化所必須考慮的平臺[5-6]。
Apache網(wǎng)絡(luò)服務(wù)器作為一種開放源碼的Web服務(wù)器,占據(jù)了大部分市場份額,在世界范圍內(nèi)是使用量第一的Web服務(wù)器。Apache網(wǎng)絡(luò)服務(wù)器支持HTTP協(xié)議,可以運行在各種計算機操作平臺上,如Unix/Linux,Windows,MAC等。Apache網(wǎng)絡(luò)服務(wù)器功能強大、靈活性高、可擴展性好,可做代理服務(wù)器并且可通過簡單的API擴展,將PHP等解釋器編譯到服務(wù)器[7]。
PHP,是英文超文本預處理語言Hypertext Preprocessor的縮寫。混合了C、Java、Perl等以及PHP自創(chuàng)語法,使其擁有了獨特的語法。PHP執(zhí)行動態(tài)網(wǎng)頁比CGI或者Perl更加快速。PHP和ASP,JSP腳本語言一樣,也是一種HTML內(nèi)嵌式的語言,并且是面向Web服務(wù)器的技術(shù)[8]。PHP具有非常強大的功能,能實現(xiàn)所有CGI或JavaScript的功能,而且支持幾乎所有流行的數(shù)據(jù)庫以及操作系統(tǒng)[9]。PHP不僅具有以上優(yōu)點,其特色更在于:具有強大的數(shù)據(jù)庫支持、內(nèi)置的函數(shù)庫十分豐富、源碼完全開放、簡單易學并且效率極高。
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB公司開發(fā),目前屬于Oracle公司。MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性[10]。
MySQL作為一般中小型網(wǎng)站開發(fā)的網(wǎng)站數(shù)據(jù)庫的首選,不僅是因為其速度快,體積小,成本低,更是因為其開放源碼這一特點。并且到目前為止,MySQL是和PHP交互最好的數(shù)據(jù)庫系統(tǒng),其搭配PHP和Apache可組成良好的開發(fā)環(huán)境。
3.基于LAMP架構(gòu)的離散結(jié)構(gòu)在線評測題庫系統(tǒng)總體設(shè)計
該系統(tǒng)是集程序設(shè)計競賽、競賽訓練、課程實驗、平時練習于一身的網(wǎng)上實時提交系統(tǒng)。該系統(tǒng)提供了大量供學生練習和競賽的競賽題目,學生在線提交解決相關(guān)練習和競賽題的程序代碼,系統(tǒng)可以自動編譯程序代碼,生成可執(zhí)行文件,并根據(jù)已存儲的測試用例,從程序的正確性、程序運行總時間、耗費內(nèi)存、單用例執(zhí)行時間、程序返回結(jié)果等各方面評測程序代碼,并精確返回各方面的評測結(jié)果。不但支持C、C++、PASCAL以及JAVA語言的編譯,還定義了一套具有充分可擴展性的編輯器擴充規(guī)則,可以在不修改系統(tǒng)任何實現(xiàn)的情況下,通過管理配置文件增加系統(tǒng)可以支持的語言和編譯器。離散數(shù)學在線評測系統(tǒng)性能上的穩(wěn)定快速可以為該課程提供有效的實驗環(huán)境。
3.1系統(tǒng)架構(gòu)設(shè)計
離散結(jié)構(gòu)在線評測系統(tǒng)是基于 WEB 構(gòu)建的,所以整個系統(tǒng)在架構(gòu)上主要分為三個結(jié)構(gòu):客戶端、服務(wù)器端、數(shù)據(jù)庫端。對于客戶端而言,學生主要通過瀏覽器來使用操作系統(tǒng);在服務(wù)器端提供物理服務(wù)器,配置相應(yīng)系統(tǒng)發(fā)布軟件;數(shù)據(jù)庫端配置在服務(wù)器中,存儲系統(tǒng)需要的各類數(shù)據(jù)。
3.2系統(tǒng)功能模塊設(shè)計
離散結(jié)構(gòu)在線測評系統(tǒng)功能模塊圖如圖1所示:
圖1.離散結(jié)構(gòu)在線評測系統(tǒng)功能模塊圖
3.3數(shù)據(jù)庫設(shè)計
在離散結(jié)構(gòu)在線評測系統(tǒng)設(shè)計過程中,數(shù)據(jù)庫的設(shè)計顯得至關(guān)重要。我們嚴格按照數(shù)據(jù)庫設(shè)計的基準和原則進行數(shù)據(jù)庫的所有表和表項的設(shè)計。這樣可以降低項目的開發(fā)難度,方便項目后期的日常維護。同樣,良好的數(shù)據(jù)庫設(shè)計也會降低系統(tǒng)的開發(fā)成本。離散結(jié)構(gòu)在線評測系統(tǒng)數(shù)據(jù)庫設(shè)計如表1所示:
表1 數(shù)據(jù)庫設(shè)計
表名 用途
users 記錄學生或老師的信息
problem 記錄題目信息
message 記錄論壇內(nèi)容
solution 記錄學生提交的作業(yè)信息
source_code 記錄學生提交的作業(yè)內(nèi)容
contest 記錄考試信息
attend 記錄考試成績
4. 基于LAMP架構(gòu)的離散結(jié)構(gòu)在線評測題庫系統(tǒng)詳細設(shè)計
4.1 前臺的詳細設(shè)計
離散結(jié)構(gòu)在線評測題庫系統(tǒng)用戶分為三類:學生,教師和管理員。所有用戶均需要登錄,系統(tǒng)會從users表中取得該用戶的權(quán)限,從而進行分辨。用戶登錄后可以選擇考試或訓練模式,并進入相應(yīng)題庫提交代碼,經(jīng)后臺評測后,即可返回結(jié)果。如果學生對題目或結(jié)果有任何問題,也可以在討論區(qū)發(fā)帖留言,與其他同學進行探討和研究。教師則可以出題、開辦考試、查看考試結(jié)果等操作。
4.2評測系統(tǒng)核心層
評測系統(tǒng)核心是接受用戶提交的程序,把程序的運行結(jié)果返回給用戶,運行結(jié)果為程序正確或程序不正確。程序不正確包括:運行錯誤、運行超時、運行結(jié)果錯誤以及運行結(jié)果輸出格式錯誤。在進行程序評判時,先啟動服務(wù)器評判進程,它是以守護進程的方式存在的。在偵聽到有提交記錄時,守護進程立即從數(shù)據(jù)庫中取出待評判的程序進行編譯,編譯時采用多進程方式,使用Linux下C語言函數(shù)fork()分出一個子進程,在子進程中通過fexecle()函數(shù)調(diào)用gcc或者javac命令進行編譯,然后判斷其編譯結(jié)果。
4.結(jié)束語
離散結(jié)構(gòu)在線評測系統(tǒng)的實現(xiàn)可以夯實學生的程序設(shè)計基礎(chǔ),對于離散結(jié)構(gòu)的學習有著重要意義。它把對理論知識的學習與實際的應(yīng)用有機的結(jié)合起來,注重培養(yǎng)學生的編程能力,訓練學生的解題思維,對于培養(yǎng)學生的創(chuàng)新能力具有很大的幫助。通過該系統(tǒng)的實現(xiàn),提高了教學質(zhì)量和教學水平。
參考文獻:
[1] 許蔓苓.離散數(shù)學的方法和挑戰(zhàn)[J].計算機研究與發(fā)展,2002:1771-1772.
[2] Rosen K H.離散數(shù)學及其應(yīng)用[M].袁崇義,屈婉玲,譯.北京:機械工業(yè)出版,2002.
[3] 耿素云,屈婉玲,王捍貧.離散數(shù)學教程[M].北京:北京大學出版社,2003.
[4] 王元元,張桂蕓.離散數(shù)學導論[M].北京:科學出版社,2002.
[5] 王亞軍. Linux 與 Windows 互操作綜述[J]. 計算機系統(tǒng)應(yīng)用,2012,04:259-263.
[6] 張哲銘. 基于 LAMP 的臺達實驗室管理系統(tǒng)實現(xiàn)[J]. 電子技術(shù),2013,06:65-67.
[7] Hoffmann G.A.,Trivedi K.S.,Malek M.A. Best practice guide to resources forecasting for the apache webserver[C].12th Pacific Rim Internationa1 Symposium on DePendable Computing,2006,Riverside,CA:183-193.
[8] 姜林美,宗杰,徐劍.PHP網(wǎng)絡(luò)編程典型模塊與實例精講[M].北京:電子工業(yè)出版社,2007.
[9] 吉斌武,劉建華,陳以.基于PHP和AJAX的在線考試系統(tǒng)的研究與實現(xiàn)[J].福建電腦,2009,2:107-124.
[10] 陳軍.PHP+MySQL經(jīng)典案例剖析[M].北京:清華大學出版社,2008
基金項目:中央高校基本科研業(yè)務(wù)費專項資金項目(2013CBQ03);黑龍江省教育廳科學技術(shù)研究項目(12513016);黑龍江省自然科學基金項目(F201347);哈爾濱市科技創(chuàng)新人才專項資金項目(2013RFQXJ100);東北林業(yè)大學重點課程建設(shè)項目