自動(dòng)組卷系統(tǒng)開(kāi)發(fā)畢業(yè)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)設(shè)計(jì)(論文)</p><p>  題 目: 自動(dòng)組卷系統(tǒng)開(kāi)發(fā) </p><p>  Development Of Test paper Auto-production System </p><p><b>  摘 要</b></p><p>  本文首先分析了自

2、動(dòng)組卷系統(tǒng)在具體的教學(xué)活動(dòng)過(guò)程中的實(shí)際需求,然后以C語(yǔ)言程序設(shè)計(jì)的教學(xué)為背景,設(shè)計(jì)與實(shí)現(xiàn)了一個(gè)實(shí)際通用的自動(dòng)組卷系統(tǒng),對(duì)其中的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)以及各個(gè)主要模塊的實(shí)現(xiàn)進(jìn)行了詳細(xì)的介紹。</p><p>  本系統(tǒng)可以從試題庫(kù)中自動(dòng)的查找和組織出一些不同題型、不同難度、不同章節(jié)范圍內(nèi)的試題來(lái)組成一份合理的試卷。它采用的是利用試卷的一組特征值,記錄用戶提供的試卷題目類(lèi)型、章節(jié)分布、難易程度等條件,采用隨機(jī)算法,借助于系統(tǒng)

3、中的一系列數(shù)據(jù)文件,使具體課程的相關(guān)數(shù)據(jù)動(dòng)態(tài)地抽象成邏輯數(shù)據(jù),用以解決通用問(wèn)題,線性的規(guī)劃出一份約束滿足的、合理的試卷。</p><p>  本系統(tǒng)的開(kāi)發(fā)工具是powerbuilder 9.0,使用的數(shù)據(jù)庫(kù)為Access 2003。系統(tǒng)分為題庫(kù)編輯、自動(dòng)組卷、試卷存儲(chǔ)、試卷打印等功能。 </p><p>  關(guān)鍵詞:自動(dòng)組卷 題庫(kù)管理 數(shù)據(jù)庫(kù) powerbuilder9.0</

4、p><p><b>  Abstract</b></p><p>  This paper analyses the actual demand of auto-production for test paper system in the course of concrete teaching activity at first. Then taking teachin

5、g of C language program design as the background,it designs and realizes a Test paper auto-production system. </p><p>  First, it Explains the design for the database structure, then introduces the detailed

6、one to the realization of each main module among them. It can automatically find and organize a certain number of test questions in various types with different degrees of difficulty in certain scope in the database to f

7、orm a reasonable test paper. What it adopt is to make use of to try a characteristic value of winding, recording the customer to provide of try a topic type, chapter to distribute, difficult ea</p><p>  The

8、development tool of this system is powerbuilder 9.0, the database of is Access 2003.The system is divided into database edit, test paper auto-production, test paper saving, test paper printing etc. function. </p>

9、<p>  Keywords: Test Paper Auto-production ; Database Management of Test Questions ; Database ; Powerbuilder 9.0</p><p><b>  目 錄</b></p><p><b>  前 言1</b></p>

10、;<p>  第一章 系統(tǒng)分析2</p><p>  1.1 系統(tǒng)目標(biāo)2</p><p>  1.2 系統(tǒng)需求分析2</p><p>  第二章 系統(tǒng)總體設(shè)計(jì)4</p><p>  第三章 開(kāi)發(fā)工具及開(kāi)發(fā)環(huán)境6</p><p>  3.1 總體開(kāi)發(fā)工具及環(huán)境6</p><p

11、>  3.2 開(kāi)發(fā)工具簡(jiǎn)介6</p><p>  3.3 數(shù)據(jù)庫(kù)的選擇7</p><p>  3.4 SQL基礎(chǔ)8</p><p>  3.5 SQL語(yǔ)句9</p><p>  第四章 數(shù)據(jù)庫(kù)的開(kāi)發(fā)與設(shè)計(jì)10</p><p>  4.1 數(shù)據(jù)庫(kù)需求分析10</p><p>  

12、4.2 系統(tǒng)邏輯分析11</p><p>  4.3 數(shù)據(jù)庫(kù)的連接13</p><p>  4.3.1 程序設(shè)計(jì)時(shí)與數(shù)據(jù)庫(kù)的連接14</p><p>  4.3.2程序運(yùn)行時(shí)與數(shù)據(jù)庫(kù)的連接14</p><p>  第五章 組卷策略設(shè)計(jì)16</p><p>  5.1 自動(dòng)組卷系統(tǒng)16</p>

13、<p>  5.2自動(dòng)組卷中隨機(jī)數(shù)選取問(wèn)題16</p><p>  5.3自動(dòng)組卷的具體實(shí)現(xiàn)17</p><p>  5.4試卷難度的程序控制18</p><p>  第六章 在PB中創(chuàng)建Word文檔20</p><p>  6.1 PB通過(guò)OLEOBJECT使用WORD20</p><p>  6

14、.2創(chuàng)建模板文件21</p><p>  6.3編寫(xiě)程序22</p><p>  第七章 系統(tǒng)模塊頁(yè)面和代碼設(shè)計(jì)26</p><p>  7.1 應(yīng)用程序?qū)ο笤O(shè)計(jì)26</p><p>  7.2系統(tǒng)登錄模塊26</p><p>  7.3主程序界面設(shè)計(jì)27</p><p>  7.4

15、菜單的設(shè)計(jì)28</p><p>  7.5 帳號(hào)管理模塊29</p><p>  7.6 題庫(kù)管理模塊31</p><p>  7.7 自動(dòng)組卷模塊34</p><p>  7.8 試卷管理模塊37</p><p>  7.9 關(guān)鍵技術(shù)38</p><p>  7.9.1 數(shù)據(jù)窗口中

16、記錄顏色的隔行顯示38</p><p>  7.9.2 數(shù)據(jù)窗口中實(shí)現(xiàn)數(shù)據(jù)列自動(dòng)折行40</p><p>  7.9.3 利用復(fù)合型數(shù)據(jù)窗口制作報(bào)表40</p><p>  第八章 系統(tǒng)發(fā)布42</p><p>  8.1 創(chuàng)建工程對(duì)象42</p><p><b>  8.2 發(fā)布43</b

17、></p><p><b>  結(jié) 論44</b></p><p><b>  致 謝45</b></p><p><b>  參考文獻(xiàn)46</b></p><p><b>  附錄47</b></p><p>&

18、lt;b>  前 言</b></p><p>  考試是教師檢查學(xué)生學(xué)習(xí)情況的必要手段,但出卷卻是一種繁重的智力和體力勞動(dòng),傳統(tǒng)的標(biāo)準(zhǔn)化試卷命題,需要由教學(xué)專(zhuān)家組成一個(gè)命題班子,根據(jù)許多優(yōu)秀教師多年的教學(xué)經(jīng)驗(yàn),從貫徹教學(xué)大綱要求,到試卷意圖的組織,經(jīng)過(guò)反復(fù)的推敲,才能完成一份標(biāo)準(zhǔn)化的試卷。這樣的命題方式不僅工作任務(wù)繁重而且試卷的標(biāo)準(zhǔn)化程度、難易程度、題量大小等各方面難以控制,難以形成有效的試題

19、庫(kù),給試題和試卷的管理帶來(lái)很多問(wèn)題和困難。鑒于這種情況,利用計(jì)算機(jī)進(jìn)行試卷的自動(dòng)生成并逐步積累形成有效的試題庫(kù),對(duì)試題和試卷的管理將變得高效而便捷,對(duì)提高工作效率,使試卷管理逐步走向正規(guī)化自動(dòng)化將起到十分重要的作用。同時(shí)使出卷工作變得輕松愉快,從很大程度上減輕了教師利用傳統(tǒng)的出卷方式組卷的繁重工作量,大大節(jié)省了老師的工作時(shí)間,便于教師有更多的時(shí)間和精力致力于教學(xué)方法的研究。今日, 隨著計(jì)算機(jī)的應(yīng)用的普及和硬件設(shè)備性能和軟件制作水平的提高

