影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

Online Judge System 設(shè)計與實(shí)現(xiàn)

上傳人:仙*** 文檔編號:30467497 上傳時間:2021-10-10 格式:DOC 頁數(shù):20 大?。?46KB
收藏 版權(quán)申訴 舉報 下載
Online Judge System 設(shè)計與實(shí)現(xiàn)_第1頁
第1頁 / 共20頁
Online Judge System 設(shè)計與實(shí)現(xiàn)_第2頁
第2頁 / 共20頁
Online Judge System 設(shè)計與實(shí)現(xiàn)_第3頁
第3頁 / 共20頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《Online Judge System 設(shè)計與實(shí)現(xiàn)》由會員分享,可在線閱讀,更多相關(guān)《Online Judge System 設(shè)計與實(shí)現(xiàn)(20頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、Online Judge System 設(shè)計與實(shí)現(xiàn) 摘要 電子計算機(jī)自產(chǎn)生之日起就體現(xiàn)了其強(qiáng)大的生命力,短短幾十年的時間,計算機(jī)已經(jīng)逐漸滲透到了我們這個社會工作和生活的各個領(lǐng)域,并且發(fā)揮著越來越重要作用,成為人們工作、學(xué)習(xí)、科學(xué)研究的得力助手。它在教育領(lǐng)域同樣發(fā)揮著相當(dāng)重要的應(yīng)用,過去傳統(tǒng)的ftp, email方式提交學(xué)生程序作業(yè)并進(jìn)行手工評判的方法,其繁重的工作量在我們今天看來是無法想象的。在高等院校的教學(xué)中,計算機(jī)方面的課程,特別是程序設(shè)計語言課程,具有實(shí)踐性特別強(qiáng)的特點(diǎn)。它要求學(xué)生不僅僅要學(xué)習(xí)理論知識,還必須進(jìn)行大量的實(shí)踐,才能真正掌握知識,在實(shí)踐應(yīng)用中發(fā)揮作用。而在目前的教育、考

2、核方式下,卻不能真正考核出學(xué)生的真實(shí)水平,特別是在實(shí)踐方面的水平,也不能引導(dǎo)學(xué)生以有效的方式來學(xué)習(xí)這些課程。各種強(qiáng)大的軟件系統(tǒng)伴隨著計算機(jī)硬件的飛速發(fā)展而發(fā)展,使得今天我們利用計算機(jī)來實(shí)現(xiàn)智能在線評判的想法可以得以實(shí)現(xiàn)。 本文針對現(xiàn)行的Online Judge系統(tǒng)進(jìn)行了分析,綜合了各系統(tǒng)的功能特點(diǎn),提出了系統(tǒng)的設(shè)計方案和開發(fā)原理,實(shí)現(xiàn)了程序設(shè)計競賽評判過程的自動化,標(biāo)準(zhǔn)化,以實(shí)時的方式反饋回學(xué)生評判結(jié)果,用戶使用方便等功能特色。 本系統(tǒng)前臺開發(fā)基于Apache + PHP + MySQL,后臺開發(fā)基于Qt工具包。詳細(xì)地介紹了程序評判流程(提交,編譯,運(yùn)行,測試等),程序運(yùn)行的原理及程序

3、運(yùn)行時資源的管理,對系統(tǒng)模塊的劃分和后臺的設(shè)計進(jìn)行了詳盡的說明。 本文結(jié)構(gòu)清晰,首先簡明的闡述了評判系統(tǒng)的開發(fā)背景,研究現(xiàn)狀,目的和意義,然后針對系統(tǒng)的目標(biāo)進(jìn)行了總體的構(gòu)架設(shè)計,最后根據(jù)設(shè)計思想提供了各個模塊的設(shè)計細(xì)節(jié)。通過全面的論述得出該系統(tǒng)在各個方面的性能分析。 關(guān)鍵詞:在線評判系統(tǒng);進(jìn)程管理;多線程;模型 The Design and Implementation of Online Judge System Abstract Computer shows its strong vitality since it has invented, and within few

4、 decades time, computer has gradually infiltrated into our society in all spheres of work and life, and is playing an increasingly important role in people’s work, study and research. It also plays an important application in the field of education. The traditional ftp, email submission of student a

5、ssignments and then judge them by hand one by one, now this method shows its heavy workload and is unimaginable. In teaching of high schools, many computer courses are demanded with strong practical capability, especially some programming language courses. It requires that students study not only th

6、eory knowledge but also lots of practice so that they master knowledge factly and bring into use in actual applications. However, on the way of today’s teaching and examining, the student’s genuine level would not be estimated properly, in particular, in practicing aspects. Of course, it can not lea

7、d students to learn these courses efficiently. Various powerful computer software systems come along whih the rapid development of hardware make it possible to achieve the thought of the intelligent judging online. This thesis analysis several current Online Judge System, and synthesizes the func

8、tional features of each system, then raise the principles of the system design and development, and achieve the programming contest judging process automation, standardisation, returning real-time results to students, convenience of use and other functional features. The development of the front-e

9、nd of this system based on Apache, PHP and MySQL, the back-end development based on Qt development toolkit. There are detail presentations of the programming judging procedure: ssubmit the programming source code, compile, run and test the answer, etc., the program running principles and the runtime

10、 resources management. And explains the system modules division and the back-end designs. In this paper the structure clear. First concisly states the background of the Online Judge System, its current researches, purpose and meaning. Then focus on the overall framework design to the system’s goal

11、s. Finally shows the design details of each module according to the design ideas, and obtained the various aspects of performance analysis information through comprehensive exposition of the system. Keywords: online judge system; process management; multi-thread; model 前言 1 課題背景 ACM/ICPC(ACM In

12、ternational Collegiate Programming Contest, 國際大學(xué)生程序設(shè)計競賽)是由國際計算機(jī)界歷史悠久、頗具權(quán)威性的組織 ACM(Association for Computing Machinery,國際計算機(jī)協(xié)會)主辦的,世界上公認(rèn)的規(guī)模最大、水平最高的國際大學(xué)生程序設(shè)計競賽,其目的旨在使大學(xué)生運(yùn)用計算機(jī)來充分展示自己分析問題和解決問題的能力。該項(xiàng)競賽從1970年開始舉辦,一直受到國際各知名大學(xué)的重視,并受到全世界各著名計算機(jī)公司的高度關(guān)注,在過去十幾年中 APPLE、AT&T、MICROSOFT 和 IBM 等世界著名信息企業(yè)分別擔(dān)任了競賽的贊助商??梢?/p>

13、說,ACM 國際大學(xué)生程序設(shè)計競賽已成為世界各國大學(xué)生最具影響力的國際級計算機(jī)類的賽事, 是廣大愛好計算機(jī)編程的大學(xué)生展示才華的舞臺,是著名大學(xué)計算機(jī)教育成果的直接體現(xiàn),是信息企業(yè)與世界頂尖計算機(jī)人才對話的最好機(jī)會。 Online judge system 是基于該背景下提出的一個程序設(shè)計競賽評判系統(tǒng),它對用戶提交的程序源文件進(jìn)行編譯,運(yùn)行,評判,給出用戶的答題反饋信息,對用戶答題情況進(jìn)行統(tǒng)計排名等。 2 課題的提出 在實(shí)現(xiàn)計算機(jī)運(yùn)用和信息網(wǎng)絡(luò)化的今天,效率的大幅提高以及信息交換的深入和擴(kuò)大, 使人類的生活越來越離不開數(shù)字化、信息化。信息決定著我們的生存,這已是不爭的事實(shí)。以多媒體計

14、算機(jī)技術(shù)和網(wǎng)絡(luò)通訊技術(shù)為主要標(biāo)志的信息技術(shù),對當(dāng)代社會產(chǎn)生著重大的影響,改變著我們的工作方式、學(xué)習(xí)方式和生活方式。信息技術(shù)在教育領(lǐng)域的運(yùn)用是導(dǎo)致教育領(lǐng)域徹底變革的決定性因素,它必將導(dǎo)致教學(xué)內(nèi)容、手段、方法、模式甚至教學(xué)思想、觀念、理論以及體制的根本變革。 隨著信息化進(jìn)程的飛速發(fā)展以及計算機(jī)技術(shù)的普及,高等院校開設(shè)了越來越多的計算機(jī)課程。和傳統(tǒng)的課程比較,計算機(jī)課程具有實(shí)踐性很強(qiáng)的特點(diǎn)。學(xué)生要學(xué)好這些課程不但要認(rèn)真學(xué)習(xí)理論知識,還需要大量的實(shí)踐訓(xùn)練。例如,C 語言課程的學(xué)習(xí),就需要編寫大量的程序,才能夠積累足夠的經(jīng)驗(yàn),真正掌握程序設(shè)計的方法,編寫出正確、高效的程序。對傳統(tǒng)課程的考核多采用筆試

15、的方式,但是,對于計算機(jī)方面的課程,特別是程序設(shè)計語言類課程這是不夠的,因?yàn)樗⒉荒艽偈箤W(xué)生在平時的學(xué)習(xí)中加強(qiáng)實(shí)踐的鍛煉。如何對這些課程進(jìn)行有效的考核,成為一個長期工作在第一線的計算機(jī)教育工作者反復(fù)思考和不斷探索的問題。 在目前的教學(xué)方式中,多數(shù)高等院?;旧线€是采用基于傳統(tǒng)方式的筆試來考核學(xué)生的計算機(jī)課程水平,然后在此基礎(chǔ)上稍作補(bǔ)充。在上機(jī)實(shí)踐考試中,學(xué)生采用FTP,Email,甚至手寫的方式提交編程作業(yè),老師需要對他們的作業(yè)進(jìn)行一一批閱,相當(dāng)多的時候,任課教師從學(xué)生處得到的是一些低效的,甚至不能運(yùn)行通過的源代碼,可是卻要花費(fèi)不少時間來判斷分析學(xué)生程序到底在什么地方出錯,然后給出相應(yīng)的得

