畢業(yè)論文---基于pb的圖書管理系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩59頁(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><b>  摘 要</b></p><p>  隨著信息技術(shù)在管理上越來(lái)越深入而廣泛的應(yīng)用,管理信息系統(tǒng)的實(shí)施在技術(shù)上已逐步成熟。管理信息系統(tǒng)是一個(gè)不斷發(fā)展的新型學(xué)科,企業(yè)要生存要發(fā)展,要高效率地把企業(yè)活動(dòng)有機(jī)地組織起來(lái),就必須加強(qiáng)企業(yè)管理,即加強(qiáng)對(duì)企業(yè)內(nèi)部的各種資源(人、財(cái)、物等)的有效管理,建立與自身特點(diǎn)相適應(yīng)的管理信息系統(tǒng)。</p><p>

2、  本文介紹了在PowerBuider環(huán)境下采用“自上而下地總體規(guī)劃,自下而上地應(yīng)用開(kāi)發(fā)”的策略開(kāi)發(fā)一個(gè)管理信息系統(tǒng)的過(guò)程。通過(guò)分析傳統(tǒng)的人工管理圖書館的不足,創(chuàng)建了一套行之有效的計(jì)算機(jī)管理圖書館的方案。文章詳細(xì)介紹了圖書管理信息系統(tǒng)的系統(tǒng)分析部分,包括可行性分析、組織機(jī)構(gòu)分析、管理職能分析、業(yè)務(wù)流程分析、數(shù)據(jù)流程分析、數(shù)據(jù)字典、處理描述等等;系統(tǒng)設(shè)計(jì)部分主要介紹了系統(tǒng)功能設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì);系統(tǒng)實(shí)現(xiàn)部分列出了幾個(gè)主要的程序框圖,并附帶了

3、一些主要的窗口和程序。</p><p>  本系統(tǒng)界面友好,操作簡(jiǎn)單,比較實(shí)用。</p><p>  【關(guān)鍵字】管理信息系統(tǒng)、圖書管理、PowerBuider應(yīng)用。Abstract</p><p>  With more and more widespread and profound application of information technology in

4、 management, the implement of management information system has become mature in technology step by step. Managing information system is a new subject. Enterprise needs existence and development, so enterprise activities

5、 should be organized efficiently and organically, which means tightening up the enterprise management and strengthening effective management of any resource (staff, finance, property, etc.) interna</p><p>  

6、This article introduces the detailed process of exploring a management information system under the environment of PowerBuilder, utilizing “Top-Bottom” overall plan and a strategy according to “Bottom-Top” application an

7、d exploitation. That is to establish a set of effective scheme for library management by computer, through analyzing disadvantages of traditional library management by human resources. This article emphasizes on three se

8、ctions. The system analysis section of library management in</p><p>  This economical and pragmatic system has explicit interface, with simple operation.</p><p>  [Keywords] MIS、library manageme

9、nt、PowerBuilder application</p><p><b>  目 錄</b></p><p><b>  一 前 言1</b></p><p>  1 MIS系統(tǒng)開(kāi)發(fā)方法1</p><p>  2 MIS系統(tǒng)開(kāi)發(fā)過(guò)程2</p><p>  二 系統(tǒng)

10、需求分析4</p><p><b>  1現(xiàn)行業(yè)務(wù)描述4</b></p><p>  2現(xiàn)行系統(tǒng)存在問(wèn)題的分析5</p><p><b>  3解決方案6</b></p><p>  1 系統(tǒng)目標(biāo)設(shè)計(jì)7</p><p>  2 系統(tǒng)功能分析8</p>

11、<p>  3系統(tǒng)各功能模塊設(shè)計(jì)8</p><p><b>  4數(shù)據(jù)流圖9</b></p><p>  1數(shù)據(jù)庫(kù)需求分析13</p><p>  2 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)14</p><p>  1 PowerBuilder開(kāi)發(fā)工具簡(jiǎn)介20</p><p>  2 Power

12、builder 8應(yīng)用程序開(kāi)發(fā)的基本步驟20</p><p><b>  3 編碼規(guī)范21</b></p><p>  4 創(chuàng)建祖先窗口和全局函數(shù)21</p><p>  5 應(yīng)用程序?qū)ο?App_librarain24</p><p><b>  7 補(bǔ)充說(shuō)明48</b></p&g

13、t;<p><b>  七 結(jié)束語(yǔ)49</b></p><p><b>  一 前 言</b></p><p>  隨著人類社會(huì)的發(fā)展,人類對(duì)知識(shí)的需求也不斷地增長(zhǎng)。在這種形勢(shì)下,書籍就漸漸地成為人們獲取并增長(zhǎng)知識(shí)的主要途徑,而圖書館就自然而然地在人們的生活中占據(jù)了一定的位置,如何科學(xué)地管理圖書館不但關(guān)系到讀者求知的方便程度,也關(guān)

14、系到圖書館的發(fā)展,因此,開(kāi)發(fā)一套完善的圖書館管理系統(tǒng)就必不可少了。</p><p>  管理信息系統(tǒng)(簡(jiǎn)稱MIS)是介于信息論,經(jīng)濟(jì)管理理論,統(tǒng)計(jì)學(xué)與運(yùn)籌學(xué)及計(jì)算機(jī)科學(xué)之間的一門邊緣性,綜合性,系統(tǒng)性的交叉科學(xué),它是隨著管理科學(xué),信息技術(shù),計(jì)算機(jī)技術(shù)等的發(fā)展而產(chǎn)生和發(fā)展起來(lái)的。</p><p>  圖書館管理系統(tǒng)是典型的信息管理系統(tǒng),其開(kāi)發(fā)主要包括后臺(tái)數(shù)據(jù)庫(kù)的建立和維護(hù)以及前端的應(yīng)用程序的

15、開(kāi)發(fā)兩個(gè)方面。對(duì)于前者要求建立數(shù)據(jù)的一致性和完整性,對(duì)于后者則要求應(yīng)用程序功能的完備,易用等的特點(diǎn)?;谏鲜隹紤]本系統(tǒng)主要利用PowerBuilder 8作前端的應(yīng)用開(kāi)發(fā)工具 ,利用Adaptive Server Anywhere 7 作為后臺(tái)的數(shù)據(jù)庫(kù),利用WINDOWS作為系統(tǒng)平臺(tái)開(kāi)發(fā)的圖書管理系統(tǒng)。另外本圖書館管理系統(tǒng)利用軟件工程化思想和方法,總體上是采用結(jié)構(gòu)化生命法進(jìn)行系統(tǒng)分析和設(shè)計(jì)的,而系統(tǒng)實(shí)現(xiàn)等步驟則采用了原型法和面對(duì)對(duì)象的方

16、法。</p><p>  1 MIS系統(tǒng)開(kāi)發(fā)方法</p><p>  管理信息系統(tǒng)的開(kāi)發(fā)方法有生命周期法、原型法和面向?qū)ο蟮拈_(kāi)發(fā)方法等:</p><p>  生命周期法(Life Cycle Method)是20世紀(jì)60年代發(fā)展起來(lái)的一種應(yīng)用廣泛且比較成熟的管理系統(tǒng)開(kāi)發(fā)方法,它的基本思想是將系統(tǒng)的開(kāi)發(fā)工作從開(kāi)始到結(jié)束劃分為若干個(gè)階段,每個(gè)階段都有明確的任務(wù),而系統(tǒng)開(kāi)