20、,為研制開(kāi)發(fā)高性能的試題管理軟件提供了條件。</p><p>  本系統(tǒng)采用PowerBuilder9.0為開(kāi)發(fā)工具。系統(tǒng)分為題庫(kù)編輯、自動(dòng)組卷、試卷存儲(chǔ)、試卷打印等功能,具體要求中下:建立一個(gè)包含多門(mén)課程的試題數(shù)據(jù)庫(kù),試題按照題型、章節(jié)和難度級(jí)別分類(lèi)存放。允許教師增設(shè)新的課程題庫(kù)、增刪改試題、查詢?cè)囶}、根據(jù)預(yù)先設(shè)置的題型和分值等相關(guān)參數(shù)自動(dòng)組卷、對(duì)試卷進(jìn)行格式編排、瀏覽和打印試卷、試卷存檔。</p>

21、<p>  本文主要包含以下內(nèi)容:</p><p>  (1)系統(tǒng)需求分析和系統(tǒng)功能設(shè)計(jì)。</p><p>  (2)開(kāi)發(fā)環(huán)境及開(kāi)發(fā)工具的選擇,編程語(yǔ)言簡(jiǎn)介。</p><p> ?。?)數(shù)據(jù)庫(kù)的設(shè)計(jì),介紹了數(shù)據(jù)庫(kù)設(shè)計(jì)理論、系統(tǒng)中所用到的表的邏輯結(jié)構(gòu)設(shè)計(jì)方法和設(shè)計(jì)過(guò)程等。</p><p> ?。?)組卷策略以及實(shí)現(xiàn)PB與Word的

22、通信。</p><p>  (5)功能模塊的設(shè)計(jì),具體介紹了如何實(shí)現(xiàn)各個(gè)功能模塊,介紹了一些核心代碼等。</p><p><b>  第一章 系統(tǒng)分析</b></p><p><b>  1.1 系統(tǒng)目標(biāo)</b></p><p>  自動(dòng)組卷系統(tǒng)是一個(gè)可適用各門(mén)課程題庫(kù)的系統(tǒng)。只要題庫(kù)是按知識(shí)結(jié)構(gòu)分

23、類(lèi)錄人的,自動(dòng)組卷系統(tǒng)即可按照組卷要求,從題庫(kù)的各部分隨機(jī)抽取試題及相應(yīng)的標(biāo)準(zhǔn)答案,分別生成試卷與標(biāo)準(zhǔn)答案。該組卷系統(tǒng)適應(yīng)規(guī)范化、科學(xué)化考試的要求,實(shí)用性強(qiáng),便于推廣使用。</p><p><b>  系統(tǒng)具有以下特點(diǎn):</b></p><p><b>  1、開(kāi)放性</b></p><p>  組卷系統(tǒng)適合各類(lèi)課程的書(shū)面

24、考試。試題庫(kù)中試題的錄入簡(jiǎn)單,也可以直接對(duì)試題庫(kù)進(jìn)行修改,易于使用。試卷的題數(shù),可以自定義。在組卷系統(tǒng)中可以對(duì)組卷進(jìn)行盡可能多的參數(shù)設(shè)置,以便可以組合出更加合理、符合要求的試卷。</p><p><b>  2、實(shí)用性</b></p><p>  在系統(tǒng)運(yùn)行時(shí)可以直接對(duì)選題的范圍進(jìn)行修改。試卷和試卷的答案一并給出。如果在該題沒(méi)有提供答案的情況下,也不出錯(cuò),答案上給出題

25、號(hào)。</p><p><b>  3、智能性</b></p><p>  組卷系統(tǒng)中抽題算法雖然是采用隨機(jī)算法,但在抽題之前用戶可以根據(jù)自己需要對(duì)組卷進(jìn)行題型、題數(shù)以及章節(jié)分布進(jìn)行盡可能精確的設(shè)置,實(shí)現(xiàn)人工智能化的控制。以便系統(tǒng)能夠組合出更加合理、符合用戶要求的試卷。</p><p>  1.2 系統(tǒng)需求分析</p><p&

26、gt;  系統(tǒng)分為題庫(kù)編輯、自動(dòng)組卷、試卷存儲(chǔ)、試卷打印等功能,具體要求如下: </p><p>  一個(gè)好的組卷系統(tǒng)必需要有一個(gè)足夠龐大的題庫(kù)做支持,所以系統(tǒng)首先要做好題庫(kù)的管理,建立一個(gè)包含多門(mén)課程的試題數(shù)據(jù)庫(kù),試題按照課程、題型、章節(jié)和難度級(jí)別分類(lèi)存放。允許教師增設(shè)新的課程題庫(kù)、增刪改試題、查詢?cè)囶}。</p><p>  系統(tǒng)因該能夠根據(jù)用戶預(yù)先設(shè)置的題型、題數(shù)、分值以及章節(jié)分布等相

27、關(guān)參數(shù)自動(dòng)組卷、允許用戶對(duì)試卷進(jìn)行打印或把試卷另存為Word文本,以便進(jìn)一步的編輯排版。</p><p>  試卷要存檔以便查詢以及今后的管理。</p><p>  第二章 系統(tǒng)總體設(shè)計(jì)</p><p>  試卷自動(dòng)生成系統(tǒng)是計(jì)算機(jī)輔助教學(xué)系統(tǒng)CAI( computer- aided instruction)的重要組成部分。在計(jì)算機(jī)普及的今天,考試作為發(fā)現(xiàn)和選拔人才

28、、資格認(rèn)證、等級(jí)確定的有效手段.也正在朝著自動(dòng)化、智能化的方向發(fā)展。對(duì)于從事高校教學(xué)的教師來(lái)說(shuō),有一個(gè)得心應(yīng)手的試卷自動(dòng)生成系統(tǒng),可以減輕教師負(fù)擔(dān),避免重復(fù)工作,提高工作效率。</p><p>  本系統(tǒng)主要包括以下幾個(gè)功能模塊:</p><p>  圖2.1 系統(tǒng)功能模塊圖</p><p>  功能模塊的具體說(shuō)明:</p><p>  1、

29、帳號(hào)管理對(duì)于本系統(tǒng)的一般用戶可進(jìn)行當(dāng)前用戶修改密碼和退出系統(tǒng)操作;對(duì)于本系統(tǒng)的管理員則還可進(jìn)行帳號(hào)的添加和刪除操作。</p><p>  2、題庫(kù)管理包括課程管理和試題管理,可添加新課程,修改和刪除指定課程信息;添加新試題,修改和刪除指定試題。</p><p>  3、自動(dòng)組卷填寫(xiě)試卷的基本信息,設(shè)置組卷的難度值、題型、數(shù)量、分值以及章節(jié)分布參數(shù)。采用隨機(jī)算法,結(jié)合相關(guān)設(shè)置參數(shù)

30、,組合出合理的、符合用戶要求的試卷;用戶還可以選擇出同一學(xué)期同一課程的2份試卷(即A、B卷),并且使2份試卷的重復(fù)比例控制在最低范圍。組卷完成后給出相應(yīng)試卷以及答案。</p><p>  4、試卷管理用戶可查詢所有出過(guò)的試卷的目錄,并且可以查看相應(yīng)的試卷。用戶可以把試卷打印或者另存為Word文本。</p><p>  第三章 開(kāi)發(fā)工具及開(kāi)發(fā)環(huán)境</p><p>

31、  3.1 總體開(kāi)發(fā)工具及環(huán)境</p><p>  本系統(tǒng)采用的軟件開(kāi)發(fā)工具及環(huán)境如下:</p><p>  操作系統(tǒng): WINDOWS XP。</p><p>  開(kāi)發(fā)工具: PowerBuilder9.0。</p><p>  數(shù)據(jù)庫(kù):Access2003數(shù)據(jù)庫(kù)。</p><p>  開(kāi)發(fā)用機(jī)器的硬件配置:<