16、分。這需要老師和學(xué)生花費(fèi)很多的精力,效果也不是很好。學(xué)生更無法得知自己所編寫的程序存在哪方面的問題,因而不能有效及時地進(jìn)行更正。而Online Judge可以自動批閱作業(yè)并給出成績,并且直接統(tǒng)計學(xué)生作業(yè)的提交情況,以及成績的登記。這給老師帶來了很大的方便,同時學(xué)生也可以通過Online Judge直接查詢答題狀況。 3 研究現(xiàn)狀 現(xiàn)在已有不少學(xué)校采用由計算機(jī)進(jìn)行編程作業(yè)評判的方式來對學(xué)生的作業(yè)進(jìn)行考核。但更多的情況下是學(xué)生的編程作業(yè)通過FTP,Email等方式提交給老師后,由老師直接對程序以及程序的相關(guān)文檔進(jìn)行閱讀,采用計算機(jī)對程序直接進(jìn)行評判還不是很普遍??偟膩碚f,在對編程作業(yè)的提交進(jìn)

17、行后處理方面已經(jīng)有了一定程度的研究,而且與此課題相關(guān)的一些技術(shù),像對程序的后處理在ACM等領(lǐng)域已經(jīng)普遍運(yùn)用。已有相當(dāng)多的高校建立了題庫和平臺。大部分平臺是基于 ACM 程序設(shè)計競賽規(guī)則而開發(fā)的,有的平臺是基于程序設(shè)計題目中的“得分點(diǎn)”而設(shè)計的。 國內(nèi)目前已有很多學(xué)校開發(fā)了自主的評判系統(tǒng),如: 、 。并且北京大學(xué)提供了 free version of Judge Online. 4 課題研究的目的和意義 采用 Online Judge 后,老師可以通過對參數(shù)進(jìn)行設(shè)置,限制學(xué)生提交的編程作業(yè)的類型、文件大小、運(yùn)行時間長短和空間大小。學(xué)生在提交編程作業(yè)時能夠很快的得到作業(yè)是否正確的反饋。一

18、方面,Online Judge 可以對作業(yè)進(jìn)行自動編譯,檢查出程序是否存在語法錯誤;另一方面,它還能驗(yàn)證程序是否能得到正確結(jié)果,以及所花費(fèi)的代價(時間和空間上的)。根據(jù)后處理的結(jié)果與相應(yīng)的參數(shù)設(shè)置,Online Judge 能自動給出學(xué)生此次編程作業(yè)的成績。這大大地減小了學(xué)生提交錯誤程序的概率,還能給出與程序相應(yīng)的成績。當(dāng)然老師也可以進(jìn)行再次審查,對學(xué)生的作業(yè)提出評語,修改成績等。這種方式完全模擬了使用程序設(shè)計語言解決實(shí)際問題的過程,編寫程序、不斷測試修改、根據(jù)結(jié)果反饋修改程序。這樣的考試方式對學(xué)生的學(xué)習(xí)過程具有很好的指導(dǎo)作用。與此同時,還消除了老師在檢查作業(yè)的過程中的主觀因素,增加了學(xué)生之間

