版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
摘要:在21世紀(jì),隨著計(jì)算機(jī)科學(xué)的發(fā)展,數(shù)據(jù)庫(kù)技術(shù)在人們?nèi)粘9ぷ髦械膽?yīng)用越來(lái)越廣泛,為廣大用戶提供了更加周到和人性化的服務(wù)。數(shù)據(jù)庫(kù)技術(shù)已逐漸成為當(dāng)今計(jì)算機(jī)應(yīng)用的潮流。本文主要是通過(guò)制作一款數(shù)據(jù)庫(kù)軟件——即“試卷自動(dòng)生成系統(tǒng)”來(lái)介紹數(shù)據(jù)庫(kù)技術(shù)在人們?nèi)粘I?、學(xué)習(xí)和工作中的應(yīng)用。本論文所做的主要工作如下:(1)設(shè)計(jì)了整個(gè)“試卷自動(dòng)生成系統(tǒng)”的系統(tǒng)結(jié)構(gòu)及工作原理;分析了系統(tǒng)實(shí)現(xiàn)中的特殊性、難點(diǎn)。(2)設(shè)計(jì)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作功能、數(shù)據(jù)庫(kù)查詢功能、數(shù)據(jù)庫(kù)打印功能。(3)分析并解決實(shí)現(xiàn)中的若干技術(shù)問(wèn)題。(4)建立完整的“試卷自動(dòng)生成系統(tǒng)”,進(jìn)行測(cè)試并分析結(jié)果。關(guān)鍵字計(jì)算機(jī)數(shù)據(jù)庫(kù)技術(shù)試卷自動(dòng)生成系統(tǒng)AbstractAtthe21stcentury,withthedevelopmentofcomputerscience,Databasetechnologyiswidelyusedinthepeople’slifeandwork.Thismakesuserscanenjoymoreconvenientandindividualservices.Databasetechnologyisthetrendoftoday’scomputerapplications.Inthiswork,westudythetechniquetobuildsoftwarenamedThePaperAutomaticCreatingSysteminordertointroducetheapplicationsofdatabasetechnologyinthepeople’slifeandwork.Themainworkofthispaperis:(1) Havedesignedwholesystematicstructurethat"ThePaperAutomaticCreatingSystem"andoperationprincipal;theparticularityintheanalyticalsystemisrealized,difficultpoint.(2) Designandrealizethatinquirestotheoperationfunction,databaseofthedatabasethattypesthefunctioninfunction,database.(3) Analysesandresolvesthetechnicalproblemsinimplementation.(4) Establishesatestsoftwareandanalysestheresultaftertestingonit.KeyWordsComputerTechnologyofthedatabaseThePaperAutomaticCreatingSystem目錄第一章緒論……………………11.1試卷自動(dòng)生成系統(tǒng)的產(chǎn)生……………………11.2試卷自動(dòng)生成系統(tǒng)的目的……………………11.3目前教學(xué)考試中面臨的問(wèn)題…………………11.4課題的主要內(nèi)容………………2第二章系統(tǒng)的整體設(shè)計(jì)…………42.1試卷自動(dòng)生成系統(tǒng)的設(shè)計(jì)原理………………42.2方案選擇………………………42.3方案特點(diǎn)………………………52.4試卷自動(dòng)生成系統(tǒng)的生成……………………52.5數(shù)據(jù)流圖………………………52.6數(shù)據(jù)字典………………………52.7系統(tǒng)程序流圖…………………72.8系統(tǒng)功能模塊圖………………72.9數(shù)據(jù)庫(kù)設(shè)計(jì)……………………82.10算法流程圖……………………10第三章系統(tǒng)的具體實(shí)現(xiàn)…………113.1系統(tǒng)各模塊及其功能…………113.1.1.用戶登陸模塊…………113.1.2.主界面模塊……………113.1.3.用戶管理模塊…………123.1.4.題庫(kù)管理模塊…………123.1.5.試卷自動(dòng)生成模塊……………………133.1.6.生成試卷顯示模塊……………………133.1.7.關(guān)于模塊………………143.2給數(shù)據(jù)庫(kù)加密…………………143.3開發(fā)工具選擇…………………143.3.1Delphi介紹……………143.3.2數(shù)據(jù)庫(kù)操作界面中基本功能介紹……153.3.3Ado技術(shù)介紹及使用方法……………153.4程序設(shè)計(jì)過(guò)程中遇到的問(wèn)題和解決方法……173.4.1:第三方控件安裝后在使用過(guò)程中,仍然不能運(yùn)行的問(wèn)題………173.4.2:如何在程序中用代碼打開一個(gè)帶密碼的Access數(shù)據(jù)庫(kù)…………183.5系統(tǒng)中部分核心代碼及難點(diǎn)代碼的解釋……19第四章系統(tǒng)性能測(cè)試……………23總結(jié)………………23致謝………………24參考文獻(xiàn)……………25附錄………………26第一章緒論1.1試卷自動(dòng)生成系統(tǒng)的產(chǎn)生計(jì)算機(jī)在教學(xué)管理中的應(yīng)用是實(shí)現(xiàn)教學(xué)管理科學(xué)化、現(xiàn)代化的關(guān)鍵。要提高教學(xué)質(zhì)量,必須把握各個(gè)教學(xué)環(huán)節(jié),考試是重要一環(huán),是檢測(cè)學(xué)生學(xué)習(xí)效果和對(duì)學(xué)生進(jìn)行客觀評(píng)價(jià)的一種手段,也是課程建設(shè)的重要組成部分。在學(xué)校教學(xué)工作中,傳統(tǒng)的試題管理通常是以試題集或者試卷集的形式進(jìn)行的,各位老師單獨(dú)或集體命題,采用手工方式,題量大、工作復(fù)雜。隨著科學(xué)技術(shù)的飛速發(fā)展,現(xiàn)代化教育手段廣泛使用,教學(xué)測(cè)試方法不斷改進(jìn),傳統(tǒng)的試題管理模式和手工組卷模式將逐步被計(jì)算機(jī)代替,使教學(xué)檢測(cè)更客觀、更科學(xué)、更公正,從而不斷提高學(xué)校的教學(xué)質(zhì)量、教學(xué)水平。1.2試卷自動(dòng)生成系統(tǒng)的目的建立題庫(kù)并利用計(jì)算機(jī)加以管理,能夠節(jié)省大量的人力物力,避免了教師的重復(fù)性勞動(dòng),消除了人工組卷中的人為因素,更加客觀公正地考察課程的教與學(xué),促進(jìn)教學(xué)互長(zhǎng)都有很大好處,同時(shí)也是教學(xué)改革的需要。本課題研究的意義如下:(1)利用計(jì)算機(jī)建立題庫(kù),實(shí)現(xiàn)計(jì)算機(jī)自動(dòng)選題組卷,是實(shí)現(xiàn)考試規(guī)范化、科學(xué)化的重要措施。利用計(jì)算機(jī)選題組卷,不僅能節(jié)省教師的寶貴時(shí)間,提高工作效率,而且能消除出卷人主觀意志的影響,使試卷的具有較好的保密性,還可以使考試更加標(biāo)準(zhǔn)化、客觀、真實(shí)、全面反映教學(xué)的實(shí)際效果,有利于促進(jìn)教學(xué)質(zhì)量的提高。加快試題更新的速度,可以有效地利用教師資源,避免試題難度出現(xiàn)大的波動(dòng),是提高現(xiàn)代教育水平、與國(guó)際教育接軌的一項(xiàng)重要舉措。(2)試卷自動(dòng)生成系統(tǒng)是一種隨著計(jì)算機(jī)信息技術(shù)的發(fā)展而發(fā)展起來(lái)的智能試題管理軟件,主要用來(lái)提高教師的工作效率和出卷質(zhì)量。使用試卷自動(dòng)生成系統(tǒng)對(duì)教師的命題工作將起到快速、方便、簡(jiǎn)單、有效的作用,將大大減輕教師的工作負(fù)擔(dān),使命題工作更具有客觀性和科學(xué)性。試卷自動(dòng)生成系統(tǒng)的研制成功,標(biāo)志著命題工作進(jìn)入了嶄新的時(shí)期。本文研究了一種基于數(shù)據(jù)庫(kù)技術(shù)的試卷自動(dòng)生成系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)過(guò)程。本系統(tǒng)能夠?qū)υ囶}進(jìn)行科學(xué)的管理,能夠按照所輸入的參數(shù)迅速生成符合要求的試卷,出一份令人滿意的試題。1.3目前教學(xué)考試中面臨的問(wèn)題(1)傳統(tǒng)的手工出卷不僅工作量大,而且容易出錯(cuò)。考試中心管理工作中一項(xiàng)非常重要的工作就是考試管理工作,每年企事業(yè)單位招考專業(yè)考試,從組織試卷,到試卷的印制、試卷評(píng)分及試卷的管理等,工作繁瑣且工作量很大;而且試卷的標(biāo)準(zhǔn)化程度、難易程度、區(qū)分度、題量大小、試卷錯(cuò)漏缺現(xiàn)象等方面難以控制,難以形成有效的試題庫(kù),不利于充分發(fā)揮歷年優(yōu)秀試題及試卷的作用,給試題和試卷的管理帶來(lái)很多問(wèn)題和困難。在學(xué)校的教學(xué)中,考試是考察教學(xué)成果的必要手段之一。我國(guó)歷來(lái)采用手工出卷的傳統(tǒng)方式,試卷的編輯、整理,成為每位教師繁重而又重復(fù)的工作,且存在著試卷缺乏規(guī)范性等弊端。(2)傳統(tǒng)的手工出卷難以做到公正、全面的考核。目前,大數(shù)學(xué)校學(xué)生的期末考試仍采用任課老師考前出題的方式,這勢(shì)必造成對(duì)學(xué)生掌握知識(shí)能力的測(cè)試因人而異,難以做到公正、全面的考核。試題、試卷查閱困難,許多有價(jià)值的試題常會(huì)因?yàn)榈貌坏郊皶r(shí)的積累而流失,一些陳舊毫無(wú)考察意義的試題卻由于不能及時(shí)更新而長(zhǎng)久地保留,這不僅大大增加了教師出題組卷的工作量和難度,降低了效率,也影響了試卷的質(zhì)量。為解決學(xué)生押題、考前漏題、補(bǔ)考試題與正式考試試題題量及難度差異等問(wèn)題,教務(wù)管理部門通常要求教師同時(shí)出多套試卷,其題量與難度要求相同,并且要同時(shí)給出答案和評(píng)分標(biāo)準(zhǔn)。這樣做雖能解決一些問(wèn)題,但給教師增加了很大的工作負(fù)擔(dān)。若上下界學(xué)生的同一門課程由同一教師承擔(dān),則難免幾屆學(xué)生用相同幾套試卷,若由不同教師任課出題,則上下屆學(xué)生的成績(jī)之間又不具有很強(qiáng)的可比性。1.4課題的主要內(nèi)容通過(guò)對(duì)大量有關(guān)教學(xué)和考務(wù)文獻(xiàn)的研究,我們利用軟件工程的思想,采用面向?qū)ο蟪绦蛟O(shè)計(jì)方法,開發(fā)一套基于數(shù)據(jù)庫(kù)的試卷自動(dòng)生成系統(tǒng),系統(tǒng)開發(fā)平臺(tái)為Windows98/2000,開發(fā)工具為Delphi及Access2000。本系統(tǒng)主要有七大模塊組成:用戶登陸模塊、主界面模塊、用戶管理模塊、題庫(kù)管理模塊、試卷自動(dòng)生成模塊、生成試卷顯示模塊、關(guān)于模塊。主要工作介紹如下:(1)設(shè)計(jì)了用戶登陸模塊:本模塊主要為用戶提供系統(tǒng)保護(hù)功能。只有知道用戶名和登錄密碼的用戶才能進(jìn)入本系統(tǒng)。(2)設(shè)計(jì)了主界面模塊:本模塊的主要功能是為其他模塊的運(yùn)行提供一個(gè)的操作平臺(tái),或者說(shuō)主界面模塊是其他模塊運(yùn)行的入口,通過(guò)主界面模塊才可能進(jìn)入其他功能模塊。(3)設(shè)計(jì)了用戶管理模塊:本模塊的主要功能是能讓具有系統(tǒng)管理員權(quán)限的用戶能對(duì)用戶進(jìn)行添加、刪除、修改等功能。(4)設(shè)計(jì)了題庫(kù)管理模塊:本模塊主要是對(duì)題庫(kù)里的內(nèi)容進(jìn)行管理,包括試題的錄入、修改、刪除、瀏覽等。(5)設(shè)計(jì)了試卷自動(dòng)生成模塊:本模塊的主要功能就是根據(jù)考試的需要,自動(dòng)從題庫(kù)中按要求隨機(jī)抽出試題并組成一套試卷。(6)設(shè)計(jì)了生成試卷顯示模塊:本模塊的功能很簡(jiǎn)單,就是接收試卷自動(dòng)生成模塊中從題庫(kù)中選取的試題并顯示在屏幕上。(7)設(shè)計(jì)了關(guān)于模塊:主要顯示本系統(tǒng)的名稱、版本、制作人員、完成日期等信息。系統(tǒng)的整體設(shè)計(jì)在這次設(shè)計(jì)過(guò)程中我主要負(fù)責(zé)試卷自動(dòng)生成系統(tǒng)的設(shè)計(jì)。下面我就著重分析這個(gè)系統(tǒng)的設(shè)計(jì)原理和方案選擇。2.1試卷自動(dòng)生成系統(tǒng)的設(shè)計(jì)原理試卷自動(dòng)生成系統(tǒng)的最終目的是要生成一份試卷,我們知道試卷是由試題組成的,所以該試卷自動(dòng)生成系統(tǒng)的核心部分就在于有一個(gè)試題數(shù)據(jù)庫(kù)。因此我的設(shè)計(jì)目標(biāo)就是利用Delphi7.0及Access2000作為設(shè)計(jì)平臺(tái)設(shè)計(jì)一個(gè)試卷自動(dòng)生成系統(tǒng)。該系統(tǒng)包括題庫(kù)瀏覽、修改題庫(kù)試題、添加新試題、生成試卷等功能。題庫(kù)管理的主界面中,所有題目按編號(hào)、題型、難度進(jìn)行安排。題目列表顯示了題目的所有屬性,可對(duì)題目進(jìn)行編輯、刪除、復(fù)制和剪切等操作。由于題庫(kù)瀏覽是對(duì)題庫(kù)直接進(jìn)行操作,使用過(guò)程中,最好要遵循一般的試題錄入規(guī)則。這將有利于題庫(kù)的統(tǒng)一,防止試題信息的錯(cuò)亂、繁雜。當(dāng)用戶選到自己需要編輯的試題時(shí),可點(diǎn)擊這些按鈕,此后,試題的相關(guān)屬性就呈現(xiàn)為可編輯狀態(tài)。用戶編輯完畢后,點(diǎn)擊保存,修改的試題信息將自動(dòng)錄入題庫(kù)。在試卷自動(dòng)生成系統(tǒng)中,初步設(shè)定這些功能,為了滿足對(duì)題庫(kù)的兼容性,在試卷自動(dòng)生成系統(tǒng)試題屬性的處理上對(duì)試題的難度、題目、答案等作為一般屬性對(duì)待。題庫(kù)的管理操作(添加、刪除、修改試題、題庫(kù)瀏覽)可隨時(shí)對(duì)這些屬性更新。但對(duì)試題編號(hào)這一屬性,系統(tǒng)將自動(dòng)處理。(例如系統(tǒng)在添加試題過(guò)程中,試題編號(hào)是將題庫(kù)中最低端的試題編號(hào)加一)同時(shí)用戶也可根據(jù)個(gè)人需求對(duì)試題編號(hào)自己更新,但更新過(guò)程中很有可能對(duì)前面的試題覆蓋。2.2方案選擇在設(shè)計(jì)之前,我曾經(jīng)考慮到了兩種設(shè)計(jì)方案。一種是以瀏覽試題庫(kù)為主要目的設(shè)計(jì)思路。這種方案的主要優(yōu)點(diǎn)是可以在已有的試題庫(kù)中進(jìn)行修改試題,保存試題,并且可以瀏覽到試題庫(kù)中所有的試題,對(duì)所有類型的試題內(nèi)容及試題數(shù)量有一個(gè)很清楚的了解,便于用戶確定是否需要添加新的試題到試題庫(kù)中。但是缺點(diǎn)就是由于需要采用主菜單的形式,因此實(shí)施起來(lái)有一定的難度,而且界面空洞。所以我采用了目前軟件比較流行的窗體式格式,在這個(gè)界面上用戶不僅可以瀏覽到試題的編號(hào)、難度、內(nèi)容、答案等,還可以進(jìn)行添加試題、修改試題、保存試題、刪除試題等操作。并且我在設(shè)計(jì)這個(gè)界面時(shí),使用了“到第一個(gè)試題”,“到最后一個(gè)試題”,“上一個(gè)”,“下一個(gè)”四個(gè)按鈕進(jìn)行試題的切換,當(dāng)用戶切換到自己所需的試題時(shí),可以點(diǎn)擊“修改”和“刪除”按鈕進(jìn)行修改試題和刪除該試題的操作;當(dāng)用戶需要添加新的試題到題庫(kù)中時(shí),點(diǎn)擊“添加”按鈕,用戶便可以添加試題了。當(dāng)填完試題的類型、難度、內(nèi)容和答案等項(xiàng)目時(shí),點(diǎn)擊“保存”按鈕便可以把試題添加到題庫(kù)中。2.3方案特點(diǎn)這個(gè)試卷自動(dòng)生成系統(tǒng)的優(yōu)點(diǎn)是方便和使用簡(jiǎn)單,任何用戶只要一看界面便一目了然,且操作簡(jiǎn)潔。在設(shè)計(jì)過(guò)程中,我曾經(jīng)參考了一些市面上流行的相關(guān)軟件,這些軟件都有一個(gè)共同特點(diǎn),就是其功能強(qiáng)大,從多方面考慮了用戶的實(shí)際使用目的,且操作也很簡(jiǎn)單,操作界面非常吸引人。這個(gè)系統(tǒng)最大的優(yōu)點(diǎn)是能夠從題庫(kù)中隨機(jī)抽取試題并自動(dòng)生成試卷,并且可以輸出到word,這樣不僅節(jié)省了教師時(shí)間,也提高了教師的工作效率。2.4試卷自動(dòng)生成系統(tǒng)的生成試卷自動(dòng)生成系統(tǒng)以題庫(kù)為基礎(chǔ),自動(dòng)生成試卷,主要包括試題類型設(shè)置、試題難度設(shè)置、試題編輯與生成試卷。在試卷自動(dòng)生成模塊中,用戶需要對(duì)自動(dòng)生成的試卷設(shè)置一定的約束條件,系統(tǒng)就能自動(dòng)從題庫(kù)中按要求隨機(jī)抽出試題并組合成一套試卷。在操作時(shí),用戶需要輸入選題條件:如選擇題難題幾道、中等難度的題幾道、簡(jiǎn)單的題幾道,填空題、計(jì)算題也是一樣。在輸入完成后,按“生成試卷”按鈕,系統(tǒng)就會(huì)根據(jù)輸入的條件自動(dòng)從題庫(kù)中抽取試題并組合成一套試卷并顯示在文本框中。2.5數(shù)據(jù)流圖(簡(jiǎn)稱DFD圖):教師課程重點(diǎn)試題錄入試題信息試題編輯題庫(kù)試題選擇試教師課程重點(diǎn)試題錄入試題信息試題編輯題庫(kù)試題選擇試卷抽取試題圖2.1數(shù)據(jù)流圖(簡(jiǎn)稱DFD圖)2.6數(shù)據(jù)字典繪制好數(shù)據(jù)流圖后,只是對(duì)數(shù)據(jù)處理和彼此之間的聯(lián)系進(jìn)行了說(shuō)明,為了進(jìn)一步明確數(shù)據(jù)的詳細(xì)內(nèi)容和數(shù)據(jù)加工過(guò)程,應(yīng)將最底層數(shù)據(jù)流圖中的全部數(shù)據(jù)流及其組成部分的數(shù)據(jù)元素、數(shù)據(jù)存儲(chǔ)和加工通過(guò)數(shù)據(jù)字典描敘清楚,以便系統(tǒng)設(shè)計(jì)時(shí)使用。在系統(tǒng)中,記錄所需要的編號(hào)、難度、類型、問(wèn)題、答案、標(biāo)志等信息,各字段的相關(guān)設(shè)置如下表2.1所示:題庫(kù)信息表:字段名稱數(shù)據(jù)類型說(shuō)明編號(hào)自動(dòng)編號(hào)自動(dòng)編號(hào)難度文本試題難度:難、中等、簡(jiǎn)單類型文本試題類型:選擇題、填空題、計(jì)算題問(wèn)題備注每一道試題具體問(wèn)題的內(nèi)容答案?jìng)渥⒚恳坏涝囶}具體問(wèn)題的答案標(biāo)志數(shù)字用于判斷是否已經(jīng)被選中過(guò)表2.1題庫(kù)信息表在本系統(tǒng)中出于安全考慮要求對(duì)系統(tǒng)的權(quán)限進(jìn)行限制和管理,無(wú)權(quán)的用戶禁止進(jìn)入,管理員享有所有權(quán)利,普通用戶享有除用戶管理和數(shù)據(jù)庫(kù)清空外的所有權(quán)利。為此,我又設(shè)計(jì)了一個(gè)表“表2.2”來(lái)存儲(chǔ)用戶的用戶名、密碼以及權(quán)限。各字段的相關(guān)設(shè)置如下列表所示:用戶信息表:字段名稱數(shù)據(jù)類型說(shuō)明編號(hào)自動(dòng)編號(hào)自動(dòng)編號(hào)User文本用戶名Password文本密碼Kind備注用戶類型:1為管理員,0為普通用戶表2.2用戶信息表2.7系統(tǒng)程序流圖退出系統(tǒng)退出系統(tǒng)否是否繼續(xù)是系統(tǒng)初始化身份認(rèn)證正確試卷自動(dòng)生成錯(cuò)誤數(shù)據(jù)庫(kù)清空關(guān)于登陸用戶管理題庫(kù)管理 圖2.2系統(tǒng)程序流圖2.8系統(tǒng)功能模塊圖根據(jù)系統(tǒng)分析的結(jié)果,對(duì)系統(tǒng)進(jìn)行功能分解,得到試卷自動(dòng)生成系統(tǒng)的系統(tǒng)功能模塊圖,首先得到的是系統(tǒng)的第一輪HIPO圖,如圖2.3所示:試卷自動(dòng)生成試卷自動(dòng)生成系統(tǒng)題庫(kù)管理試卷自動(dòng)生成生成試卷顯示登陸用戶管理關(guān)于本系統(tǒng)數(shù)據(jù)庫(kù)清空?qǐng)D2.3系統(tǒng)功能模塊圖2.9數(shù)據(jù)庫(kù)設(shè)計(jì)試題{試題編號(hào)、問(wèn)題、答案}試題類型{選擇題、填空題、計(jì)算題}試題難度{簡(jiǎn)單、中等、難}用戶{用戶編號(hào)、用戶名、密碼}按照上面的設(shè)計(jì)方法生成的實(shí)體及其屬性圖:試題試題試題編號(hào)問(wèn)題答案試題類型選擇題計(jì)算題填空題圖2.4圖2.5難度簡(jiǎn)單難度簡(jiǎn)單中等難用戶用戶編號(hào)密碼用戶名圖2.6圖2.7分析這些實(shí)體及其屬性圖中實(shí)體之間的聯(lián)系,得到完整的系統(tǒng)實(shí)體聯(lián)系圖(E-R圖),如圖2.8所示。用戶登陸用戶登陸權(quán)限管理員普通用戶清空數(shù)據(jù)庫(kù)信息管理用戶信息對(duì)題庫(kù)進(jìn)行管理生成試卷錄入修改刪除退出輸入條件生成試卷退出添加用戶修改用戶刪除用戶圖2.8系統(tǒng)的實(shí)體聯(lián)系圖(E-R圖)2.10算法流程圖試卷自動(dòng)生成系統(tǒng)在按教師設(shè)置的條件隨機(jī)從題庫(kù)中抽取試題的流程如圖2.9所示:將題庫(kù)的所有標(biāo)志位清將題庫(kù)的所有標(biāo)志位清0抽取一個(gè)隨機(jī)數(shù)n判斷是否沒(méi)有超過(guò)所要選的各條數(shù)移動(dòng)記錄指針到第n個(gè)記錄判斷此記錄是否已經(jīng)選過(guò),如未選過(guò)判斷該題的題型分類加此題目到題庫(kù)中,同時(shí)改寫是否已經(jīng)選過(guò)的標(biāo)志,同時(shí)使題目條數(shù)+1圖2.9算法流程圖第三章系統(tǒng)的具體實(shí)現(xiàn)3.1系統(tǒng)各模塊及其功能本系統(tǒng)主要有七大模塊組成:用戶登陸模塊、主界面模塊、用戶管理模塊、題庫(kù)管理模塊、試卷自動(dòng)生成模塊、生成試卷顯示模塊、關(guān)于模塊。下面簡(jiǎn)單介紹一下每個(gè)模塊的功能。3.1.1.用戶登陸模塊本模塊主要是要為用戶提供系統(tǒng)保護(hù)功能。只有知道用戶名和登錄密碼的用戶才能進(jìn)入本系統(tǒng)。其他人將無(wú)法使用本軟件也就無(wú)法瀏覽和管理數(shù)據(jù)庫(kù)。本系統(tǒng)支持多用戶登錄。同時(shí)用戶登錄類型又可以分為系統(tǒng)管理員和普通用戶。系統(tǒng)管理員擁有操作軟件的所有權(quán)利,而普通用戶擁有除“用戶管理”和“清空數(shù)據(jù)庫(kù)”外的所有權(quán)利。如圖3.1所示。圖3.1用戶登陸模塊3.1.2.主界面模塊:本模塊的主要功能是為其他模塊的運(yùn)行提供一個(gè)的操作平臺(tái),或者說(shuō)主界面模塊是其他模塊運(yùn)行的入口,通過(guò)主界面模塊才可能進(jìn)入其他功能模塊,如:題庫(kù)管理模塊、試卷自動(dòng)生成模塊。如圖3.2示。圖3.2主界面模塊3.1.3.用戶管理模塊:本模塊的主要功能是能讓具有系統(tǒng)管理員權(quán)限的用戶能對(duì)用戶進(jìn)行添加、刪除、修改等功能。如圖3.3所示。圖3.3用戶管理模塊3.1.4.題庫(kù)管理模塊:本模塊主要是對(duì)題庫(kù)里的內(nèi)容進(jìn)行管理,包括試題的錄入、修改、刪除、瀏覽等。用戶在輸入數(shù)據(jù)庫(kù)里要注意選擇新錄入試題的類型、難度的選擇。如圖3.4所示。圖3.4題庫(kù)管理模塊3.1.5.試卷自動(dòng)生成模塊:本模塊的主要功能就是根據(jù)考試的需要,自動(dòng)從題庫(kù)中按要求隨機(jī)抽出試題并組合成一套試卷了。在操作時(shí),用戶要首先輸入選題條件:如選擇題難題幾道、中等難度的題幾道、簡(jiǎn)單的題幾道,填空題、計(jì)算題也是一樣。在輸入完成后,按“生成試卷”按鈕,系統(tǒng)就會(huì)根據(jù)輸入的條件自動(dòng)從題庫(kù)中抽取試題并組合成一套試卷并顯示在文本框中。如圖3.5所示。圖3.5試卷自動(dòng)生成模塊3.1.6.生成試卷顯示模塊:本模塊的功能很簡(jiǎn)單,就是接收試卷自動(dòng)生成模塊中從題庫(kù)中選取的試題并顯示在屏幕上。如圖3.6所示。圖3.6生成試卷顯示模塊3.1.7.關(guān)于模塊:主要顯示本系統(tǒng)的名稱、版本、制作人、運(yùn)行環(huán)境、完成日期等信息。如圖3.7所示。圖3.7關(guān)于模塊3.2給數(shù)據(jù)庫(kù)加密要保護(hù)好自己的數(shù)據(jù)庫(kù)就必須為制作好的數(shù)據(jù)庫(kù)添加密碼,即對(duì)其進(jìn)行加密處理,也就是增加口令。這樣在每次打開數(shù)據(jù)庫(kù)時(shí),如果輸入密碼不正確,就無(wú)法瀏覽數(shù)據(jù),從而保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的絕對(duì)安全。方法其實(shí)很簡(jiǎn)單,首先要以“獨(dú)占”的方式打開制作好有待加密的數(shù)據(jù)庫(kù)(注意一定要以“獨(dú)占”的方式打開,否則無(wú)法進(jìn)行加密)。然后單擊“工具”菜單,選中其中的“安全”項(xiàng),在彈出的子菜單項(xiàng)中選擇“設(shè)置數(shù)據(jù)庫(kù)密碼”項(xiàng),這時(shí)會(huì)彈出密碼設(shè)置窗體,在其中輸入兩次要設(shè)置的密碼(注意密碼要上下相同),然后單擊“確定”,數(shù)據(jù)庫(kù)密碼設(shè)置就完成了。在本軟件所用的數(shù)據(jù)庫(kù)tk.mdb中,其數(shù)據(jù)庫(kù)密碼為200434。當(dāng)然軟件運(yùn)行時(shí)還需要用程序指令來(lái)對(duì)加密的數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),對(duì)于這一方面的內(nèi)容將在后面的論文中加以闡述[1]。3.3開發(fā)工具選擇因?yàn)镈elphi提供了強(qiáng)大的數(shù)據(jù)庫(kù)編程的功能和友好的用戶接口,只要掌握Delphi的基本語(yǔ)法和一些數(shù)據(jù)庫(kù)編程的基本知識(shí),并且開發(fā)系統(tǒng)方便,所以開發(fā)工具選擇了Delphi7.0。后臺(tái)數(shù)據(jù)庫(kù)選用了Access2000。3.3.1Delphi介紹Delphi實(shí)際上是Pascal語(yǔ)言的一種版本,但它與傳統(tǒng)的Pascal語(yǔ)言有天壤之別。一個(gè)Delphi程序首先是應(yīng)用程序框架,而這一框架正是應(yīng)用程序的“骨架”。在骨架上即使沒(méi)有附著任何東西,仍可以嚴(yán)格地按照設(shè)計(jì)運(yùn)行。您的工作只是在“骨架”中加入您的程序,缺省的應(yīng)用程序是一個(gè)空白的窗體(Form),您可以運(yùn)行它,結(jié)果得到一個(gè)空白的窗口。這個(gè)窗口具有Windows窗口的全部性質(zhì):可以被放大縮小、移動(dòng)、最大最小化等,但您卻沒(méi)有編寫一行程序。因此,可以說(shuō)應(yīng)用程序框架通過(guò)提供所有應(yīng)用程序共有的東西,為用戶應(yīng)用程序的開發(fā)打下了良好的基礎(chǔ)[2]。
Delphi7.0軟件開發(fā)工具是Borland公司推出的一個(gè)可視化系統(tǒng)開發(fā)環(huán)境的工具。它具有功能強(qiáng)大、運(yùn)行速度快、易于學(xué)習(xí)和使用以及開發(fā)迅速等特點(diǎn),所以一經(jīng)推出就受到廣大用戶的喜歡。Delphi結(jié)合了可視化技術(shù)、面向?qū)ο蠹夹g(shù)、數(shù)據(jù)庫(kù)技術(shù)以及網(wǎng)絡(luò)技術(shù)等多種先進(jìn)的軟件編程技術(shù)和思想,并使用了世界上最快的編譯器,使其成為創(chuàng)建功能豐富、界面友好的Windows應(yīng)用軟件的工具之一。Delphi7.0版本功能更為強(qiáng)大,不但繼承了前面所有版本的優(yōu)良特性,而且糾正了一些錯(cuò)誤,它對(duì)Web服務(wù)、數(shù)據(jù)庫(kù)的支持更加完善[3]。3.3.2數(shù)據(jù)庫(kù)操作界面中基本功能介紹數(shù)據(jù)庫(kù)主界面主要包括了對(duì)數(shù)據(jù)庫(kù)的各種操作,包括數(shù)據(jù)庫(kù)中記錄的修改、記錄的添加、記錄的刪除以及記錄的瀏覽。這些都是數(shù)據(jù)庫(kù)操作中所必須的內(nèi)容。其代碼如下:(1)增加記錄:adotable1.Edit;adotable1.Append;//append為增加模式;(2)保存修改:Adotable1.Edit;adotable1.Post;//這是個(gè)關(guān)鍵按鈕,將對(duì)數(shù)據(jù)修改的結(jié)果存入數(shù)據(jù)庫(kù)!對(duì)數(shù)據(jù)庫(kù)的任何修改,只有按了這個(gè)按鈕后才真正將修改的結(jié)果存入數(shù)據(jù)庫(kù)。3.3.3Ado技術(shù)介紹及使用方法ADO(ActiveXDataObject,ActiveX數(shù)據(jù)對(duì)象)是微軟提出的新標(biāo)準(zhǔn)。從原理上來(lái)說(shuō),ADO與第三方構(gòu)件并無(wú)多大區(qū)別,只是它是Inprise官方開發(fā)的;同時(shí),它連接的不是某個(gè)具體的數(shù)據(jù)庫(kù),而是微軟提供的ADO對(duì)象。從理論上講,ADO能夠支持任何類型的數(shù)據(jù)庫(kù)(甚至包括流式數(shù)據(jù))。用ADO來(lái)取代Delphi自代的BDE的確是一個(gè)不錯(cuò)的解決方案,而且在Delphi中使用ADO也相當(dāng)方便[4]。下面簡(jiǎn)單介紹一下ADO的使用方法,也就是本畢業(yè)設(shè)計(jì)程序操作數(shù)據(jù)庫(kù)的方法。本畢業(yè)設(shè)計(jì)就是用ADO操作數(shù)據(jù)庫(kù)tk.mdb。在Delphi組件面板上有ADO組件頁(yè),其中前6個(gè)是ADO組件。在空白窗體上放置一個(gè)ADOConnection1組件,一個(gè)ADOTable1組件、一個(gè)DataSource1組件、一個(gè)DBGrid1組件。先設(shè)定一下部分組件屬性如下:設(shè)定DBGrid1組件的DataSource屬性為DataSource1,設(shè)定DataSource1組件的DataSet屬性為ADOTable1。雙擊ADOConnection1組件或者在其屬性列表中點(diǎn)擊ConnectionString后的省略號(hào)都可以打開連接字符串設(shè)定窗口如下圖3.8所示:
圖3.8點(diǎn)擊“Build”按鈕,將打開數(shù)據(jù)連接屬性窗口如下圖3.9所示,其中有四個(gè)頁(yè)面,在第一個(gè)“提供者”頁(yè)面中,列出了可以使用的各種驅(qū)動(dòng)數(shù)據(jù)庫(kù)驅(qū)動(dòng)。對(duì)于ACCESS97數(shù)據(jù)庫(kù)來(lái)說(shuō),用MicrosoftJet3.51OLEDBProvider驅(qū)動(dòng)即可,當(dāng)然選擇MicrosoftJet4.0OLEDBProvider驅(qū)動(dòng)也可,但對(duì)于ACCESS2000數(shù)據(jù)庫(kù)來(lái)說(shuō)必須使用MicrosoftJet4.0OLEDBProvider,不能使用MicrosoftJet3.51OLEDBProvider。選擇完畢數(shù)據(jù)庫(kù)驅(qū)動(dòng)后,點(diǎn)擊“連接”頁(yè)面,在這里輸入或選擇數(shù)據(jù)庫(kù),這里我們查找選擇數(shù)據(jù)庫(kù)為“tk.mdb”,如果數(shù)據(jù)庫(kù)有密碼可將“空白密碼”復(fù)選框去掉選擇,就可以輸入密碼,選中“允許保存密碼”這樣以后就可以無(wú)需再輸入密碼了。接下來(lái)可以點(diǎn)擊“測(cè)試連接”按鈕,如果提示“測(cè)試連接成功”那么說(shuō)明數(shù)據(jù)庫(kù)可正常連接上。在“高級(jí)”頁(yè)面中選擇訪問(wèn)權(quán)限為“ReadWrite”。在“所有”頁(yè)面中顯示的是用戶目前設(shè)定的連接屬性,用戶可以再修改。點(diǎn)擊“確定”按鈕后返回到上圖,這時(shí)可以看到屬性設(shè)定字符串已經(jīng)自動(dòng)生成,點(diǎn)擊“OK”按鈕返回即可。再把ADOConnection1組件的LoginPrompt屬性設(shè)定為false,這樣以后程序在運(yùn)行時(shí)就不會(huì)彈出密碼輸入框了。但如果你的數(shù)據(jù)庫(kù)有密碼且在上面的“連接”頁(yè)面中沒(méi)有輸入密碼沒(méi)有選中“允許保存密碼”,那么不要把此屬性設(shè)定為false,因?yàn)槟阋院笮枰止ぽ斎朊艽a。圖3.9有輸入密碼沒(méi)有選中“允許保存密碼”,那么不要把此屬性設(shè)定為false,因?yàn)槟阋院笮枰止ぽ斎朊艽a。
接著設(shè)定ADOTable1組件的Connection屬性為ADOConnection1,單擊ADOTable1組件的tablename屬性后的省略號(hào),將可以看到數(shù)據(jù)庫(kù)tk.mdb中的所有數(shù)據(jù)表名稱列表,從中選擇一個(gè)如“表1”,設(shè)定ADOTable1組件的Active屬性為True,則馬上可以在DbGrid中看到表中的數(shù)據(jù)了。如果馬上運(yùn)行程序就可以在窗口中瀏覽和編輯數(shù)據(jù)了[5]。3.4程序設(shè)計(jì)過(guò)程中遇到的問(wèn)題和解決方法在軟件制作的過(guò)程中遇到了大大小小、很多很多的問(wèn)題。只要有一個(gè)沒(méi)有解決整個(gè)軟件就完成不了。所以掌握解決問(wèn)題的方法是關(guān)鍵,這是我這次畢業(yè)設(shè)計(jì)過(guò)程中的最重要的體會(huì)之一。下面列出制作過(guò)程中遇到的一些較為典型的問(wèn)題。3.4.1:第三方控件安裝后在使用過(guò)程中,仍然不能運(yùn)行的問(wèn)題。即:第三方控件在按照安裝提示準(zhǔn)確地安裝完畢后,然后在窗體上放上該控件,設(shè)置好控件屬性后運(yùn)行。系統(tǒng)會(huì)提示找不到某某*.dcu文件。這是因?yàn)檐浖\(yùn)行是需要將該控件所對(duì)應(yīng)的*.dcu文件加載到可執(zhí)行文件中。所以需要設(shè)置一下控件所對(duì)應(yīng)*.dcu的路徑。具體方法如下:?jiǎn)螕簟皃roject”,然后選中“Options”,這時(shí)會(huì)彈出“ProjectOptionsfor…”的設(shè)置窗體。在“Directories/Conditionals”項(xiàng)的SearchPath里面進(jìn)入該控件所對(duì)應(yīng)的*.dcu的文件路徑即可[6]。3.4.2:如何在程序中用代碼打開一個(gè)帶密碼的Access數(shù)據(jù)庫(kù)。因?yàn)橐WC數(shù)據(jù)庫(kù)中數(shù)據(jù)的安全,所以要對(duì)數(shù)據(jù)庫(kù)進(jìn)行加密,而如何打開一個(gè)帶密碼的Access數(shù)據(jù)庫(kù)卻難倒了我,通過(guò)查閱資料我終于找到了方法。首先:要按上面提到Ado連接數(shù)據(jù)庫(kù)的一般方法來(lái)配置Adotable1的connectionstring屬性。在“數(shù)據(jù)鏈接屬性”頁(yè)面的“連接”項(xiàng)中選擇您要鏈接的數(shù)據(jù)庫(kù),本系統(tǒng)中為tk.mdb。如果僅這樣只能正確打開沒(méi)有密碼的數(shù)據(jù)庫(kù),要打開有密碼的Access數(shù)據(jù)庫(kù),還需要點(diǎn)擊“數(shù)據(jù)鏈接屬性”頁(yè)面的“所有”項(xiàng),如圖3.10所示:圖3.10然后編輯“JetOLEDB:DatabasePassword”的值,即輸入數(shù)據(jù)庫(kù)的正確密碼,這樣connectionstring屬性就成功配置完成了。其次:要在程序開始時(shí)在源代碼部分再一次用代碼對(duì)Adotable1的connectionstring屬性進(jìn)行賦值,即:connectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';//重新設(shè)置connectionstring屬性[7]3.5系統(tǒng)中部分核心代碼及難點(diǎn)代碼的解釋(1)統(tǒng)計(jì)題庫(kù)中各題型各難度題目的數(shù)量在試卷自動(dòng)生成模塊中,為了讓操作人員知道題庫(kù)中目前各題型即選擇題、填空題、計(jì)算題的不同難度的題目的總數(shù)各是多少,以便讓操作人員能夠有針對(duì)性地選擇不同類型、不同難度的題目,所以需要對(duì)這些題目的信息進(jìn)行統(tǒng)計(jì),這也是本系統(tǒng)關(guān)鍵的地方這一。代碼及其解釋如下:procedureTForm3.FormShow(Sender:TObject);//這是在試卷自動(dòng)生成模塊的窗體產(chǎn)生事件中觸發(fā)的。vardbpath:string;begindbpath:=extractfilepath(paramstr(0));withadotable1dobeginconnectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';active:=true;end;withadoquery1dobeginconnectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';//以下是得到選擇題中難的題目的總數(shù)active:=false;//先關(guān)閉查詢控件adoquery1,以便向其中加入sql語(yǔ)句的查詢內(nèi)容SQL.Clear;//清空sql語(yǔ)句sql.Add('select*fromtk1where類型="選擇題"and難度="難"');//向sql中增加查詢語(yǔ)句的內(nèi)容active:=true;//打開查詢控件adoquery1label1.Caption:='共'+inttostr(recordcount)+'題';//將本題型題目(本段中即:選擇題中難度為難的那類題目)的總數(shù)賦值給label1,顯示在軟件中(2)生成試卷代碼解釋:本段代碼是整個(gè)系統(tǒng)中的核心代碼。它的作用就是根據(jù)操作人員輸入的選題條件自動(dòng)從題庫(kù)中抽取試題并組合成一套試卷并顯示在文本框中。有多種方法可以實(shí)現(xiàn)這一功能,通過(guò)比較后我選擇了其中相對(duì)而言容易理解、容易操作的一種方法來(lái)完成。下面就以選擇題為例,程序代碼及其解釋如下:procedureTForm3.Button1Click(Sender:TObject);vari1,i2,i3,j1,j2,j3,h1,h2,h3:integer;ii1,ii2,ii3,jj1,jj2,jj3,hh1,hh2,hh3:integer;m1,m2,m3:string;//m1用于接受所有選擇題的數(shù)據(jù)m2用于接受所有填空題的數(shù)據(jù)m3用于接受所有計(jì)算題的數(shù)據(jù)k:integer;count:integer;begincount:=adotable1.RecordCount;//記錄總數(shù),沒(méi)用到i1:=strtoint(edit1.Text);//選擇題中有難度的i2:=strtoint(edit2.Text);//選擇題中有中等難度的i3:=strtoint(edit3.Text);//選擇題中簡(jiǎn)單的j1:=strtoint(edit4.Text);//填空題有難度的j2:=strtoint(edit5.Text);//填空題中有中等難度的j3:=strtoint(edit6.Text);//填空題中簡(jiǎn)單的h1:=strtoint(edit7.Text);//計(jì)算題有難度的h2:=strtoint(edit8.Text);//計(jì)算題中有中等難度的h3:=strtoint(edit9.Text);//計(jì)算題中簡(jiǎn)單的m1:='[選擇題]'+#10+#10;//注:#10是換行的意思。m2:='[填空題]'+#10+#10;m3:='[計(jì)算題]'+#10+#10;adotable1.first;whilenotadotable1.eofdobeginadotable1.Edit;//注意此處一定要加,而且不能加在循環(huán)外面,否則會(huì)提示"未處于編輯模式下"adotable1.FieldByName('標(biāo)志').Value:=0;adotable1.next;end;//以上循環(huán)語(yǔ)句是將標(biāo)志位清0adotable1.Close;adotable1.Open;randomize();//隨機(jī)數(shù)初始化ii1:=0;ii2:=0;ii3:=0;//選擇題(ii是與i相對(duì)應(yīng)的比較用的)jj1:=0;jj2:=0;jj3:=0;//填空題(jj是與j相對(duì)應(yīng)的比較用的)hh1:=0;hh2:=0;hh3:=0;//計(jì)算題(hh是與j相對(duì)應(yīng)的比較用的)form4.richedit1.clear;//清空用于接收題目?jī)?nèi)容的richedit中的內(nèi)容while(ii1<i1)or(ii2<i2)or(ii3<i3)or(jj1<j1)or(jj2<j2)or(jj3<j3)or(hh1<h1)or(hh2<h2)or(hh3<h3)dobeginadotable1.First;k:=random(count);//k是接收產(chǎn)生的隨機(jī)數(shù)adotable1.MoveBy(k);//將指針從第一條記錄移動(dòng)到第k個(gè)記錄ifadotable1.FieldByName('標(biāo)志').Value=0then//判斷是否已經(jīng)被選過(guò)beginifadotable1.FieldByName('類型').value='選擇題'then//如果是選擇題beginifadotable1.FieldByName('難度').value='難'thenbeginifii1<i1thenbeginm1:=m1+adotable1.FieldByName('題').Value;m1:=m1+#10;//在后面加入一空行m1:=m1+#10;//在后面再加入一空行ii1:=ii1+1;//將已經(jīng)選中的幾條記錄的標(biāo)志ii加1//以下三行是將該題是否已經(jīng)選中的標(biāo)記設(shè)為1,這樣再選時(shí)就不會(huì)選中這條記錄了,從而避免重復(fù)現(xiàn)象的產(chǎn)生adotable1.Edit;adotable1.FieldByName('標(biāo)志').Value:=1;adotable1.post;end;end;//以下代碼與上面基本相同,不作過(guò)多解釋。ifadotable1.FieldByName('難度').value='中等'thenbeginifii2<i2thenbeginm1:=m1+adotable1.FieldByName('問(wèn)題').Value;m1:=m1+#10;m1:=m1+#10;ii2:=ii2+1;adotable1.Edit;adotable1.FieldByName('標(biāo)志').Value:=1;adotable1.post;end;end;ifadotable1.FieldByName('難度').value='簡(jiǎn)單'thenbeginifii3<i3thenbeginm1:=m1+adotable1.FieldByName('問(wèn)題').Value;m1:=m1+#10;m1:=m1+#10;ii3:=ii3+1;adotable1.Edit;adotable1.FieldByName('標(biāo)志').Value:=1;adotable1.post;end;end;end;form4.RichEdit1.Lines.Add(m1);//這里及以下兩句是將m1(選擇題),m2(填空題),m3(計(jì)算題)的內(nèi)容一起輸出到richedit1中。form4.RichEdit1.Lines.Add(m2);form4.RichEdit1.Lines.Add(m3);form4.Show;//顯示窗體4,即將從題庫(kù)中自動(dòng)隨機(jī)抽取的試題組成的試卷的內(nèi)容顯示出來(lái)。end;系統(tǒng)性能測(cè)試經(jīng)過(guò)不斷的努力,終于完成了試卷自動(dòng)生成系統(tǒng)的初步設(shè)計(jì)和編制。我對(duì)本系統(tǒng)進(jìn)行改編的性能測(cè)試。測(cè)試環(huán)境:P=3\*ROMANIII256M/64G操作系統(tǒng):WindowsXP系統(tǒng)平臺(tái):Delphi7.0系統(tǒng)調(diào)試過(guò)程:程序的最后調(diào)試工作是應(yīng)用程序的最后檢查階段,該階段主要完成的任務(wù)有以下幾點(diǎn):.程序遇到用戶錯(cuò)誤操作時(shí)能否正確處理;.程序在遇到運(yùn)行錯(cuò)誤時(shí)是否能夠正確的處理錯(cuò)誤;.程序的預(yù)定功能是否達(dá)到。利用Delphi的系統(tǒng)調(diào)試器對(duì)整個(gè)系統(tǒng)進(jìn)行了跟蹤調(diào)試,發(fā)現(xiàn)了其中的函數(shù)使用錯(cuò)誤,數(shù)據(jù)表名稱輸入錯(cuò)誤等一些問(wèn)題,及時(shí)的修改了每個(gè)錯(cuò)誤。在上述環(huán)境中,將設(shè)計(jì)和編譯好的試卷自動(dòng)生成系統(tǒng)進(jìn)行首次運(yùn)行。當(dāng)進(jìn)入系統(tǒng),發(fā)現(xiàn)一些問(wèn)題,如各表單的屬性設(shè)置不夠完整,使用其在調(diào)用過(guò)程中出現(xiàn)錯(cuò)誤,我經(jīng)過(guò)反復(fù)檢查核對(duì),終于找出了問(wèn)題并調(diào)試通過(guò)。最后對(duì)應(yīng)用程序的功能調(diào)試,發(fā)現(xiàn)應(yīng)用程序的運(yùn)行結(jié)果滿足用戶要求,達(dá)到了預(yù)想的程序設(shè)計(jì)目的。同時(shí)還對(duì)系統(tǒng)界面的進(jìn)行了調(diào)整,提高其友好性。通過(guò)對(duì)程序的調(diào)試,查找資料我學(xué)到了一些程序調(diào)試基本方法,使我學(xué)到許多新的知識(shí),積累了更多的經(jīng)驗(yàn),也對(duì)本程序的完整性有了進(jìn)步的了解,整個(gè)的編程思想也更加的完整,為我在今后的工作打下了良好的基礎(chǔ)。測(cè)試結(jié)果:系統(tǒng)各功能運(yùn)行一切正常,并達(dá)到了設(shè)計(jì)要求。總結(jié)本次畢業(yè)設(shè)計(jì),任務(wù)較重,時(shí)間緊,涉及的范圍又比較多,也是我第一次做這種比較大的程序設(shè)計(jì)課題。從課題的確定到逐步深入直至最終完成各項(xiàng)目標(biāo)任務(wù),每一個(gè)過(guò)程都具有很大的挑戰(zhàn)性。在設(shè)計(jì)過(guò)程中,也曾遇到各式各樣的問(wèn)題,如程序的調(diào)試過(guò)程,經(jīng)常會(huì)出現(xiàn)運(yùn)行不正常等情況。雖然困難很多,但在自己的不懈努力及通過(guò)查找資料、請(qǐng)教老師、詢問(wèn)同學(xué)和同事等辦法,最終都能找到解決問(wèn)題的辦法。在克服困難、攻破一個(gè)個(gè)困難的過(guò)程中,學(xué)到了許多平時(shí)沒(méi)有學(xué)到的知識(shí),收獲很大,從而使自己的知識(shí)在完成課題的過(guò)程中不斷充實(shí),水平也得到了一定的提高。應(yīng)該說(shuō)本次畢業(yè)設(shè)計(jì),達(dá)到了畢業(yè)設(shè)計(jì)開題所預(yù)期的目標(biāo)。同時(shí),設(shè)計(jì)過(guò)程也培養(yǎng)了我獨(dú)立工作的能力,樹立了對(duì)自己工作能力的信心,相信會(huì)對(duì)我今后的學(xué)習(xí)工作生活能產(chǎn)生非常重要的影響。最重要的是通過(guò)本次課題鍛煉了自己獨(dú)自分析解決問(wèn)題的能力和自我學(xué)習(xí)的能力。采用試卷自動(dòng)生成系統(tǒng)進(jìn)行考試,其優(yōu)點(diǎn)以成為教育專家的共識(shí),它使的試題的收集和管理自動(dòng)化和標(biāo)準(zhǔn)化,而試題的標(biāo)準(zhǔn)化和自動(dòng)化又有利于教學(xué)質(zhì)量的提高,它為計(jì)算機(jī)輔助教學(xué)及學(xué)校的計(jì)算機(jī)管理的進(jìn)一步實(shí)施創(chuàng)造了條件,題庫(kù)管理與試卷自動(dòng)生成系統(tǒng)的研究和開發(fā)也就成為近年來(lái)教育系統(tǒng)中一個(gè)十分引人注目的課題。建立一個(gè)好的題庫(kù)管理與試卷自動(dòng)生成系統(tǒng),并運(yùn)用于教學(xué)中可以節(jié)省教師出題、制卷的時(shí)間,減輕勞動(dòng)強(qiáng)度、提高工作效率;可以避免因不同教師出題而產(chǎn)生的試題內(nèi)容及重點(diǎn)、難度的差異;有利于教學(xué)質(zhì)量的統(tǒng)一評(píng)估;可以使考試更加規(guī)范化、標(biāo)準(zhǔn)化、科學(xué)化。當(dāng)然,由于時(shí)間較緊,加上是初次涉及到比較大的程序的設(shè)計(jì)和開發(fā),經(jīng)驗(yàn)上相對(duì)缺乏,本系統(tǒng)只能對(duì)同一門課程的試卷進(jìn)行題庫(kù)管理,以及不能按章節(jié)錄入試題,最好還應(yīng)該能按章節(jié)選擇試題的功能。因此軟件做得還不是很好,還需要以后加以進(jìn)一步改進(jìn)。通過(guò)本畢業(yè)設(shè)計(jì)的學(xué)習(xí)以及思考制作,我基本掌握了操作數(shù)據(jù)庫(kù)的各種方法。同時(shí)在設(shè)計(jì)過(guò)程中我遇到了很多問(wèn)題,通過(guò)自己查閱資料,不斷的調(diào)試最后都成功地解決了。在本畢業(yè)設(shè)計(jì)過(guò)程中我感受最深的就是:完成工作的過(guò)程中要學(xué)會(huì)自學(xué),同時(shí)我還認(rèn)識(shí)到在遇到問(wèn)題的時(shí)候如何去分析問(wèn)題,找出問(wèn)題,然后去解決問(wèn)題,我想雖然我的畢業(yè)設(shè)計(jì)已經(jīng)成功做完了,但我收獲最大的確是學(xué)會(huì)了以上兩點(diǎn)。致謝大學(xué)學(xué)習(xí)生活即將結(jié)束,在此,我要感謝所有曾經(jīng)教導(dǎo)過(guò)我的老師和關(guān)心過(guò)我的同學(xué),他們?cè)谖页砷L(zhǎng)過(guò)程中給予了我很大的幫助。本文能夠成功的完成,要特別感謝我的指導(dǎo)老師張剛林的關(guān)懷和教導(dǎo),感謝各位師兄師姐的關(guān)心和幫助。最后還要感謝我的父母,是他們一直在背后支持著我。謹(jǐn)以此文獻(xiàn)給他們!參考文獻(xiàn)[1]齊治昌,譚慶平,寧洪著.軟件工程[M].北京:高等教育出版社,2002:16-31[2]MicrosoftCorporation著,微軟(中國(guó))有限公司譯.Delphi6.0中文版程序員指南[M].微軟出版社,1998:30-35,39[3]高峰霞,廖彬山著.Delphi6.0中文版提高與應(yīng)用[M].北京:電子工業(yè)出版社,1999:59-62[4]薩師煊,王珊著.數(shù)據(jù)庫(kù)系統(tǒng)概論[M].北京:高等教育出版社,2005:24-28[5]呂偉臣著.Delphi7入門與提高[M].清華大學(xué)出版社,2004:54-60[6]陳豫龍,何旭洪著Delphi7數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)實(shí)例導(dǎo)航[M].北京:人民郵電出版社,2004:45-51[7]飛恩科技產(chǎn)品研發(fā)中心.Delphi7高級(jí)程序設(shè)計(jì)[M].北京:電子工業(yè)出版社.2003:67-73附錄A用戶登陸模塊unitUnit6;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,WinSkinData,DB,ADODB,StdCtrls;typeTForm6=class(TForm)Label1:TLabel;Label2:TLabel;Button2:TButton;Button3:TButton;Edit1:TEdit;Edit2:TEdit;ADOTable1:TADOTable;SkinData1:TSkinData;Label3:TLabel;procedureButton2Click(Sender:TObject);procedureFormCreate(Sender:TObject);procedureButton3Click(Sender:TObject);procedureEdit2Change(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm6:TForm6;implementationusesUnit1,Unit4;{$R*.dfm}procedureTForm6.Button2Click(Sender:TObject);vari:integer;j:integer;beginif(edit1.Text='')or(edit2.text='')thenshowmessage('您還沒(méi)有輸入用戶名或密碼!')elsebeginifadotable1.active=falsethenadotable1.Active;adotable1.first;i:=1;j:=2;whilenotadotable1.Eofdobeginif(edit1.Text=adotable1.FieldByName('password').AsString)and(edit2.Text=adotable1.FieldByName('user').AsString)thenbegini:=2;ifadotable1.FieldByName('kind').AsString='1'thenj:=1;ifadotable1.fieldByName('kind').AsString='0'thenj:=0;end;adotable1.Next;end{if(edit1.Text=adotable1.FieldByName('password').AsString)or(edit1.Text='pdsword123459')thenbeginform1.show;form4.hide;end}end;ifi=2thenbeginifj=0thenbeginform1.button5.visible:=false;form1.Button4.Visible:=false;end;form1.show;form6.hide;endelseshowmessage('您輸入的用戶名或密碼不正確,請(qǐng)重新輸入');end;procedureTForm6.FormCreate(Sender:TObject);varmaindbpath:string;beginmaindbpath:=extractfilepath(paramstr(0));withadotable1dobeginconnectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+maindbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';active:=true;end;end;procedureTForm6.Button3Click(Sender:TObject);beginform6.Close;end;procedureTForm6.Edit2Change(Sender:TObject);beginend;end.主界面模塊unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,WinSkinData,DB,ADODB;typeTForm1=class(TForm)Button1:TButton;Button2:TButton;Button3:TButton;Label1:TLabel;Label2:TLabel;Button4:TButton;ADOTable1:TADOTable;Label3:TLabel;Button5:TButton;Button6:TButton;procedureButton1Click(Sender:TObject);procedureButton3Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureButton4Click(Sender:TObject);procedureFormCreate(Sender:TObject);procedureButton6Click(Sender:TObject);procedureButton5Click(Sender:TObject);procedureLabel2Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm1:TForm1;implementationusesUnit2,Unit3,Unit5,Unit7;{$R*.dfm}procedureTForm1.Button1Click(Sender:TObject);beginform2.show;end;procedureTForm1.Button3Click(Sender:TObject);beginapplication.Terminate;end;procedureTForm1.Button2Click(Sender:TObject);beginform3.show;end;procedureTForm1.Button4Click(Sender:TObject);beginifmessagedlg('是否真的要清空所有數(shù)據(jù)?',mtinformation,[mbyes,mbno],0)=mryesthenbeginadotable1.First;whilenotadotable1.eofdobeginadotable1.Edit;adotable1.Delete;adotable1.Prior;adotable1.Post;end;showmessage('數(shù)據(jù)庫(kù)清空完畢!');end;end;procedureTForm1.FormCreate(Sender:TObject);vardbpath:string;begindbpath:=extractfilepath(paramstr(0));withadotable1dobeginclose;connectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';active:=true;end;end;procedureTForm1.Button6Click(Sender:TObject);beginaboutbox.show;end;procedureTForm1.Button5Click(Sender:TObject);beginform1.Hide;form7.show;end;procedureTForm1.Label2Click(Sender:TObject);beginend;end.題庫(kù)管理模塊unitUnit2;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls,DB,ADODB,DBCtrls,Mask;typeTForm2=class(TForm)Label1:TLabel;Bevel1:TBevel;Bevel2:TBevel;ADOTable1:TADOTable;ADOTable1DSDesigner:TAutoIncField;ADOTable1DSDesigner2:TWideStringField;ADOTable1DSDesigner3:TWideStringField;ADOTable1DSDesigner4:TMemoField;ADOTable1DSDesigner5:TMemoField;ADOTable1DSDesigner6:TIntegerField;Label2:TLabel;DBEdit1:TDBEdit;DataSource1:TDataSource;Label3:TLabel;Label4:TLabel;Label5:TLabel;DBMemo1:TDBMemo;Label6:TLabel;DBMemo2:TDBMemo;Label7:TLabel;Button1:TButton;Button2:TButton;Button3:TButton;DBNavigator1:TDBNavigator;Label8:TLabel;DBEdit4:TDBEdit;DBComboBox1:TDBComboBox;DBComboBox2:TDBComboBox;procedureFormCreate(Sender:TObject);procedureButton2Click(Sender:TObject);procedureButton3Click(Sender:TObject);procedureButton1Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm2:TForm2;implementation{$R*.dfm}procedureTForm2.FormCreate(Sender:TObject);vardbpath:string;begindbpath:=extractfilepath(paramstr(0));withadotable1dobeginconnectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';active:=true;end;adotable1.last;end;procedureTForm2.Button2Click(Sender:TObject);beginclose;end;procedureTForm2.Button3Click(Sender:TObject);beginadotable1.Edit;adotable1.Append;end;procedureTForm2.Button1Click(Sender:TObject);beginadotable1.Post;end;end.試卷生成模塊unitUnit3;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,DB,ADODB;typeTForm3=class(TForm)GroupBox1:TGroupBox;Label1:TLabel;Edit1:TEdit;Label2:TLabel;Edit2:TEdit;Label3:TLabel;Edit3:TEdit;Label4:TLabel;GroupBox2:TGroupBox;Label5:TLabel;Label6:TLabel;Label7:TLabel;Label8:TLabel;Edit4:TEdit;Edit5:TEdit;Edit6:TEdit;GroupBox3:TGroupBox;Label10:TLabel;Label11:TLabel;Label12:TLabel;Edit7:TEdit;Edit8:TEdit;Edit9:TEdit;Button1:TButton;Button2:TButton;ADOTable1:TADOTable;ADOTable1DSDesigner:TAutoIncField;ADOTable1DSDesigner2:TWideStringField;ADOTable1DSDesigner3:TWideStringField;ADOTable1DSDesigner4:TMemoField;ADOTable1DSDesigner5:TMemoField;ADOTable1DSDesigner6:TIntegerField;Label13:TLabel;ADOQuery1:TADOQuery;Label14:TLabel;Label15:TLabel;Label9:TLabel;Label16:TLabel;Label17:TLabel;Label18:TLabel;Label19:TLabel;Label20:TLabel;Label22:TLabel;Label23:TLabel;Label21:TLabel;procedureButton1Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureFormShow(Sender:TObject);procedureGroupBox1Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm3:TForm3;implementation{$R*.dfm}usesunit4;procedureTForm3.Button1Click(Sender:TObject);vari1,i2,i3,j1,j2,j3,h1,h2,h3:integer;ii1,ii2,ii3,jj1,jj2,jj3,hh1,hh2,hh3:integer;m1,m2,m3:string;k:integer;count:integer;begincount:=adotable1.RecordCount;i1:=strtoint(edit1.Text);i2:=strtoint(edit2.Text);i3:=strtoint(edit3.Text);j1:=strtoint(edit4.Text);j2:=strtoint(edit5.Text);j3:=strtoint(edit6.Text);h1:=strtoint(edit7.Text);h2:=strtoint(edit8.Text);h3:=strtoint(edit9.Text);adotable1.first;whilenotadotable1.eofdobeginadotable1.Edit;adotable1.FieldByName('標(biāo)志').Value:=0;adotable1.next;end;adotable1.Close;adotable1.Open;randomize();ii1:=0;ii2:=0;ii3:=0;jj1:=0;jj2:=0;jj3:=0;hh1:=0;hh2:=0;hh3:=0;m1:='[選擇題]'+#10+#10;m2:='[填空題]'+#10+#10;m3:='[計(jì)算題]'+#10+#10;form4.richedit1.clear;while(ii1<i1)or(ii2<i2)or(ii3<i3)or(jj1<j1)or(jj2<j2)or(jj3<j3)or(hh1<h1)or(hh2<h2)or(hh3<h3)dobeginadotable1.First;k:=random(count);adotable1.MoveBy(k);ifadotable1.FieldByName('標(biāo)志').Value=0thenbeginifadotable1.FieldByName('類型').value='選擇題'thenbegin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年版全球及中國(guó)消防設(shè)備運(yùn)營(yíng)狀況與需求前景展望報(bào)告
- 2024年文化旅游項(xiàng)目開發(fā)合同
- 2024年技術(shù)開發(fā)與保密合同
- 2024-2030年新版中國(guó)金膠涂層項(xiàng)目可行性研究報(bào)告
- 2024-2030年新型皮革鞣劑KMC公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年全球裸眼3D行業(yè)應(yīng)用潛力及發(fā)展競(jìng)爭(zhēng)力研究報(bào)告
- 2024-2030年全球及中國(guó)輪斗式洗砂機(jī)行業(yè)發(fā)展?fàn)顩r及前景動(dòng)態(tài)預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)精制無(wú)煙煤過(guò)濾材料行業(yè)發(fā)展動(dòng)態(tài)及未來(lái)前景預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)熱熔包裝膠帶行業(yè)銷售現(xiàn)狀及供需前景預(yù)測(cè)報(bào)告
- 2024-2030年全球及中國(guó)汽車EMC測(cè)功機(jī)行業(yè)發(fā)展態(tài)勢(shì)及盈利前景預(yù)測(cè)報(bào)告
- 山西省太原市2024-2025學(xué)年高三上學(xué)期期中物理試卷(含答案)
- 酒店崗位招聘面試題與參考回答2025年
- (統(tǒng)編2024版)道德與法治七上10.1愛(ài)護(hù)身體 課件
- GB/T 30391-2024花椒
- 供電線路維護(hù)合同
- 胸部術(shù)后護(hù)理科普
- 鞋子工廠供貨合同模板
- 2024碼頭租賃合同范本
- 木材采運(yùn)智能決策支持系統(tǒng)
- 【產(chǎn)業(yè)圖譜】2024年青島市重點(diǎn)產(chǎn)業(yè)規(guī)劃布局全景圖譜(附各地區(qū)重點(diǎn)產(chǎn)業(yè)、產(chǎn)業(yè)體系布局、未來(lái)產(chǎn)業(yè)發(fā)展規(guī)劃等)
- 上海市市轄區(qū)(2024年-2025年小學(xué)四年級(jí)語(yǔ)文)部編版期末考試(下學(xué)期)試卷及答案
評(píng)論
0/150
提交評(píng)論