32、/p><p>  Celeron(R) 2.66GHz、512MB內(nèi)存、80GB硬盤(pán)等。</p><p><b>  運(yùn)行要求的配置:</b></p><p>  硬件環(huán)境:英特爾奔騰處理器,166MHZ或更高的處理器、 32M RAM-ROM驅(qū)動(dòng)器、256色、1024*768分辨率顯示器(推薦使用更高的分辨率和顏色深度)。</p>

33、<p>  軟件環(huán)境:WINDOWS98/2000/XP。</p><p>  3.2 開(kāi)發(fā)工具簡(jiǎn)介</p><p>  PowerBuilder是一個(gè)圖形化的應(yīng)用程序開(kāi)發(fā)環(huán)境。使用PowerBuilder開(kāi)發(fā)的應(yīng)用軟件由窗口構(gòu)成,窗口中不僅可以包含按鈕、下拉列表框及單選按紐等標(biāo)準(zhǔn)的Windows控件,還可以有PowerBuilder提供的特殊控件。這些特殊控件可以使應(yīng)用軟件更容

34、易使用,使應(yīng)用軟件的開(kāi)發(fā)效率更高。</p><p>  例如,數(shù)據(jù)窗口就是PowerBuilder提供的一個(gè)集成度很高的控件,使用該控件可以很方便地從數(shù)據(jù)庫(kù)中提取數(shù)據(jù),很簡(jiǎn)單地檢索數(shù)據(jù),提供圖形化的數(shù)據(jù)顯示方式,創(chuàng)建統(tǒng)計(jì)功能非常強(qiáng)大的數(shù)據(jù)統(tǒng)計(jì)表。由于數(shù)據(jù)窗口對(duì)數(shù)據(jù)的操作是通過(guò)事務(wù)進(jìn)行的,所以對(duì)數(shù)據(jù)的操作有很強(qiáng)的可靠性。這些都為開(kāi)發(fā)功能強(qiáng)大的數(shù)據(jù)庫(kù)應(yīng)用軟件提供了可靠的保證。</p><p>

35、  商業(yè)化的軟件開(kāi)發(fā)要求有很好的移植性。PowerBuilder既可以跨平臺(tái)開(kāi)發(fā),也可以發(fā)行跨平臺(tái)軟件。例如,在Windows 95下開(kāi)發(fā)的程序,可以不修改源程序而形成UNIX下的執(zhí)行文件或Macintosh下的執(zhí)行文件。在開(kāi)發(fā)小組中,不同成員可以使用不同的開(kāi)發(fā)環(huán)境,但由于PowerBuilder的支持,在不同的開(kāi)發(fā)環(huán)境下看到的共享PowerBuilder對(duì)象是相同的,所以仍可以同時(shí)開(kāi)發(fā)同一個(gè)應(yīng)用程序。</p><p

36、>  隨著軟件技術(shù)的不斷發(fā)展,PowerBuilder 9.0及時(shí)地強(qiáng)化了開(kāi)發(fā)功能,并提供了一些配套的開(kāi)發(fā)工具,成為一種易于使用的、可伸縮的并經(jīng)實(shí)踐證明的快速集成開(kāi)發(fā)環(huán)境。它在給用戶提供一條轉(zhuǎn)移到下一代平臺(tái)的途徑的同時(shí),使用戶仍能夠保護(hù)和擴(kuò)展現(xiàn)有的技術(shù)和應(yīng)用上的投資。</p><p>  3.3 數(shù)據(jù)庫(kù)的選擇</p><p>  Access2003是微軟公司開(kāi)發(fā)的基于Windows

37、平臺(tái)的小型數(shù)據(jù)庫(kù)管理系統(tǒng),是Office 2003 的組件之一。它承襲了舊版本Access的各項(xiàng)優(yōu)點(diǎn),又新增或完善了數(shù)據(jù)訪問(wèn)頁(yè)、個(gè)性化菜單、internet/intranet、編程、安全保密等功能。</p><p>  自從1992年,Microsoft 公司發(fā)布Access1.0以來(lái),隨著Windows的普及,使用Access的人越來(lái)越多,它逐漸成為流行的數(shù)據(jù)庫(kù)軟件之一。 </p><p&g

38、t;  Access是一個(gè)面向?qū)ο蟮?、采用事件?qū)動(dòng)機(jī)制的小型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。在Access中,用戶可以根據(jù)實(shí)際需要對(duì)數(shù)據(jù)進(jìn)行分類(lèi),然后使用表對(duì)象分別存儲(chǔ)每一種類(lèi)型的數(shù)據(jù),并建立起不同類(lèi)型數(shù)據(jù)之間的關(guān)系,供報(bào)表使用。此時(shí),每條信息僅在一處存放,減少了冗余數(shù)據(jù)的產(chǎn)生,節(jié)省了寶貴的存儲(chǔ)空間,同時(shí)也加快了更新數(shù)據(jù)的速度。</p><p>  在Access數(shù)據(jù)庫(kù)中,任何有名字的事物都可以稱(chēng)之為對(duì)象。Access使用了

39、與Windows 一致的風(fēng)格,采取面向?qū)ο蟮姆绞剑瓿蓴?shù)據(jù)庫(kù)的各種功能。極大地簡(jiǎn)化了用戶的開(kāi)發(fā)工作。</p><p>  針對(duì)用戶在實(shí)際應(yīng)用中的需求,Access數(shù)據(jù)庫(kù)提供了表、查詢、窗體、報(bào)表、頁(yè)、宏和模塊等七個(gè)對(duì)象,用于收集、存儲(chǔ)和操作各種不同的信息。 </p><p>  為了便于使用,Access的每個(gè)對(duì)象都為用戶提供了設(shè)計(jì)器和生成向?qū)?。用戶可以在設(shè)計(jì)器中設(shè)計(jì)生成對(duì)象,或?qū)ι傻膶?duì)

40、象進(jìn)行編輯;用戶也可通過(guò)生成向?qū)Х奖憧焖俚纳梢粋€(gè)完備的對(duì)象。</p><p>  如上所述,Access 作為關(guān)系數(shù)據(jù)庫(kù)開(kāi)發(fā)具備了許多優(yōu)點(diǎn),所以本系統(tǒng)所采用的數(shù)據(jù)庫(kù)開(kāi)發(fā)工具為Access。</p><p><b>  3.4 SQL基礎(chǔ)</b></p><p>  SQL(Structured Query Language,結(jié)構(gòu)查詢語(yǔ)言)是一

41、個(gè)功能強(qiáng)大的數(shù)據(jù)庫(kù)語(yǔ)言。SQL通常使用于數(shù)據(jù)庫(kù)的通訊。ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì))聲稱(chēng),SQL是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言。SQL語(yǔ)句通常用于完成一些數(shù)據(jù)庫(kù)的操作任務(wù),比如在數(shù)據(jù)庫(kù)中更新數(shù)據(jù),或者從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)。使用SQL的常見(jiàn)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)有:Oracle、Sybase、Microsoft SQL Server、Access、Ingres等等。雖然絕大多數(shù)的數(shù)據(jù)庫(kù)系統(tǒng)使用SQL,但是它們同樣有它們自立另外的專(zhuān)有擴(kuò)展功能用于它

42、們的系統(tǒng)。但是,標(biāo)準(zhǔn)的SQL命令,比如"Select"、 "Insert"、 "Update"、"Delete"、"Create"和"Drop"常常被用于完成絕大多數(shù)數(shù)據(jù)庫(kù)的操作。MS SQL Server 就是用的Transact- SQL 。</p><p>  SQL語(yǔ)言有著非常突出的優(yōu)點(diǎn)