19、的公平性。 Online Judge 的實(shí)現(xiàn),能很快地運(yùn)用到現(xiàn)實(shí)的學(xué)習(xí)生活中去,有效的考核學(xué)生的真實(shí)水平,促使學(xué)生更好的學(xué)習(xí)計算機(jī)知識,強(qiáng)化學(xué)生的實(shí)踐能力,給學(xué)生和老師帶來立竿見影的效果;極大地提高了學(xué)生和老師雙方面的效率,減輕了老師在教學(xué)管理上的負(fù)擔(dān);還使學(xué)生將來能更好地適應(yīng)快速發(fā)展的信息化時代;進(jìn)一步發(fā)揮出計算機(jī)網(wǎng)絡(luò)對當(dāng)今教育領(lǐng)域甚至其他行業(yè)的突出貢獻(xiàn)。 系統(tǒng)分析 1 現(xiàn)行在線評判系統(tǒng)分析 通過對國內(nèi)大多數(shù)在線評判系統(tǒng)的研究,提取其優(yōu)點(diǎn)總結(jié)其中的不足之處。很多系統(tǒng)功能不全,使用不方便。有的服務(wù)器響應(yīng)速度很慢,評判信息不夠精確,詳細(xì);有的不能支持現(xiàn)行流行的各種編程語言;有的系統(tǒng)維

20、護(hù)管理機(jī)制繁瑣,不易擴(kuò)展與升級等。因此開發(fā)一個全功能,使用簡單方便,易于擴(kuò)展升級維護(hù)的在線評判系統(tǒng)很有必要。 2 可行性研究 對現(xiàn)有系統(tǒng)的功能進(jìn)行分析后,下面就本著減少不必要的投入過多的人力物力的原則,對系統(tǒng)的開發(fā)進(jìn)行可行性分析。一是可能性,二是必要性。通過可行性研究,可避免盲目投資。下面從三方面來討論: 1. 經(jīng)濟(jì)可行性。經(jīng)濟(jì)可行性是指開發(fā)系統(tǒng)的費(fèi)用,主要是指一個新的系統(tǒng)開發(fā)所需要的成本費(fèi)用和人員費(fèi)用,并與估計的新系統(tǒng)收益進(jìn)行比較,看是否有利。本系統(tǒng)所需的軟件和工具包均無需購買,apache + php + mysql 和 Qt 都有開源版本,現(xiàn)有的計算機(jī)硬件就可以滿足要求,因此,

21、在經(jīng)濟(jì)上是可行的。 2. 應(yīng)用可行性。由于現(xiàn)在大部分大中專學(xué)校缺乏在線評判系統(tǒng),或是有的系統(tǒng)使用不便,功能不全面。教師對程序設(shè)計作業(yè)評判工作越來越繁重,因而一個可以實(shí)現(xiàn)自動評判的軟件必不可少,而現(xiàn)有的軟件還不能滿足教師的需要,此外現(xiàn)在校園網(wǎng)絡(luò)發(fā)達(dá),基于這些原因,我開發(fā)的在線評判系統(tǒng)是可行的,這樣不僅減輕教師的負(fù)擔(dān),而且評判結(jié)果更具公平性、客觀性,能夠準(zhǔn)確地反映教學(xué)質(zhì)量,有利于選拔人才,促進(jìn)教學(xué)改革。 3. 技術(shù)可行性。技術(shù)可行性是指利用現(xiàn)有的設(shè)備,軟件及技術(shù)人員,新系統(tǒng)的目標(biāo)能否達(dá)到。本系統(tǒng)使用的 php 適應(yīng)性好,mysql 速度快而且跨平臺,Qt 作為后臺開發(fā),我能熟練應(yīng)用它們。因

22、此,在技術(shù)上是完全可行的。 3 競賽規(guī)則 參賽隊(duì)員以小組的形式參賽,每小組 3 人,由隊(duì)長及 2 名隊(duì)員組成,并為每組取一隊(duì)名。比賽時間一般為 5 小時,6 至9 個題目,每個參賽隊(duì)員共用一臺電腦答題。 參賽隊(duì)伍首先根據(jù)解題數(shù)目進(jìn)行排名。在決定獲獎隊(duì)伍時,如果多支隊(duì)伍解題數(shù)量相同,則根據(jù)總用時進(jìn)行排名??傆脮r由每道解答正確的用時的和。每道題目的用時將從競賽開始到題目解答被判定為正確為止,其間每一次評判未通過將被加罰 20 分鐘的時間,未正確解答的題目不記時。 參賽隊(duì)員在比賽場地在自已的電腦上答題,然后將源代碼復(fù)制到提交頁面的代碼文本框中,選擇相應(yīng)的編譯選項(xiàng)后,提交給服務(wù)器進(jìn)行評判

23、。服務(wù)器根據(jù)用戶答題情況返回評判結(jié)果反饋信息,具體說明如下: Waiting: The judge is so busy that it cant judge your submit at the moment, usually you just need to wait a minute and your submit will be judged. Judging: The judge is juging your problem now. Accepted: OK! Your program is correct! Presentation Error: Your ou

24、tput format is not exactly the same as the judges output, although your answer to the problem is correct. Check your output for spaces, blank lines, etc. against the problem output specification. Wrong Answer: Correct solution not reached for the inputs. The inputs and outputs that we use to test

25、the programs are not public (it is recommendable to get accustomed to a true contest dynamic). Runtime Error: Your program failed during the execution (illegal file access, stack overflow, pointer reference out of range, floating point exception, divided by zero, etc.). Time Limit Exceeded: Your

26、 program tried to run during too much time. Memory Limit Exceeded: Your program tried to use more memory than the judge default settings. Compile Error: The compiler could not compile your program. Of course, warning messages are not error messages. Click the link at the judge reply to see the a

27、ctual error message. No Such Problem: Either you have submitted a wrong problem ID or the problem is unavailable. Out Of Contest Time: This message can only appear during a contest, if a program is submitted out of contest time. Restricted Function: Your program tried to call restricted functio

28、ns. For example, maybe you have tried to open a file which is forbidden. 4 系統(tǒng)功能分析 1. 用戶操作界面。這是用戶與系統(tǒng)交互的手段,因此要做到人機(jī)界面友好化,操作方便,并有相應(yīng)的操作信息提示。 2. 編譯模塊。應(yīng)該支持各種常用程序設(shè)計語言,如 C, C++, Java, Pascal 等。使用戶真正體會到程序設(shè)計競賽的靈魂是算法的設(shè)計與實(shí)現(xiàn),給予競賽隊(duì)員更大的發(fā)揮空間。 3. 程序運(yùn)行與測試。這是該系統(tǒng)的核心,主要是監(jiān)控程序的運(yùn)行狀態(tài),運(yùn)行的時間空間消耗,運(yùn)行的權(quán)限管理,以及運(yùn)行結(jié)果的評判,盡量給出用戶