17、發(fā)出來(lái)后,并不意味著生命周期的結(jié)束,而意味著根據(jù)組織的需要對(duì)系統(tǒng)的修改和重建的開(kāi)始。</p><p>  原型法(Prototyping Method)是20世紀(jì)80年代發(fā)展起來(lái)的,旨在改變生命周期法的缺點(diǎn)的一種系統(tǒng)開(kāi)發(fā)方法,該法的開(kāi)發(fā)思路是首先根據(jù)用戶的要求,由用戶和開(kāi)發(fā)者共同確定系統(tǒng)的基本要求和主要功能,利用系統(tǒng)快速生成工具,建立一個(gè)系統(tǒng)模型,再在此基礎(chǔ)上與用戶交流,將模型不斷補(bǔ)充、修改、完善,如此反復(fù),最終

18、直至用戶和開(kāi)發(fā)者都比較滿意為止,從而形成一個(gè)相對(duì)穩(wěn)定、較為理想的管理信息系統(tǒng)。</p><p>  面向?qū)ο螅∣bject Oriented)的開(kāi)發(fā)方法于20世紀(jì)80年代開(kāi)始興起的,是一種基于問(wèn)題對(duì)象的自底向上的一種系統(tǒng)開(kāi)發(fā)方法,這種方法的特點(diǎn)是以對(duì)象為基礎(chǔ),對(duì)象是分析問(wèn)題和解決問(wèn)題的核心。</p><p>  2 MIS系統(tǒng)開(kāi)發(fā)過(guò)程</p><p>  一個(gè)MIS

19、系統(tǒng)的開(kāi)發(fā)過(guò)程一般包括如下幾個(gè)步驟:</p><p> ?。?)需求分析:需求分析主要是了解用戶的需求。需求了解得越詳細(xì),程序的后期開(kāi)發(fā)與維護(hù)費(fèi)用就會(huì)越少。一般的開(kāi)發(fā)團(tuán)隊(duì)中,需求分析都是由資歷較深的系統(tǒng)分析員或項(xiàng)目經(jīng)理?yè)?dān)當(dāng),可見(jiàn)它的重要性。需求分析制訂好后,需要反復(fù)修改。將最后的結(jié)果交給用戶審定,確認(rèn)無(wú)誤后,由系統(tǒng)分析員完成需求分析文檔,再開(kāi)始下一步工作。</p><p>  (2)概要設(shè)

20、計(jì):概要設(shè)計(jì)緊跟在需求分析之后。用戶需求明確后,將得到的數(shù)據(jù)分析后,開(kāi)始構(gòu)建數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)。此時(shí),數(shù)據(jù)庫(kù)中的表格還未成形,通過(guò)各種分析工具(如PowerDesigner等)畫出數(shù)據(jù)流圖,最后就可抽象出數(shù)據(jù)庫(kù)的具體表結(jié)構(gòu)。這時(shí)由系統(tǒng)分析人員反復(fù)審核。確認(rèn)所有的需求都考慮在內(nèi),沒(méi)有遺漏后,就可以開(kāi)始制訂概要設(shè)計(jì)文檔。概要設(shè)計(jì)文檔形成后,整個(gè)程序的邏輯框架也就形成了。</p><p> ?。?)詳細(xì)設(shè)計(jì):概要設(shè)計(jì)完成

21、后,根據(jù)設(shè)計(jì)中制訂的業(yè)務(wù)模塊。就可以進(jìn)行詳細(xì)分析設(shè)計(jì)了。詳細(xì)設(shè)計(jì)就是將各個(gè)業(yè)務(wù)模塊的窗口全部建好,各個(gè)窗口控件的處理代碼全部用語(yǔ)言表達(dá)出。所以詳細(xì)設(shè)計(jì)是整個(gè)系統(tǒng)中最繁瑣的環(huán)節(jié)。詳細(xì)設(shè)計(jì)完成后,整個(gè)程序就確定了,再由編程人員根據(jù)詳細(xì)設(shè)計(jì)文檔將代碼完成。整個(gè)開(kāi)發(fā)工作就宣告結(jié)束。</p><p>  程序編碼:程序編碼相對(duì)于其他環(huán)節(jié)來(lái)說(shuō)比較簡(jiǎn)單,程序員只需要根據(jù)詳細(xì)分析文檔寫程序編碼,保證代碼沒(méi)有錯(cuò)誤即可。程序編碼需要

22、注意的是整個(gè)程序書寫中命名的規(guī)范化與編程風(fēng)格的規(guī)范化,這需要較長(zhǎng)時(shí)間的培養(yǎng)來(lái)形成。需要在不斷的實(shí)踐中形成自己獨(dú)特的風(fēng)格??偟膩?lái)說(shuō),不要過(guò)分地追求復(fù)雜的算法,因?yàn)槟强赡軙?huì)導(dǎo)致后期維護(hù)人員無(wú)法讀懂你的代碼而造成維護(hù)的困難。</p><p> ?。?)測(cè)試:程序編碼完成后,就需要測(cè)試。測(cè)試有幾種類型,主要是測(cè)試代碼有無(wú)邏輯錯(cuò)誤以及在加載數(shù)據(jù)環(huán)境下程序的穩(wěn)定性問(wèn)題。測(cè)試工作中發(fā)現(xiàn)的錯(cuò)誤應(yīng)及時(shí)改正,然后將它記錄到測(cè)試文檔中

23、。</p><p> ?。?)打包:測(cè)試完成,確認(rèn)無(wú)誤后。程序就可以打包發(fā)行了。打包一般使用工具如PWISE等。</p><p>  以上是一個(gè)完整的MIS系統(tǒng)開(kāi)發(fā)過(guò)程,其實(shí)不僅MIS系統(tǒng),其他類型的程序開(kāi)發(fā)也基本相同。</p><p><b>  二 系統(tǒng)需求分析</b></p><p>  整個(gè)軟件生命周期中,開(kāi)發(fā)所

24、占的費(fèi)用和時(shí)間都很小。后期維護(hù)工作一般要占整個(gè)軟件生命周期的80% 以上。所以系統(tǒng)分析很重要,一個(gè)好的系統(tǒng)分析可以減少很多后期維護(hù)工作。</p><p><b>  1現(xiàn)行業(yè)務(wù)描述</b></p><p>  下面以一所學(xué)校的圖書館為例子進(jìn)行分析,畫出圖書館的組織結(jié)構(gòu)圖如下:</p><p><b>  圖2.1</b>&

25、lt;/p><p>  該圖書館各個(gè)部門負(fù)責(zé)的主要業(yè)務(wù)如下:</p><p> ?。?)采編組主要負(fù)責(zé)圖書采編工作,包括購(gòu)置新書、打印編目、增加數(shù)量。</p><p> ?。?)目錄廳主要負(fù)責(zé)讀者查詢工作,包括可借圖書(按圖書類別、圖書名稱或圖書作者查詢);新書目錄(按圖書類別、日期查詢)。 </p><p> ?。?)借閱組主要負(fù)責(zé)圖書流通、查