43、,主要是:非過(guò)程化語(yǔ)言;統(tǒng)一的語(yǔ)言;所有關(guān)系數(shù)據(jù)庫(kù)的公共語(yǔ)言。</p><p>  非過(guò)程化語(yǔ)言:SQL是一個(gè)非過(guò)程化的語(yǔ)言,因?yàn)樗淮翁幚硪粋€(gè)記錄,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作,可操作記錄集,所有SQL 語(yǔ)句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語(yǔ)句的結(jié)果作為另一條SQL語(yǔ)句的輸入。</p><p>  SQ

44、L不要求用戶指定對(duì)數(shù)據(jù)的存放方法,這種特性使用戶更易集中精力于要得到的結(jié)果;所有SQL語(yǔ)句使用查詢優(yōu)化器,它是RDBMS的一部分,由它決定對(duì)指定數(shù)據(jù)存取的最快速度的手段,查詢優(yōu)化器知道存在什么索引,在哪兒使用索引合適,而用戶則從不需要知道表是否有索引、有什么類(lèi)型的索引。 統(tǒng)一的語(yǔ)言:SQL可用于所有用戶的DB活動(dòng)模型,包括系統(tǒng)管理員、數(shù)據(jù)庫(kù)管理員、應(yīng)用程序員、決策支持系統(tǒng)人員及許多其它類(lèi)型的終端用戶。</p>&l

45、t;p>  SQL為許多任務(wù)提供了命令,其中包括:查詢數(shù)據(jù);在表中插入、修改和刪除記錄;建立、修改和刪除數(shù)據(jù)對(duì)象;控制對(duì)數(shù)據(jù)和數(shù)據(jù)對(duì)象的存??;保證數(shù)據(jù)庫(kù)一致性和完整性。</p><p>  以前的數(shù)據(jù)庫(kù)管理系統(tǒng)為上述各類(lèi)操作提供單獨(dú)的語(yǔ)言,而SQL 將全部任務(wù)統(tǒng)一在一種語(yǔ)言中。</p><p>  所有關(guān)系數(shù)據(jù)庫(kù)的公共語(yǔ)言:由于所有主要的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)都支持SQL語(yǔ)言,用戶可將使

46、用SQL的技能從一個(gè)RDBMS(關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng))轉(zhuǎn)到另一個(gè),所有用SQL編寫(xiě)的程序都是可以移植的。</p><p><b>  3.5 SQL語(yǔ)句</b></p><p>  SQL功能強(qiáng)大,是一種完備的數(shù)據(jù)處理語(yǔ)言,不僅用于數(shù)據(jù)庫(kù)查詢而且用于數(shù)據(jù)庫(kù)中的數(shù)據(jù)修改和更新,概括起來(lái)它可以分成以下幾組:</p><p>  DML(Data Ma

47、nipulation Language,數(shù)據(jù)操作語(yǔ)言):用于檢索或者修改數(shù)據(jù);DDL(Data Definition Language,數(shù)據(jù)定義語(yǔ)言): 用于定義數(shù)據(jù)的結(jié)構(gòu),比如創(chuàng)建、修改或者刪除數(shù)據(jù)庫(kù)對(duì)象;DCL(Data Control Language,數(shù)據(jù)控制語(yǔ)言):用于定義數(shù)據(jù)庫(kù)用戶的權(quán)限。</p><p>  DML組可以細(xì)分為以下的幾個(gè)語(yǔ)句: </p><p>  SELE

48、CT:用于檢索數(shù)據(jù);INSERT:用于增加數(shù)據(jù)到數(shù)據(jù)庫(kù);UPDATE:用于從數(shù)據(jù)庫(kù)中修改現(xiàn)存的數(shù)據(jù);DELETE:用于從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)。</p><p>  第四章 數(shù)據(jù)庫(kù)的開(kāi)發(fā)與設(shè)計(jì)</p><p>  數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的好壞將直接對(duì)應(yīng)用系統(tǒng)的效率以及實(shí)現(xiàn)的效果產(chǎn)生影響,好的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)會(huì)減少數(shù)據(jù)庫(kù)的存儲(chǔ)量,資料的完整性和一致性比較高,系統(tǒng)具有較快的響應(yīng)速度,簡(jiǎn)化基于此數(shù)據(jù)庫(kù)的應(yīng)

49、用程序的實(shí)現(xiàn)等等。由于數(shù)據(jù)庫(kù)設(shè)計(jì)的重要性,人們提出了許多數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的技術(shù)。但這些技術(shù)方法與數(shù)據(jù)庫(kù)系統(tǒng)并沒(méi)有統(tǒng)一的相對(duì)應(yīng)的模式,而是要根據(jù)應(yīng)用系統(tǒng)對(duì)數(shù)據(jù)庫(kù)不同的需求來(lái)選擇不同的技術(shù)方法,甚至是幾種不同的方法的融合。</p><p>  在本系統(tǒng)中數(shù)據(jù)庫(kù)的設(shè)計(jì)還要注意靈活,具有一定的通用性,把試題庫(kù)做成通用的試題庫(kù)。</p><p>  4.1 數(shù)據(jù)庫(kù)需求分析</p><

50、;p>  數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的第一階段,也是非常重要的一個(gè)階段是數(shù)據(jù)庫(kù)需求分析。在這個(gè)階段主要是收集基本資料以及數(shù)據(jù)處理的流程,為進(jìn)一步設(shè)計(jì)打下基礎(chǔ)。根據(jù)以上的功能分析,系統(tǒng)的業(yè)務(wù)流程圖如下:</p><p>  試題庫(kù) 試卷庫(kù)</p><p>  圖4.1 系統(tǒng)業(yè)務(wù)流程圖</p><p>  基于上面對(duì)整個(gè)軟件功能的定義,并考慮到

51、要使系統(tǒng)具有擴(kuò)展性和較強(qiáng)的適應(yīng)性,在系統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)中,所包含的數(shù)據(jù)應(yīng)該包括用戶信息表、課程信息表、試題表、試卷題型參數(shù)表、試卷章節(jié)分布表、試卷表、試卷目錄表。</p><p>  4.2 系統(tǒng)邏輯分析</p><p>  概念結(jié)構(gòu)是獨(dú)立于實(shí)際數(shù)據(jù)模型的信息結(jié)構(gòu),必須將其轉(zhuǎn)化為邏輯結(jié)構(gòu)后才能進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用的設(shè)計(jì)。也就是要將概念上的結(jié)構(gòu)轉(zhuǎn)化為Access數(shù)據(jù)庫(kù)系統(tǒng)所支持的實(shí)際數(shù)據(jù)庫(kù)模型。<

52、;/p><p>  該數(shù)據(jù)庫(kù)系統(tǒng)要求具有以下方面的特點(diǎn):</p><p>  ● 結(jié)構(gòu)合理,所建立的數(shù)據(jù)冗余度小,獨(dú)立性強(qiáng)。</p><p>  ● 建檔、修改、查詢、統(tǒng)計(jì)快而準(zhǔn)確。</p><p><b>  保密性、可靠性好。</b></p><p>  數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)設(shè)計(jì)如下:</p&g

53、t;<p>  用戶信息表(user_info):帳號(hào)(user_id),密碼(user_pwd),用戶名(user_name)(主碼為用戶名(user_id))</p><p>  表4.1 用戶信息表(user_info表)表結(jié)構(gòu)</p><p>  課程信息表(course):課程代號(hào)(cid),課程名稱(chēng)(course)(主碼為課程代號(hào)(cid))</p>

54、<p>  表4.2 課程信息表(course表)表結(jié)構(gòu)</p><p>  試題信息表(test):試題編號(hào)(id),題型(type),課程名稱(chēng)(course),章(chapter),節(jié)(section),題目(test),答案(key),試題難度(difficutly),題目空格數(shù)(blanknum)(主碼為試題編號(hào)(id))</p><p>  表4.3 試題信息表(te

55、st表)表結(jié)構(gòu)</p><p>  題型參數(shù)表(param):參數(shù)編號(hào)(id),題型(type),題數(shù)(num),每題分值(mark)(主碼為參數(shù)編號(hào)(id))</p><p>  表4.4 題型參數(shù)表(param表)表結(jié)構(gòu)</p><p>  章節(jié)分布參數(shù)表(chapparam):參數(shù)編號(hào)(id),章(chapter),題數(shù)(num)(主碼為參數(shù)編號(hào)(id))&l