29、確切詳細(xì)的信息。 4. 管理員賽事管理。主要是參賽隊(duì)員的管理,賽題管理,賽事例程管理。 5.用戶管理。系統(tǒng)做出來是要給用戶使用的,既然有用戶就得對其進(jìn)行管理。用戶管理聽起來好像簡單,實(shí)際上涉及到的內(nèi)容卻很復(fù)雜。包括以下幾個方面: (1)用戶登陸。此系統(tǒng)要有一定的加密功能。因?yàn)槌绦蛟O(shè)計競賽是用來選拔學(xué)生用的,競賽開始之前必須要保密,否則將影響競賽結(jié)果的真實(shí)性,公平性。鑒于此原因,每位使用該系統(tǒng)的用戶都必須通過自己的用戶名和密碼進(jìn)行登陸后,才能正常使用。另外,為了防止有人惡意破譯密碼,必須采用驗(yàn)證碼機(jī)制。 (2)修改密碼。既然每位用戶都有自己的密碼,而同一個密碼如果用的時間太長

30、,就有可能被別人記住,為了加強(qiáng)系統(tǒng)的安全性,應(yīng)該定期修改密碼,這就要求系統(tǒng)具有修改密碼的功能。 (3)用戶權(quán)限。使用此系統(tǒng)的用戶很多,但為了增加系統(tǒng)的安全性,就應(yīng)該對每位用戶指定權(quán)限,否則如果每個人都有對數(shù)據(jù)庫的操作權(quán)限,很難保證對數(shù)據(jù)庫不了解的用戶對數(shù)據(jù)庫進(jìn)行誤操作,或通過非法訪問數(shù)據(jù)庫獲取機(jī)密信息。 (4)添加用戶。為了動態(tài)維護(hù)和管理用戶,即用戶數(shù)量不是一成不變的,可能會有所增加,因此系統(tǒng)還需要具有添加用戶的功能。另外, 每一輪的競賽都將會有新成員的加入。 (5)刪除用戶。如前所說,用戶不是固定的,由于人事變動等原因,有的用戶名可能不再使用了,所以系統(tǒng)還應(yīng)該有刪除用戶的功能。

31、 5 系統(tǒng)設(shè)計的目標(biāo) 準(zhǔn)確。能夠正確評測出用戶程序的結(jié)果。特別是以下幾個小的方面:給出正確的 Compile Error 信息。Presentation Error 和 Wrong Answer 的區(qū)分。如何準(zhǔn)確測量用戶程序的執(zhí)行時間。如何準(zhǔn)確測量用戶程序執(zhí)行時所用的內(nèi)存數(shù)量。 穩(wěn)定。一方面體現(xiàn)在網(wǎng)站的架設(shè)上,要求訪問頁面快速;另外體現(xiàn)在判題的速度上。同樣程序多次重復(fù)提交時結(jié)論相同,參數(shù)(運(yùn)行時間和內(nèi)存)基本一致。對于大量并發(fā)訪問具有很強(qiáng)的伸縮性。 安全。由于 Online Judge System 系統(tǒng)的特殊性,在通常網(wǎng)站安全設(shè)置的基礎(chǔ)上,由于可以執(zhí)行用戶程序,還要在安全上作更多

32、的考慮。如:防止用戶將題目測試數(shù)據(jù)外傳。如通過網(wǎng)絡(luò)將輸入數(shù)據(jù)傳走。防止用戶通過程序獲取服務(wù)器內(nèi)部信息。如 passwd 文件。防止由于用戶有意破壞系統(tǒng)。如用戶程序執(zhí)行 system(”reboot”),或者最經(jīng)典的while(1) fork(); 代碼。防止無意的系統(tǒng)破壞。如由于緩沖區(qū)溢出造成的錯誤。 6 主要研究內(nèi)容 這次課題主要是完整的開發(fā)整個程序設(shè)計競賽平臺,實(shí)現(xiàn)競賽評判的自動化,標(biāo)準(zhǔn)化。在用戶提交源程序時,能自動地進(jìn)行編譯,運(yùn)行和測試,并給出詳細(xì)確切的評判結(jié)果。本次課題的主要研究內(nèi)容包括: (1)實(shí)現(xiàn)編譯模塊對各種編程語言的支持; (2)在運(yùn)行器中,通過調(diào)用系統(tǒng)的進(jìn)程參

33、數(shù)信息,以達(dá)到對程序運(yùn)行時的時間,內(nèi)存消耗精確的測量,能夠給出準(zhǔn)確的運(yùn)行時錯誤信息; (3)測試器中,要能準(zhǔn)確的區(qū)分 Presentation Error 和 Wrong Answer; (4)實(shí)現(xiàn)對提交的程序作業(yè)快速的評判,及時響應(yīng)用戶的操作; (5)做到界面友好化,方便用戶使用,方便管理員維護(hù); (6)對各類用戶進(jìn)行嚴(yán)格的操作權(quán)限控制; 在實(shí)現(xiàn)以上內(nèi)容的基礎(chǔ)上,軟件設(shè)計采用基于面向?qū)ο蟮乃枷?,各模塊定義標(biāo)準(zhǔn)的接口,方便模塊間的復(fù)用,使得系統(tǒng)功能更易擴(kuò)展,維護(hù)。 7 開發(fā)工具的選擇 7.1 Apache + PHP + MySQL Linux 以其安全可靠、代碼開

34、放、低成本和豐富的第三方軟件,受到網(wǎng)站設(shè)計人員的青睞,其中 Apache+MySQL+PHP 更是引人注目,再加上 Mod―Auth―MySQL、phpMyAdmin 等模塊的支持,使網(wǎng)站開發(fā)人員更是如虎添翼。其中 Apache 是網(wǎng)站服務(wù)程序,功能類似于微軟的 IIS 信息服務(wù)器;MySQL 是一種多用戶、多線程的數(shù)據(jù)庫服務(wù)器,它以簡單易用而著稱,即使你對數(shù)據(jù)庫了解不深也沒關(guān)系,但你千萬別擔(dān)心它的功能和安全問題;PHP 是一種新興的編程語言,語法上類似于 C 語言,功能很強(qiáng);phpMyAdmin 就是用 PHP 編寫的用于 MySQL 數(shù)據(jù)庫管理的免費(fèi)軟件;Mod―Auth―MySQL 是