26、詢統(tǒng)計(jì)、借閱查詢等工作。</p><p>  (4)閱覽室、工具書室主要負(fù)責(zé)讀者閱覽工作,包括:閱覽各種雜志、報(bào)紙、閱覽各種工具書。</p><p>  下面繪制出圖書館流通業(yè)務(wù)中借書的流程圖:</p><p> ?。?)讀者在目錄廳查閱索引卡;</p><p> ?。?)讀者寫出所借圖書的分類號(hào)、種次號(hào)、交給圖書管理員,并出示本人的借書證;

27、</p><p> ?。?)圖書管理員根據(jù)圖書的分類號(hào)、種次號(hào)到書庫(kù)找書;</p><p> ?。?)將圖書交給讀者,并由讀者填寫所借圖書的借書卡。</p><p> ?。?)圖書管理員把借書卡保存到寫有該讀者借書證號(hào)的口袋里。</p><p>  得出該圖書館業(yè)務(wù)流程圖如下所示:</p><p><b> 

28、 圖2.2</b></p><p>  2現(xiàn)行系統(tǒng)存在問(wèn)題的分析</p><p>  該圖書館工作大部分還是進(jìn)行著手工管理,工作起來(lái)效率很低,由于不可避免的人為因素,經(jīng)常造成數(shù)據(jù)的遺漏、誤報(bào)。計(jì)算機(jī)信息化管理有著儲(chǔ)存信息量大、速度快等許多優(yōu)點(diǎn),提供給我們的處理信息及時(shí)快捷,同時(shí)也提高了我們工作人員的自身素質(zhì)。</p><p><b>  3解決

29、方案</b></p><p>  基于以上的對(duì)問(wèn)題的分析,利用計(jì)算機(jī)給我們提供信息,及時(shí)地調(diào)整學(xué)校圖書館圖書結(jié)構(gòu),并且對(duì)學(xué)生們的借閱過(guò)程形成一整套動(dòng)態(tài)的管理就十分必要了。</p><p>  圖書館信息系統(tǒng)的建立,需要進(jìn)行用戶的需求調(diào)查與分析,以確定系統(tǒng)目標(biāo),提出解決</p><p>  問(wèn)題的詳細(xì)方案,這是系統(tǒng)建設(shè)的重要環(huán)節(jié)。</p>&

30、lt;p>  學(xué)校圖書館規(guī)模相對(duì)于商業(yè)圖書館小,但要有著完善的圖書信息,對(duì)每一冊(cè)書要有詳細(xì)的記錄信息,功能上對(duì)系統(tǒng)的需求是全面的。因此對(duì)用戶的需求可分為四個(gè)方面:一方面是圖書館工作人員通過(guò)計(jì)算機(jī)來(lái)管理各類圖書,分類編號(hào),調(diào)整圖書結(jié)構(gòu),增加圖書庫(kù)存,適應(yīng)學(xué)生的需求;二方面是學(xué)生們能通過(guò)計(jì)算機(jī)來(lái)查詢?yōu)g覽圖書館中的圖書,來(lái)確定自己需要的書籍,為借閱做好準(zhǔn)備;三方面是工作人員對(duì)學(xué)生們的借書證發(fā)放;四方面也是圖書館的核心工作,對(duì)圖書的借閱管

31、理。</p><p>  這四個(gè)方面形成了學(xué)校圖書館一個(gè)工作整體,采用計(jì)算機(jī)自動(dòng)化信息處理,可方便快捷地共享信息、交流信息,高效地協(xié)同工作。</p><p>  在軟、硬件方面對(duì)系統(tǒng)的需求,軟件要求易學(xué),界面友好,容易掌握,可以很簡(jiǎn)單方便的管理各種圖書信息。硬件的配置要求不能太高,這樣可以很好的適應(yīng)當(dāng)前的學(xué)校圖書館。</p><p>  在開(kāi)發(fā)方式上對(duì)系統(tǒng)的需求,由

32、于學(xué)校圖書館是一種無(wú)商業(yè)利益的,所以系統(tǒng)設(shè)計(jì)開(kāi)發(fā)的周期要短,在短時(shí)間內(nèi)完成,減少開(kāi)發(fā)成本,提高開(kāi)發(fā)效率,方便、簡(jiǎn)單、實(shí)用作為系統(tǒng)開(kāi)發(fā)的指導(dǎo)思想。</p><p>  三 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)</p><p>  如果要完成一個(gè)完整的圖書管理系統(tǒng),需要的相關(guān)信息很多。由于種種條件的限制,同時(shí)考慮到開(kāi)發(fā)成本,所以本系統(tǒng)僅實(shí)現(xiàn)基本的管理功能。并不能完全滿足上面例子所描述的圖書館,使用前應(yīng)進(jìn)行二次開(kāi)發(fā)

33、。</p><p><b>  1 系統(tǒng)目標(biāo)設(shè)計(jì)</b></p><p>  系統(tǒng)開(kāi)發(fā)的總目標(biāo)是實(shí)現(xiàn)內(nèi)部圖書借閱管理的系統(tǒng)化、規(guī)范化和自動(dòng)化。</p><p>  能夠?qū)D書進(jìn)行注冊(cè)登記,也就是將圖書的基本信息(如:書名、作者、價(jià)格等)預(yù)先存入數(shù)據(jù)庫(kù)中,供以后檢索。</p><p>  能夠?qū)栝喨诉M(jìn)行注冊(cè)登記,包括記錄

34、借閱人的姓名、地址、電話等信息。</p><p>  提供方便的查詢方法。如:以書名、作者、出版社、出版時(shí)間(確切的時(shí)間、時(shí)間段、某一時(shí)間之前、某一時(shí)間之后)等信息進(jìn)行圖書檢索,并能反映出圖書的借閱情況;以借閱人編號(hào)對(duì)借閱人信息進(jìn)行檢索;以出版社名稱查詢出版社聯(lián)系方式信息。</p><p>  提供統(tǒng)計(jì)分析功能??梢哉宫F(xiàn)出圖書類型比例、庫(kù)存與借出比例。</p><p&g

35、t;  提供舊書銷毀功能,對(duì)于淘汰、損壞、丟失的書目可及時(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改。</p><p>  能夠?qū)κ褂迷摴芾硐到y(tǒng)的用戶進(jìn)行管理,按照不同的工作職能提供不同的功能授權(quán)。</p><p>  提供較為完善的差錯(cuò)控制與友好的用戶界面,盡量避免誤操作。</p><p><b>  2 系統(tǒng)功能分析</b></p><p>

36、  根據(jù)以上功能,將圖書管理系統(tǒng)的數(shù)據(jù)分為:</p><p>  數(shù)據(jù)輸入部分:主要包括圖書基本信息的錄入、借閱人基本信息的錄入、用戶基本信息的錄入。</p><p>  數(shù)據(jù)輸出部分:主要是各種統(tǒng)計(jì)查詢,包括:根據(jù)圖書信息(如書名、作者、出版社等)查閱圖書及其借閱信息、統(tǒng)計(jì)輸出圖書類型比例等。</p><p>  數(shù)據(jù)處理部分:主要涉及借閱和歸還的處理,如一本書借