56、t;/p><p>  表4.5 章節(jié)分布參數(shù)表(chapparam表)表結(jié)構(gòu)</p><p>  試卷目錄表(list):試卷編號(hào)(id),課程名稱(chēng)(course),學(xué)期(term),試卷類(lèi)型(type),組卷教師(teacher),考試班級(jí)(class),考試專(zhuān)業(yè)(spec),考試人數(shù)(num) ,試卷難度(diff)(主碼為試卷編號(hào)(id))</p><p>  表

57、4.6 試卷目錄表(list表)表結(jié)構(gòu)</p><p>  試卷表(paper):試卷編號(hào)(id),大題編號(hào)(type_no),標(biāo)題(testtype),小題編號(hào)(testno),題目(test),答案(key),試題編號(hào)(testid),題型(test_type)(主碼為試卷編號(hào)(id)和試題編號(hào)(testid))</p><p>  表4.7 試卷表(paper表)表結(jié)構(gòu)</p&

58、gt;<p>  4.3 數(shù)據(jù)庫(kù)的連接</p><p>  在PowerBuilder開(kāi)發(fā)環(huán)境和應(yīng)用程序能夠操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)之前,必須首先與數(shù)據(jù)庫(kù)建立聯(lián)系,也就是連接到數(shù)據(jù)庫(kù)上。PowerBuilder與數(shù)據(jù)庫(kù)的連接建立在驅(qū)動(dòng)程序之上。PowerBuilder通過(guò)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序接口實(shí)現(xiàn)與各種類(lèi)型數(shù)據(jù)庫(kù)的連接。接口的參數(shù)可以通過(guò)一個(gè)Database Profile來(lái)完成。對(duì)于每一個(gè)可能要用到的數(shù)據(jù)庫(kù)

59、,均可以建立一個(gè)Database Profile。在此Database Profile中所記錄的是建立到數(shù)據(jù)庫(kù)的一些連接信息,如數(shù)據(jù)庫(kù)管理信息(DBMS)的類(lèi)型、用戶賬號(hào)、口令、數(shù)據(jù)庫(kù)以及其他的連接參數(shù)。</p><p>  當(dāng)開(kāi)發(fā)環(huán)境通過(guò)Database Profile連接到數(shù)據(jù)庫(kù)上之后,在PowerBuilder中使用數(shù)據(jù)庫(kù)畫(huà)筆可實(shí)現(xiàn)對(duì)該數(shù)據(jù)庫(kù)中表格、視圖等的操作,如創(chuàng)建表、修改表、刪除表、增加/刪除記錄。&

60、lt;/p><p>  PowerBuilder中設(shè)計(jì)數(shù)據(jù)窗口的時(shí)候,通過(guò)“Database Profile”對(duì)話框?qū)崿F(xiàn)與數(shù)據(jù)庫(kù)的連接。在應(yīng)用程序中則一般是在應(yīng)用程序?qū)ο笾袑?xiě)連接數(shù)據(jù)庫(kù)的程序代碼,使得應(yīng)用程序開(kāi)始運(yùn)行并實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。</p><p>  4.3.1 程序設(shè)計(jì)時(shí)與數(shù)據(jù)庫(kù)的連接</p><p>  在程序設(shè)計(jì)中可以使用“Database Profile

61、”對(duì)話框完成配置和連接。如果已經(jīng)定義了所需數(shù)據(jù)庫(kù)的配置,那么就可以通過(guò)單擊選中該配置,然后單擊“Connect”按鈕,將系統(tǒng)連接到相應(yīng)的數(shù)據(jù)庫(kù)上。如果沒(méi)有定義數(shù)據(jù)庫(kù)配置,需要?jiǎng)?chuàng)建新的數(shù)據(jù)庫(kù)配置。</p><p>  首先選擇Tool菜單中的Database Profile子菜單,或者單擊圖標(biāo),出現(xiàn)“Database Profile”對(duì)話框。在其中選擇要配置的數(shù)據(jù)庫(kù)使用的數(shù)據(jù)庫(kù)接口,“ODB ODBC”節(jié)點(diǎn)。然后,

62、單擊“New”按鈕,打開(kāi)“Database Profile Setup-ODBC”對(duì)話框,并設(shè)置所要連接數(shù)據(jù)庫(kù)的配置信息。完成設(shè)置后,單擊“Preview”標(biāo)簽頁(yè),在該標(biāo)簽頁(yè)中列出了數(shù)據(jù)庫(kù)剛剛配置的語(yǔ)句。單擊“OK”按鈕,返回到“Database Profile”對(duì)話框。這時(shí)“ODB ODBC”節(jié)點(diǎn)下面就多了剛剛配置好的Database Profile。選中該配置,單擊該對(duì)話框中的“Connect”按鈕,系統(tǒng)即通過(guò)專(zhuān)用接口連接到數(shù)據(jù)庫(kù)上

63、。</p><p>  當(dāng)PowerBuilder 9.0通過(guò)Database Profile 連接到數(shù)據(jù)庫(kù)上之后,在程序上之后,在程序設(shè)計(jì)的創(chuàng)建數(shù)據(jù)窗口對(duì)象時(shí),可以直接顯示該用戶在數(shù)據(jù)庫(kù)中可以修改的表,通過(guò)選擇某個(gè)(或者多個(gè))表可以將它們和數(shù)據(jù)窗口對(duì)象連接起來(lái)。</p><p>  4.3.2程序運(yùn)行時(shí)與數(shù)據(jù)庫(kù)的連接</p><p>  在程序設(shè)計(jì)是和數(shù)據(jù)庫(kù)的連接

64、Database Profile對(duì)話框來(lái)實(shí)現(xiàn)的,在程序運(yùn)行時(shí),則需要通過(guò)應(yīng)用程序?qū)ο髞?lái)實(shí)現(xiàn)和數(shù)據(jù)庫(kù)的連接。在應(yīng)用程序?qū)ο笾袑?shí)現(xiàn)與數(shù)據(jù)庫(kù)連接,不在通過(guò)“Database Profile”對(duì)話框,而是使用Transaction事物對(duì)象。</p><p>  一般數(shù)據(jù)庫(kù)的連接是在應(yīng)用程序開(kāi)始運(yùn)行是建立起來(lái)的。PowerBuilder9.0開(kāi)發(fā)的應(yīng)用程序的入口點(diǎn)是PowerBuilder9.0的應(yīng)用程序?qū)ο蟆C總€(gè)Powe

65、rBuilder應(yīng)用程序都必須有一個(gè)、而且只能有一個(gè)應(yīng)用程序?qū)ο螅谠搼?yīng)用程序?qū)ο笾袑?xiě)入與數(shù)據(jù)庫(kù)連接的程序代碼,從而使得應(yīng)用程序一開(kāi)始變實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接。</p><p>  在“Database Profile”對(duì)話框完成設(shè)置后,單擊“Preview”標(biāo)簽頁(yè),在該標(biāo)簽頁(yè)中列出了配置的語(yǔ)句。將連接數(shù)據(jù)庫(kù)的代碼復(fù)制到應(yīng)用程序?qū)ο笾?,即可完成代碼的編寫(xiě)。</p><p>  第五章 組卷策略