35、Apache 用于用戶身份認(rèn)證的第三方模塊。由此,我選擇 Apache+MySQL+PHP 來開發(fā)這個前臺系統(tǒng)。 1.PHP 簡介 PHP 是一種功能強(qiáng)大的語言和解釋器,無論是作為模塊方式包含到 web 服務(wù)器里安裝的還是作為單獨(dú)的 CGI 程序程序安裝的,都能訪問文件、執(zhí)行命令或者在服務(wù)器上打開鏈接。PHP 是特意設(shè)計成一種比用 Perl 或 C 語言所編寫的 CGI 程序要安全的語言。而且 PHP 是免費(fèi)的,他和免費(fèi)的 MySQL, Apache 搭配被稱作黃金組合,而且 PHP是開放源代碼的,跨平臺是 不能抗衡的。在服務(wù)器領(lǐng)域大概有85%是用 Linux 做系統(tǒng),很少有企業(yè)用

36、Windows,第一安全性差,第二成本高。因此 php 被廣泛使用。 2.MySQL 簡介 目前市場上數(shù)據(jù)庫的主流廠商及產(chǎn)品有 Microsoft SQL SERVER 2000、ORACLE 9i、MySQL 等,SQL SERVER 只適用于 Windows 平臺,而且購買昂貴,ORACLE 9i 雖然功能很強(qiáng),但操作復(fù)雜,不易學(xué)習(xí),而且更昂貴,MySQL 對 Linux 和 Windows 系統(tǒng)的服務(wù)器兼容性都很好,而且免費(fèi),學(xué)習(xí)也比較簡單。 7.2 Qt Qt 是基于標(biāo)準(zhǔn) C++ 構(gòu)架的高性能,跨平臺的軟件開發(fā)工具包。除了可擴(kuò)展的 C++ 類庫,Qt 還包含了使開發(fā)程序

37、根快更直接的工具集。Qt 的跨平臺能力和國際化支持使得 Qt 應(yīng)用達(dá)到最大可能的市場。 自從 1995 年,Qt 的 C++ 框架一直是商業(yè)應(yīng)用程序的核心。使用 Qt 的公司和組織各種各樣,如 Adobe, Boeing, IBM, Motorola, NASA, Skype, 還有很多的較小的公司和組織。在增加更強(qiáng)大功能的同時,Qt 4 設(shè)計得比以前版本更容易使用。Qt 的類都是完美并提供一致的接口,以協(xié)助學(xué)習(xí),減少開發(fā)工作量,提高程序員的生產(chǎn)力。Qt 一向是完全面向?qū)ο蟆? 系統(tǒng)設(shè)計 系統(tǒng)架構(gòu)采用分離可縮放結(jié)構(gòu)。前端服務(wù)器負(fù)責(zé) Web 訪問,后端 Judge 服務(wù)器負(fù)責(zé)編譯,運(yùn)行和測

38、試程序。雙方通過數(shù)據(jù)庫耦合。Judge 服務(wù)器與 Internet 沒有連接,徹底保證測試數(shù)據(jù)不被外泄。 前端設(shè)計基于 B/S 模式模式進(jìn)行 Web 服務(wù)器設(shè)計,后端 Judge 服務(wù)器采用多線程,多進(jìn)程并發(fā)處理機(jī)制,在保證系統(tǒng)穩(wěn)定性的同時極大地提高系統(tǒng)的響應(yīng)速度。整個系統(tǒng)采用面向?qū)ο蟮乃枷脒M(jìn)行設(shè)計。 1 設(shè)計原則 1.可靠性 系統(tǒng)中的軟/硬件及信息資源應(yīng)滿足可靠性設(shè)計要求,并能保證系統(tǒng)長期安全的運(yùn)行; 2.安全性 系統(tǒng)應(yīng)具有必要的安全保護(hù)和保密措施; 3.容錯性 系統(tǒng)應(yīng)具有較高的容錯能力,有較強(qiáng)的抗干擾性,對各類用戶的誤操作應(yīng)有提示或自動消除的能力; 4.可擴(kuò)充性 系統(tǒng)的

39、軟件應(yīng)具有擴(kuò)充升級的余地,可靈活地進(jìn)行功能的擴(kuò)充,不可因軟/硬件擴(kuò)充升級或改型而使原有系統(tǒng)失去作用; 5.實(shí)用性 注重采用成熟而實(shí)用的技術(shù),使系統(tǒng)建設(shè)的投入產(chǎn)出比最高,能產(chǎn)生良好的社會效益和經(jīng)濟(jì)效益; 6.易操作性 堅持最終面向用戶的原則,建立友好的用戶界面,使用戶操作簡單直觀,易于學(xué)習(xí)掌握。 2 評判過程 系統(tǒng)評判過程完全符合程序設(shè)計解決實(shí)際問題的過程。用戶先在自己的計算機(jī)上編寫好程序,經(jīng)過運(yùn)行,測試后,將程序源代碼提交到在線評判服務(wù)器。在服務(wù)器端,系統(tǒng)按照一定的規(guī)則從緩沖區(qū)中選取一個題目進(jìn)行評判。首先對源程序進(jìn)行編譯,如果程序存在語法錯誤,則返回語法錯誤信息(警告信息不算錯誤信

40、息),否則,評判系統(tǒng)將運(yùn)行編譯通過后的可執(zhí)行程序,在用戶程序運(yùn)行過程中,對程序運(yùn)行所需的系統(tǒng)資源進(jìn)行嚴(yán)格的限制,防止惡意程序的攻擊。在程序運(yùn)行正常結(jié)束后,對運(yùn)行的結(jié)果進(jìn)行測試,如果是結(jié)果正確,則更新用戶的排名信息、答題數(shù)量、答題時間、問題列表的答題統(tǒng)計信息等。 整個系統(tǒng)的大致工作過程如圖3-1所示,其中圖上省略了系統(tǒng)各階段的數(shù)據(jù)庫操作說明部分。 圖1 評判流程 3 系統(tǒng)模塊圖 圖2 系統(tǒng)模塊 后端 Judge 服務(wù)器模塊包括:程序運(yùn)行器、守護(hù)進(jìn)程、編譯接口、用例測試器。 前端 Web 服務(wù)器模塊包括:系統(tǒng)管理員、用戶驗(yàn)證、排名統(tǒng)計、問題瀏覽、提交、查看運(yùn)行狀態(tài)。

41、 系統(tǒng)管理員模塊 只提供給系統(tǒng)管理員對比賽日程計劃的控制,題庫錄入,參賽隊(duì)員信息管理,比賽期間系統(tǒng)管理員沒有任何的操作控制權(quán)限。 用戶驗(yàn)證 維護(hù)用戶比賽過程中各個頁面操作的權(quán)限控制,身份驗(yàn)證。 排名統(tǒng)計 根據(jù)競賽規(guī)則(如前)對用戶進(jìn)行排名。 問題瀏覽,提交,查看運(yùn)行狀態(tài) 各種界面設(shè)計 程序運(yùn)行器 程序運(yùn)行器執(zhí)行編譯產(chǎn)生的可執(zhí)行代碼,并事先設(shè)置該程序的權(quán)限和運(yùn)行限制,準(zhǔn)備輸入輸出重定向,然后產(chǎn)生解答輸出。 判斷程序運(yùn)行的狀態(tài)。其中要保證被執(zhí)行的程序不能危害系統(tǒng)的安全,不能訪問非授權(quán)信息,不能占用超過規(guī)定量的資源。 程序運(yùn)行器是實(shí)現(xiàn)自動評判和保證系統(tǒng)安全的

