版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
摘要:在21世紀,隨著計算機科學的發(fā)展,數(shù)據(jù)庫技術在人們日常工作中的應用越來越廣泛,為廣大用戶提供了更加周到和人性化的服務。數(shù)據(jù)庫技術已逐漸成為當今計算機應用的潮流。本文主要是通過制作一款數(shù)據(jù)庫軟件——即“試卷自動生成系統(tǒng)”來介紹數(shù)據(jù)庫技術在人們日常生活、學習和工作中的應用。本論文所做的主要工作如下:(1)設計了整個“試卷自動生成系統(tǒng)”的系統(tǒng)結構及工作原理;分析了系統(tǒng)實現(xiàn)中的特殊性、難點。(2)設計實現(xiàn)對數(shù)據(jù)庫的操作功能、數(shù)據(jù)庫查詢功能、數(shù)據(jù)庫打印功能。(3)分析并解決實現(xiàn)中的若干技術問題。(4)建立完整的“試卷自動生成系統(tǒng)”,進行測試并分析結果。關鍵字計算機數(shù)據(jù)庫技術試卷自動生成系統(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試卷自動生成系統(tǒng)的產生……………………11.2試卷自動生成系統(tǒng)的目的……………………11.3目前教學考試中面臨的問題…………………11.4課題的主要內容………………2第二章系統(tǒng)的整體設計…………42.1試卷自動生成系統(tǒng)的設計原理………………42.2方案選擇………………………42.3方案特點………………………52.4試卷自動生成系統(tǒng)的生成……………………52.5數(shù)據(jù)流圖………………………52.6數(shù)據(jù)字典………………………52.7系統(tǒng)程序流圖…………………72.8系統(tǒng)功能模塊圖………………72.9數(shù)據(jù)庫設計……………………82.10算法流程圖……………………10第三章系統(tǒng)的具體實現(xiàn)…………113.1系統(tǒng)各模塊及其功能…………113.1.1.用戶登陸模塊…………113.1.2.主界面模塊……………113.1.3.用戶管理模塊…………123.1.4.題庫管理模塊…………123.1.5.試卷自動生成模塊……………………133.1.6.生成試卷顯示模塊……………………133.1.7.關于模塊………………143.2給數(shù)據(jù)庫加密…………………143.3開發(fā)工具選擇…………………143.3.1Delphi介紹……………143.3.2數(shù)據(jù)庫操作界面中基本功能介紹……153.3.3Ado技術介紹及使用方法……………153.4程序設計過程中遇到的問題和解決方法……173.4.1:第三方控件安裝后在使用過程中,仍然不能運行的問題………173.4.2:如何在程序中用代碼打開一個帶密碼的Access數(shù)據(jù)庫…………183.5系統(tǒng)中部分核心代碼及難點代碼的解釋……19第四章系統(tǒng)性能測試……………23總結………………23致謝………………24參考文獻……………25附錄………………26第一章緒論1.1試卷自動生成系統(tǒng)的產生計算機在教學管理中的應用是實現(xiàn)教學管理科學化、現(xiàn)代化的關鍵。要提高教學質量,必須把握各個教學環(huán)節(jié),考試是重要一環(huán),是檢測學生學習效果和對學生進行客觀評價的一種手段,也是課程建設的重要組成部分。在學校教學工作中,傳統(tǒng)的試題管理通常是以試題集或者試卷集的形式進行的,各位老師單獨或集體命題,采用手工方式,題量大、工作復雜。隨著科學技術的飛速發(fā)展,現(xiàn)代化教育手段廣泛使用,教學測試方法不斷改進,傳統(tǒng)的試題管理模式和手工組卷模式將逐步被計算機代替,使教學檢測更客觀、更科學、更公正,從而不斷提高學校的教學質量、教學水平。1.2試卷自動生成系統(tǒng)的目的建立題庫并利用計算機加以管理,能夠節(jié)省大量的人力物力,避免了教師的重復性勞動,消除了人工組卷中的人為因素,更加客觀公正地考察課程的教與學,促進教學互長都有很大好處,同時也是教學改革的需要。本課題研究的意義如下:(1)利用計算機建立題庫,實現(xiàn)計算機自動選題組卷,是實現(xiàn)考試規(guī)范化、科學化的重要措施。利用計算機選題組卷,不僅能節(jié)省教師的寶貴時間,提高工作效率,而且能消除出卷人主觀意志的影響,使試卷的具有較好的保密性,還可以使考試更加標準化、客觀、真實、全面反映教學的實際效果,有利于促進教學質量的提高。加快試題更新的速度,可以有效地利用教師資源,避免試題難度出現(xiàn)大的波動,是提高現(xiàn)代教育水平、與國際教育接軌的一項重要舉措。(2)試卷自動生成系統(tǒng)是一種隨著計算機信息技術的發(fā)展而發(fā)展起來的智能試題管理軟件,主要用來提高教師的工作效率和出卷質量。使用試卷自動生成系統(tǒng)對教師的命題工作將起到快速、方便、簡單、有效的作用,將大大減輕教師的工作負擔,使命題工作更具有客觀性和科學性。試卷自動生成系統(tǒng)的研制成功,標志著命題工作進入了嶄新的時期。本文研究了一種基于數(shù)據(jù)庫技術的試卷自動生成系統(tǒng)的設計及實現(xiàn)過程。本系統(tǒng)能夠對試題進行科學的管理,能夠按照所輸入的參數(shù)迅速生成符合要求的試卷,出一份令人滿意的試題。1.3目前教學考試中面臨的問題(1)傳統(tǒng)的手工出卷不僅工作量大,而且容易出錯。考試中心管理工作中一項非常重要的工作就是考試管理工作,每年企事業(yè)單位招考專業(yè)考試,從組織試卷,到試卷的印制、試卷評分及試卷的管理等,工作繁瑣且工作量很大;而且試卷的標準化程度、難易程度、區(qū)分度、題量大小、試卷錯漏缺現(xiàn)象等方面難以控制,難以形成有效的試題庫,不利于充分發(fā)揮歷年優(yōu)秀試題及試卷的作用,給試題和試卷的管理帶來很多問題和困難。在學校的教學中,考試是考察教學成果的必要手段之一。我國歷來采用手工出卷的傳統(tǒng)方式,試卷的編輯、整理,成為每位教師繁重而又重復的工作,且存在著試卷缺乏規(guī)范性等弊端。(2)傳統(tǒng)的手工出卷難以做到公正、全面的考核。目前,大數(shù)學校學生的期末考試仍采用任課老師考前出題的方式,這勢必造成對學生掌握知識能力的測試因人而異,難以做到公正、全面的考核。試題、試卷查閱困難,許多有價值的試題常會因為得不到及時的積累而流失,一些陳舊毫無考察意義的試題卻由于不能及時更新而長久地保留,這不僅大大增加了教師出題組卷的工作量和難度,降低了效率,也影響了試卷的質量。為解決學生押題、考前漏題、補考試題與正式考試試題題量及難度差異等問題,教務管理部門通常要求教師同時出多套試卷,其題量與難度要求相同,并且要同時給出答案和評分標準。這樣做雖能解決一些問題,但給教師增加了很大的工作負擔。若上下界學生的同一門課程由同一教師承擔,則難免幾屆學生用相同幾套試卷,若由不同教師任課出題,則上下屆學生的成績之間又不具有很強的可比性。1.4課題的主要內容通過對大量有關教學和考務文獻的研究,我們利用軟件工程的思想,采用面向對象程序設計方法,開發(fā)一套基于數(shù)據(jù)庫的試卷自動生成系統(tǒng),系統(tǒng)開發(fā)平臺為Windows98/2000,開發(fā)工具為Delphi及Access2000。本系統(tǒng)主要有七大模塊組成:用戶登陸模塊、主界面模塊、用戶管理模塊、題庫管理模塊、試卷自動生成模塊、生成試卷顯示模塊、關于模塊。主要工作介紹如下:(1)設計了用戶登陸模塊:本模塊主要為用戶提供系統(tǒng)保護功能。只有知道用戶名和登錄密碼的用戶才能進入本系統(tǒng)。(2)設計了主界面模塊:本模塊的主要功能是為其他模塊的運行提供一個的操作平臺,或者說主界面模塊是其他模塊運行的入口,通過主界面模塊才可能進入其他功能模塊。(3)設計了用戶管理模塊:本模塊的主要功能是能讓具有系統(tǒng)管理員權限的用戶能對用戶進行添加、刪除、修改等功能。(4)設計了題庫管理模塊:本模塊主要是對題庫里的內容進行管理,包括試題的錄入、修改、刪除、瀏覽等。(5)設計了試卷自動生成模塊:本模塊的主要功能就是根據(jù)考試的需要,自動從題庫中按要求隨機抽出試題并組成一套試卷。(6)設計了生成試卷顯示模塊:本模塊的功能很簡單,就是接收試卷自動生成模塊中從題庫中選取的試題并顯示在屏幕上。(7)設計了關于模塊:主要顯示本系統(tǒng)的名稱、版本、制作人員、完成日期等信息。系統(tǒng)的整體設計在這次設計過程中我主要負責試卷自動生成系統(tǒng)的設計。下面我就著重分析這個系統(tǒng)的設計原理和方案選擇。2.1試卷自動生成系統(tǒng)的設計原理試卷自動生成系統(tǒng)的最終目的是要生成一份試卷,我們知道試卷是由試題組成的,所以該試卷自動生成系統(tǒng)的核心部分就在于有一個試題數(shù)據(jù)庫。因此我的設計目標就是利用Delphi7.0及Access2000作為設計平臺設計一個試卷自動生成系統(tǒng)。該系統(tǒng)包括題庫瀏覽、修改題庫試題、添加新試題、生成試卷等功能。題庫管理的主界面中,所有題目按編號、題型、難度進行安排。題目列表顯示了題目的所有屬性,可對題目進行編輯、刪除、復制和剪切等操作。由于題庫瀏覽是對題庫直接進行操作,使用過程中,最好要遵循一般的試題錄入規(guī)則。這將有利于題庫的統(tǒng)一,防止試題信息的錯亂、繁雜。當用戶選到自己需要編輯的試題時,可點擊這些按鈕,此后,試題的相關屬性就呈現(xiàn)為可編輯狀態(tài)。用戶編輯完畢后,點擊保存,修改的試題信息將自動錄入題庫。在試卷自動生成系統(tǒng)中,初步設定這些功能,為了滿足對題庫的兼容性,在試卷自動生成系統(tǒng)試題屬性的處理上對試題的難度、題目、答案等作為一般屬性對待。題庫的管理操作(添加、刪除、修改試題、題庫瀏覽)可隨時對這些屬性更新。但對試題編號這一屬性,系統(tǒng)將自動處理。(例如系統(tǒng)在添加試題過程中,試題編號是將題庫中最低端的試題編號加一)同時用戶也可根據(jù)個人需求對試題編號自己更新,但更新過程中很有可能對前面的試題覆蓋。2.2方案選擇在設計之前,我曾經考慮到了兩種設計方案。一種是以瀏覽試題庫為主要目的設計思路。這種方案的主要優(yōu)點是可以在已有的試題庫中進行修改試題,保存試題,并且可以瀏覽到試題庫中所有的試題,對所有類型的試題內容及試題數(shù)量有一個很清楚的了解,便于用戶確定是否需要添加新的試題到試題庫中。但是缺點就是由于需要采用主菜單的形式,因此實施起來有一定的難度,而且界面空洞。所以我采用了目前軟件比較流行的窗體式格式,在這個界面上用戶不僅可以瀏覽到試題的編號、難度、內容、答案等,還可以進行添加試題、修改試題、保存試題、刪除試題等操作。并且我在設計這個界面時,使用了“到第一個試題”,“到最后一個試題”,“上一個”,“下一個”四個按鈕進行試題的切換,當用戶切換到自己所需的試題時,可以點擊“修改”和“刪除”按鈕進行修改試題和刪除該試題的操作;當用戶需要添加新的試題到題庫中時,點擊“添加”按鈕,用戶便可以添加試題了。當填完試題的類型、難度、內容和答案等項目時,點擊“保存”按鈕便可以把試題添加到題庫中。2.3方案特點這個試卷自動生成系統(tǒng)的優(yōu)點是方便和使用簡單,任何用戶只要一看界面便一目了然,且操作簡潔。在設計過程中,我曾經參考了一些市面上流行的相關軟件,這些軟件都有一個共同特點,就是其功能強大,從多方面考慮了用戶的實際使用目的,且操作也很簡單,操作界面非常吸引人。這個系統(tǒng)最大的優(yōu)點是能夠從題庫中隨機抽取試題并自動生成試卷,并且可以輸出到word,這樣不僅節(jié)省了教師時間,也提高了教師的工作效率。2.4試卷自動生成系統(tǒng)的生成試卷自動生成系統(tǒng)以題庫為基礎,自動生成試卷,主要包括試題類型設置、試題難度設置、試題編輯與生成試卷。在試卷自動生成模塊中,用戶需要對自動生成的試卷設置一定的約束條件,系統(tǒng)就能自動從題庫中按要求隨機抽出試題并組合成一套試卷。在操作時,用戶需要輸入選題條件:如選擇題難題幾道、中等難度的題幾道、簡單的題幾道,填空題、計算題也是一樣。在輸入完成后,按“生成試卷”按鈕,系統(tǒng)就會根據(jù)輸入的條件自動從題庫中抽取試題并組合成一套試卷并顯示在文本框中。2.5數(shù)據(jù)流圖(簡稱DFD圖):教師課程重點試題錄入試題信息試題編輯題庫試題選擇試教師課程重點試題錄入試題信息試題編輯題庫試題選擇試卷抽取試題圖2.1數(shù)據(jù)流圖(簡稱DFD圖)2.6數(shù)據(jù)字典繪制好數(shù)據(jù)流圖后,只是對數(shù)據(jù)處理和彼此之間的聯(lián)系進行了說明,為了進一步明確數(shù)據(jù)的詳細內容和數(shù)據(jù)加工過程,應將最底層數(shù)據(jù)流圖中的全部數(shù)據(jù)流及其組成部分的數(shù)據(jù)元素、數(shù)據(jù)存儲和加工通過數(shù)據(jù)字典描敘清楚,以便系統(tǒng)設計時使用。在系統(tǒng)中,記錄所需要的編號、難度、類型、問題、答案、標志等信息,各字段的相關設置如下表2.1所示:題庫信息表:字段名稱數(shù)據(jù)類型說明編號自動編號自動編號難度文本試題難度:難、中等、簡單類型文本試題類型:選擇題、填空題、計算題問題備注每一道試題具體問題的內容答案備注每一道試題具體問題的答案標志數(shù)字用于判斷是否已經被選中過表2.1題庫信息表在本系統(tǒng)中出于安全考慮要求對系統(tǒng)的權限進行限制和管理,無權的用戶禁止進入,管理員享有所有權利,普通用戶享有除用戶管理和數(shù)據(jù)庫清空外的所有權利。為此,我又設計了一個表“表2.2”來存儲用戶的用戶名、密碼以及權限。各字段的相關設置如下列表所示:用戶信息表:字段名稱數(shù)據(jù)類型說明編號自動編號自動編號User文本用戶名Password文本密碼Kind備注用戶類型:1為管理員,0為普通用戶表2.2用戶信息表2.7系統(tǒng)程序流圖退出系統(tǒng)退出系統(tǒng)否是否繼續(xù)是系統(tǒng)初始化身份認證正確試卷自動生成錯誤數(shù)據(jù)庫清空關于登陸用戶管理題庫管理 圖2.2系統(tǒng)程序流圖2.8系統(tǒng)功能模塊圖根據(jù)系統(tǒng)分析的結果,對系統(tǒng)進行功能分解,得到試卷自動生成系統(tǒng)的系統(tǒng)功能模塊圖,首先得到的是系統(tǒng)的第一輪HIPO圖,如圖2.3所示:試卷自動生成試卷自動生成系統(tǒng)題庫管理試卷自動生成生成試卷顯示登陸用戶管理關于本系統(tǒng)數(shù)據(jù)庫清空圖2.3系統(tǒng)功能模塊圖2.9數(shù)據(jù)庫設計試題{試題編號、問題、答案}試題類型{選擇題、填空題、計算題}試題難度{簡單、中等、難}用戶{用戶編號、用戶名、密碼}按照上面的設計方法生成的實體及其屬性圖:試題試題試題編號問題答案試題類型選擇題計算題填空題圖2.4圖2.5難度簡單難度簡單中等難用戶用戶編號密碼用戶名圖2.6圖2.7分析這些實體及其屬性圖中實體之間的聯(lián)系,得到完整的系統(tǒng)實體聯(lián)系圖(E-R圖),如圖2.8所示。用戶登陸用戶登陸權限管理員普通用戶清空數(shù)據(jù)庫信息管理用戶信息對題庫進行管理生成試卷錄入修改刪除退出輸入條件生成試卷退出添加用戶修改用戶刪除用戶圖2.8系統(tǒng)的實體聯(lián)系圖(E-R圖)2.10算法流程圖試卷自動生成系統(tǒng)在按教師設置的條件隨機從題庫中抽取試題的流程如圖2.9所示:將題庫的所有標志位清將題庫的所有標志位清0抽取一個隨機數(shù)n判斷是否沒有超過所要選的各條數(shù)移動記錄指針到第n個記錄判斷此記錄是否已經選過,如未選過判斷該題的題型分類加此題目到題庫中,同時改寫是否已經選過的標志,同時使題目條數(shù)+1圖2.9算法流程圖第三章系統(tǒng)的具體實現(xiàn)3.1系統(tǒng)各模塊及其功能本系統(tǒng)主要有七大模塊組成:用戶登陸模塊、主界面模塊、用戶管理模塊、題庫管理模塊、試卷自動生成模塊、生成試卷顯示模塊、關于模塊。下面簡單介紹一下每個模塊的功能。3.1.1.用戶登陸模塊本模塊主要是要為用戶提供系統(tǒng)保護功能。只有知道用戶名和登錄密碼的用戶才能進入本系統(tǒng)。其他人將無法使用本軟件也就無法瀏覽和管理數(shù)據(jù)庫。本系統(tǒng)支持多用戶登錄。同時用戶登錄類型又可以分為系統(tǒng)管理員和普通用戶。系統(tǒng)管理員擁有操作軟件的所有權利,而普通用戶擁有除“用戶管理”和“清空數(shù)據(jù)庫”外的所有權利。如圖3.1所示。圖3.1用戶登陸模塊3.1.2.主界面模塊:本模塊的主要功能是為其他模塊的運行提供一個的操作平臺,或者說主界面模塊是其他模塊運行的入口,通過主界面模塊才可能進入其他功能模塊,如:題庫管理模塊、試卷自動生成模塊。如圖3.2示。圖3.2主界面模塊3.1.3.用戶管理模塊:本模塊的主要功能是能讓具有系統(tǒng)管理員權限的用戶能對用戶進行添加、刪除、修改等功能。如圖3.3所示。圖3.3用戶管理模塊3.1.4.題庫管理模塊:本模塊主要是對題庫里的內容進行管理,包括試題的錄入、修改、刪除、瀏覽等。用戶在輸入數(shù)據(jù)庫里要注意選擇新錄入試題的類型、難度的選擇。如圖3.4所示。圖3.4題庫管理模塊3.1.5.試卷自動生成模塊:本模塊的主要功能就是根據(jù)考試的需要,自動從題庫中按要求隨機抽出試題并組合成一套試卷了。在操作時,用戶要首先輸入選題條件:如選擇題難題幾道、中等難度的題幾道、簡單的題幾道,填空題、計算題也是一樣。在輸入完成后,按“生成試卷”按鈕,系統(tǒng)就會根據(jù)輸入的條件自動從題庫中抽取試題并組合成一套試卷并顯示在文本框中。如圖3.5所示。圖3.5試卷自動生成模塊3.1.6.生成試卷顯示模塊:本模塊的功能很簡單,就是接收試卷自動生成模塊中從題庫中選取的試題并顯示在屏幕上。如圖3.6所示。圖3.6生成試卷顯示模塊3.1.7.關于模塊:主要顯示本系統(tǒng)的名稱、版本、制作人、運行環(huán)境、完成日期等信息。如圖3.7所示。圖3.7關于模塊3.2給數(shù)據(jù)庫加密要保護好自己的數(shù)據(jù)庫就必須為制作好的數(shù)據(jù)庫添加密碼,即對其進行加密處理,也就是增加口令。這樣在每次打開數(shù)據(jù)庫時,如果輸入密碼不正確,就無法瀏覽數(shù)據(jù),從而保證數(shù)據(jù)庫中數(shù)據(jù)的絕對安全。方法其實很簡單,首先要以“獨占”的方式打開制作好有待加密的數(shù)據(jù)庫(注意一定要以“獨占”的方式打開,否則無法進行加密)。然后單擊“工具”菜單,選中其中的“安全”項,在彈出的子菜單項中選擇“設置數(shù)據(jù)庫密碼”項,這時會彈出密碼設置窗體,在其中輸入兩次要設置的密碼(注意密碼要上下相同),然后單擊“確定”,數(shù)據(jù)庫密碼設置就完成了。在本軟件所用的數(shù)據(jù)庫tk.mdb中,其數(shù)據(jù)庫密碼為200434。當然軟件運行時還需要用程序指令來對加密的數(shù)據(jù)庫進行訪問,對于這一方面的內容將在后面的論文中加以闡述[1]。3.3開發(fā)工具選擇因為Delphi提供了強大的數(shù)據(jù)庫編程的功能和友好的用戶接口,只要掌握Delphi的基本語法和一些數(shù)據(jù)庫編程的基本知識,并且開發(fā)系統(tǒng)方便,所以開發(fā)工具選擇了Delphi7.0。后臺數(shù)據(jù)庫選用了Access2000。3.3.1Delphi介紹Delphi實際上是Pascal語言的一種版本,但它與傳統(tǒng)的Pascal語言有天壤之別。一個Delphi程序首先是應用程序框架,而這一框架正是應用程序的“骨架”。在骨架上即使沒有附著任何東西,仍可以嚴格地按照設計運行。您的工作只是在“骨架”中加入您的程序,缺省的應用程序是一個空白的窗體(Form),您可以運行它,結果得到一個空白的窗口。這個窗口具有Windows窗口的全部性質:可以被放大縮小、移動、最大最小化等,但您卻沒有編寫一行程序。因此,可以說應用程序框架通過提供所有應用程序共有的東西,為用戶應用程序的開發(fā)打下了良好的基礎[2]。
Delphi7.0軟件開發(fā)工具是Borland公司推出的一個可視化系統(tǒng)開發(fā)環(huán)境的工具。它具有功能強大、運行速度快、易于學習和使用以及開發(fā)迅速等特點,所以一經推出就受到廣大用戶的喜歡。Delphi結合了可視化技術、面向對象技術、數(shù)據(jù)庫技術以及網(wǎng)絡技術等多種先進的軟件編程技術和思想,并使用了世界上最快的編譯器,使其成為創(chuàng)建功能豐富、界面友好的Windows應用軟件的工具之一。Delphi7.0版本功能更為強大,不但繼承了前面所有版本的優(yōu)良特性,而且糾正了一些錯誤,它對Web服務、數(shù)據(jù)庫的支持更加完善[3]。3.3.2數(shù)據(jù)庫操作界面中基本功能介紹數(shù)據(jù)庫主界面主要包括了對數(shù)據(jù)庫的各種操作,包括數(shù)據(jù)庫中記錄的修改、記錄的添加、記錄的刪除以及記錄的瀏覽。這些都是數(shù)據(jù)庫操作中所必須的內容。其代碼如下:(1)增加記錄:adotable1.Edit;adotable1.Append;//append為增加模式;(2)保存修改:Adotable1.Edit;adotable1.Post;//這是個關鍵按鈕,將對數(shù)據(jù)修改的結果存入數(shù)據(jù)庫!對數(shù)據(jù)庫的任何修改,只有按了這個按鈕后才真正將修改的結果存入數(shù)據(jù)庫。3.3.3Ado技術介紹及使用方法ADO(ActiveXDataObject,ActiveX數(shù)據(jù)對象)是微軟提出的新標準。從原理上來說,ADO與第三方構件并無多大區(qū)別,只是它是Inprise官方開發(fā)的;同時,它連接的不是某個具體的數(shù)據(jù)庫,而是微軟提供的ADO對象。從理論上講,ADO能夠支持任何類型的數(shù)據(jù)庫(甚至包括流式數(shù)據(jù))。用ADO來取代Delphi自代的BDE的確是一個不錯的解決方案,而且在Delphi中使用ADO也相當方便[4]。下面簡單介紹一下ADO的使用方法,也就是本畢業(yè)設計程序操作數(shù)據(jù)庫的方法。本畢業(yè)設計就是用ADO操作數(shù)據(jù)庫tk.mdb。在Delphi組件面板上有ADO組件頁,其中前6個是ADO組件。在空白窗體上放置一個ADOConnection1組件,一個ADOTable1組件、一個DataSource1組件、一個DBGrid1組件。先設定一下部分組件屬性如下:設定DBGrid1組件的DataSource屬性為DataSource1,設定DataSource1組件的DataSet屬性為ADOTable1。雙擊ADOConnection1組件或者在其屬性列表中點擊ConnectionString后的省略號都可以打開連接字符串設定窗口如下圖3.8所示:
圖3.8點擊“Build”按鈕,將打開數(shù)據(jù)連接屬性窗口如下圖3.9所示,其中有四個頁面,在第一個“提供者”頁面中,列出了可以使用的各種驅動數(shù)據(jù)庫驅動。對于ACCESS97數(shù)據(jù)庫來說,用MicrosoftJet3.51OLEDBProvider驅動即可,當然選擇MicrosoftJet4.0OLEDBProvider驅動也可,但對于ACCESS2000數(shù)據(jù)庫來說必須使用MicrosoftJet4.0OLEDBProvider,不能使用MicrosoftJet3.51OLEDBProvider。選擇完畢數(shù)據(jù)庫驅動后,點擊“連接”頁面,在這里輸入或選擇數(shù)據(jù)庫,這里我們查找選擇數(shù)據(jù)庫為“tk.mdb”,如果數(shù)據(jù)庫有密碼可將“空白密碼”復選框去掉選擇,就可以輸入密碼,選中“允許保存密碼”這樣以后就可以無需再輸入密碼了。接下來可以點擊“測試連接”按鈕,如果提示“測試連接成功”那么說明數(shù)據(jù)庫可正常連接上。在“高級”頁面中選擇訪問權限為“ReadWrite”。在“所有”頁面中顯示的是用戶目前設定的連接屬性,用戶可以再修改。點擊“確定”按鈕后返回到上圖,這時可以看到屬性設定字符串已經自動生成,點擊“OK”按鈕返回即可。再把ADOConnection1組件的LoginPrompt屬性設定為false,這樣以后程序在運行時就不會彈出密碼輸入框了。但如果你的數(shù)據(jù)庫有密碼且在上面的“連接”頁面中沒有輸入密碼沒有選中“允許保存密碼”,那么不要把此屬性設定為false,因為你以后需要手工輸入密碼。圖3.9有輸入密碼沒有選中“允許保存密碼”,那么不要把此屬性設定為false,因為你以后需要手工輸入密碼。
接著設定ADOTable1組件的Connection屬性為ADOConnection1,單擊ADOTable1組件的tablename屬性后的省略號,將可以看到數(shù)據(jù)庫tk.mdb中的所有數(shù)據(jù)表名稱列表,從中選擇一個如“表1”,設定ADOTable1組件的Active屬性為True,則馬上可以在DbGrid中看到表中的數(shù)據(jù)了。如果馬上運行程序就可以在窗口中瀏覽和編輯數(shù)據(jù)了[5]。3.4程序設計過程中遇到的問題和解決方法在軟件制作的過程中遇到了大大小小、很多很多的問題。只要有一個沒有解決整個軟件就完成不了。所以掌握解決問題的方法是關鍵,這是我這次畢業(yè)設計過程中的最重要的體會之一。下面列出制作過程中遇到的一些較為典型的問題。3.4.1:第三方控件安裝后在使用過程中,仍然不能運行的問題。即:第三方控件在按照安裝提示準確地安裝完畢后,然后在窗體上放上該控件,設置好控件屬性后運行。系統(tǒng)會提示找不到某某*.dcu文件。這是因為軟件運行是需要將該控件所對應的*.dcu文件加載到可執(zhí)行文件中。所以需要設置一下控件所對應*.dcu的路徑。具體方法如下:單擊“project”,然后選中“Options”,這時會彈出“ProjectOptionsfor…”的設置窗體。在“Directories/Conditionals”項的SearchPath里面進入該控件所對應的*.dcu的文件路徑即可[6]。3.4.2:如何在程序中用代碼打開一個帶密碼的Access數(shù)據(jù)庫。因為要保證數(shù)據(jù)庫中數(shù)據(jù)的安全,所以要對數(shù)據(jù)庫進行加密,而如何打開一個帶密碼的Access數(shù)據(jù)庫卻難倒了我,通過查閱資料我終于找到了方法。首先:要按上面提到Ado連接數(shù)據(jù)庫的一般方法來配置Adotable1的connectionstring屬性。在“數(shù)據(jù)鏈接屬性”頁面的“連接”項中選擇您要鏈接的數(shù)據(jù)庫,本系統(tǒng)中為tk.mdb。如果僅這樣只能正確打開沒有密碼的數(shù)據(jù)庫,要打開有密碼的Access數(shù)據(jù)庫,還需要點擊“數(shù)據(jù)鏈接屬性”頁面的“所有”項,如圖3.10所示:圖3.10然后編輯“JetOLEDB:DatabasePassword”的值,即輸入數(shù)據(jù)庫的正確密碼,這樣connectionstring屬性就成功配置完成了。其次:要在程序開始時在源代碼部分再一次用代碼對Adotable1的connectionstring屬性進行賦值,即:connectionstring:='provider=Microsoft.jet.oledb.4.0;'+'persistsecurityinfo=false;'+'datasource='+dbpath+'tk.mdb;'+'jetoledb:databasepassword=200434';//重新設置connectionstring屬性[7]3.5系統(tǒng)中部分核心代碼及難點代碼的解釋(1)統(tǒng)計題庫中各題型各難度題目的數(shù)量在試卷自動生成模塊中,為了讓操作人員知道題庫中目前各題型即選擇題、填空題、計算題的不同難度的題目的總數(shù)各是多少,以便讓操作人員能夠有針對性地選擇不同類型、不同難度的題目,所以需要對這些題目的信息進行統(tǒng)計,這也是本系統(tǒng)關鍵的地方這一。代碼及其解釋如下:procedureTForm3.FormShow(Sender:TObject);//這是在試卷自動生成模塊的窗體產生事件中觸發(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;//先關閉查詢控件adoquery1,以便向其中加入sql語句的查詢內容SQL.Clear;//清空sql語句sql.Add('select*fromtk1where類型="選擇題"and難度="難"');//向sql中增加查詢語句的內容active:=true;//打開查詢控件adoquery1label1.Caption:='共'+inttostr(recordcount)+'題';//將本題型題目(本段中即:選擇題中難度為難的那類題目)的總數(shù)賦值給label1,顯示在軟件中(2)生成試卷代碼解釋:本段代碼是整個系統(tǒng)中的核心代碼。它的作用就是根據(jù)操作人員輸入的選題條件自動從題庫中抽取試題并組合成一套試卷并顯示在文本框中。有多種方法可以實現(xiàn)這一功能,通過比較后我選擇了其中相對而言容易理解、容易操作的一種方法來完成。下面就以選擇題為例,程序代碼及其解釋如下: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用于接受所有計算題的數(shù)據(jù)k:integer;count:integer;begincount:=adotable1.RecordCount;//記錄總數(shù),沒用到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);//計算題中簡單的m1:='[選擇題]'+#10+#10;//注:#10是換行的意思。m2:='[填空題]'+#10+#10;m3:='[計算題]'+#10+#10;adotable1.first;whilenotadotable1.eofdobeginadotable1.Edit;//注意此處一定要加,而且不能加在循環(huán)外面,否則會提示"未處于編輯模式下"adotable1.FieldByName('標志').Value:=0;adotable1.next;end;//以上循環(huán)語句是將標志位清0adotable1.Close;adotable1.Open;randomize();//隨機數(shù)初始化ii1:=0;ii2:=0;ii3:=0;//選擇題(ii是與i相對應的比較用的)jj1:=0;jj2:=0;jj3:=0;//填空題(jj是與j相對應的比較用的)hh1:=0;hh2:=0;hh3:=0;//計算題(hh是與j相對應的比較用的)form4.richedit1.clear;//清空用于接收題目內容的richedit中的內容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是接收產生的隨機數(shù)adotable1.MoveBy(k);//將指針從第一條記錄移動到第k個記錄ifadotable1.FieldByName('標志').Value=0then//判斷是否已經被選過beginifadotable1.FieldByName('類型').value='選擇題'then//如果是選擇題beginifadotable1.FieldByName('難度').value='難'thenbeginifii1<i1thenbeginm1:=m1+adotable1.FieldByName('題').Value;m1:=m1+#10;//在后面加入一空行m1:=m1+#10;//在后面再加入一空行ii1:=ii1+1;//將已經選中的幾條記錄的標志ii加1//以下三行是將該題是否已經選中的標記設為1,這樣再選時就不會選中這條記錄了,從而避免重復現(xiàn)象的產生adotable1.Edit;adotable1.FieldByName('標志').Value:=1;adotable1.post;end;end;//以下代碼與上面基本相同,不作過多解釋。ifadotable1.FieldByName('難度').value='中等'thenbeginifii2<i2thenbeginm1:=m1+adotable1.FieldByName('問題').Value;m1:=m1+#10;m1:=m1+#10;ii2:=ii2+1;adotable1.Edit;adotable1.FieldByName('標志').Value:=1;adotable1.post;end;end;ifadotable1.FieldByName('難度').value='簡單'thenbeginifii3<i3thenbeginm1:=m1+adotable1.FieldByName('問題').Value;m1:=m1+#10;m1:=m1+#10;ii3:=ii3+1;adotable1.Edit;adotable1.FieldByName('標志').Value:=1;adotable1.post;end;end;end;form4.RichEdit1.Lines.Add(m1);//這里及以下兩句是將m1(選擇題),m2(填空題),m3(計算題)的內容一起輸出到richedit1中。form4.RichEdit1.Lines.Add(m2);form4.RichEdit1.Lines.Add(m3);form4.Show;//顯示窗體4,即將從題庫中自動隨機抽取的試題組成的試卷的內容顯示出來。end;系統(tǒng)性能測試經過不斷的努力,終于完成了試卷自動生成系統(tǒng)的初步設計和編制。我對本系統(tǒng)進行改編的性能測試。測試環(huán)境:P=3\*ROMANIII256M/64G操作系統(tǒng):WindowsXP系統(tǒng)平臺:Delphi7.0系統(tǒng)調試過程:程序的最后調試工作是應用程序的最后檢查階段,該階段主要完成的任務有以下幾點:.程序遇到用戶錯誤操作時能否正確處理;.程序在遇到運行錯誤時是否能夠正確的處理錯誤;.程序的預定功能是否達到。利用Delphi的系統(tǒng)調試器對整個系統(tǒng)進行了跟蹤調試,發(fā)現(xiàn)了其中的函數(shù)使用錯誤,數(shù)據(jù)表名稱輸入錯誤等一些問題,及時的修改了每個錯誤。在上述環(huán)境中,將設計和編譯好的試卷自動生成系統(tǒng)進行首次運行。當進入系統(tǒng),發(fā)現(xiàn)一些問題,如各表單的屬性設置不夠完整,使用其在調用過程中出現(xiàn)錯誤,我經過反復檢查核對,終于找出了問題并調試通過。最后對應用程序的功能調試,發(fā)現(xiàn)應用程序的運行結果滿足用戶要求,達到了預想的程序設計目的。同時還對系統(tǒng)界面的進行了調整,提高其友好性。通過對程序的調試,查找資料我學到了一些程序調試基本方法,使我學到許多新的知識,積累了更多的經驗,也對本程序的完整性有了進步的了解,整個的編程思想也更加的完整,為我在今后的工作打下了良好的基礎。測試結果:系統(tǒng)各功能運行一切正常,并達到了設計要求??偨Y本次畢業(yè)設計,任務較重,時間緊,涉及的范圍又比較多,也是我第一次做這種比較大的程序設計課題。從課題的確定到逐步深入直至最終完成各項目標任務,每一個過程都具有很大的挑戰(zhàn)性。在設計過程中,也曾遇到各式各樣的問題,如程序的調試過程,經常會出現(xiàn)運行不正常等情況。雖然困難很多,但在自己的不懈努力及通過查找資料、請教老師、詢問同學和同事等辦法,最終都能找到解決問題的辦法。在克服困難、攻破一個個困難的過程中,學到了許多平時沒有學到的知識,收獲很大,從而使自己的知識在完成課題的過程中不斷充實,水平也得到了一定的提高。應該說本次畢業(yè)設計,達到了畢業(yè)設計開題所預期的目標。同時,設計過程也培養(yǎng)了我獨立工作的能力,樹立了對自己工作能力的信心,相信會對我今后的學習工作生活能產生非常重要的影響。最重要的是通過本次課題鍛煉了自己獨自分析解決問題的能力和自我學習的能力。采用試卷自動生成系統(tǒng)進行考試,其優(yōu)點以成為教育專家的共識,它使的試題的收集和管理自動化和標準化,而試題的標準化和自動化又有利于教學質量的提高,它為計算機輔助教學及學校的計算機管理的進一步實施創(chuàng)造了條件,題庫管理與試卷自動生成系統(tǒng)的研究和開發(fā)也就成為近年來教育系統(tǒng)中一個十分引人注目的課題。建立一個好的題庫管理與試卷自動生成系統(tǒng),并運用于教學中可以節(jié)省教師出題、制卷的時間,減輕勞動強度、提高工作效率;可以避免因不同教師出題而產生的試題內容及重點、難度的差異;有利于教學質量的統(tǒng)一評估;可以使考試更加規(guī)范化、標準化、科學化。當然,由于時間較緊,加上是初次涉及到比較大的程序的設計和開發(fā),經驗上相對缺乏,本系統(tǒng)只能對同一門課程的試卷進行題庫管理,以及不能按章節(jié)錄入試題,最好還應該能按章節(jié)選擇試題的功能。因此軟件做得還不是很好,還需要以后加以進一步改進。通過本畢業(yè)設計的學習以及思考制作,我基本掌握了操作數(shù)據(jù)庫的各種方法。同時在設計過程中我遇到了很多問題,通過自己查閱資料,不斷的調試最后都成功地解決了。在本畢業(yè)設計過程中我感受最深的就是:完成工作的過程中要學會自學,同時我還認識到在遇到問題的時候如何去分析問題,找出問題,然后去解決問題,我想雖然我的畢業(yè)設計已經成功做完了,但我收獲最大的確是學會了以上兩點。致謝大學學習生活即將結束,在此,我要感謝所有曾經教導過我的老師和關心過我的同學,他們在我成長過程中給予了我很大的幫助。本文能夠成功的完成,要特別感謝我的指導老師張剛林的關懷和教導,感謝各位師兄師姐的關心和幫助。最后還要感謝我的父母,是他們一直在背后支持著我。謹以此文獻給他們!參考文獻[1]齊治昌,譚慶平,寧洪著.軟件工程[M].北京:高等教育出版社,2002:16-31[2]MicrosoftCorporation著,微軟(中國)有限公司譯.Delphi6.0中文版程序員指南[M].微軟出版社,1998:30-35,39[3]高峰霞,廖彬山著.Delphi6.0中文版提高與應用[M].北京:電子工業(yè)出版社,1999:59-62[4]薩師煊,王珊著.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,2005:24-28[5]呂偉臣著.Delphi7入門與提高[M].清華大學出版社,2004:54-60[6]陳豫龍,何旭洪著Delphi7數(shù)據(jù)庫系統(tǒng)開發(fā)實例導航[M].北京:人民郵電出版社,2004:45-51[7]飛恩科技產品研發(fā)中心.Delphi7高級程序設計[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('您還沒有輸入用戶名或密碼!')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('您輸入的用戶名或密碼不正確,請重新輸入');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ù)庫清空完畢!');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.題庫管理模塊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('標志').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:='[計算題]'+#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('標志').Value=0thenbeginifadotable1.FieldByName('類型').value='選擇題'thenbegin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年用戶權益保障協(xié)議3篇
- 2025至2030年中國234-三羥基苯甲醛行業(yè)投資前景及策略咨詢研究報告
- 組合鋼板梁橋課程設計
- 私活課程設計
- 2024年環(huán)保型垃圾壓縮收運設備租賃合同3篇
- 算術右移課程設計節(jié)拍圖
- 2025版茶樓茶葉采摘及加工合作協(xié)議3篇
- 2024年版:前夫妻財產共享及居住安排合同
- 2025版?zhèn)€人收入證明出具與保險理賠支持合同3篇
- 2024年版:婚前財產明確合同書
- 山東省濱州市2023-2024學年高一上學期1月期末考試 政治 含答案
- 電力行業(yè)電力調度培訓
- 【MOOC】氣排球-東北大學 中國大學慕課MOOC答案
- 2024年江蘇省普通高中學業(yè)水平信息技術綜合分析試卷(一)(含答案)
- 醫(yī)院培訓課件:《乳腺癌解讀》
- 2024年政府采購評審專家考試題庫真題(一共十套卷一千道真題)
- 24.教育規(guī)劃綱要(2024-2024)
- 2023-2024學年蘇州市八年級語文上學期期末考試卷附答案解析
- 小紅書app創(chuàng)業(yè)計劃書
- 2023北京東城區(qū)初二上期末考歷史試卷及答案
- 棗莊市專業(yè)技術人員繼續(xù)教育公需科目2021年度補考題庫及衛(wèi)生??普n題庫
評論
0/150
提交評論