66、設(shè)計(jì)</p><p>  5.1 自動(dòng)組卷系統(tǒng)</p><p>  組卷系統(tǒng)的主要任務(wù)是根據(jù)用戶的需要,用當(dāng)前數(shù)據(jù)庫(kù)中的試題組成一套符合用戶需求的試卷。本系統(tǒng)采用隨機(jī)抽題策略實(shí)現(xiàn)自動(dòng)組卷功能,即由用戶輸入要添加的試卷名、學(xué)期、試卷類(lèi)型(即A卷或B卷)、試卷難度、考試對(duì)象信息、試卷中各種題型的具體數(shù)量以及每小題的分值和試卷的章節(jié)分布范圍,然后通過(guò)系統(tǒng)隨機(jī)抽題策略向數(shù)據(jù)庫(kù)中的試卷表中添加一張各

67、個(gè)題型題量固定的試卷,并在試卷目錄表中保存該試卷的基本信息,以便于今后試卷的查詢管理。</p><p>  5.2自動(dòng)組卷中隨機(jī)數(shù)選取問(wèn)題</p><p>  在自動(dòng)組卷中首先要考慮的就是如何按照用戶選擇的組卷方案在數(shù)據(jù)庫(kù)中隨機(jī)抽取試題。要想隨機(jī)抽取試題就必須產(chǎn)生隨機(jī)數(shù),因此隨機(jī)數(shù)的產(chǎn)生問(wèn)題才是問(wèn)題的真正關(guān)鍵點(diǎn)。</p><p>  用計(jì)算機(jī)產(chǎn)生隨機(jī)數(shù)的方法有很多,

68、有用數(shù)學(xué)公式實(shí)現(xiàn)的,也有按照系統(tǒng)時(shí)間產(chǎn)生的,還要按照當(dāng)時(shí)的系統(tǒng)中的線程數(shù)產(chǎn)生的等等。PowerBuilder 9.0環(huán)境本身已經(jīng)提供了產(chǎn)生隨機(jī)數(shù)的函數(shù)Rand(),不過(guò)在沒(méi)有初始化的情況下,每次運(yùn)行程序所獲得的隨機(jī)數(shù)都是一樣的,因此Rand()也被稱(chēng)為偽隨機(jī)數(shù)函數(shù)。要實(shí)現(xiàn)真正的隨機(jī)還必須在Rand()函數(shù)之前調(diào)用函數(shù)Randomize()。Randomize()可以初始化偽隨機(jī)數(shù)發(fā)生器,這樣讓?xiě)?yīng)用程序每次使用不同的偽隨機(jī)數(shù)序列。Rand

69、omize()的語(yǔ)法為Randomize ( n ),其中參數(shù)n:數(shù)值型變量或表達(dá)式,指定偽隨機(jī)數(shù)生成器使用的起始值,不同的起始值可以生成不同的偽隨機(jī)數(shù)序列。當(dāng)n的值為0時(shí),該函數(shù)把系統(tǒng)時(shí)鐘作為偽隨機(jī)數(shù)生成器的起始值,這樣可以生成不可重復(fù)的偽隨機(jī)數(shù)序列。當(dāng)n的值不為0時(shí),可以產(chǎn)生不同的偽隨機(jī)數(shù)序列,但是,如果兩次使用相同的偽隨機(jī)數(shù)生成器起始值,那么兩次生成的偽隨機(jī)數(shù)序列相同。</p><p>  5.3自動(dòng)組卷的

70、具體實(shí)現(xiàn)</p><p>  由于組卷時(shí)僅產(chǎn)生隨機(jī)數(shù)還不能滿足要求,因?yàn)榻M卷要求的是從一定量的試題中抽取確定題量的隨機(jī)試題,因此問(wèn)題也就變成了從一組數(shù)中隨機(jī)抽取確定的數(shù)。在本系統(tǒng)中這組數(shù)的確定是通過(guò)以指定的課程名稱(chēng)和試題題型為檢索條件對(duì)數(shù)據(jù)庫(kù)中的試題表進(jìn)行檢索,并把檢索結(jié)果顯示在指定的數(shù)據(jù)窗口,而此時(shí)數(shù)據(jù)窗口中記錄的總條數(shù)就是這組數(shù)。</p><p>  在具體的程序?qū)崿F(xiàn)中是把數(shù)據(jù)窗口中記

71、錄的總條數(shù)做為Rand()函數(shù)要產(chǎn)生的偽隨機(jī)數(shù)的上界,由系統(tǒng)隨機(jī)產(chǎn)生一個(gè)隨機(jī)數(shù),以該隨機(jī)數(shù)做為數(shù)據(jù)窗口的某一特定行,即選定試題。然后將該試題的相關(guān)信息做為一條新的記錄存入相應(yīng)試卷表中。不過(guò)在存入試卷表之前要對(duì)試題的相關(guān)信息與組卷要求進(jìn)行比較,只有符合條件的試題才能存入試卷表。具體的組卷程序流程如下: </p><p><b>  否</b></p><p><b

72、>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p>  圖5.1 組卷程

73、序流程圖</p><p>  本系統(tǒng)在程序設(shè)計(jì)過(guò)程中,凡從數(shù)據(jù)窗口中每取出一道符合組卷要求的試題,便將該試題存入系統(tǒng)的試卷表中,并把該試題從數(shù)據(jù)窗口中刪除,以免在隨后的選題過(guò)程中選出重復(fù)的試題,保證整份試卷試題的重復(fù)比例為0。具體程序?qū)崿F(xiàn)代碼如附錄程序1所示。</p><p>  5.4試卷難度的程序控制</p><p>  本系統(tǒng)在組卷時(shí)為試卷提供3種難度選擇,分

74、別為易、中、難,分別對(duì)應(yīng)為0.1~0.4、0.4~0.6、0.6~0.9。而在試題錄入的時(shí)候?yàn)樵囶}提供5種難度選擇,分別為0.1、0.3、0.5、0.7、0.9。</p><p>  為了能夠有效控制試卷的難度,對(duì)于整份試卷中的每種難度的試題的總分占試卷總分的最大比例進(jìn)行人為的設(shè)置,具體在程序中設(shè)置如下:</p><p>  /////////////設(shè)置對(duì)應(yīng)試卷難度的相應(yīng)難度值試題的分值

75、的最大值</p><p>  int sum_1,sum_2,sum_3,sum_4,sum_5</p><p>  ////////// sum_1,sum_2,sum_3,sum_4,sum_5分別為難度值為0.1、0.3、0.5、//////////0.7、0.9的試題分值的最大值,sum為試卷的總分</p><p>  if diff="易&quo

76、t; then</p><p>  sum_1=round(0.4*sum,0)</p><p>  sum_2=round(0.6*sum,0)</p><p>  sum_3=round(0.1*sum,0)</p><p>  sum_4=round(0.1*sum,0)</p><p>  sum_5=roun

77、d(0.1*sum,0)</p><p>  elseif diff="中" then</p><p>  sum_1=round(0.2*sum,0)</p><p>  sum_2=round(0.2*sum,0)</p><p>  sum_3=round(0.5*sum,0)</p><p>

78、;  sum_4=round(0.2*sum,0)</p><p>  sum_5=round(0.2*sum,0)</p><p><b>  else</b></p><p>  sum_1=round(0.1*sum,0)</p><p>  sum_2=round(0.1*sum,0)</p>&l

79、t;p>  sum_3=round(0.1*sum,0)</p><p>  sum_4=round(0.6*sum,0)</p><p>  sum_5=round(0.4*sum,0)</p><p><b>  end if</b></p><p>  說(shuō)明:函數(shù)Round ( x, n ) 返回將x四舍五入

80、到小數(shù)點(diǎn)后第n位的數(shù)值。</p><p>  第六章 在PB中創(chuàng)建Word文檔</p><p>  PB(PowerBuilder)是Sybase公司推出的一種優(yōu)秀的數(shù)據(jù)庫(kù)開(kāi)發(fā)工具,利用它的數(shù)據(jù)窗口控件可以快速地開(kāi)發(fā)出一個(gè)數(shù)據(jù)管理系統(tǒng)。在實(shí)際應(yīng)用中,很多場(chǎng)合都很注重報(bào)表的格式,需要不同類(lèi)型的報(bào)表,所以必須提高報(bào)表格式的多樣性。雖然可以利用PB設(shè)計(jì)出具有打印功能的窗口,但是由于格式是事先規(guī)定