42、關(guān)鍵模塊。如何自動限制用戶程序的資源占用,獲取用戶程序執(zhí)行信息,以及防止惡意用戶的破壞都是值得重視的問題。 守護(hù)進(jìn)程 管理比賽例程,監(jiān)控 Judge 服務(wù)器的運(yùn)行狀態(tài),幫助程序運(yùn)行器完成對用戶進(jìn)程的監(jiān)控,必要時終止用戶進(jìn)程。守護(hù)進(jìn)程還負(fù)責(zé)與數(shù)據(jù)庫耦合,取出數(shù)據(jù)庫中尚未評判的程序,然后將程序的評判結(jié)果信息寫回數(shù)據(jù)庫。 編譯模塊 用于統(tǒng)一多個編譯器的編譯調(diào)用過程,支持多種程序設(shè)計語言,負(fù)責(zé)檢查用戶提交的程序語法,并編譯產(chǎn)生可執(zhí)行代碼。如果編譯器發(fā)現(xiàn)源程序語法錯誤,需要立即指出,不再繼續(xù)該題的評判工作。 用例測試器 用例測試器對產(chǎn)生的解答輸出對比標(biāo)準(zhǔn)測試數(shù)據(jù)進(jìn)行測試,給出

43、評判結(jié)論。 用例測試器需要注意的一個重要問題是,如何合理區(qū)分結(jié)果錯誤和格式錯誤。通常認(rèn)為,只是空白字符的不同,以及字母大小寫的不同就是格式錯誤,其它的就是結(jié)果錯誤。 數(shù)據(jù)庫 用戶基本信息表、答題進(jìn)度表、答題結(jié)果表,題目列表,測試數(shù)據(jù)等。 4 前端 Web 系統(tǒng)模型 前端 Web 系統(tǒng),即給每個用戶使用的客戶端,負(fù)責(zé)接受用戶的命令,將程序提交給服務(wù)器,并將服務(wù)器返回的結(jié)果顯示給用戶。對于這種類型的應(yīng)用來說,有兩種模式可以選擇,一為客戶/服務(wù)器(C/S)模式,二為瀏覽器/服務(wù)器(B/S)模式。 C/S 模式有很多優(yōu)點(diǎn),比如能夠?qū)崿F(xiàn)更豐富的用戶操作方式,給用戶更加豐富的用戶體

44、驗(yàn)。但它也存在很根本的缺點(diǎn),即非常不容易管理,需要在每一個客戶端安裝程序。相對來說,B/S 模式就要方便很多,只需要客戶端有一個瀏覽器就行。在線評判系統(tǒng)的目標(biāo)是要在校園網(wǎng)上開展大型的練習(xí)或競賽,同時,用戶的復(fù)雜性操作的需求不顯著,所以 B/S 模式是在線評判系統(tǒng)的最佳選擇,其系統(tǒng)模型如圖3.3 所示。 圖3 前端 Web 系統(tǒng)模型 5 后端 Judge 服務(wù)器系統(tǒng)模型 評判模塊對用戶提交的解答進(jìn)行評判。在目前的設(shè)計中,包含了兩大類的評判器: (1)本地評判器。本地評判器和評判系統(tǒng)框架執(zhí)行在同一個機(jī)器上。 (2)遠(yuǎn)程評判器。遠(yuǎn)程評判器可以運(yùn)行在不同的機(jī)器上,形成一個由多臺計算

45、機(jī)組成的集群,以大大提高系統(tǒng)的可伸縮性。 服務(wù)器在評判過程中,不管是編譯階段,程序運(yùn)行階段,還是用例測試階段,其工作量是相當(dāng)大的。特別是當(dāng)程序提交數(shù)量很多時,可能會造成提交的問題需長時間的等待才能夠給予評判,這不僅影響了評判進(jìn)度,還會影響前端 Web 服務(wù)器的執(zhí)行速度。解決該問題的一種方案是提升服務(wù)器的硬件性能指標(biāo),如使用工作站,甚至巨型機(jī)當(dāng)服務(wù)器,或分布式系統(tǒng)計算機(jī)。另一種解決方案是利用基于網(wǎng)絡(luò)的多服務(wù)器系統(tǒng)并行執(zhí)行。不管采用哪一種方案,在 Judge 服務(wù)器設(shè)計過程中,應(yīng)盡量提高評判過程中的并行執(zhí)行特性,如多線程,多進(jìn)程,多服務(wù)器,流水線系統(tǒng)結(jié)構(gòu)等。 圖4 并行系統(tǒng)結(jié)構(gòu) 并行執(zhí)

46、行的系統(tǒng)結(jié)構(gòu) 并行執(zhí)行的系統(tǒng)結(jié)構(gòu)是通過多線程,多進(jìn)程或多 Judge 服務(wù)器并行執(zhí)行一個程序評判的全過程。多個 Judge 服務(wù)器通過緩沖區(qū)與評判系統(tǒng)的前端 Web 服務(wù)器耦合。緩沖區(qū)是一個臨界資源,必須采取相應(yīng)的機(jī)制(信號量,互斥鎖)使得多Judge服務(wù)器的同步與互斥。其參考模型如圖3-4所示。 其中每臺 Judge 服務(wù)器都相對獨(dú)立的執(zhí)行一個程序的評判全過程(即編譯,運(yùn)行和測試)。 流水線式系統(tǒng)結(jié)構(gòu) 流水線式系統(tǒng)結(jié)構(gòu)借鑒計算機(jī)組成原理中的流水線式系統(tǒng)設(shè)計模式。它是將一個任務(wù)分成相對獨(dú)立的幾個階段,系統(tǒng)同時運(yùn)行各個階段,每個任務(wù)連續(xù)的從第一個階段流向最后一個階段完成一個任務(wù)的