37、出后,必須在數(shù)據(jù)庫(kù)中將該書標(biāo)記為已借出,以防出現(xiàn)數(shù)據(jù)庫(kù)中有書但圖書館無(wú)書的情況;一本書歸還后,同樣必須在數(shù)據(jù)庫(kù)中將其標(biāo)記為已經(jīng)歸還,以便再次借出。</p><p>  3系統(tǒng)各功能模塊設(shè)計(jì)</p><p>  在系統(tǒng)功能分析的基礎(chǔ)上,考慮PowerBuilder程序編制的特點(diǎn),得到如圖所示的系統(tǒng)功能模塊圖:</p><p><b>  圖3.1</b

38、></p><p><b>  4數(shù)據(jù)流圖</b></p><p>  圖書基本信息登記/修改</p><p><b>  圖3.2</b></p><p>  說(shuō)明:出版社信息人工錄入后,存放在出版社信息庫(kù)中,便于今后書籍信息的錄入以及出版社信息的查詢。分類信息由圖書館進(jìn)行分類定制,存放在圖

39、書分類信息庫(kù)中,</p><p>  用于圖書的分類管理。登記新書時(shí),當(dāng)涉及到出版社和分類的填寫時(shí),只需做相應(yīng)的選擇即可,并存放在圖書信息庫(kù)中。</p><p>  借閱人基本信息登記/修改</p><p><b>  圖3.3</b></p><p>  說(shuō)明:錄入借閱人基本信息后存放在借閱人信息庫(kù)中。</p&g

40、t;<p><b>  圖書查詢</b></p><p><b>  圖3.4</b></p><p>  說(shuō)明:輸入查詢條件后,檢索圖書信息庫(kù),并反應(yīng)出查詢結(jié)果。</p><p><b>  圖書統(tǒng)計(jì)</b></p><p><b>  圖3.5<

41、;/b></p><p>  說(shuō)明:根據(jù)選擇的統(tǒng)計(jì)條件,檢索圖書分類信息庫(kù)或圖書信息庫(kù),并反應(yīng)出統(tǒng)計(jì)結(jié)果。</p><p><b>  (5)圖書借閱</b></p><p><b>  圖3.6</b></p><p>  說(shuō)明:輸入借閱人編號(hào),通過(guò)檢索借閱人信息庫(kù),核實(shí)借閱人身份。輸入圖書

42、編號(hào),通過(guò)</p><p>  檢索圖書信息庫(kù),核實(shí)圖書信息。進(jìn)行圖書借出處理后,在圖書借閱庫(kù)中進(jìn)行登記,</p><p>  并將借出圖書的在借標(biāo)志設(shè)為“是”。</p><p><b> ?。?)圖書歸還</b></p><p><b>  圖3.7</b></p><p>

43、;  說(shuō)明:輸入圖書編號(hào),檢索在借信息庫(kù),反應(yīng)出圖輸借閱情況。進(jìn)行歸還操作后,修改在</p><p>  借信息庫(kù)中相關(guān)條目,同時(shí)在圖書信息庫(kù)中修改相關(guān)圖書在借標(biāo)志為“否</p><p><b>  四 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p>  數(shù)據(jù)庫(kù)的設(shè)計(jì)是MIS系統(tǒng)的核心部分,設(shè)計(jì)數(shù)據(jù)庫(kù),首先要進(jìn)行需求分析,然后進(jìn)行數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)設(shè)計(jì)、邏輯

44、結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)庫(kù)結(jié)構(gòu)實(shí)現(xiàn)等步驟。</p><p><b>  1數(shù)據(jù)庫(kù)需求分析</b></p><p>  根據(jù)以上的需求分析和數(shù)據(jù)組織,開(kāi)始設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),即根據(jù)需求勾畫出實(shí)體/關(guān)系圖(E/R)。在概念上,E/R圖代表的是系統(tǒng)需要的數(shù)據(jù)及其這些數(shù)據(jù)之間的關(guān)系。如圖所示的實(shí)體/關(guān)系圖:</p><p><b>  圖4.1</b&

45、gt;</p><p>  從圖中可以看出,在這個(gè)系統(tǒng)中實(shí)際存在的實(shí)體:圖書和借閱人,其中借閱人和圖書是多對(duì)多關(guān)系,針對(duì)本系統(tǒng),通過(guò)對(duì)圖書借閱管理的內(nèi)容和數(shù)據(jù)流程分析,設(shè)計(jì)數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu)如下:</p><p>  圖書基本信息,其數(shù)據(jù)項(xiàng)有圖書編號(hào)、圖書名稱、作者、出版社等。</p><p>  借閱人基本信息,其數(shù)據(jù)項(xiàng)有借閱人編號(hào)、借閱人姓名、電話等。</p

46、><p>  圖書借閱登記,其數(shù)據(jù)項(xiàng)有借閱序號(hào)、借閱圖書編號(hào)、借閱人編號(hào)等。</p><p>  為了實(shí)現(xiàn)圖書信息錄入的方便性與規(guī)范性以及相關(guān)的統(tǒng)計(jì)功能,還應(yīng)增加出版社信息</p><p><b>  與圖書分類信息:</b></p><p>  出版社信息,其數(shù)據(jù)項(xiàng)有出版社編號(hào)、出版社名稱、地址、電話、傳真等。</p

47、><p>  圖書分類信息,其數(shù)據(jù)項(xiàng)有分類編號(hào)、分類名稱、同一類型圖書數(shù)目。</p><p>  同時(shí)針對(duì)于本系統(tǒng)的多用戶使用特點(diǎn),增加用戶信息表:</p><p> ?。?)用戶信息表,其數(shù)據(jù)項(xiàng)有用戶名、密碼、用戶權(quán)限。</p><p>  為了實(shí)現(xiàn)圖書借閱超期罰款制度,還應(yīng)增設(shè)罰金規(guī)則表:</p><p>  (7)罰

48、金規(guī)則表,其數(shù)據(jù)項(xiàng)包括免費(fèi)使用天數(shù)、罰金費(fèi)率、規(guī)則啟用開(kāi)關(guān)。</p><p>  2 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)</p><p>  數(shù)據(jù)庫(kù)設(shè)計(jì)有幾個(gè)范式,一般我們要做到的是第三范式,即數(shù)據(jù)表中沒(méi)有冗余字段以及同一個(gè)表中的字段沒(méi)有函數(shù)依賴關(guān)系,冗余字段即在一個(gè)表中已經(jīng)保存過(guò)的信息,在另一個(gè)表中就不應(yīng)該存在,如果需要的話,可以通過(guò)表間的關(guān)聯(lián)來(lái)得到,函數(shù)依賴性就是一個(gè)表中的字段間不應(yīng)該有計(jì)算關(guān)系,如一

49、個(gè)表中有單價(jià)字段、數(shù)量字段,就不應(yīng)該有一個(gè)總金額字段。如果程序運(yùn)行過(guò)程中需要總金額,可以實(shí)時(shí)計(jì)算。不過(guò)在一些較常用的表中,我們可以適當(dāng)?shù)乇A羧哂嘧侄?,這樣,在程序運(yùn)行過(guò)程中可以減少由于表間互相關(guān)聯(lián)而使用速度降低等問(wèn)題。這就是所謂的第四范式。數(shù)據(jù)表設(shè)計(jì)時(shí),最好不要使用用戶輸入的信息作為主鍵,每一個(gè)數(shù)據(jù)表自己定義一個(gè)主鍵,添加信息是由程序自動(dòng)添加,這樣就可以減少數(shù)據(jù)更新時(shí)產(chǎn)生的錯(cuò)誤。表與表相關(guān)聯(lián)的外鍵最好是由程序自動(dòng)生成的主鍵,這樣數(shù)據(jù)庫(kù)就