81、好的,用戶很難根據(jù)需要進(jìn)行修改。Word是大家熟悉的一種文字處理工具,具有強(qiáng)大的編輯與打印功能。如果能夠?qū)?shù)據(jù)源動(dòng)態(tài)地導(dǎo)入到Word文檔中,然后在Word中調(diào)整和打印,用戶的自由度就比較大。下面介紹一種通過(guò)OLE技術(shù)嵌入Word文檔的方法。</p><p>  6.1 PB通過(guò)OLEOBJECT使用WORD</p><p>  在編程的時(shí)候,常常需要訪問(wèn)Word文檔。除了使用DDE之外,P

82、owerBuilder還有一種操作Word的方式,就是通過(guò)OLEObjcet和OLEControl。</p><p>  OLEObject是不可視的OLE對(duì)象,而OLEControl則是可視的窗口控件。由于OLEObject較后者更靈活方便,如果不是必須在窗口上顯示W(wǎng)ord文檔內(nèi)容,使用前者是更好的選擇。</p><p>  程序開(kāi)發(fā)員在使用OLE連接Word文檔的時(shí)候,常常遇到這樣兩個(gè)

83、問(wèn)題:</p><p>  第一:如果某文檔已經(jīng)打開(kāi),再使用程序調(diào)用的時(shí)候,會(huì)產(chǎn)生程序運(yùn)行錯(cuò)誤;</p><p>  第二:經(jīng)常發(fā)現(xiàn)創(chuàng)建的WinWord.exe進(jìn)程沒(méi)有能夠正常終止。以上兩個(gè)錯(cuò)誤產(chǎn)生的原因:</p><p>  一是由于使用OLEObjectVar.ConnectToObject(“<FileName>”)的時(shí)候,<FileNam

84、e>這個(gè)文件已經(jīng)打開(kāi)了,此時(shí)使用ConnectToObject會(huì)造成錯(cuò)誤。</p><p>  二是使用 OLEObjectVar.ConnectToNewObject (“Word. Application”) 時(shí)創(chuàng)建了新的Winword.exe進(jìn)程,但是沒(méi)有執(zhí)行關(guān)閉這個(gè)新的應(yīng)用的操作。 對(duì)上述問(wèn)題可以采用以下方法進(jìn)行解決:</p><p><b> ?。?)打開(kāi)

85、文檔</b></p><p>  首先,使用<OLEObjectVar>.ConnectToObject(“<WordFileName>”)來(lái)打開(kāi)一個(gè)空Word文檔。打開(kāi)成功后,使用<OLEObjectVar>.Application獲得對(duì)Word.Application的引用并設(shè)置Applicatin.Visible=TRUE,并關(guān)閉剛才打開(kāi)的空文檔。然后,使用W

86、ord.Application的Open方法打開(kāi)要使用的文檔。</p><p>  這樣的方法打開(kāi)文檔,如果當(dāng)前有正在運(yùn)行的Windows.exe進(jìn)程,就不必打開(kāi)新的進(jìn)程,而是使用當(dāng)前的進(jìn)程,并且可以成功地對(duì)當(dāng)前的進(jìn)程獲得引用。</p><p><b> ?。?)關(guān)閉文檔</b></p><p>  首先,我們關(guān)閉程序打開(kāi)的使用的文檔,然后判斷

87、Application是否還有其他的打開(kāi)的文檔。如果沒(méi)有其他打開(kāi)的文檔,則調(diào)用Application的Quit方法,讓Application退出,結(jié)束Winword.exe的程序進(jìn)程。如果確定以后還經(jīng)常的調(diào)用Word,也可以不關(guān)閉Winword.exe的進(jìn)程,這樣可以每次很快的打開(kāi)Word的文檔。 不過(guò),由于通過(guò)OLEObject調(diào)用Word等Office有許多限制,所以盡管用這個(gè)方法能夠解決許多問(wèn)題,但是還是有許多需要特別注意

88、的地方:</p><p>  第一,使用ConnectToObject連接的文檔,不能被鎖定(比如被以前的進(jìn)程打開(kāi),或者被當(dāng)作模板新建立了一個(gè)文檔,都可能鎖定),否則將會(huì)產(chǎn)生未知錯(cuò)誤(返回值-9);</p><p>  第二,對(duì)Document的各種操作,要保證Word.Application.Visible=TRUE,否則調(diào)用可能會(huì)產(chǎn)生程序錯(cuò)誤.</p><p>

89、<b>  6.2創(chuàng)建模板文件</b></p><p>  首先,我們建立一個(gè)試卷樣式的模板文件,取名為“試卷模板.doc”。根據(jù)需要錄入靜態(tài)文本,并在需要插入動(dòng)態(tài)數(shù)據(jù)的地方插入“書(shū)簽”?!皶?shū)簽”名字與PB數(shù)據(jù)源中列的名字一致,如下圖所示。</p><p><b>  圖6.1 模版文件</b></p><p><b

90、>  6.3編寫(xiě)程序</b></p><p>  1. 數(shù)據(jù)窗口d_list和d_paper,分別取自試卷目錄表和試卷表,數(shù)據(jù)模型如</p><p>  試卷目錄表 試卷表</p><p><b>  圖6.2 數(shù)據(jù)模型</b></p><p>  2.創(chuàng)建窗口

91、w_paper,其中包含兩個(gè)數(shù)據(jù)窗口dw_3和dw_4,分別對(duì)應(yīng)數(shù)據(jù)窗口d_list和d_paper,但在實(shí)際的程序運(yùn)行過(guò)程中,這兩個(gè)數(shù)據(jù)窗口是不可視的。再插入兩個(gè)單行編輯器sle_1和sle_2,分別用于用戶錄入和選擇模板文件與文檔保存路徑。在這里省略選擇文件與路徑按鈕的編程代碼。</p><p>  3.添加“保存”按鈕。該按鈕Clicked事件代碼如附錄程序2所示。</p><p>

92、  當(dāng)用戶單擊“保存”按鈕后,程序?qū)⒗肙LE技術(shù)連接Word,在相應(yīng)的位置填寫(xiě)數(shù)據(jù),生成試卷,并且保存在指定目錄下。程序運(yùn)行時(shí)界面如下圖所示:</p><p>  圖6.3 程序運(yùn)行界面</p><p>  在上面的程序運(yùn)行界面中,顯示試卷內(nèi)容的數(shù)據(jù)窗口是復(fù)合型(Composite)顯示風(fēng)格,是實(shí)現(xiàn)打印功能的數(shù)據(jù)窗口,而實(shí)現(xiàn)與Word進(jìn)行數(shù)據(jù)通訊的數(shù)據(jù)窗口在當(dāng)前窗口中是處于隱藏狀態(tài),但它

93、們之間的內(nèi)容是一致的。保存到Word中的文本效果如下圖所示:</p><p>  圖6.4 保存到Word的效果圖一 選擇題樣式</p><p>  圖6.5 保存到Word的效果圖二 填空題樣式</p><p>  圖6.6 保存到Word的效果圖三 編程題樣式</p><p>  把試卷保存到Word中,用戶就可以進(jìn)行更加自由的編輯修改。

94、</p><p>  第七章 系統(tǒng)模塊頁(yè)面和代碼設(shè)計(jì)</p><p>  7.1 應(yīng)用程序?qū)ο笤O(shè)計(jì)</p><p>  PowerBuilder9.0開(kāi)發(fā)的應(yīng)用程序的入口點(diǎn)是PowerBuilder9.0的應(yīng)用程序?qū)ο?,運(yùn)行是程序從這個(gè)入口點(diǎn)啟動(dòng),所以應(yīng)用程序?qū)ο蟮脑O(shè)計(jì)是應(yīng)用程序設(shè)計(jì)的開(kāi)始。</p><p>  應(yīng)用程序?qū)ο蟮氖录欢?,一共?/p>