47、整體。 該評判系統(tǒng)后端Judge服務(wù)器分為兩個階段:編譯系統(tǒng)模塊,運(yùn)行和測試系統(tǒng)模塊。各個模塊通過緩沖區(qū)銜接過度,其中個緩沖區(qū)也是臨界資源。系統(tǒng)參考模型如圖3-5所示。 圖5 流水線系統(tǒng)結(jié)構(gòu) 從圖中可以看出,每個系統(tǒng)相對獨(dú)立地執(zhí)行一個程序評判過程的相應(yīng)階段,但是一個題目的評判有可能編譯或運(yùn)行沒有正常通過,因此并不一定流過該評判系統(tǒng)流水線的每一個階段。 6 數(shù)據(jù)庫設(shè)計 數(shù)據(jù)庫是連接該系統(tǒng)前端Web服務(wù)器與后端Judge服務(wù)器的橋梁,因此良好的數(shù)據(jù)庫設(shè)計至關(guān)重要。 數(shù)據(jù)庫中主要有用戶注冊信息表(userRegister),賽題表(problemLib),用戶排名表(rankLi

48、st),評判狀態(tài)表(status)。各表的屬性及表之間的聯(lián)系如圖3-6,圖中每個加粗字體的屬性為相應(yīng)實(shí)體的主鍵。 系統(tǒng)實(shí)現(xiàn)與測試 1 數(shù)據(jù)庫表結(jié)構(gòu) 數(shù)據(jù)庫中表的名稱:userRegister 主鍵:username 數(shù)據(jù)庫中表的名稱:rankList 主鍵:rank 數(shù)據(jù)庫中表的名稱:problemLib 主鍵:pid 表4 狀態(tài)表 數(shù)據(jù)庫中表的名稱:status 主鍵:runID 2 前端Web服務(wù)器 前端 web 服務(wù)器主要負(fù)責(zé)各種用戶界面瀏覽和相關(guān)的數(shù)據(jù)庫初始操作,它是用戶進(jìn)行比賽的環(huán)境。應(yīng)該做到人性化的交互界面,操作簡便安全,為用戶提供友好的操作信息

49、。 以下就各主要界面進(jìn)行詳細(xì)設(shè)計介紹,另附有相關(guān)測試圖示。 2.1 用戶注冊 填寫用戶注冊信息 ==〉確認(rèn)后提交 ==〉檢查用戶名是否合法、密碼是否一致、及電話號碼、郵箱是否符合格式 ==〉注冊成功,存入 userRegister 數(shù)據(jù)庫并將 username 存入 rankList 表中的 team 字段。 圖1 用戶注冊界面 2.2 用戶登錄 讀取 userRegister 數(shù)據(jù)庫中的 username 對應(yīng) password 字段與提交的 password 比較,進(jìn)行身份驗(yàn)證。只有驗(yàn)證成功后,才能參與競賽。 圖2 用戶登錄界面 2.3 系統(tǒng)首頁 主要顯示

50、比賽例程信息,幾個主要鏈接,要求在比賽未開始之前不顯示相關(guān)鏈接,以防止透露題目。 圖3 系統(tǒng)首頁 2.4 問題列表 讀取數(shù)據(jù)庫中的題庫信息進(jìn)行顯示,包括相關(guān)的答題進(jìn)度信息。 圖4 問題列表 2.5 問題評判狀態(tài)表 列出各個提交問題的評判結(jié)果,當(dāng)結(jié)果為 Compile Error 時,返回編譯的錯誤信息。按問題的提交時間逆序排列。 圖5 評判狀態(tài)表 2.6 競賽排名表 該表每 30 秒刷新一次,以便獲得實(shí)時的競賽結(jié)果排名。首先根據(jù)答題數(shù)量逆序排列,答題數(shù)目相同的,再根據(jù)總時間升序排列。答題數(shù)目為零的不參與排名。 圖6 競賽排名 3 后端 judge 服

51、務(wù)器 后端 judge 服務(wù)器評判流程圖如圖7。 圖7 后臺 judge 數(shù)據(jù)流圖 3.1 編譯模塊 Gcc 編譯器介紹 Linux 系統(tǒng)下的 Gcc(GNU C Compiler)是 GNU 推出的功能強(qiáng)大、性能優(yōu)越的多平臺編譯器,是 GNU 的代表作品之一。Gcc 是可以在多種硬件平臺上編譯出可執(zhí)行程序的超級編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%~30%。 Gcc 編譯器能將 C、C++ 語言源程序、匯編程序和目標(biāo)程序編譯、連接成可執(zhí)行文件。在Linux 系統(tǒng)中,可執(zhí)行文件沒有統(tǒng)一的后綴,系統(tǒng)從文件的屬性來區(qū)分可執(zhí)行文件和不可執(zhí)行文件。而 gcc

52、則通過后綴來區(qū)別輸入文件的類別。 Gcc 編譯高級語言一般經(jīng)歷四個步驟:預(yù)處理(也稱預(yù)編譯,Preprocessing)、編譯(Compilation)、匯編 (Assembly) 和連接 (Linking)。 Gcc 選項(xiàng)主要包括總體選項(xiàng)、告警和出錯選項(xiàng)、優(yōu)化選項(xiàng)和體系結(jié)構(gòu)相關(guān)選項(xiàng)。 表5 總體選項(xiàng) 表6 告警和出錯選項(xiàng) 工作流程 進(jìn)入當(dāng)前環(huán)境,選取題目,設(shè)置編譯選項(xiàng)(包括選擇編譯器,設(shè)置編譯參數(shù)),編譯,讀取編譯結(jié)果,判斷編譯結(jié)果(是否通過)。其主要代碼如下: Class Compiler 的服務(wù): 圖8 類 Compiler 的服務(wù) 3.2 運(yùn)行

53、及測試器模塊 程序與進(jìn)程 進(jìn)程(Process)是最初定義在 Unix 等多用戶、多任務(wù)操作系統(tǒng)環(huán)境下用于表示應(yīng)用程序在內(nèi)存環(huán)境中基本執(zhí)行單元的概念。以 Unix 操作系統(tǒng)為例,進(jìn)程是 Unix 操作系統(tǒng)環(huán)境中的基本成分、是系統(tǒng)資源分配的基本單位。Unix 操作系統(tǒng)中完成的幾乎所有用戶管理和資源分配等工作都是通過操作系統(tǒng)對應(yīng)用程序進(jìn)程的控制來實(shí)現(xiàn)的。 C、C++、Java 等語言編寫的源程序經(jīng)相應(yīng)的編譯器編譯成可執(zhí)行文件后,提交給計算機(jī)處理器運(yùn)行。這時,處在可執(zhí)行狀態(tài)中的應(yīng)用程序稱為進(jìn)程。從用戶角度來看,進(jìn)程是應(yīng)用程序的一個執(zhí)行過程。從操作系統(tǒng)核心角度來看,進(jìn)程代表的是操作系統(tǒng)分