50、比較規(guī)范了。</p><p>  另外,數(shù)據(jù)表設(shè)計(jì)時(shí)一般都應(yīng)該有一些標(biāo)志字段,標(biāo)志字段可以定義成CHAR(1)或BIT</p><p>  型。建議實(shí)際應(yīng)用中定義成CHAR(1)字段可以存儲(chǔ)多種可能的狀態(tài),在最初設(shè)計(jì)時(shí),可能我們沒(méi)有考慮到的一些情況,在程序后來(lái)的開(kāi)發(fā)中,可以通過(guò)設(shè)計(jì)標(biāo)志字段為不同的 值來(lái)解決,這樣就避免了修改數(shù)據(jù)庫(kù)結(jié)構(gòu)。</p><p>  數(shù)據(jù)庫(kù)初

51、期設(shè)計(jì)時(shí)一定要謹(jǐn)慎,把所有可能的情況都考慮進(jìn)去,即使當(dāng)時(shí)沒(méi)有用到,也要將它留在數(shù)據(jù)庫(kù)中作為備用字段以便將來(lái)擴(kuò)充。</p><p>  程序一旦開(kāi)始編碼,就應(yīng)該盡量避免再修改數(shù)據(jù)庫(kù)。因?yàn)槿绻麛?shù)據(jù)庫(kù)結(jié)構(gòu)一旦改變,</p><p>  所有與修改的數(shù)據(jù)表相關(guān)的業(yè)務(wù)都有可能受到影響,而某些影響還很難看到,這樣就容易形成一個(gè)惡性循環(huán)。錯(cuò)誤越改越多,越改越亂,最終導(dǎo)致程序的失敗。PB的數(shù)據(jù)窗口與其他語(yǔ)

52、言的數(shù)據(jù)控件不一樣,它的很多東西是預(yù)編譯的。即使你一個(gè)模塊已經(jīng)調(diào)試無(wú)誤,但只要數(shù)據(jù)庫(kù)結(jié)構(gòu)改動(dòng)。相應(yīng)的模塊就一定要重新修改,否則一定會(huì)出問(wèn)題。</p><p>  圖書借閱管理系統(tǒng)數(shù)據(jù)庫(kù)中各個(gè)表的設(shè)計(jì)結(jié)果如下面幾個(gè)表格所示。每個(gè)表格表示為數(shù)據(jù)庫(kù)中的一個(gè)表。</p><p>  借閱人基本信息表memberinfo</p><p>  說(shuō)明:記錄借閱人的基本情況,mem

53、berid設(shè)為主鍵、索引。 表4.1</p><p>  用戶基本信息表people</p><p>  說(shuō)明:記錄系統(tǒng)用戶的用戶名、密碼與權(quán)限,name設(shè)為主鍵。 表4.2 </p><p>  圖書基本信息表bookinfo</p><p>  說(shuō)明:記錄圖書基本信息,bookid設(shè)為主鍵、索引

54、。 表4.3</p><p>  出版社基本信息表publishinfo</p><p>  說(shuō)明:記錄出版社信息,pubid設(shè)為主鍵。 表4.4</p><p>  分類信息表bookclass</p><p>  說(shuō)明:記錄定制的分類情況,classid設(shè)

55、為主鍵。 表4.5</p><p>  借閱情況信息表loan</p><p>  說(shuō)明:進(jìn)行借閱的登記,loanid設(shè)為主鍵、自動(dòng)增長(zhǎng)。 表4.6 </p><p>  規(guī)則信息表regular</p><p>  說(shuō)明:記錄設(shè)置的借閱規(guī)則,days設(shè)為主鍵。

56、 表4.7</p><p>  (1)規(guī)劃有效的索引</p><p>  a.在組合表的列中創(chuàng)建索引,包括主關(guān)鍵字和外部關(guān)鍵字所在的列。</p><p>  b.在列或類組合中創(chuàng)建唯一的索引能增強(qiáng)唯一性。</p><p>  c.瀏覽索引并卸載不使用的索引。索引需要一定硬盤空間和時(shí)間來(lái)維護(hù)。具有較高數(shù)據(jù)插

57、入操作頻率的數(shù)據(jù)庫(kù)最好不要索引。有較高讀操作頻率的數(shù)據(jù)庫(kù)應(yīng)該有更多的索引。</p><p>  d.避免在簇索引中包括不必要的列。在可能的情況下,使用較小的數(shù)據(jù)類型,例如用varchar替代char。</p><p>  e.考慮使用簇索引來(lái)支持排序和范圍化查詢。在為數(shù)據(jù)檢索優(yōu)化表時(shí),簇索引必須支持?jǐn)?shù)據(jù)的分組索引。為簇關(guān)鍵字選擇列或列組,簇關(guān)鍵字以經(jīng)常需要的順序排序數(shù)據(jù)或以必須被一起訪問(wèn)的

58、記錄而分組記錄。</p><p>  f.創(chuàng)建支持一般查詢的查找參數(shù)索引。具有高選擇性的列是索引的最好候選列。具有高密度的列是索引糟糕的候選列。</p><p> ?。?)使用約束實(shí)現(xiàn)數(shù)據(jù)的完整性</p><p>  PRIMARY KEY約束在表中定義了主關(guān)鍵字,它是行唯一的標(biāo)識(shí)符,它可以強(qiáng)制實(shí)體完整性。在使用PRIMARY KEY約束時(shí)考慮以下事實(shí):</p

59、><p>  每個(gè)表只能有一個(gè)PRIMARY KEY約束。</p><p>  鍵入的值必須是唯一的。</p><p><b>  不允許有空值。</b></p><p>  PRIMARY KEY約束在指定的列創(chuàng)建唯一的索引,可以指定簇索引和非簇索引(如果 </p><p>  非簇索引先前并不存在

60、,簇索引是默認(rèn)的)。</p><p>  UNIQUE約束指定,在一列中的兩行不能有相同的值。該約束使用唯一的索引來(lái)強(qiáng)制實(shí)體的完整性。在已有一個(gè)主關(guān)鍵字時(shí)UNIQUE約束很有用,例如雇員號(hào),但是必須保證其他標(biāo)識(shí)符(例如,雇員駕駛證號(hào))也是唯一的。在使用UNIQUE約束時(shí),考慮以下事實(shí);</p><p><b>  允許有空值。</b></p><p

61、>  在一個(gè)表中可以設(shè)置多個(gè)UNIQUE約束。</p><p>  可以將UNIQUE約束運(yùn)用于具有唯一值的單列或多列,但不能用于表的主關(guān)鍵字。</p><p>  通過(guò)在指定的列或列組中創(chuàng)建唯一的索引,可以使UNIQUE索引得到強(qiáng)制</p><p>  五 圖書管理系統(tǒng)的具體實(shí)現(xiàn)</p><p>  1 PowerBuilder開(kāi)發(fā)工