95、有6個(gè),分別是Open、Close、Idle、SystemError、ConnectionBegin、ConnectionEnd事件。</p><p>  1、在應(yīng)用程序?qū)ο蟮腛pen事件,輸入如下程序代碼:</p><p>  // Profile sys</p><p>  SQLCA.DBMS = "ODBC"</p><

96、;p>  SQLCA.AutoCommit = False</p><p>  SQLCA.DBParm = "ConnectString='DSN=system'"</p><p><b>  //連接數(shù)據(jù)庫(kù)</b></p><p><b>  connect;</b></

97、p><p>  open(w_login) //打開(kāi)登錄窗口; </p><p>  2、在應(yīng)用程序?qū)ο蟮腛pen事件,輸入如下程序代碼:</p><p><b>  //斷開(kāi)數(shù)據(jù)庫(kù)連接</b></p><p>  disconnect;</p><p><b>  7.2系統(tǒng)登錄模塊<

98、;/b></p><p>  程序啟動(dòng)后,首先進(jìn)入系統(tǒng)登錄窗口驗(yàn)證用戶密碼。系統(tǒng)登陸窗口主要實(shí)現(xiàn)如下功能:</p><p>  選擇帳號(hào),憑口令進(jìn)入系統(tǒng)。</p><p>  確認(rèn)用戶的身份及使用權(quán)限。</p><p>  支持鍵盤(pán)和鼠標(biāo)操作。</p><p>  系統(tǒng)登陸窗口如圖7.1所示。</p>

99、<p><b>  圖7.1 登錄界面</b></p><p>  7.3主程序界面設(shè)計(jì)</p><p>  在系統(tǒng)登錄成功后,進(jìn)入主程序界面。主程序界面主要實(shí)現(xiàn)如下功能:</p><p>  根據(jù)登錄用戶的權(quán)限設(shè)置系統(tǒng)的菜單。</p><p>  選擇主界面的菜單,調(diào)用相應(yīng)程序,進(jìn)行相應(yīng)操作。</p

100、><p>  本應(yīng)用程序的主要功能都是在主窗口w_main及在其下打開(kāi)的眾多窗口中完成的。采用的是多文檔界面。另外還加入了背景圖片。主程序界面如圖7.2所示。</p><p>  圖7.2 主程序界面</p><p>  在窗口w_main的open () 事件中加入如下代碼用于打開(kāi)背景圖片:</p><p>  opensheet(w_blan

101、kground,w_main,5,Layered!)</p><p>  在窗口w_main的open() 事件中加入如下代碼用于根據(jù)當(dāng)前登錄的用戶的權(quán)限設(shè)置菜單的可見(jiàn)性:</p><p>  if g_user="admin" then //當(dāng)前用戶為系統(tǒng)管理員</p><p>  m_main.m_用戶管理.m_增加帳

102、號(hào).visible=true</p><p>  m_main.m_用戶管理.m_刪除帳號(hào).visible=true</p><p><b>  else</b></p><p>  m_main.m_用戶管理.m_增加帳號(hào).visible=false</p><p>  m_main.m_用戶管理.m_刪除帳號(hào).vis

103、ible=false</p><p><b>  end if</b></p><p><b>  7.4菜單的設(shè)計(jì)</b></p><p>  在菜單中設(shè)計(jì)應(yīng)用程序的主窗口所連接的菜單m_main。該菜單的結(jié)構(gòu)如下圖所示。</p><p>  圖7.3 菜單的結(jié)構(gòu)</p><p

104、>  由于主窗口采用了多文檔。所以每一個(gè)按鈕都用來(lái)打開(kāi)一個(gè)窗口。</p><p><b>  (1)帳號(hào)管理模塊</b></p><p>  1) 增加帳號(hào)(只有系統(tǒng)管理員登錄才可用):</p><p>  Clicked事件程序代碼:OpenSheet(w_adduser,w_main,5,original!)</p>&

105、lt;p>  2) 刪除帳號(hào)(只有系統(tǒng)管理員登錄才可用):</p><p>  Clicked事件程序代碼:OpenSheet(w_deluser,w_main,5,original!)</p><p><b>  3) 修改密碼:</b></p><p>  Clicked事件程序代碼:OpenSheet(w_changepwd,w_m

106、ain,5,original!)</p><p><b>  4) 退出系統(tǒng):</b></p><p>  Clicked事件程序代碼:halt //kill the program</p><p><b>  (2)題庫(kù)管理模塊</b></p><p><b>

107、  1) 添加課程:</b></p><p>  Clicked事件程序代碼:OpenSheet(w_addcourse,w_main,5,original!)</p><p><b>  2) 更新課程:</b></p><p>  Clicked事件程序代碼:OpenSheet(w_updatecourse,w_main,5,o

108、riginal!)</p><p><b>  3) 添加試題:</b></p><p>  Clicked事件程序代碼:OpenSheet(w_addtest,w_main,5,original!)</p><p><b>  4) 查看試題</b></p><p>  Clicked事件程序代碼

109、:OpenSheet(w_searchtest,w_main,5,original!)</p><p><b>  (3)自動(dòng)組卷模塊</b></p><p><b>  設(shè)置參數(shù):</b></p><p>  Clicked事件程序代碼OpenSheet(w_setpaperparameter,w_main,5,orig

110、inal!)</p><p><b>  (4)試卷管理</b></p><p><b>  查看試卷:</b></p><p>  Clicked事件程序代碼:OpenSheet(w_paperlist,w_main,5,original!)</p><p>  7.5 帳號(hào)管理模塊</p&

111、gt;<p><b>  (1)增加帳號(hào)</b></p><p>  只有系統(tǒng)管理員才有權(quán)限調(diào)用此模塊,用于增加系統(tǒng)的合法用戶,而且只能添加當(dāng)前系統(tǒng)中未存在的帳號(hào),界面如圖所示:</p><p>  圖7.4 增加帳號(hào)界面</p><p><b>  (2)更新帳號(hào)</b></p><p&

112、gt;  只有系統(tǒng)管理員才有權(quán)限調(diào)用此模塊,用于修改和刪除系統(tǒng)的用戶,而且系統(tǒng)管理員的帳號(hào)不能被刪除,界面如圖所示:</p><p>  圖7.5 修改帳號(hào)界面</p><p>  圖7.6 刪除帳號(hào)界面</p><p><b>  (3)修改密碼</b></p><p>  用于修改當(dāng)前登錄用戶的密碼,界面如圖所示:&

113、lt;/p><p>  圖7.7 修改密碼界面</p><p>  7.6 題庫(kù)管理模塊</p><p><b>  (1)添加課程</b></p><p>  本系統(tǒng)是一個(gè)通用的自動(dòng)組卷系統(tǒng),用戶可以根據(jù)自己需要,任意添加新的課程,實(shí)現(xiàn)對(duì)該課程的自動(dòng)組卷,界面如圖所示:</p><p>  圖7.8

114、 添加課程界面</p><p><b>  (2)更新課程</b></p><p>  用戶可以實(shí)際需要對(duì)已有的課程信息進(jìn)行修改和刪除,但這些操作會(huì)對(duì)數(shù)據(jù)庫(kù)中其它已存在的相關(guān)信息做出相應(yīng)修改和刪除,用戶應(yīng)該謹(jǐn)慎操作。界面如圖所示:</p><p>  圖7.9 更新課程界面</p><p>  圖7.10 修改課程信息&

115、lt;/p><p>  圖7.11 刪除課程</p><p><b>  (3)添加試題</b></p><p>  用于用戶添加新的試題,用戶在操作時(shí)應(yīng)盡量填滿所有與有關(guān)試題的信息,這樣有利與后續(xù)操作的開(kāi)展,界面如圖所示:</p><p>  圖7.12 添加試題界面</p><p><b&g

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論