54、配的內(nèi)存、CPU 時間片等資源的基本單位,是為正在運(yùn)行的程序提供的運(yùn)行環(huán)境。進(jìn)程由四部分組成:PCB(進(jìn)程控制塊),正文段,數(shù)據(jù)段和用戶堆棧。PCB 包括進(jìn)程的編號、狀態(tài)、優(yōu)先級以及正文段和數(shù)據(jù)段中數(shù)據(jù)分布的大概情況。正文段存放該進(jìn)程的可執(zhí)行代碼。數(shù)據(jù)段存放進(jìn)程中靜態(tài)產(chǎn)生的數(shù)據(jù)結(jié)構(gòu)。用戶堆棧存放進(jìn)程中動態(tài)產(chǎn)生的數(shù)據(jù)結(jié)構(gòu)。進(jìn)程與應(yīng)用程序的區(qū)別在于應(yīng)用程序作為一個靜態(tài)文件存儲在計算機(jī)系統(tǒng)的硬盤等存儲空間中,而進(jìn)程則是處于動態(tài)條件下由操作系統(tǒng)維護(hù)的系統(tǒng)資源管理實(shí)體。 一個程序可以對應(yīng)多個進(jìn)程,而一個進(jìn)程,只能對應(yīng)一個程序。進(jìn)程具有動態(tài)性,并發(fā)性,獨(dú)立性等特點(diǎn)。 工作流程 選取題目,設(shè)置輸

55、入輸出文件,運(yùn)行,用例測試,判斷結(jié)果。其中主要的代碼如下: Class Executer 的服務(wù): 圖9 類 Executer 的服務(wù) 3.3 守護(hù)進(jìn)程模塊 通過使用兩個線程并發(fā)地執(zhí)行評判任務(wù)。類似于生產(chǎn)者—消費(fèi)者模型,其中 Daemon 是生產(chǎn)者,Starter 是消費(fèi)者??梢允且粋€生產(chǎn)者,多個消費(fèi)者,使得可以開啟多個評判程序并行的執(zhí)行任務(wù),或是基于網(wǎng)絡(luò)的多服務(wù)器相對獨(dú)立的并行工作。必須采取相應(yīng)的互斥訪問機(jī)制以避免一個題目被重復(fù)的評判。 通過使用一個環(huán)形緩沖區(qū)將一個 Daemon 線程和一組 Starter 線程聯(lián)系起來。只要緩沖區(qū)未滿,Daemon 線程就可把從

56、數(shù)據(jù)庫中取出的未評判的問題號放入緩沖區(qū)中,同樣,只要緩沖區(qū)未空,Starter 線程就可從緩沖區(qū)中取出題目進(jìn)行評判。僅當(dāng)緩沖區(qū)滿時,Daemon線程被阻塞,類似地,僅當(dāng)緩沖區(qū)空時,Starter 線程被阻塞。為了實(shí)現(xiàn)線程 Daemon 與 Starter 的同步與互斥,設(shè)置了兩個私用信號量和一個公用信號量如下: * 公用信號量 mutex,初值為 1,表示沒有進(jìn)程進(jìn)入臨界區(qū),它用于實(shí)現(xiàn)進(jìn)城互斥。 * 私用信號量 freeBuffer,用于表示可用的緩沖區(qū)數(shù),初值為 BufferSize。 * 私用信號量 usedBuffer,用于表示尚未評判的題目數(shù)量,初值為 0。 Daemo

57、n—Starter 的線程描述如圖10。 圖10 Daemon - Starter 線程描述 當(dāng)答題狀態(tài)為 Accepted 時,數(shù)據(jù)庫表 rankList 的更新算法如圖11。 圖11 數(shù)據(jù)庫表 rankList 的更新算法 如果多次提交正確答案,則按照最后一次提交正確時進(jìn)行參與評判統(tǒng)計。 4 系統(tǒng)測試 4.1 測試題目 輸入用例: 輸出用例: 4.2 測試程序 程序一: 評判結(jié)果:Accepted 程序二: 評判結(jié)果:Compile Error ../judge/src/2.c: In function `main: ../ju

58、dge/src/2.c:8: error: syntax error at end of input 程序三: 評判結(jié)果:Presentation Error 程序四: 評判結(jié)果:Time Limit Exceeded 程序五: 評判結(jié)果:Wrong Answer 程序六: 評判結(jié)果:Runtime Error 圖6 E-R 圖 7 面向?qū)ο蟮南到y(tǒng)設(shè)計 對于面向?qū)ο蟮能浖到y(tǒng)來說,如何盡量提高系統(tǒng)的可維護(hù)性是一個核心的問題。實(shí)踐證明,一個軟件開發(fā)可能只需要半年的時間,而維護(hù)則需要花費(fèi)很多年。一個軟件項(xiàng)目在其生命周期之內(nèi)花費(fèi)在維護(hù)上的費(fèi)用是

59、花在原始開發(fā)上的費(fèi)用的兩倍甚至更多。 軟件系統(tǒng)和硬件系統(tǒng)有很多不同之處。通常,硬件系統(tǒng)在開發(fā)完成之后,不會做太大的修改和擴(kuò)展,其維護(hù)工作主要是保證硬件系統(tǒng)的正常運(yùn)行,解決一些存在的錯誤和缺陷。但是,通常賦予軟件系統(tǒng)的維護(hù)的含義卻要大得多,軟件的維護(hù)就是軟件的再生。用戶希望一個軟件系統(tǒng)在其生命周期之內(nèi)能夠不斷滿足自己需求的變化。一個好的軟件設(shè)計,必須能夠允許新的設(shè)計要求以較為容易和平穩(wěn)的方式加入到已有的系統(tǒng)中去,從而使這個系統(tǒng)能夠不斷煥發(fā)出青春。 什么樣的系統(tǒng)設(shè)計才是好的系統(tǒng)設(shè)計?這個問題一直困擾著軟件工程師們。一個好的系統(tǒng)設(shè)計應(yīng)該滿足的三條性質(zhì):可擴(kuò)展性(extensibility)、靈活性(Flexibility)、可插入性(Pluggability)。這三條性質(zhì)就是一個系統(tǒng)設(shè)計應(yīng)當(dāng)達(dá)到的目標(biāo)。 (1)可擴(kuò)展性。新的性能可以很容易的加入到系統(tǒng)當(dāng)中去,就是可擴(kuò)展性。 (2)靈活性??梢栽试S代碼修改平穩(wěn)的發(fā)生,而不會波及到其他模塊,就是靈活性。 (3)可插入性??梢院苋菀椎膶⒁粋€類抽出去,同時將另一個有同樣接口的類加入進(jìn)來,就是可插入性。 那么,如何才能做出符合上述三項(xiàng)要求的設(shè)計呢?關(guān)鍵是恰當(dāng)?shù)奶岣哕浖目删S護(hù)性和可復(fù)用性。

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!