62、具簡(jiǎn)介</p><p>  PowerBuilder是目前開(kāi)發(fā)Client/Server結(jié)構(gòu)的應(yīng)用系統(tǒng)的主要工具之一。PowerBuilder8.0在繼承與發(fā)展以前版本優(yōu)秀功能的基礎(chǔ)上,為適應(yīng)網(wǎng)絡(luò)應(yīng)用程序的開(kāi)發(fā)要求集成了Enterprise Application Studio中PowerBuilder以及Power Site的功能,在傳統(tǒng)數(shù)據(jù)庫(kù)開(kāi)發(fā)的基礎(chǔ)上,將Web應(yīng)用更好地集成到PowerBuilder中。P

63、owerBuilder全面支持面向?qū)ο缶幊?。是功能?qiáng)大并易于使用的第4代編程語(yǔ)言(4GL),它內(nèi)置了包括數(shù)據(jù)窗口在內(nèi)的多種對(duì)象類,可以方便地訪問(wèn)數(shù)據(jù)庫(kù)。相對(duì)于其他應(yīng)用工具,PowerBuilder具有工作效率高、成本低、質(zhì)量高、功能強(qiáng)的特點(diǎn)。</p><p>  2 Powerbuilder 8應(yīng)用程序開(kāi)發(fā)的基本步驟</p><p>  我們要開(kāi)發(fā)應(yīng)用程序時(shí),首先要對(duì)它進(jìn)行分析。無(wú)論哪種、

64、哪方面的應(yīng)用程序,都要先建立一個(gè)應(yīng)用對(duì)象。下面我們介紹以下PowerBuilder 8應(yīng)用程序開(kāi)發(fā)的基本步驟:</p><p> ?。?)首先要建立應(yīng)用對(duì)象。</p><p> ?。?)創(chuàng)建窗口。在窗口里放置各種控件和編寫事件響應(yīng)的腳本。</p><p>  (3)創(chuàng)建菜單。窗口里的菜單可包括菜單條,下拉式菜單,級(jí)聯(lián)菜單和彈出式菜單為菜單編寫事件響應(yīng)的腳本。<

65、/p><p>  (4)創(chuàng)建用戶對(duì)象。如果想要重復(fù)使用某個(gè)控件的功能,可以把窗口上經(jīng)常放置的控件定義為用戶對(duì)象。</p><p> ?。?)創(chuàng)建數(shù)據(jù)窗口。數(shù)據(jù)窗口可以檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù),可以建立各種報(bào)或統(tǒng)計(jì)表,可以修改數(shù)據(jù)庫(kù)。</p><p> ?。?)創(chuàng)建函數(shù)、結(jié)構(gòu)、事件。為了能夠更好地支持腳本,編寫自定義的函數(shù),定義結(jié)構(gòu)類型變量,也可以為對(duì)象和控件定義自己的事件。&

66、lt;/p><p> ?。?)運(yùn)行與調(diào)試??梢栽陂_(kāi)發(fā)環(huán)境中隨時(shí)運(yùn)行應(yīng)用程序,發(fā)現(xiàn)錯(cuò)誤后,可以用調(diào)試工具進(jìn)行調(diào)試。</p><p> ?。?)當(dāng)應(yīng)用程序開(kāi)發(fā)完畢后,可以把它編譯成可執(zhí)行的文件,讓用戶比較容易地建立應(yīng)用系統(tǒng)的運(yùn)行環(huán)境。</p><p><b>  3 編碼規(guī)范</b></p><p>  為了減少在軟件開(kāi)發(fā)過(guò)程中

67、的錯(cuò)誤,在軟件開(kāi)發(fā)過(guò)程中應(yīng)該遵守一定的標(biāo)準(zhǔn)。</p><p>  給對(duì)象命名要有一定的規(guī)范,部件名稱可以達(dá)到40個(gè)字符,窗口的命名:W_功能代碼_功能描述。數(shù)據(jù)窗口的命名:DW_功能代碼_功能描述。菜單命名:M_功能代碼_功能描述。</p><p>  標(biāo)識(shí)符命名時(shí),應(yīng)該使標(biāo)識(shí)符有一定的字面含義,有助于程序的調(diào)試和腳本的可讀性的提高。本系統(tǒng)中使用的命名規(guī)范為:變量作用域+變量類型+”_”+

68、具有一定字面含義的名稱。例如:li_selectrow反映出的含義:”l”代表是本地變量,是local的縮寫,”i”代表是integer類型的變量,selectrow表示該變量是用來(lái)記錄一個(gè)行號(hào)的計(jì)數(shù)器。</p><p>  4 創(chuàng)建祖先窗口和全局函數(shù)</p><p>  為充分利用PB的面向?qū)ο蟮奶匦浴3绦蜷_(kāi)發(fā)時(shí)一般創(chuàng)建幾個(gè)模板窗口。將功能窗口上的某些常用功能封裝在模板窗口中。然后將這些

69、模板窗口作為祖先窗口。所有的子孫窗口都可以通過(guò)繼承的方法來(lái)生成。這樣就減少了代碼的書寫量。使得整個(gè)程序界面保持整齊。當(dāng)修改祖先窗口時(shí),所有的子孫窗口都會(huì)自動(dòng)修改。所以,祖先窗口的確定要十分謹(jǐn)慎。</p><p>  全局函數(shù)與局部函數(shù)的作用類似。唯一不同的是全局函數(shù)的作用域是整個(gè)程序周期。不論你在任何一個(gè)模塊的代碼中都可以調(diào)用它。所以我們可以把某些常用功能寫成全局函數(shù)。在程序的其他地方反復(fù)調(diào)用。</p>

70、;<p>  4.1函數(shù)level(character lev)</p><p>  功能介紹:通過(guò)傳入的lev值,將某些菜單項(xiàng)設(shè)為“非使能”,以限制某些功能的使用。Lev值即不同職責(zé)的權(quán)限(系統(tǒng)管理1、圖書管理2、借閱人管理3、借閱操作員4),從people表中的level字段中讀取。</p><p><b>  代碼分析:</b></p>

71、<p>  choose case lev</p><p><b>  case "1"</b></p><p><b>  case "2"</b></p><p>  m_main.m_借閱人管理.enabled=false</p><p>

72、  m_main.m_圖書租賃.enabled=false</p><p>  m_main.m_系統(tǒng)菜單.m_用戶管理.enabled=false</p><p>  m_main.m_系統(tǒng)菜單.m_借閱規(guī)則設(shè)置.enabled=false</p><p>  m_main.m_系統(tǒng)菜單.m_圖書信息設(shè)置.enabled=false</p><

73、p><b>  case "3"</b></p><p>  m_main.m_圖書管理.enabled=false</p><p>  m_main.m_圖書租賃.enabled=false</p><p>  m_main.m_圖書查詢.enabled=false</p><p>  m_m

74、ain.m_統(tǒng)計(jì)資料.enabled=false</p><p>  m_main.m_系統(tǒng)菜單.m_用戶管理.enabled=false</p><p>  m_main.m_系統(tǒng)菜單.m_借閱規(guī)則設(shè)置.enabled=false</p><p>  m_main.m_系統(tǒng)菜單.m_圖書信息設(shè)置.enabled=false</p><p>

75、<b>  case "4"</b></p><p>  m_main.m_圖書管理.enabled=false</p><p>  m_main.m_借閱人管理.enabled=false</p><p>  m_main.m_系統(tǒng)菜單.m_用戶管理.enabled=false</p><p>  

