陳宇 黃仲洋 張健
【摘要】離散結(jié)構(gòu)是計(jì)算機(jī)及相關(guān)專業(yè)核心課程,本文在介紹離散結(jié)構(gòu),LAMP架構(gòu)的基礎(chǔ)上,提出了基于LAMP的離散數(shù)學(xué)在線評(píng)測(cè)題庫(kù)系統(tǒng)設(shè)計(jì),實(shí)現(xiàn)了對(duì)學(xué)生提交的程序源代碼進(jìn)行自動(dòng)編譯、連接、運(yùn)行、測(cè)試、評(píng)審等過(guò)程并返回測(cè)試結(jié)果,采用了多進(jìn)程的并發(fā)處理、信號(hào)處理、進(jìn)程通信、文件管理等技術(shù),使得該自動(dòng)測(cè)評(píng)系統(tǒng)在實(shí)際應(yīng)用過(guò)程中發(fā)揮良好的性能,完成了日常編程訓(xùn)練和考試評(píng)測(cè)等活動(dòng),該系統(tǒng)的實(shí)現(xiàn)可以提高離散結(jié)構(gòu)課程的自動(dòng)化、高效率、公正性等方面。
【關(guān)鍵詞】離散結(jié)構(gòu) 在線評(píng)測(cè) LAMP系統(tǒng)架構(gòu)
【中圖分類號(hào)】G642.0 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】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ù)學(xué)
離散結(jié)構(gòu)是研究離散量的結(jié)構(gòu)及其相互關(guān)系的數(shù)學(xué)學(xué)科,是現(xiàn)代數(shù)學(xué)的一個(gè)重要分支。離散的含義是指不同的連接在一起的元素,主要是研究基于離散量的結(jié)構(gòu)和相互間的關(guān)系,其對(duì)象一般是有限個(gè)或可數(shù)個(gè)元素。離散結(jié)構(gòu)在各學(xué)科領(lǐng)域,特別在計(jì)算機(jī)科學(xué)與技術(shù)領(lǐng)域有著廣泛的應(yīng)用,同時(shí)離散數(shù)學(xué)也是計(jì)算機(jī)專業(yè)的許多專業(yè)課程,如程序設(shè)計(jì)語(yǔ)言、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、編譯技術(shù)、人工智能、數(shù)據(jù)庫(kù)、算法設(shè)計(jì)與分析、理論計(jì)算機(jī)科學(xué)基礎(chǔ)等必不可少的先行課程。通過(guò)離散數(shù)學(xué)的學(xué)習(xí),不但可以掌握處理離散結(jié)構(gòu)的描述工具和方法,為后續(xù)課程的學(xué)習(xí)創(chuàng)造條件,而且可以提高抽象思維和嚴(yán)格的邏輯推理能力,為將來(lái)參與創(chuàng)新性的研究和開發(fā)工作打下堅(jiān)實(shí)的基礎(chǔ)[1-4]。
2.LAMP架構(gòu)
LAMP是Linux+Apache+MySQL+PHP 的縮寫?,F(xiàn)如今,LAMP 架構(gòu)可以說(shuō)是基于Web 的開發(fā)中的最佳技術(shù)解決方案。拋開 Linux 不談,Apache 服務(wù)器、MySQL 數(shù)據(jù)庫(kù)管理系統(tǒng)和 PHP 腳本語(yǔ)言本身都是各自獨(dú)立的開源軟件,都有著相當(dāng)健壯的功能。當(dāng)把三者結(jié)合在一起時(shí),三者構(gòu)成的整體可以擁有高度的兼容性,構(gòu)成了一個(gè)強(qiáng)大的 Web開發(fā)平臺(tái)。 在 LAMP 平臺(tái)中開發(fā)的項(xiàng)目,由于各個(gè)開源的軟件已經(jīng)非常成熟,所以在軟件方面的投資成本很低,適合系統(tǒng)平臺(tái)的開發(fā)。因此現(xiàn)在越來(lái)越多的供應(yīng)商、用戶和企業(yè)投資者日已認(rèn)識(shí)到,使用 LAMP 開源軟件的組成平臺(tái)構(gòu)建以及運(yùn)行各種商業(yè)應(yīng)用和協(xié)作構(gòu)建各種網(wǎng)絡(luò)應(yīng)用程序,變得更加具有競(jìng)爭(zhēng)力,更加吸引客戶。無(wú)論是從性能、質(zhì)量還是價(jià)格上 LAMP 都將成為企業(yè)和征服信息化所必須考慮的平臺(tái)[5-6]。
Apache網(wǎng)絡(luò)服務(wù)器作為一種開放源碼的Web服務(wù)器,占據(jù)了大部分市場(chǎng)份額,在世界范圍內(nèi)是使用量第一的Web服務(wù)器。Apache網(wǎng)絡(luò)服務(wù)器支持HTTP協(xié)議,可以運(yùn)行在各種計(jì)算機(jī)操作平臺(tái)上,如Unix/Linux,Windows,MAC等。Apache網(wǎng)絡(luò)服務(wù)器功能強(qiáng)大、靈活性高、可擴(kuò)展性好,可做代理服務(wù)器并且可通過(guò)簡(jiǎn)單的API擴(kuò)展,將PHP等解釋器編譯到服務(wù)器[7]。
PHP,是英文超文本預(yù)處理語(yǔ)言Hypertext Preprocessor的縮寫?;旌狭薈、Java、Perl等以及PHP自創(chuàng)語(yǔ)法,使其擁有了獨(dú)特的語(yǔ)法。PHP執(zhí)行動(dòng)態(tài)網(wǎng)頁(yè)比CGI或者Perl更加快速。PHP和ASP,JSP腳本語(yǔ)言一樣,也是一種HTML內(nèi)嵌式的語(yǔ)言,并且是面向Web服務(wù)器的技術(shù)[8]。PHP具有非常強(qiáng)大的功能,能實(shí)現(xiàn)所有CGI或JavaScript的功能,而且支持幾乎所有流行的數(shù)據(jù)庫(kù)以及操作系統(tǒng)[9]。PHP不僅具有以上優(yōu)點(diǎn),其特色更在于:具有強(qiáng)大的數(shù)據(jù)庫(kù)支持、內(nèi)置的函數(shù)庫(kù)十分豐富、源碼完全開放、簡(jiǎn)單易學(xué)并且效率極高。
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL AB公司開發(fā),目前屬于Oracle公司。MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性[10]。
MySQL作為一般中小型網(wǎng)站開發(fā)的網(wǎng)站數(shù)據(jù)庫(kù)的首選,不僅是因?yàn)槠渌俣瓤?,體積小,成本低,更是因?yàn)槠溟_放源碼這一特點(diǎn)。并且到目前為止,MySQL是和PHP交互最好的數(shù)據(jù)庫(kù)系統(tǒng),其搭配PHP和Apache可組成良好的開發(fā)環(huán)境。
3.基于LAMP架構(gòu)的離散結(jié)構(gòu)在線評(píng)測(cè)題庫(kù)系統(tǒng)總體設(shè)計(jì)
該系統(tǒng)是集程序設(shè)計(jì)競(jìng)賽、競(jìng)賽訓(xùn)練、課程實(shí)驗(yàn)、平時(shí)練習(xí)于一身的網(wǎng)上實(shí)時(shí)提交系統(tǒng)。該系統(tǒng)提供了大量供學(xué)生練習(xí)和競(jìng)賽的競(jìng)賽題目,學(xué)生在線提交解決相關(guān)練習(xí)和競(jìng)賽題的程序代碼,系統(tǒng)可以自動(dòng)編譯程序代碼,生成可執(zhí)行文件,并根據(jù)已存儲(chǔ)的測(cè)試用例,從程序的正確性、程序運(yùn)行總時(shí)間、耗費(fèi)內(nèi)存、單用例執(zhí)行時(shí)間、程序返回結(jié)果等各方面評(píng)測(cè)程序代碼,并精確返回各方面的評(píng)測(cè)結(jié)果。不但支持C、C++、PASCAL以及JAVA語(yǔ)言的編譯,還定義了一套具有充分可擴(kuò)展性的編輯器擴(kuò)充規(guī)則,可以在不修改系統(tǒng)任何實(shí)現(xiàn)的情況下,通過(guò)管理配置文件增加系統(tǒng)可以支持的語(yǔ)言和編譯器。離散數(shù)學(xué)在線評(píng)測(cè)系統(tǒng)性能上的穩(wěn)定快速可以為該課程提供有效的實(shí)驗(yàn)環(huán)境。
3.1系統(tǒng)架構(gòu)設(shè)計(jì)
離散結(jié)構(gòu)在線評(píng)測(cè)系統(tǒng)是基于 WEB 構(gòu)建的,所以整個(gè)系統(tǒng)在架構(gòu)上主要分為三個(gè)結(jié)構(gòu):客戶端、服務(wù)器端、數(shù)據(jù)庫(kù)端。對(duì)于客戶端而言,學(xué)生主要通過(guò)瀏覽器來(lái)使用操作系統(tǒng);在服務(wù)器端提供物理服務(wù)器,配置相應(yīng)系統(tǒng)發(fā)布軟件;數(shù)據(jù)庫(kù)端配置在服務(wù)器中,存儲(chǔ)系統(tǒng)需要的各類數(shù)據(jù)。
3.2系統(tǒng)功能模塊設(shè)計(jì)
離散結(jié)構(gòu)在線測(cè)評(píng)系統(tǒng)功能模塊圖如圖1所示:
圖1.離散結(jié)構(gòu)在線評(píng)測(cè)系統(tǒng)功能模塊圖
3.3數(shù)據(jù)庫(kù)設(shè)計(jì)
在離散結(jié)構(gòu)在線評(píng)測(cè)系統(tǒng)設(shè)計(jì)過(guò)程中,數(shù)據(jù)庫(kù)的設(shè)計(jì)顯得至關(guān)重要。我們嚴(yán)格按照數(shù)據(jù)庫(kù)設(shè)計(jì)的基準(zhǔn)和原則進(jìn)行數(shù)據(jù)庫(kù)的所有表和表項(xiàng)的設(shè)計(jì)。這樣可以降低項(xiàng)目的開發(fā)難度,方便項(xiàng)目后期的日常維護(hù)。同樣,良好的數(shù)據(jù)庫(kù)設(shè)計(jì)也會(huì)降低系統(tǒng)的開發(fā)成本。離散結(jié)構(gòu)在線評(píng)測(cè)系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)如表1所示:
表1 數(shù)據(jù)庫(kù)設(shè)計(jì)
表名 用途
users 記錄學(xué)生或老師的信息
problem 記錄題目信息
message 記錄論壇內(nèi)容
solution 記錄學(xué)生提交的作業(yè)信息
source_code 記錄學(xué)生提交的作業(yè)內(nèi)容
contest 記錄考試信息
attend 記錄考試成績(jī)
4. 基于LAMP架構(gòu)的離散結(jié)構(gòu)在線評(píng)測(cè)題庫(kù)系統(tǒng)詳細(xì)設(shè)計(jì)
4.1 前臺(tái)的詳細(xì)設(shè)計(jì)
離散結(jié)構(gòu)在線評(píng)測(cè)題庫(kù)系統(tǒng)用戶分為三類:學(xué)生,教師和管理員。所有用戶均需要登錄,系統(tǒng)會(huì)從users表中取得該用戶的權(quán)限,從而進(jìn)行分辨。用戶登錄后可以選擇考試或訓(xùn)練模式,并進(jìn)入相應(yīng)題庫(kù)提交代碼,經(jīng)后臺(tái)評(píng)測(cè)后,即可返回結(jié)果。如果學(xué)生對(duì)題目或結(jié)果有任何問(wèn)題,也可以在討論區(qū)發(fā)帖留言,與其他同學(xué)進(jìn)行探討和研究。教師則可以出題、開辦考試、查看考試結(jié)果等操作。
4.2評(píng)測(cè)系統(tǒng)核心層
評(píng)測(cè)系統(tǒng)核心是接受用戶提交的程序,把程序的運(yùn)行結(jié)果返回給用戶,運(yùn)行結(jié)果為程序正確或程序不正確。程序不正確包括:運(yùn)行錯(cuò)誤、運(yùn)行超時(shí)、運(yùn)行結(jié)果錯(cuò)誤以及運(yùn)行結(jié)果輸出格式錯(cuò)誤。在進(jìn)行程序評(píng)判時(shí),先啟動(dòng)服務(wù)器評(píng)判進(jìn)程,它是以守護(hù)進(jìn)程的方式存在的。在偵聽到有提交記錄時(shí),守護(hù)進(jìn)程立即從數(shù)據(jù)庫(kù)中取出待評(píng)判的程序進(jìn)行編譯,編譯時(shí)采用多進(jìn)程方式,使用Linux下C語(yǔ)言函數(shù)fork()分出一個(gè)子進(jìn)程,在子進(jìn)程中通過(guò)fexecle()函數(shù)調(diào)用gcc或者javac命令進(jìn)行編譯,然后判斷其編譯結(jié)果。
4.結(jié)束語(yǔ)
離散結(jié)構(gòu)在線評(píng)測(cè)系統(tǒng)的實(shí)現(xiàn)可以夯實(shí)學(xué)生的程序設(shè)計(jì)基礎(chǔ),對(duì)于離散結(jié)構(gòu)的學(xué)習(xí)有著重要意義。它把對(duì)理論知識(shí)的學(xué)習(xí)與實(shí)際的應(yīng)用有機(jī)的結(jié)合起來(lái),注重培養(yǎng)學(xué)生的編程能力,訓(xùn)練學(xué)生的解題思維,對(duì)于培養(yǎng)學(xué)生的創(chuàng)新能力具有很大的幫助。通過(guò)該系統(tǒng)的實(shí)現(xiàn),提高了教學(xué)質(zhì)量和教學(xué)水平。
參考文獻(xiàn):
[1] 許蔓苓.離散數(shù)學(xué)的方法和挑戰(zhàn)[J].計(jì)算機(jī)研究與發(fā)展,2002:1771-1772.
[2] Rosen K H.離散數(shù)學(xué)及其應(yīng)用[M].袁崇義,屈婉玲,譯.北京:機(jī)械工業(yè)出版,2002.
[3] 耿素云,屈婉玲,王捍貧.離散數(shù)學(xué)教程[M].北京:北京大學(xué)出版社,2003.
[4] 王元元,張桂蕓.離散數(shù)學(xué)導(dǎo)論[M].北京:科學(xué)出版社,2002.
[5] 王亞軍. Linux 與 Windows 互操作綜述[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,04:259-263.
[6] 張哲銘. 基于 LAMP 的臺(tái)達(dá)實(shí)驗(yàn)室管理系統(tǒng)實(shí)現(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ò)編程典型模塊與實(shí)例精講[M].北京:電子工業(yè)出版社,2007.
[9] 吉斌武,劉建華,陳以.基于PHP和AJAX的在線考試系統(tǒng)的研究與實(shí)現(xiàn)[J].福建電腦,2009,2:107-124.
[10] 陳軍.PHP+MySQL經(jīng)典案例剖析[M].北京:清華大學(xué)出版社,2008
基金項(xiàng)目:中央高校基本科研業(yè)務(wù)費(fèi)專項(xiàng)資金項(xiàng)目(2013CBQ03);黑龍江省教育廳科學(xué)技術(shù)研究項(xiàng)目(12513016);黑龍江省自然科學(xué)基金項(xiàng)目(F201347);哈爾濱市科技創(chuàng)新人才專項(xiàng)資金項(xiàng)目(2013RFQXJ100);東北林業(yè)大學(xué)重點(diǎn)課程建設(shè)項(xiàng)目