76、m_main.m_系統(tǒng)菜單.m_借閱規(guī)則設(shè)置.enabled=false</p><p>  m_main.m_系統(tǒng)菜單.m_圖書信息設(shè)置.enabled=false</p><p>  end choose</p><p>  4.2 函數(shù)countday</p><p>  countday (date date1,date date

77、2)</p><p>  功能介紹:通過(guò)傳入的date1(起始日期)值與date2(結(jié)束日期)值,計(jì)算出中間相差的天數(shù),返回值為integer型。</p><p><b>  代碼分析:</b></p><p><b>  int day</b></p><p>  day=(integer(yea

78、r(date2)) - integer(year(date1)))*365 +&</p><p>  (integer(month(date2)) - integer(month(date1)))*30 +&</p><p>  (integer(day(date2)) - integer(day(date1)))*1</p><p>  retur

79、n day</p><p>  4.3 函數(shù)countfine</p><p>  countfine (integer days, decimal fine, integer countday)</p><p>  功能介紹:根據(jù)圖書免費(fèi)借閱天數(shù)days、罰金費(fèi)率fine,以及已借閱的天數(shù)(由countday函數(shù)算出),計(jì)算出費(fèi)用,返回值為decimal型。<

80、;/p><p><b>  代碼分析:</b></p><p>  dec countfine</p><p>  if countday>=0 and countday<=days then//免費(fèi)使用期內(nèi)罰金為0</p><p>  countfine=0</p><p><b

81、>  else</b></p><p>  countfine=(countday - days)*fine//超根據(jù)期多少計(jì)算罰金</p><p><b>  end if</b></p><p>  return countfine</p><p>  5 應(yīng)用程序?qū)ο?App_librarain&

82、lt;/p><p>  功能介紹:PB程序由一個(gè)應(yīng)用程序開(kāi)始,即每個(gè)PB程序在開(kāi)始運(yùn)行時(shí),先執(zhí)行應(yīng)用程序?qū)ο蟮腛pen事件。在Open事件中連接數(shù)據(jù)庫(kù),并打開(kāi)登陸窗口w_login。</p><p><b>  代碼分析:</b></p><p>  // Profile librarian</p><p>  SQLCA.

83、DBMS = "ODBC"</p><p>  SQLCA.AutoCommit = False</p><p>  SQLCA.DBParm = "ConnectString='DSN=librarian;UID=;PWD='"</p><p>  Connect using SQLCA;</p>

84、<p>  //判斷數(shù)據(jù)庫(kù)連接是否成功</p><p>  if sqlca.sqlcode = 0 then</p><p>  open(w_login)</p><p><b>  else</b></p><p>  messagebox('系統(tǒng)提示','連接數(shù)據(jù)庫(kù)失敗!&#

85、39;)</p><p><b>  end if</b></p><p><b>  6 具體窗口的實(shí)現(xiàn)</b></p><p> ?。?)登錄窗口 w_login </p><p><b>  圖5.1</b></p><

86、;p>  功能介紹:本窗口主要是檢查操作員輸入的用戶名及密碼是否正確,如果正確,允許登錄。如果錯(cuò)誤,顯示出錯(cuò)誤提示。</p><p>  操作方法:填寫“用戶名”與“密碼”后,點(diǎn)擊“登錄”按鈕進(jìn)行驗(yàn)證,點(diǎn)擊“放棄”退出。</p><p><b>  代碼分析:</b></p><p>  Open事件:sle_1.setfocus()//

87、“用戶名”輸入框獲得焦點(diǎn)</p><p>  this.width=923</p><p>  this.height=588</p><p>  “登錄”按鈕:string name,pwd</p><p><b>  char lev</b></p><p><b>  int te

88、st</b></p><p>  name=sle_1.text</p><p>  pwd=sle_2.text</p><p>  //檢測(cè)用戶名與密碼是否匹配</p><p>  SELECT level</p><p><b>  INTO :lev</b></p>

89、<p>  FROM people</p><p>  WHERE name=:name and password=:pwd;</p><p>  if lev<>"" then</p><p>  open(w_main)</p><p>  level(lev)//根據(jù)權(quán)限設(shè)定菜單狀態(tài)<

90、/p><p><b>  else</b></p><p>  sle_1.setfocus()</p><p>  test=messagebox("提示:","用戶名或者密碼錯(cuò)誤!",Exclamation!, </p><p>  OKCancel!, 2)</p>

91、<p>  end if//檢測(cè)是否重新登錄</p><p>  if test=1 then</p><p><b>  return 1</b></p><p><b>  else</b></p><p>  close(parent)</p><p>&

92、lt;b>  end if</b></p><p> ?。?) 主窗口w_main</p><p>  功能介紹:本窗口作為菜單及其他子窗口的容器。</p><p>  窗口設(shè)置;本窗口為容器窗口,故它的WindowType為mdihelp!,表示本窗口為多文檔界面,可以有菜單、工具欄與狀態(tài)欄。WindowState為maximized!,表示窗口

93、在運(yùn)行時(shí)是最大化的風(fēng)格。Menuname屬性設(shè)為m_main,即是與本窗口連接的菜單名稱。</p><p> ?。?) 菜單m_main</p><p><b>  圖5.2</b></p><p>  功能介紹:打開(kāi)各功能窗口</p><p>  操作方法:點(diǎn)擊菜單項(xiàng)或工具欄上相應(yīng)的按鈕,狀態(tài)欄可顯示幫助信息。<

94、/p><p>  代碼分析:每個(gè)相應(yīng)的菜單項(xiàng)的clicked事件都使用opensheet方法來(lái)打開(kāi)相應(yīng)的功能窗口,如“新書入庫(kù)”的菜單項(xiàng)下的 clicked事件的處理代碼為:</p><p>  opensheet(w_newbook,"w_newbook",parentwindow,0,cascaded!)</p><p>  (4)新書入庫(kù)窗口

95、w_newbook</p><p><b>  圖5.3</b></p><p>  功能介紹:增加、修改圖書信息。</p><p>  操作方法:a.增加圖書信息:點(diǎn)擊“新增”按鈕,添加圖書信息,完成后點(diǎn)擊“保存”按鈕</p><p>  b.修改圖書信息:通過(guò)“圖書編號(hào)”檢索出圖書信息,修改后點(diǎn)擊“保存”按鈕<

96、/p><p><b>  代碼分析:</b></p><p>  Open事件:dw_1.settransobject(sqlca) //為數(shù)據(jù)窗口指定事務(wù)對(duì)象</p><p>  dw_1.retrieve()//為數(shù)據(jù)窗口從數(shù)據(jù)庫(kù)中獲得數(shù)據(jù)</p><p>  this.width=2926 //設(shè)置窗口的高度和寬度&l

97、t;/p><p>  this.height=1572</p><p>  “檢索”按鈕:string ls_bookid,ls_filter</p><p>  ls_bookid=sle_bookid.text </p><p>  dw_1.setfilter("bookid='"+ls_bookid+"

98、;'")//設(shè)置過(guò)濾條件</p><p>  dw_1.filter()//過(guò)濾數(shù)據(jù)</p><p>  “上一條”按鈕:dw_1.scrollpriorrow()//滾動(dòng)到上一行</p><p>  “下一條”按鈕:dw_1.scrollnextrow()//滾動(dòng)到下一行</p><p>  “新增”按鈕:long ll_

99、row</p><p>  ll_row=dw_1.insertrow(0) //在數(shù)據(jù)窗口中增加一行</p><p>  dw_1.scrolltorow(ll_row) //數(shù)據(jù)窗口滾動(dòng)到當(dāng)前行</p><p>  dw_1.setcolumn(2) //使第一列為當(dāng)前列,并得到焦點(diǎn)</p><p>  dw_1.setfocus()&l

100、t;/p><p>  “保存”按鈕:long ll_row</p><p>  dw_1.accepttext()//將數(shù)據(jù)寫入主緩沖區(qū)</p><p>  if dw_1.modifiedcount()>0 then //檢測(cè)數(shù)據(jù)是否被修改</p><p>  if dw_1.update()>0 then //如果被修改則更新數(shù)據(jù)

101、庫(kù)</p><p>  commit; //提交事務(wù)</p><p>  cb_new.setfocus()//“新增”按鈕獲得焦點(diǎn)</p><p><b>  else</b></p><p>  rollback; //回滾事務(wù)</p><p>  messagebox("系統(tǒng)提示&

102、quot;,"保存失??!請(qǐng)檢驗(yàn)數(shù)據(jù)的正確性")</p><p>  dw_1.setcolumn(1) //數(shù)據(jù)窗口第一列獲得焦點(diǎn)</p><p>  dw_1.setfocus()</p><p><b>  end if</b></p><p><b>  else</b>&

103、lt;/p><p>  cb_new.setfocus()//“新增”按鈕獲得焦點(diǎn)</p><p><b>  end if</b></p><p> ?。?) 舊書銷毀窗口 w_delbook</p><p><b>  圖5.4</b></p><p>  功能介紹:刪除圖書

104、信息。</p><p>  操作方法:首先通過(guò)圖書編號(hào)檢索出圖書信息,然后點(diǎn)擊“銷毀”按鈕注銷圖書。</p><p><b>  代碼分析:</b></p><p>  Open事件:類同“新書入庫(kù)窗口w_newbook”</p><p>  “檢索”按鈕:string ls_bookid,ls_filter</p

105、><p>  ls_bookid=sle_bookid.text//設(shè)置過(guò)濾條件</p><p>  dw_1.setfilter("bookid='"+ls_bookid+"'")//過(guò)濾數(shù)據(jù)</p><p>  dw_1.filter()//使“銷毀”按鈕可用</p><p>  cb_

106、del.enabled=true</p><p>  sle_bookid.setfocus()</p><p>  “銷毀”按鈕:long li_row</p><p>  li_row=dw_1.getrow()//得到當(dāng)前行號(hào)</p><p>  if li_row>0 then//判斷是否有可刪除的行</p>&l

107、t;p>  if messagebox('刪除詢問(wèn)','真的要注銷此書嗎?',question!,Yesno!,2)=1 then</p><p>  dw_1.deleterow(li_row) //刪除行</p><p>  if dw_1.update()>0 then//更新數(shù)據(jù)庫(kù)</p><p><b>

108、;  commit;</b></p><p><b>  else</b></p><p><b>  rollback;</b></p><p>  messagebox("錯(cuò)誤提示","無(wú)法注銷!")</p><p><b>  en

109、d if</b></p><p>  li_row=dw_1.getrow()//得到當(dāng)前行</p><p>  if li_row<dw_1.rowcount() then//判斷是否至少有兩行存在</p><p>  dw_1.selectrow(0,false) //高亮顯示當(dāng)前行</p><p>  dw_1.sel

110、ectrow(li_row,true)</p><p><b>  end if</b></p><p><b>  end if</b></p><p><b>  else</b></p><p>  messagebox("系統(tǒng)提示","沒(méi)有

111、要注銷的數(shù)據(jù)")</p><p><b>  end if</b></p><p>  cb_del.enabled=false//使“銷毀”按鈕恢復(fù)不可用狀態(tài)</p><p> ?。?) 登記借閱人窗口 w_newmember</p><p><b>  圖5.5</b></p&g

112、t;<p>  功能介紹:增加、修改借閱人信息</p><p>  操作方法:類同“新書入庫(kù)窗口w_newbook”</p><p><b>  代碼分析:</b></p><p>  Open事件:類同“新書入庫(kù)窗口w_newbook”</p><p>  “檢索”按鈕:類同“新書入庫(kù)窗口w_newboo

113、k”</p><p>  “新增”按鈕:類同“新書入庫(kù)窗口w_newbook”</p><p>  “保存”按鈕:類同“新書入庫(kù)窗口w_newbook”</p><p> ?。?)注銷借閱人窗口 w_delmember</p><p><b>  圖5.6</b></p><p>  功能介紹:刪

114、除借閱人信息</p><p>  操作方法:類同“舊書銷毀窗口 w_delbook”</p><p><b>  代碼分析:</b></p><p>  Open事件:類同“舊書銷毀窗口 w_delbook”</p><p>  “檢索”按鈕:類同“舊書銷毀窗口 w_delbook”</p><p&g

115、t;  “銷毀”按鈕:類同“舊書銷毀窗口 w_delbook”</p><p>  (8) 借書窗口 w_loan</p><p><b>  圖5.7</b></p><p>  功能介紹:借閱圖書,</p><p>  操作方法:輸入“借閱人編號(hào)”與“圖書編號(hào)”后,借閱人姓名與圖書編號(hào)將顯示出來(lái),然后點(diǎn)擊“借閱”按鈕

116、借閱圖書。</p><p><b>  代碼分析:</b></p><p>  Open事件:this.width=1243</p><p>  this.height=1160</p><p>  “借閱人號(hào)”輸入框modified事件:</p><p>  string ls_memberid

117、,ls_membername</p><p>  ls_memberid=trim(this.text)</p><p>  select membername//根據(jù)“借閱人編號(hào)”查詢出“借閱人姓名”</p><p>  into :ls_membername</p><p>  from memberinfo</p><

118、;p>  where memberid=:ls_memberid;</p><p>  if sqlca.sqlcode<>0 then//判斷是否有該“借閱人”</p><p>  messagebox("系統(tǒng)提示","沒(méi)有此借閱人信息!")</p><p>  sle_memberid.setfocus(

119、)//“借閱人編號(hào)”輸入框獲得焦點(diǎn)</p><p><b>  return</b></p><p><b>  else </b></p><p>  sle_bookid.setfocus()//“圖書編號(hào)”輸入框獲得焦點(diǎn)</p><p>  sle_membername.text=ls_mem

120、bername//顯示“”借閱人姓名</p><p><b>  end if</b></p><p>  “圖書編號(hào)”輸入框modified事件:</p><p>  string ls_bookid,ls_title</p><p>  ls_bookid=trim(this.text)</p><

121、;p>  select title</p><p>  into :ls_title</p><p>  from bookinfo</p><p>  where bookid=:ls_bookid;</p><p>  if sqlca.sqlcode<>0 then</p><p>  mess

122、agebox("系統(tǒng)提示","沒(méi)有此圖書信息!")</p><p>  sle_bookid.setfocus()</p><p><b>  return</b></p><p><b>  else</b></p><p>  sle_title.text

溫馨提示

  • 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)論