版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
48/48圖書倉(cāng)庫管理系統(tǒng)摘要本系統(tǒng)主要完成對(duì)圖書倉(cāng)庫的庫存管理,包括圖書入庫、出庫、庫存,員工信息,供應(yīng)商信息以與密碼管理等六個(gè)方面。系統(tǒng)可以完成對(duì)各類信息的瀏覽、查詢、添加、刪除、修改、報(bào)表等功能。系統(tǒng)的核心是入庫、庫存和出庫三者之間的聯(lián)系,每一個(gè)表的修改都將聯(lián)動(dòng)的影響其它的表,當(dāng)完成入庫或出庫操作時(shí)系統(tǒng)會(huì)自動(dòng)地完成庫存的修改。查詢功能也是系統(tǒng)的核心之一,在系統(tǒng)中即有單條件查詢和多條件查詢,也有精確查詢和模糊查詢,系統(tǒng)不僅有靜態(tài)的條件查詢,也有動(dòng)態(tài)生成的條件查詢,其目的都是為了方便用戶使用。系統(tǒng)有完整的用戶添加、刪除和密碼修改功能,并具備報(bào)表打印功能。系統(tǒng)采用MicrosoftOffice中的Access2000來設(shè)計(jì)數(shù)據(jù)庫,并使用當(dāng)前優(yōu)秀的開發(fā)工具—Delphi6.0,它有著最為靈活的數(shù)據(jù)庫結(jié)構(gòu),對(duì)數(shù)據(jù)庫應(yīng)用有著良好的支持。論文主要介紹了本課題的開發(fā)背景,所要完成的功能和開發(fā)的過程。重點(diǎn)的說明了系統(tǒng)設(shè)計(jì)的重點(diǎn)、設(shè)計(jì)思想、難點(diǎn)技術(shù)和解決方案。關(guān)鍵字:數(shù)據(jù)庫,SQL語言,Delph6,數(shù)據(jù)庫組件,倉(cāng)庫管理目錄第一章引言……………11.1課題來源……………………11.2開發(fā)工具的選擇……………21.3所做的主要工作……………3第二章數(shù)據(jù)庫概論……………………42.1數(shù)據(jù)庫的發(fā)展………………42.1.1數(shù)據(jù)庫的發(fā)展…………42.1.2數(shù)據(jù)庫階段的特點(diǎn)……………………52.1.3數(shù)據(jù)庫技術(shù)……………62.2數(shù)據(jù)庫理論基礎(chǔ)……………72.2.1數(shù)據(jù)庫模型……………72.2.2數(shù)據(jù)庫體系結(jié)構(gòu)……………………102.2.3數(shù)據(jù)的獨(dú)立性………112.2.4式…………………112.3SQL語言基礎(chǔ)……………132.3.1SQL簡(jiǎn)介……………132.3.2SQL查詢……………132.3.3SQL數(shù)據(jù)更新………14第三章數(shù)據(jù)庫開發(fā)工具……………163.1Delphi6.0簡(jiǎn)介……………163.2Delphi6.0控件……………173.2.1ADO數(shù)據(jù)訪問組件…………………173.2.2數(shù)據(jù)控制類DataControl……………183.2.3數(shù)據(jù)訪問類DataAccess……………183.2.4SQL語言在Delphi中的應(yīng)用………193.3Access簡(jiǎn)介………………21第四章系統(tǒng)總體設(shè)計(jì)………………234.1系統(tǒng)需求分析……………234.2系統(tǒng)概要設(shè)計(jì)……………254.2.1系統(tǒng)結(jié)構(gòu)設(shè)計(jì)………254.2.2數(shù)據(jù)庫設(shè)計(jì)…………27ER圖設(shè)計(jì)……………………27數(shù)據(jù)庫表格設(shè)計(jì)………………294.3系統(tǒng)詳細(xì)設(shè)計(jì)………………34第五章系統(tǒng)應(yīng)用程序設(shè)計(jì)…………375.1系統(tǒng)窗體模塊組成…………375.2數(shù)據(jù)模塊窗體設(shè)置…………385.3主窗體功能模塊的實(shí)現(xiàn)……………………395.4入庫、出庫窗體模塊的實(shí)現(xiàn)………………435.5查詢功能的實(shí)現(xiàn)……………515.6系統(tǒng)登陸窗體模塊的實(shí)現(xiàn)…………………525.7用戶管理功能的實(shí)現(xiàn)………545.7.1用戶管理主窗體……………………545.7.2密碼修改窗體模塊的實(shí)現(xiàn)…………545.7.3用戶注冊(cè)窗體模塊的實(shí)現(xiàn)…………555.7.4用戶注銷窗體模塊的實(shí)現(xiàn)…………57結(jié)束語…………………59致……………………60參考文獻(xiàn)………………61第一章引言§1.1課題來源隨著社會(huì)經(jīng)濟(jì)的迅速發(fā)展和科學(xué)技術(shù)的全面進(jìn)步,計(jì)算機(jī)事業(yè)的飛速發(fā)展,以計(jì)算機(jī)與通信技術(shù)為基礎(chǔ)的信息系統(tǒng)正處于蓬勃發(fā)展的時(shí)期。隨著經(jīng)濟(jì)文化水平的顯著提高,人們對(duì)生活質(zhì)量與工作環(huán)境的要求也越來越高。書籍做為人類的精神食糧,在現(xiàn)代社會(huì)中越來越受到重視,大量的書籍出現(xiàn)在市場(chǎng)上,人們有了各種各樣不同的選擇。與此同時(shí),為了管理大量的圖書,圖書倉(cāng)庫也大量的出現(xiàn),倉(cāng)庫的管理問題也就提上了日程。隨著圖書的大量增加,其管理難度也越來越大,如何優(yōu)化倉(cāng)庫的日常管理也就成為了一個(gè)大眾化的課題。在計(jì)算機(jī)飛速發(fā)展的今天,將計(jì)算機(jī)這一信息處理利器應(yīng)用于倉(cāng)庫的日常管理已是勢(shì)必所然,而且這也將為倉(cāng)庫管理帶來前所未有的改變,它可以帶來意想不到的效益,同時(shí)也會(huì)為企業(yè)的飛速發(fā)展提供無限潛力。采用計(jì)算機(jī)管理信息系統(tǒng)已成為倉(cāng)庫管理科學(xué)化和現(xiàn)代化的重要標(biāo)志,它給企業(yè)管理來了明顯的經(jīng)濟(jì)效益和社會(huì)效益。主要體現(xiàn)在:極大提高了倉(cāng)庫工作人員的工作效率,大大減少了以往入出存流程繁瑣,雜亂,周期長(zhǎng)的弊端?;趥}(cāng)庫管理的全面自動(dòng)化,可以減少入庫管理、出庫管理與庫存管理中的漏洞,可以節(jié)約不少管理開支,增加企業(yè)收入。倉(cāng)庫的管理的操作自動(dòng)化和信息的電子化,全面提高了倉(cāng)庫的管理水平。隨著我國(guó)改革開放的不斷深入,經(jīng)濟(jì)飛速的發(fā)展,企業(yè)要想生存、發(fā)展,要想在激烈的市場(chǎng)競(jìng)爭(zhēng)中立于不敗之地,沒有現(xiàn)代化的管理是萬萬不行的,倉(cāng)庫管理的全面自動(dòng)化、信息化則是其中極其重要的部分。為了加快倉(cāng)庫管理自動(dòng)化的步伐,提高倉(cāng)庫的管理業(yè)務(wù)處理效率,建立倉(cāng)庫管理系統(tǒng)已變得十分心要。入庫、庫存、出庫還是現(xiàn)在企業(yè)圖書倉(cāng)庫管理的常規(guī)基本模式,雖然,最近又出現(xiàn)了很多新的管理模式,如:基于零庫存思想的沃爾瑪特管理方式,但這些新的思想在中國(guó)大部分企業(yè)的管理中還是難以實(shí)現(xiàn)的。所以如何設(shè)計(jì)好倉(cāng)庫管理系統(tǒng),盡可能地減少倉(cāng)庫管理的重復(fù)性和低效性就成為當(dāng)前最為重要的問題。圖書倉(cāng)庫管理的核心是入庫、庫存和出庫之間的聯(lián)系,如何處理好三者之間的關(guān)系是系統(tǒng)最為關(guān)鍵的部分。另外,員工信息和供應(yīng)商信息管理也是倉(cāng)庫管理中一個(gè)必不可少的部分,它提供著與入庫和出庫相關(guān)的地一些信息,使得整個(gè)系統(tǒng)更加完整,更加實(shí)用。通過對(duì)倉(cāng)庫管理日常工作的詳細(xì)調(diào)查,搜集了大量的資料,從系統(tǒng)結(jié)構(gòu)的組織,功能的實(shí)現(xiàn),技術(shù)的要求以與可行性等多方面進(jìn)行考慮,認(rèn)為本課題是一個(gè)適應(yīng)現(xiàn)今圖書倉(cāng)庫管理需求的計(jì)算機(jī)信息管理系統(tǒng),具有一定的實(shí)際開發(fā)價(jià)值和使用價(jià)值?!?.2開發(fā)工具的選擇自Java誕生以來,隨著Internet技術(shù)的普與和應(yīng)用需求的變化,以第四代語言為主的應(yīng)用開發(fā)產(chǎn)品發(fā)生了較大的變化,它們不僅已成為人們開發(fā)應(yīng)用的開發(fā)工具,而且很多產(chǎn)品已發(fā)展成為一種強(qiáng)有力的應(yīng)用開發(fā)環(huán)境。這些新型的開發(fā)工具通常以一種集成軟件包的形式提供給開發(fā)人員,被稱為Studio(工作室)或Suite(程序組)。例如,微軟的VisualStudio6.0,Borland公司的Delphi6.0等數(shù)據(jù)庫輔助開發(fā)工具。現(xiàn)在,市場(chǎng)上可以選購(gòu)的應(yīng)用開發(fā)產(chǎn)品很多,流行的也有數(shù)十種。目前在我國(guó)市場(chǎng)上最為流行、使用最多、最為先進(jìn)的可用作企業(yè)級(jí)開發(fā)工具的產(chǎn)品有:Microsoft公司的VisualBasic6.0版Microsoft公司的VisualC++6.0版Borland公司的Delphi6.0版在目前市場(chǎng)上這些眾多的程序開發(fā)工具中,有些強(qiáng)調(diào)程語言的彈性與執(zhí)行效率;有些則偏重于可視化程序開發(fā)工具所帶來的便利性與效率的得高,各有各的優(yōu)點(diǎn)和特色,也滿足了不同用戶的需求。然而,語言的彈性和工具的便利性是密不可分的,只有便利的工具,卻沒有彈性的語言作支持,許多特殊化的處理動(dòng)作必需要耗費(fèi)數(shù)倍的工夫來處理,使得原來所標(biāo)榜的效率提高的優(yōu)點(diǎn)失去了作用;相反,如果只強(qiáng)調(diào)程語言的彈性,卻沒有便利的工具作配合,會(huì)使一些即使非常簡(jiǎn)單的界面處理動(dòng)作,也會(huì)嚴(yán)重地浪費(fèi)程序設(shè)計(jì)師的寶貴時(shí)間。而Delphi是一個(gè)非常理想選擇。Delphi6是操作系統(tǒng)中快速應(yīng)用開發(fā)環(huán)境的最新版本。它也是當(dāng)前Windows平臺(tái)上第一個(gè)全面支持最新Web服務(wù)的快速開發(fā)工具。無論是企業(yè)級(jí)用戶,還是個(gè)人開發(fā)者,都能夠利用Delphi6輕松、快捷地構(gòu)建新一代電子商務(wù)應(yīng)用。Delphi6是惟一支持所有新出現(xiàn)的工業(yè)標(biāo)準(zhǔn)的RAD環(huán)境,包括XML(擴(kuò)展標(biāo)記語言)/XSL(可擴(kuò)展樣式語言),SOAP(簡(jiǎn)單對(duì)象存取協(xié)議)和WSDL(Web服務(wù)器描述語言)等。Delphi6是可視化的快速應(yīng)用程序開發(fā)語言,它提供了可視化的集成開發(fā)環(huán)境,這一環(huán)境為應(yīng)用程序設(shè)計(jì)人員提供了一系列靈活而先進(jìn)的工具,可以廣泛地用于種類應(yīng)用程序設(shè)計(jì)。在Delphi6的集成開發(fā)環(huán)境中,用戶可以設(shè)計(jì)程序代碼、運(yùn)行程序、進(jìn)行程序錯(cuò)誤的調(diào)試等,可視化的開發(fā)方法降低了應(yīng)用程序開發(fā)的難度。Delphi的基礎(chǔ)編程語言是具有面向?qū)ο筇匦缘腜ascal語言,即ObjectPascal。ObjectPascal具有代碼穩(wěn)定、可讀性好、編譯速度快等優(yōu)點(diǎn),并將面向?qū)ο蟮母拍钜浦驳搅薖ascal語言中,使這種基礎(chǔ)語言有了新的發(fā)展空間。使用Delphi6.0,我們幾乎可以作任何事情,還可以撰寫種各種類型的應(yīng)用程序,動(dòng)態(tài)庫(DLL)、CON、或CORBA對(duì)象,CGI/ISAPI程序,MicrosoftBackOffice應(yīng)用程序。程序的規(guī)模小到簡(jiǎn)單的個(gè)人數(shù)據(jù)庫應(yīng)用,大到復(fù)雜的企業(yè)的多層次分布式系統(tǒng),都可以使用Delphi進(jìn)行開發(fā),其友好的集成開發(fā)界面,可視化的雙向開發(fā)模式,良好的數(shù)據(jù)庫應(yīng)用支持高效的程序開發(fā)和程序運(yùn)行,備受廣大程序開發(fā)人員的好評(píng)。尤其是Delphi對(duì)數(shù)據(jù)庫應(yīng)用的強(qiáng)大支持,大大提高了數(shù)據(jù)庫應(yīng)用軟件開發(fā)的效率,縮短了開發(fā)周期,深受廣大數(shù)據(jù)庫應(yīng)用程序設(shè)計(jì)人員的喜愛。Delphi為數(shù)據(jù)庫應(yīng)用開發(fā)人員提供了豐富的數(shù)據(jù)庫開發(fā)組件,使數(shù)據(jù)庫應(yīng)用開發(fā)功能更強(qiáng)大,控制更靈活,編譯后的程序運(yùn)行速度更快。§1.3本文所做工作引言部分介紹了本系統(tǒng)的課題來源以與對(duì)數(shù)據(jù)庫開發(fā)工具的選擇。第二章介紹了數(shù)據(jù)庫的發(fā)展,關(guān)系數(shù)據(jù)庫,數(shù)據(jù)庫體系結(jié)構(gòu),并系統(tǒng)介紹了SQL語言,為設(shè)計(jì)和理解應(yīng)用程序做了鋪墊。第三章系統(tǒng)介紹了Delphi6.0與其部分控件,SQL語言在Delphi6.0中的應(yīng)用,以與Access等。第四章是本文的主體,按照軟件工程的要求,從需求分析開始,經(jīng)過概要設(shè)計(jì)最后到詳細(xì)設(shè)計(jì),完成對(duì)整個(gè)系統(tǒng)的設(shè)計(jì)。第五章根據(jù)第四章的設(shè)計(jì)結(jié)果利用Access2000和Delphi6.0進(jìn)行了具體的窗體和應(yīng)用程序設(shè)計(jì)??偨Y(jié)部分介紹了設(shè)計(jì)體會(huì)和編程體會(huì),并指出了系統(tǒng)設(shè)計(jì)中的不足和改進(jìn)的方向第二章數(shù)據(jù)庫概論§2.1數(shù)據(jù)庫的發(fā)展數(shù)據(jù)庫處理在信息系統(tǒng)的研究中一直是非常重要的主題,然而,近年來,隨著WorldWideWeb(WWW)的猛增與Internet技術(shù)的迅速發(fā)展,使得數(shù)據(jù)庫技術(shù)之時(shí)成為最熱門技術(shù)之一。數(shù)據(jù)庫技術(shù)能使Internet應(yīng)用超越具有早期應(yīng)用特點(diǎn)的簡(jiǎn)單的發(fā)布。同時(shí),Internet技術(shù)提供了一種向用戶發(fā)布數(shù)據(jù)庫容的標(biāo)準(zhǔn)化的訪問方法。這些技術(shù)沒有脫離經(jīng)典數(shù)據(jù)庫技術(shù)的要求。它們只是加重了數(shù)據(jù)庫技術(shù)的重要性。數(shù)據(jù)庫的設(shè)計(jì)和開發(fā)與包括藝術(shù)有包括工程。理解用戶的需求,然后,把它們轉(zhuǎn)變?yōu)橛行У臄?shù)據(jù)庫設(shè)計(jì)是一個(gè)藝術(shù)過程。把設(shè)計(jì)轉(zhuǎn)變?yōu)閷?shí)際的數(shù)據(jù)庫,并且這些數(shù)據(jù)庫帶有功能完備、高效能的應(yīng)用,是一個(gè)工程過程。數(shù)據(jù)庫的目的是幫助人們跟蹤事務(wù)。經(jīng)典的數(shù)據(jù)庫應(yīng)用涉與諸如訂單、顧客、工作、員工、學(xué)生、之類的項(xiàng),或其它數(shù)據(jù)量較大、需要密起關(guān)注的事務(wù)。最近,由于數(shù)據(jù)庫的普與,數(shù)據(jù)庫技術(shù)已經(jīng)被應(yīng)用到了新的領(lǐng)域,諸如用于Internet的數(shù)據(jù)庫或用于公司聯(lián)網(wǎng)的數(shù)據(jù)庫。數(shù)據(jù)庫也被越來越多地應(yīng)用于生成和維護(hù)多媒體應(yīng)用程序上。計(jì)算機(jī)的數(shù)據(jù)處理應(yīng)用,首先要把大量的信息以數(shù)據(jù)形式存放在存儲(chǔ)器中。存儲(chǔ)器的容量、存儲(chǔ)速率直接影響到數(shù)據(jù)管理技術(shù)的發(fā)展。從1956年生產(chǎn)出第一臺(tái)計(jì)算機(jī)到現(xiàn)在,存儲(chǔ)器的發(fā)展,為數(shù)據(jù)庫技術(shù)提供了良好的物質(zhì)基礎(chǔ)。使用計(jì)算機(jī)以后,數(shù)據(jù)處理的速度和規(guī)模,無論是相對(duì)于手工方式,還是機(jī)械方式,都有無可比擬的優(yōu)勢(shì)。通常在數(shù)據(jù)處理中,計(jì)算是比較簡(jiǎn)單的而數(shù)據(jù)的管理卻比較復(fù)雜。數(shù)據(jù)管理是指數(shù)據(jù)的收集、整理、組織、存儲(chǔ)、維護(hù)、檢索、傳送等操作,這部分操作是數(shù)據(jù)處理業(yè)務(wù)的基本環(huán)節(jié),而且是任何數(shù)據(jù)處理業(yè)務(wù)中必不可少的共有部分。數(shù)據(jù)管理技術(shù)的優(yōu)劣,將直接影響數(shù)據(jù)處理的效率。2.1.1數(shù)據(jù)庫的發(fā)展數(shù)據(jù)管理技術(shù)的發(fā)展,與硬件(主要是外存)、軟件、計(jì)算機(jī)應(yīng)用的圍有密切的聯(lián)系。數(shù)據(jù)管理技術(shù)的發(fā)展經(jīng)過三個(gè)階段:人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫階段。人工管理階段和文件系統(tǒng)階段都有著相當(dāng)多的缺陷,諸如數(shù)據(jù)冗余性,數(shù)據(jù)不一致性以與數(shù)據(jù)聯(lián)系弱等等。也正是由于這些原因,促使人們研究新的數(shù)據(jù)管理技術(shù),從而產(chǎn)生了數(shù)據(jù)庫技術(shù)。20世紀(jì)60年代末發(fā)生的三件大事,層次模型IMS系統(tǒng)的推出、關(guān)于網(wǎng)狀模型DBTG報(bào)告的發(fā)表以與關(guān)于關(guān)系模型論文的連續(xù)發(fā)表標(biāo)志著數(shù)據(jù)管理技術(shù)進(jìn)入數(shù)據(jù)庫階段。進(jìn)入70年代以后,數(shù)據(jù)庫技術(shù)得到迅速發(fā)展,開發(fā)了許多有效的產(chǎn)品并投入運(yùn)行。數(shù)據(jù)庫系統(tǒng)克服了文件系統(tǒng)的缺陷,提供了對(duì)數(shù)據(jù)更高級(jí)更有效的管理。當(dāng)進(jìn)入數(shù)據(jù)庫階段后,隨著數(shù)據(jù)管理規(guī)模一再擴(kuò)大,數(shù)據(jù)量急劇增加,為了提高效率,開始時(shí),人們只是對(duì)文件系統(tǒng)加以擴(kuò)充,在應(yīng)用文件中建立了許多輔助索引,形成倒排文件系統(tǒng)。但這并不能最終解決問題。在20世紀(jì)60年代末,磁盤技術(shù)取得重要進(jìn)展,具有數(shù)百兆容量和快速存取的磁盤陸續(xù)進(jìn)入市場(chǎng),成本也不高,為數(shù)據(jù)庫技術(shù)的產(chǎn)生提供了良好的物質(zhì)條件。2.1.2數(shù)據(jù)庫階段的特點(diǎn)(1)減少數(shù)據(jù)的重復(fù)(Redundancycanbereduced)當(dāng)在一個(gè)非數(shù)據(jù)庫系統(tǒng)當(dāng)中,每一個(gè)應(yīng)用程序都有屬于他們自己的文件,由于無法有系統(tǒng)建立的數(shù)據(jù),因此常常會(huì)造成存儲(chǔ)數(shù)據(jù)的重復(fù)與浪費(fèi)。例如:在一家公司當(dāng)中,人事管理程序與工資管理程序或許都會(huì)使用到職員與部門的信息或文件,而我們可以運(yùn)用數(shù)據(jù)庫的方法,把這兩個(gè)文件整理起來,以減少多余的數(shù)據(jù),過度地占用存儲(chǔ)空間。(2)避免數(shù)據(jù)的不一致(Inconsistencycanavoid)本項(xiàng)的特色,可以說是延伸前項(xiàng)的一個(gè)特點(diǎn),要說明這樣的一個(gè)現(xiàn)象,我們可以從下面這個(gè)實(shí)例來看:若是在同一家公司當(dāng)中,職員甲在策劃部門工作,且職員甲的記錄同時(shí)被存放在數(shù)據(jù)庫的兩個(gè)地方,而數(shù)據(jù)庫管理系統(tǒng)卻沒有對(duì)這樣重要的情況加以控制,當(dāng)其中一條數(shù)據(jù)庫被修改時(shí),便會(huì)造成數(shù)據(jù)的不一致,但是,對(duì)于一個(gè)健全的數(shù)據(jù)庫管理系統(tǒng)而言,將會(huì)對(duì)這樣的情況加以控制,但有時(shí)并不需要刻意消除這種情形,應(yīng)當(dāng)視該數(shù)據(jù)庫的需求與效率來決定。(3)數(shù)據(jù)共享(Datashared)對(duì)于數(shù)據(jù)共享的意義,并不是只有針對(duì)數(shù)據(jù)庫設(shè)計(jì)的應(yīng)用程序,可以使用數(shù)據(jù)庫中的數(shù)據(jù),對(duì)于其他撰寫好的應(yīng)用程序,同樣可以對(duì)一樣數(shù)據(jù)庫當(dāng)中的數(shù)據(jù)進(jìn)行處理,進(jìn)而達(dá)到數(shù)據(jù)共享的目的。(4)強(qiáng)化數(shù)據(jù)的標(biāo)準(zhǔn)化(Standardcanbeenforced)由數(shù)據(jù)庫管理系統(tǒng),對(duì)數(shù)據(jù)做出統(tǒng)籌性的管理,對(duì)于數(shù)據(jù)的格式與一些存儲(chǔ)上的標(biāo)準(zhǔn)進(jìn)行控制,如此一來,對(duì)于不同的環(huán)境的數(shù)據(jù)交換(DataInterchange)上將有很大的幫助,也能提高數(shù)據(jù)處理的效率。(5)實(shí)踐安全性的管理(Securityrestrictioncanbeapplied)通過對(duì)數(shù)據(jù)庫完整的權(quán)限控制,數(shù)據(jù)庫管理者可以確認(rèn)所有可供用戶存取數(shù)據(jù)的合法途徑渠道,并且可以事先對(duì)一些較重要或關(guān)鍵性的數(shù)據(jù)進(jìn)行安全檢查,以確保數(shù)據(jù)存取時(shí),能夠?qū)⑷魏尾划?dāng)損毀的情形降至最低。(6)完整性的維護(hù)(Integritycanbemaintained)所謂完整性的問題,就是要確認(rèn)某條數(shù)據(jù)在數(shù)據(jù)庫當(dāng)中,是正確無誤的。正如(2)所述,若是無法控制數(shù)據(jù)的不一致性,便會(huì)產(chǎn)生完整性不足的問題,所以,我們會(huì)發(fā)現(xiàn),當(dāng)數(shù)據(jù)重復(fù)性高的時(shí)候,數(shù)據(jù)不完整的情形也會(huì)增加,當(dāng)然,若是數(shù)據(jù)庫的功能完整,將會(huì)大提高數(shù)據(jù)完整性,也會(huì)增加數(shù)據(jù)庫的維護(hù)能力與維護(hù)簡(jiǎn)便性。(7)需求沖突會(huì)獲得平衡(Conflictingrequirementscanbebalance)在一個(gè)較大型的企業(yè)當(dāng)中,用戶不同的需求,往往會(huì)造成系統(tǒng)或數(shù)據(jù)庫在設(shè)計(jì)上的困擾,但是一個(gè)合適的數(shù)據(jù)庫系統(tǒng),可以通過數(shù)據(jù)庫管理員的管理,將會(huì)有效地整理各方面的信息,對(duì)于一些較重要的應(yīng)用程序,可以適時(shí)地提供較快速的數(shù)據(jù)存取方法與格式,以平衡多個(gè)用戶在需求上的沖突。上述七個(gè)方面構(gòu)成了數(shù)據(jù)庫系統(tǒng)的主要特征。這個(gè)階段的程序和數(shù)據(jù)間的聯(lián)系可用下圖表示:2.1.3數(shù)據(jù)庫技術(shù)從文件系統(tǒng)發(fā)展到數(shù)據(jù)庫系統(tǒng)是信息處理領(lǐng)域的一個(gè)重大變化。在文件系統(tǒng)階段,人們關(guān)注的中心問題是系統(tǒng)功能的設(shè)計(jì),因而程序設(shè)計(jì)處于主導(dǎo)地位,數(shù)據(jù)只起著服從程序需要的作用。在數(shù)據(jù)庫方式下,信息處理觀念已為新體系所取代,數(shù)據(jù)占據(jù)了中心位置。數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)成為信息系統(tǒng)首先關(guān)心的問題,而利用這些數(shù)據(jù)的應(yīng)用程序設(shè)計(jì)則退居到以既定的數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)的外圍地位。目前世界上已有數(shù)百萬個(gè)數(shù)據(jù)庫系統(tǒng)在運(yùn)行,其應(yīng)用已經(jīng)深入到人類社會(huì)生活的各個(gè)領(lǐng)域,從企業(yè)管理、銀行業(yè)務(wù)、資源分配、經(jīng)濟(jì)預(yù)測(cè)一直到信息檢索、檔案管理、普查統(tǒng)計(jì)等。并在通信網(wǎng)絡(luò)基礎(chǔ)上,建立了許多國(guó)際性的聯(lián)機(jī)檢索系統(tǒng)。我國(guó)20世紀(jì)90年代初在全國(guó)圍裝備了12個(gè)以數(shù)據(jù)庫技術(shù)為基礎(chǔ)的大型計(jì)算機(jī)系統(tǒng),這些系分布在郵電、計(jì)委、銀行、電力、鐵路、氣象、民航、情報(bào)、公安、軍事、航天和財(cái)稅等行業(yè)。數(shù)據(jù)庫技術(shù)還在不斷的發(fā)展,并且不斷地與其它計(jì)算機(jī)技術(shù)相互滲透。數(shù)據(jù)庫技術(shù)與網(wǎng)絡(luò)通信技術(shù)相結(jié)合,產(chǎn)生了分布式數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫技術(shù)與面向?qū)ο蠹夹g(shù)相結(jié)合,產(chǎn)生了面向?qū)ο髷?shù)據(jù)庫系統(tǒng)。在數(shù)據(jù)庫技術(shù)中有四個(gè)名詞,其概念應(yīng)該分清。(1)數(shù)據(jù)庫(database,DB):DB是統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合。DB能為各種用戶共享,具有最小冗余度,數(shù)據(jù)間聯(lián)系密切,而又有較高的數(shù)據(jù)獨(dú)立性。(2)數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,DBMS):DBMS是位于用戶與操作系統(tǒng)之間的一層數(shù)據(jù)管理軟件,為用戶或應(yīng)用程序提供訪問DB的方法,包括DB的建立、查詢、更新與各種數(shù)據(jù)控制。DBMS總是基于某種數(shù)據(jù)模型,可以分為層次型、網(wǎng)狀型、關(guān)系型和面向?qū)ο笮虳BMS。(3)數(shù)據(jù)庫系統(tǒng)(DatabaseSystem,DBS):DBS是實(shí)現(xiàn)有組織地、動(dòng)態(tài)地存儲(chǔ)大量關(guān)聯(lián)數(shù)據(jù),方便多用戶訪問的計(jì)算機(jī)軟件、硬件和數(shù)據(jù)資源組成的系統(tǒng),即采用了數(shù)據(jù)庫技術(shù)的計(jì)算機(jī)系統(tǒng)。(4)數(shù)據(jù)庫技術(shù):這是一門研究數(shù)據(jù)庫的結(jié)構(gòu)、存儲(chǔ)、管理和使用的軟件學(xué)科。數(shù)據(jù)庫技術(shù)是操作系統(tǒng)的文件系統(tǒng)基礎(chǔ)上發(fā)展起來的。而DBMS本身要在操作系統(tǒng)的支持下才能工作。數(shù)據(jù)庫不僅用到數(shù)據(jù)結(jié)構(gòu)的知識(shí),而且豐富了數(shù)據(jù)結(jié)構(gòu)的容。在關(guān)系數(shù)據(jù)庫中要用到集合論、數(shù)理邏輯的理論。因此,數(shù)據(jù)庫技術(shù)是一門綜合性較強(qiáng)的學(xué)科?!?.2數(shù)據(jù)庫理論基礎(chǔ)2.2.1數(shù)據(jù)庫模型從20世紀(jì)50年代中期開始,計(jì)算機(jī)的應(yīng)用由科學(xué)研究部門逐步擴(kuò)展到企業(yè)、行政部門。至60年代,數(shù)據(jù)處理成為計(jì)算機(jī)的主要應(yīng)用。數(shù)據(jù)庫技術(shù)作為數(shù)據(jù)管理技術(shù),是計(jì)算機(jī)軟件領(lǐng)域的一個(gè)重要分支,產(chǎn)生于60年代末?,F(xiàn)已形成相當(dāng)規(guī)模的理論體系和實(shí)用技術(shù)。模型是對(duì)現(xiàn)實(shí)世界的抽象。在數(shù)據(jù)庫技術(shù)中,我們用模型的概念描述數(shù)據(jù)庫的結(jié)構(gòu)與語義,對(duì)現(xiàn)實(shí)世界進(jìn)行抽象,表示實(shí)體類型與實(shí)體間聯(lián)系的模型稱為“數(shù)據(jù)模型”。目前廣泛作用的數(shù)據(jù)模型可分為兩種類型。一種是獨(dú)立于計(jì)算機(jī)系統(tǒng)的模型,完全不涉與信息在系統(tǒng)中的表示,只是用來描述某個(gè)特定組織所關(guān)心的信息結(jié)構(gòu),這類模型稱為“概念數(shù)據(jù)模型”。要領(lǐng)模型用于建立信息世界的數(shù)據(jù)模型,強(qiáng)調(diào)其語義表達(dá)功能,應(yīng)該概念簡(jiǎn)單、清晰,易于用戶理解,它是現(xiàn)實(shí)世界的第一層抽象,是用戶和數(shù)據(jù)庫設(shè)計(jì)人員之間進(jìn)行交流的工具。這一其中著名的模型是“實(shí)體聯(lián)系模型”。另一種數(shù)據(jù)模型是直接面向數(shù)據(jù)庫的邏輯結(jié)構(gòu),它是現(xiàn)實(shí)世界的第二層抽象。這類模型涉與到計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng),又稱為“結(jié)構(gòu)數(shù)據(jù)模型”。例如,層次、網(wǎng)狀、關(guān)系、面向?qū)ο蟮饶P?。這類模型有嚴(yán)格的形式化定義,以便于在計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn)。(1)層次模型。用樹型結(jié)構(gòu)表示實(shí)體類型與實(shí)體間聯(lián)系的數(shù)據(jù)模型。樹的結(jié)點(diǎn)是記錄類型,每個(gè)非根結(jié)點(diǎn)有且只有一個(gè)父結(jié)點(diǎn)。上一層記錄類型和下一層記錄類型間聯(lián)系是1∶N聯(lián)系。層次模型的特點(diǎn)是記錄之間的聯(lián)系通過指針實(shí)現(xiàn),查詢效率較高。但層次模型有兩個(gè)缺點(diǎn):一是只能表示1∶N聯(lián)系,雖然有多種輔助手段實(shí)現(xiàn)了M∶N聯(lián)系,但都較復(fù)雜,用戶不易掌握,二是由于樹型結(jié)構(gòu)層次順序的嚴(yán)格和復(fù)雜,引起數(shù)據(jù)的查詢和更新操作也很復(fù)雜,因此,編寫應(yīng)用程序也很復(fù)雜。(2)網(wǎng)狀模型。用有向圖結(jié)構(gòu)表示實(shí)體類型與實(shí)體間聯(lián)系的數(shù)據(jù)模型。。1969年DBTG報(bào)告提出的數(shù)據(jù)模型是網(wǎng)狀模型的主要代表。有向圖中的結(jié)點(diǎn)是記錄類型,有向邊表示從箭尾一端的記錄類型到箭頭一端的記錄類型間聯(lián)系是1∶N聯(lián)系。網(wǎng)狀模型的特點(diǎn):記錄之間聯(lián)系通過指針實(shí)現(xiàn),M∶N聯(lián)系也容易實(shí)現(xiàn)(每個(gè)M∶N聯(lián)系可拆成兩個(gè)1∶N聯(lián)系),查詢效率較高。網(wǎng)狀模型的缺點(diǎn)是編寫應(yīng)用程序比較復(fù)雜,程序員必須熟悉數(shù)據(jù)庫的邏輯結(jié)構(gòu)。由于層次系統(tǒng)和網(wǎng)狀系統(tǒng)的應(yīng)用程序編制比較復(fù)雜,因此,從20世紀(jì)80年代中期起,其市場(chǎng)已被關(guān)系系統(tǒng)所取代。但是使用這兩種模型建立起的許多數(shù)據(jù)庫仍然在正常運(yùn)轉(zhuǎn),只是在外層加了個(gè)關(guān)系數(shù)據(jù)庫語言的接口。網(wǎng)狀模型有許多成功的產(chǎn)品,20世紀(jì)70年代的產(chǎn)品大部分網(wǎng)狀系統(tǒng),例如,Honeywell公司的IDS/Ⅱ、HP公司的IMAGE/3000、Burroughs公司的DMSⅡ、Umivac公司的DMS1100、Cullinet公司的IDMS、Cimcom公司的TOTAL等(3)關(guān)系模型。關(guān)系模型的主要是用二維表格結(jié)構(gòu)表達(dá)實(shí)體集,用外鍵表示實(shí)體間聯(lián)系。關(guān)系模型是由若干個(gè)關(guān)系模式組成的集合。關(guān)系模式相當(dāng)于前面提到的記錄類型,它的實(shí)例稱為關(guān)系,每個(gè)關(guān)系實(shí)際上是一二維表格。關(guān)系模型和層次、網(wǎng)狀模型的最大判別是用關(guān)鍵碼而不是用指針導(dǎo)航數(shù)據(jù),表格簡(jiǎn)單用戶易懂,編程時(shí)并不涉與存儲(chǔ)結(jié)構(gòu),訪問技術(shù)等細(xì)節(jié)。關(guān)系模型是數(shù)學(xué)化模型。SQL語言是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)化語言,已得到了廣泛的應(yīng)用。20世紀(jì)70年代對(duì)關(guān)系數(shù)據(jù)庫的研究主要集中在理論和實(shí)驗(yàn)系統(tǒng)的開發(fā)方面。80年代初才形成產(chǎn)品,但很快得到廣泛的應(yīng)用和普與,并最終取代了層次、網(wǎng)狀數(shù)據(jù)庫產(chǎn)品?,F(xiàn)在市場(chǎng)上典型的關(guān)系DBMS產(chǎn)品有DB2、ORACLE、SYBASE、INFORMIX和微機(jī)型產(chǎn)品Foxpro、Access等。關(guān)系模型和網(wǎng)狀、層次模型的最大區(qū)別是:關(guān)系模型用表格數(shù)據(jù)而不是通過指針鏈來表示和實(shí)現(xiàn)實(shí)體間聯(lián)系。關(guān)系模型的數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單、易懂。只需用簡(jiǎn)單的查詢語句就可對(duì)數(shù)據(jù)庫進(jìn)行操作。關(guān)系模型是數(shù)學(xué)化的模型,可把表格看成一個(gè)集合,因此集合論、數(shù)理邏輯等知識(shí)可引入到關(guān)系模型中來。關(guān)系模型已是一個(gè)成熟的有前途的模型,已得到廣泛應(yīng)用。(4)面向?qū)ο竽P?。目前,關(guān)系數(shù)據(jù)庫的使用已相當(dāng)普遍,但是,現(xiàn)實(shí)世界中仍然存在著許多含有復(fù)雜數(shù)據(jù)結(jié)構(gòu)的應(yīng)用領(lǐng)域,例如,CAD數(shù)據(jù)、圖形數(shù)據(jù)等,而關(guān)系模型在這方面的處理能力就顯得力不從心。因此,人們需要更高級(jí)的數(shù)據(jù)庫技術(shù)來表達(dá)這類信息。面向?qū)ο蟮母拍钭钤绯霈F(xiàn)在程序設(shè)計(jì)語言中,隨后迅速滲透到計(jì)算機(jī)領(lǐng)域的每一個(gè)分支。面向?qū)ο髷?shù)據(jù)庫是面向?qū)ο蟾拍钆c數(shù)據(jù)庫技術(shù)相結(jié)合的產(chǎn)物。面向?qū)ο竽P湍芡暾孛枋霈F(xiàn)實(shí)世界的數(shù)據(jù)結(jié)構(gòu),具有豐富的表達(dá)能力,但模型相對(duì)較復(fù)雜,涉與的知識(shí)面也廣,因此面向?qū)ο髷?shù)據(jù)庫尚未達(dá)到關(guān)系數(shù)據(jù)庫那樣的普與程度。2.2.2數(shù)據(jù)庫體系結(jié)構(gòu)數(shù)據(jù)庫的體系結(jié)構(gòu)分三級(jí):部級(jí)(internal),概念級(jí)(conceptual)和外部級(jí)(external)。這個(gè)三級(jí)結(jié)構(gòu)有時(shí)也稱為“三級(jí)模式結(jié)構(gòu)”,或“數(shù)據(jù)抽象的三個(gè)級(jí)別”,最早是在1971年通過的DBTG報(bào)告中提出,后來收入在1975年的美國(guó)ANSI/SPARC報(bào)告中。雖然現(xiàn)在DBMS的產(chǎn)品多種多樣,在不同的操作系統(tǒng)支持下工作,但是大多數(shù)系統(tǒng)在總的體系結(jié)構(gòu)上都具有三級(jí)模式的結(jié)構(gòu)特征。從某個(gè)角度看到的數(shù)據(jù)特性稱為“數(shù)據(jù)視圖”(dataview)。外部級(jí)最接近用戶,是單個(gè)用戶所能看到的數(shù)據(jù)特性。單個(gè)用戶使用的數(shù)據(jù)視圖的描述稱為“外模式”。概念級(jí)涉與到所有用戶的數(shù)據(jù)定義,是全局的數(shù)據(jù)視圖。全局?jǐn)?shù)據(jù)視圖的描述稱為“概念模式”。部級(jí)最接近于物理存儲(chǔ)設(shè)備,涉與到實(shí)際數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)。物理存儲(chǔ)數(shù)據(jù)視圖的描述稱為“模式”。數(shù)據(jù)庫的三級(jí)模式結(jié)構(gòu)是數(shù)據(jù)的三個(gè)抽象級(jí)別。它把數(shù)據(jù)的具體組織留給DBMS去做,用戶只要抽象地處理數(shù)據(jù),而不必關(guān)心數(shù)據(jù)在計(jì)算機(jī)中的表示和存儲(chǔ),這樣就減輕了用戶使用系統(tǒng)的負(fù)擔(dān)。三級(jí)結(jié)構(gòu)之間往往差別很大,為了實(shí)現(xiàn)這三個(gè)抽象級(jí)別的聯(lián)系和轉(zhuǎn)換,DBMS在三級(jí)結(jié)構(gòu)之間提供兩個(gè)層次的映象(mappings):外模式/模式映象,模式/模式映象。此處模式是概念模式的簡(jiǎn)稱。2.2.3數(shù)據(jù)的獨(dú)立性由于數(shù)據(jù)庫系統(tǒng)采用三級(jí)模式結(jié)構(gòu),因此系統(tǒng)具有數(shù)據(jù)獨(dú)立性的特點(diǎn)。在數(shù)據(jù)庫技術(shù)中,數(shù)據(jù)獨(dú)立性是指應(yīng)用程序和數(shù)據(jù)之間相互獨(dú)立,不受影響。數(shù)據(jù)獨(dú)立性分成物理數(shù)據(jù)獨(dú)立性和邏輯數(shù)據(jù)獨(dú)立性兩級(jí)。(1)物理數(shù)據(jù)獨(dú)立性如果數(shù)據(jù)庫的模式要進(jìn)行修改,即數(shù)據(jù)庫的存儲(chǔ)設(shè)備和存儲(chǔ)方法有所變化,那么模式/模式映象也要進(jìn)行相當(dāng)?shù)男薷?,使概念模式盡可能保持不變。也就是對(duì)模式的修改盡量不影響概念模式,當(dāng)然,對(duì)于外模式和應(yīng)用程序的影響更小,這樣,我們稱數(shù)據(jù)庫達(dá)到了物理數(shù)據(jù)獨(dú)立性。(2)邏輯數(shù)據(jù)獨(dú)立性如果數(shù)據(jù)庫的概念模式要進(jìn)行修改,譬如增加記錄類型或增加數(shù)據(jù)項(xiàng),那么外模式/模式映象也要進(jìn)行相應(yīng)的修改,使外模式盡可能保持不變。也就是對(duì)概念模式的修改盡量不影響外模式和應(yīng)用程序,這樣,我們稱數(shù)據(jù)庫達(dá)到了邏輯數(shù)據(jù)獨(dú)立性?,F(xiàn)有關(guān)系系統(tǒng)產(chǎn)品均提供了較高的物理獨(dú)立性,而對(duì)邏輯獨(dú)立性的支持尚有欠缺,例如,對(duì)外模式的數(shù)據(jù)更新受到限制等。2.2.4式建立起一個(gè)良好的數(shù)據(jù)指標(biāo)體系,是建立數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫的最重要的一環(huán)。一個(gè)良好的數(shù)據(jù)指標(biāo)體系是建立DB的必要條件,但不是充分條件。我們完全可以認(rèn)為所建指標(biāo)體系中的一個(gè)指標(biāo)類就是關(guān)系數(shù)據(jù)庫中的一個(gè)基本表,而這個(gè)指標(biāo)類下面的一個(gè)個(gè)具體指標(biāo)就是這個(gè)基本表中的一個(gè)字段。但如果直接按照這種方式建庫顯然還不能算最佳。對(duì)于指標(biāo)體系中數(shù)據(jù)的結(jié)構(gòu)在建庫前還必須進(jìn)行規(guī)化的重新組織。在數(shù)據(jù)的規(guī)化表達(dá)中,一般將一組相互關(guān)聯(lián)的數(shù)據(jù)稱為一個(gè)關(guān)系(relation),而在這個(gè)關(guān)系下的每個(gè)數(shù)據(jù)指標(biāo)項(xiàng)則被稱為數(shù)據(jù)元素(dataelement),這種關(guān)系落實(shí)到具體數(shù)據(jù)庫上就是基本表,而數(shù)據(jù)元素就是基本表中的一個(gè)字段(field)。規(guī)化表達(dá)還規(guī)定在每一個(gè)基本表中必須定義一個(gè)數(shù)據(jù)元素為關(guān)鍵字(key),它可以唯一地標(biāo)識(shí)出該表中其它相關(guān)的數(shù)據(jù)元素。在規(guī)化理論中表是二維的,它有如下四個(gè)性質(zhì):在表中的任意一列上,數(shù)據(jù)項(xiàng)應(yīng)屬于同一個(gè)屬性(如圖中每一列都存放著不同合同記錄的同一屬性數(shù)據(jù))。表中所有行都是不一樣的,不允許有重復(fù)組項(xiàng)出現(xiàn)(如圖中每一行都是一個(gè)不同的合同記錄)。在表中,行的順序無關(guān)緊要(如圖中每行存的都是合同記錄,至于先放哪一個(gè)合同都沒關(guān)系)。在表中,列的順序無關(guān)緊要,但不能重復(fù)(如圖中合同號(hào)和合同名誰先誰后都沒關(guān)系,但二者不可重復(fù)或同名)。在對(duì)表的形式進(jìn)行了規(guī)化定義后,數(shù)據(jù)結(jié)構(gòu)還有五種規(guī)化定義,定名為規(guī)化模式,稱為式。在這五種式中,一般只用前三種,對(duì)于常用系統(tǒng)就足夠了。而且這五種式是“向上兼容”的,即滿足第五式的數(shù)據(jù)結(jié)構(gòu)自動(dòng)滿足一、二、三、四式,滿足第四式的數(shù)據(jù)結(jié)構(gòu)自動(dòng)滿足第一、二、三式,……,依此類推。第一式(firstnormalform,簡(jiǎn)稱1stNF)就是指在同一表中沒有重復(fù)項(xiàng)出現(xiàn),如果有則應(yīng)將重復(fù)項(xiàng)去掉。這個(gè)去掉重復(fù)項(xiàng)的過程就稱之為規(guī)化處理。在本文所討論的開發(fā)方法里,1stNF實(shí)際上是沒有什么意義的。因?yàn)槲覀儼匆?guī)化建立的指標(biāo)體系和表的過程都自動(dòng)保證了所有表都滿足1stNF。第二式(secondnormalform,簡(jiǎn)稱2ndNF)是指每個(gè)表必須有一個(gè)(而且僅一個(gè))數(shù)據(jù)元素為主關(guān)鍵字(primarykey),其它數(shù)據(jù)元素與主關(guān)鍵字一一對(duì)應(yīng)。例如,在圖l9.7中如果我們將合同號(hào)定義為主關(guān)鍵字(其它數(shù)據(jù)元素中的記錄數(shù)據(jù)都有可能重名,故不能作為主關(guān)鍵字),故只要知道了一個(gè)合同記錄的合同號(hào),就可以唯一地在同一行中找到該合同的任何一項(xiàng)具體信息。通常我們稱這種關(guān)系為函數(shù)依賴(functionaldepEndence)關(guān)系。即表中其它數(shù)據(jù)元素都依賴于主關(guān)鍵字,或稱該數(shù)據(jù)元素唯一地被主關(guān)鍵字所標(biāo)識(shí)。第三式(thirdnormalform,簡(jiǎn)稱3rdNF)就是指表中的所有數(shù)據(jù)元素不但要能夠唯一地被主關(guān)鍵字所標(biāo)識(shí),而且它們之間還必須相互獨(dú)立,不存在其它的函數(shù)關(guān)系。也就是說對(duì)于一個(gè)滿足了2ndNF的數(shù)據(jù)結(jié)構(gòu)來說,表中有可能存在某些數(shù)據(jù)元素依賴于其它非關(guān)鍵宇數(shù)據(jù)元素的現(xiàn)象,必須加以消除。為防止數(shù)據(jù)庫出現(xiàn)更新異常、插入異常、刪除異常、數(shù)據(jù)冗余太大等現(xiàn)象,關(guān)系型數(shù)據(jù)庫要盡量按關(guān)系規(guī)化要求進(jìn)行數(shù)據(jù)庫設(shè)計(jì)?!?.3SQL語言基礎(chǔ)2.3.1SQL簡(jiǎn)介用戶對(duì)數(shù)據(jù)庫的使用,是通過數(shù)據(jù)庫管理系統(tǒng)提供的語言來實(shí)現(xiàn)的。不同的數(shù)據(jù)庫管理系統(tǒng)提供不同的數(shù)據(jù)庫語言。關(guān)系數(shù)據(jù)庫管理系統(tǒng)幾乎都提供關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言——SQL。SQL的全稱是StructuredQueryLanguage,即結(jié)構(gòu)化查詢語言。SQL語句可以從關(guān)系數(shù)據(jù)庫中獲得數(shù)據(jù),也可以建立數(shù)據(jù)庫、增加數(shù)據(jù)、修改數(shù)據(jù)。1986年ANSI采用SQL語言作為關(guān)系數(shù)據(jù)庫系統(tǒng)的標(biāo)準(zhǔn)語言,后被國(guó)際化標(biāo)準(zhǔn)組織(ISO)采納為國(guó)際標(biāo)準(zhǔn)。SQL語言使用方便、功能豐富、簡(jiǎn)潔易學(xué),是操作數(shù)據(jù)庫的工業(yè)標(biāo)準(zhǔn)語言,得到廣泛地應(yīng)用。例如關(guān)系數(shù)據(jù)庫產(chǎn)品DB2、ORACLE等都實(shí)現(xiàn)了SQL語言。同時(shí),其它數(shù)據(jù)庫產(chǎn)品廠家也紛紛推出各自的支持SQL的軟件或者與SQL的接口軟件。這樣SQL語言很快被整個(gè)計(jì)算機(jī)界認(rèn)可。SQL語言是一種非過程化語言,它一次處理一個(gè)記錄集合,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL語言允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作。SQL語言不要求用戶指定數(shù)據(jù)的存取方法,而是使用查詢優(yōu)化器,由系統(tǒng)決定對(duì)指定數(shù)據(jù)存取的最快速手段。當(dāng)設(shè)計(jì)者在關(guān)系表上定義了索引時(shí),系統(tǒng)會(huì)自動(dòng)利用索引進(jìn)行快速檢索,用戶不需知道表上是否有索引或者有什么類型的索引等細(xì)節(jié)。SQL語言可以完成許多功能,例如:●查詢數(shù)據(jù)●在數(shù)據(jù)庫表格中插入、修改和刪除記錄●建立、修改和刪除數(shù)據(jù)對(duì)象●控制對(duì)數(shù)據(jù)和數(shù)據(jù)對(duì)象的存取●確保數(shù)據(jù)庫的一致性和完整性等2.3.2SQL查詢數(shù)據(jù)查詢是關(guān)系運(yùn)算理論在SQL語言中的主要體現(xiàn),SELECT語句是SQL查詢的基本語句,當(dāng)我們?cè)趯?duì)一個(gè)數(shù)據(jù)庫進(jìn)各種各樣的操作時(shí),使用的最多的就是數(shù)據(jù)查詢,在以SQL為基礎(chǔ)的關(guān)系數(shù)據(jù)庫中,使用的最多的就是SELECT查詢語句。SELECT語句的完整句法如下:SELECT目標(biāo)表的列名或列表達(dá)式序列FROM基本表和(或)視圖序列[WHERE行條件表達(dá)式][GROUPBY列名序列][HAVING組條件表達(dá)式][ORDERBY列名[ASC│DEAC]…]我在SELECT語句中還使用了大量的保留字和通配符以進(jìn)行各種各樣的條件查詢。在系統(tǒng)中有大量的查詢按鈕,其使用了大量的查詢語句,而且這些查詢語句大部分使用的是模糊查詢,所以大量的使用了模式匹配符LIKE(判斷值是否與指定的字符通配格式相符)。在包含LIKE的查詢語句中可以使用兩個(gè)通配符:%(百分號(hào)):與零個(gè)或多個(gè)字符組成的字符串匹配;_(下劃線):與單個(gè)字符匹配。系統(tǒng)中的條件判斷往往包含多個(gè)條件,這時(shí)就需要使用邏輯運(yùn)算符NOT、AND、OR(用于多條件的邏輯連接),謂詞ALL以與保留字DISTINCT等等。做為SELECT語句還有很多的使用方法,這里就不再敘述。2.3.3SQL數(shù)據(jù)更新使用數(shù)據(jù)庫的目的是為了有效地管理數(shù)據(jù),而數(shù)據(jù)的插入、刪除和修改則是必不可少的一個(gè)功能。在本系統(tǒng)中就大量地使用了數(shù)據(jù)插入、刪除和修改這三種操作,現(xiàn)做一個(gè)簡(jiǎn)單地介紹。●數(shù)據(jù)插入往數(shù)據(jù)庫的基本表中插入數(shù)據(jù)使用的是INSERT語句,其方式有兩種:一種是元組值的插入,另一種是查詢結(jié)果的插入。在本系統(tǒng)中使用的是前一種方式,其句法如下:INSERTINTO基本表名(列表名)VALUES(元組值)●數(shù)據(jù)刪除往數(shù)據(jù)庫的基本表中刪除數(shù)據(jù)使用的是DELETE語句,其句法如下:DELETEFROM基本表名[WHERE條件表達(dá)式]在些作一點(diǎn)說明,刪除語句實(shí)際上是“SELECT*FROM基本表名[WHERE條件表達(dá)式]”和DELETE操作的結(jié)合,每找到一個(gè)元組,就把它刪除。此外,DELETE語句只能從一個(gè)基本表中刪除元組,WHERE子句中條件可以嵌套,也可以是來自幾個(gè)基本表的復(fù)合條件?!駭?shù)據(jù)修改當(dāng)需要修改基本表中元組的某些列值時(shí),可以用UPDATE語句實(shí)現(xiàn),其句法如下:UPDATE基本表名SET列名=值表達(dá)式[,列名=值表達(dá)式…][WHERE條件表達(dá)式]在Delphi中使用SQL語句是很方便的,一般來說,都是通過TQuery組件來使用SQL語言的。有一點(diǎn)要進(jìn)行說明,雖然通過TQuery組件來使用SQL語言很方便,但考慮到自己對(duì)不同組件的理解程度、個(gè)人習(xí)慣以與其它各個(gè)方面,在本系統(tǒng)中我采用的是ADO組件來對(duì)數(shù)據(jù)庫進(jìn)行操作。最簡(jiǎn)單的方法比如在TADOQuery組件的SQL屬性中就可以鍵入SQL語句,至于詳細(xì)的使用方法在后面進(jìn)行介紹。第三章數(shù)據(jù)庫開發(fā)工具§3.1Delphi6.0簡(jiǎn)介Delphi類可以粗略地分成兩部分:一部分是組件類,這些組件類通常以某種方式出現(xiàn)在組件面板上,當(dāng)用戶從組件面板上點(diǎn)取一個(gè)類的圖標(biāo)后,在程序中就自動(dòng)生成了該類的對(duì)象(非可視組件除外);另一部分是功能類,這此功能類的對(duì)象通常出現(xiàn)在程序代碼中,起著不可代替的作用,但是這些功能類在組件面板上是找不到的。在Delphi中,每一個(gè)類的祖先都是Tobject類,整個(gè)類的層次結(jié)構(gòu)就像一棵倒掛的樹,在最頂層的樹根即為Tobject類。這樣,按照面向?qū)ο缶幊痰幕舅枷?,就使得用戶可用Tobject類這個(gè)類型代替任何其它類的數(shù)據(jù)類型。實(shí)際上在Delphi的類庫中,Tobject類派生出了為數(shù)相當(dāng)眾多的子類,它們形成了一個(gè)龐大的體系,通常情況下,如果不自行開發(fā)組件,就不必了解整個(gè)類的體系結(jié)構(gòu),只用到類層次樹的葉結(jié)點(diǎn)就足夠了。凡是做過程序開發(fā)的人都知道從來沒有單純的數(shù)據(jù)應(yīng)用程序,也就是說,數(shù)據(jù)庫應(yīng)用程序必須和用戶界面(可以是圖形界面,也可以是命令接口)元素相結(jié)合,只講界面或只講數(shù)據(jù)庫本身都構(gòu)不成數(shù)據(jù)庫應(yīng)用程序,因而用Delphi6.0開發(fā)數(shù)據(jù)庫應(yīng)用程序就隱含著界面開發(fā)。Delphi6中的VCL組件可用圖3-1來說明。組件在Delphi程序的開發(fā)中是最顯眼的角色。大家知道,在編寫程序時(shí)一般都開始于在組件面板上選擇組件并定義組件間的相互作用。但也有一些組件不在組件面板上,例如Tform和Tapplication(典型的非可視組件)。組件是Tcomponents派生出來的子類,可以流的形式存放在DFM文件中,具有事件和Publish屬性。窗口組件類是窗口化的可視化組件類,在Delphi的類庫中占有最大的份額。在實(shí)際編程中,窗口組件類的對(duì)象都有句柄,可以接受輸入焦點(diǎn)和包含其它組件。圖形組件與窗口組件并列,是另一大類組件。圖形組件不是基于窗口的,因而不能有窗口句柄,不能接受輸入焦點(diǎn)和包含其它組件。從圖8-43中可以看出,圖形組件的基類是TgraphicControl,在實(shí)際編程中,它們必須寄生于它們的宿主——窗口組件類的對(duì)象,由它們的擁有者負(fù)責(zé)其顯示,而且它們還能觸發(fā)一些和鼠標(biāo)活動(dòng)相關(guān)的事件。圖形控件最典型的例子是Tlabel和TspeedButton。由此可以看出圖形組件的功能很弱,有讀者會(huì)問圖形組件的用處何在呢?其實(shí)使用圖形組件的最大好處在于節(jié)省資源,正是因?yàn)樗鼈兊墓δ茌^弱,所以使用的系統(tǒng)資源就要少。在一個(gè)應(yīng)用程序中,如果能在不影響其功能的前提下合理大量地使用圖形組件,將會(huì)大減少程序?qū)ο到y(tǒng)資源的消耗。非可視組件是與可視組件相并列的另一類組件,非可視組件在程序運(yùn)行中是不可見的(除各種對(duì)話框組件之外,事實(shí)上有人認(rèn)為對(duì)話框組件不能歸入非可視組件,應(yīng)該是另一種介于可視與非可視之間的組件)?!?.2Delphi6.0控件用Delphi6開發(fā)數(shù)據(jù)庫應(yīng)用,重點(diǎn)是和各種數(shù)據(jù)庫組件打交道,當(dāng)然也要使用其它的一些組件,現(xiàn)在就我在系統(tǒng)設(shè)計(jì)中所使用的重要組件給與簡(jiǎn)單介紹。3.2.1ADO數(shù)據(jù)訪問組件ADO數(shù)據(jù)對(duì)象(ActiveDataObjects)實(shí)際是一種提供訪問各種數(shù)據(jù)類型的機(jī)制。ADO設(shè)計(jì)為一種極簡(jiǎn)單的格式,通過ODBC的方法同數(shù)據(jù)庫接口中,可以使用任何一種ODBC數(shù)據(jù)源,即不止適合于SQLServer、Oracle、Access等數(shù)據(jù)庫應(yīng)用程序,也適合于Excel表格、文本文件、圖形文件和無格式的數(shù)據(jù)文件。ADO是基于OLE-DB之上的技術(shù),因此ADO通過其部的屬性和方法提供統(tǒng)一的數(shù)據(jù)訪問接口方法。ADO使您的客戶端應(yīng)用程序能夠通過OLEDB提供訪問和操作在數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)。ADO支持用于建立C/S和Web的應(yīng)用程序的主要功能。其主要優(yōu)點(diǎn)是易于使用、高速度、低存支出和占用磁盤空間較少。ADO同時(shí)具有遠(yuǎn)程數(shù)據(jù)服務(wù)(RDS)功能,通過RDS可以在一次往返過程中實(shí)現(xiàn)將數(shù)據(jù)從服務(wù)器移動(dòng)到客戶端應(yīng)用程序和Web頁、在客戶端對(duì)數(shù)據(jù)進(jìn)行處然后將更新結(jié)果返回服務(wù)器的操作。Delphi6.0繼續(xù)對(duì)Microsoft的ADO訪問能力的支持。這種能力是通過一組新組件實(shí)現(xiàn)的,這些組件是在企業(yè)版的ADO組件頁中,在組件面版的ADO頁上可以找到這些組件。利用在前面章節(jié)提到的TdataSet抽象類,ADO組件可以不通過BDE而直接實(shí)現(xiàn)ADO連接。這意味著只需要很少的代碼就可以實(shí)現(xiàn)該連接并且性能得到提高。利用ADO數(shù)據(jù)訪問組件,可以只使用ADO結(jié)構(gòu)與數(shù)據(jù)庫取得聯(lián)系并對(duì)其中的數(shù)據(jù)進(jìn)行操作,而在這些過程中完全不需要使用BDE。大多數(shù)的ADO連接和數(shù)據(jù)集組件都是與基于BDE的連接和數(shù)據(jù)集組件相類似的。TADOConnection組件與基于BDE的應(yīng)用程序中的Tdatabase組件類似。TADOTable與Ttable,TADOQuery與Tquery,以與TADOStoreProc和TstoredProc之間都具有這種類似的對(duì)應(yīng)關(guān)系。使用這些ADO組件的方式與我們常使用的數(shù)據(jù)訪問組件(基于BDE)都有許多一樣之處。TTADODataSet沒有直接的BDE對(duì)應(yīng)組件,但它提供了許多與Ttable和Tquery一樣的功能。同樣,TADOCommand也沒有相對(duì)應(yīng)的BDE組件,它是在Delphi/ADO環(huán)境中完成特定功能的組件。Delphi6.0通過ADO數(shù)據(jù)集訪問組件,可以不借助BDE數(shù)據(jù)引擎而是通過微軟的OLEDB來訪問更為廣泛的數(shù)據(jù)庫中的數(shù)據(jù)。ADO數(shù)據(jù)集訪問組件與常用的數(shù)據(jù)訪問組件是并列的關(guān)系。在系統(tǒng)中我主要使用的是ADOTablet和ADOQuery兩個(gè)組件。3.2.2數(shù)據(jù)控制類DataControl數(shù)據(jù)控制類負(fù)責(zé)數(shù)據(jù)庫數(shù)據(jù)的顯示,并把用戶對(duì)數(shù)據(jù)的修改傳回。這里的絕大多數(shù)組件,如DBText,DBEdit,DBMemo,DBImage,DBListBox,DBComboBox,DBCheckBox,DBRadioGroup,DBLookupListBox,DBLookupCombox,DBCtrGrid的功能和對(duì)應(yīng)的非數(shù)據(jù)感知組件一樣,如TEdit框,TRadioGroups單選按鈕組等,只不過在顯示數(shù)據(jù)庫數(shù)據(jù)時(shí)要用而已。在系統(tǒng)中主要使用數(shù)據(jù)網(wǎng)格控件DBGrid和數(shù)據(jù)庫導(dǎo)航器控件DBNavigator。3.2.3數(shù)據(jù)訪問類DataAccess數(shù)據(jù)庫應(yīng)用系統(tǒng)中數(shù)據(jù)訪問是一個(gè)首要問題,包括單用戶和C/S系統(tǒng),都必須聯(lián)系一些數(shù)據(jù)庫和數(shù)據(jù)表文件。Delphi6提供了專門用于數(shù)據(jù)訪問的基類控件。主要包括數(shù)據(jù)源控件DataSource、客戶數(shù)據(jù)集控件ClientDataSet、數(shù)據(jù)集提供器控件DataSetProvider等等。Tdatabase:當(dāng)一個(gè)基于BDE的數(shù)據(jù)庫應(yīng)用程序需要一個(gè)永久數(shù)據(jù)庫連接時(shí),需要定制向一個(gè)數(shù)據(jù)庫服務(wù)器的連接時(shí),需要事務(wù)控制和特殊的數(shù)據(jù)庫別名時(shí)就得用到Tdatabase對(duì)象。特別是當(dāng)連接到一個(gè)遠(yuǎn)程的SQL數(shù)據(jù)庫服務(wù)器時(shí),如果要利用BDE進(jìn)行數(shù)據(jù)庫事務(wù)處理,那么,TDatabase對(duì)象的威力就體現(xiàn)出來了。在一個(gè)應(yīng)用程序中為每一個(gè)數(shù)據(jù)庫連接顯示的聲明Tdatabase對(duì)象要根據(jù)需要而定,不是必需的。對(duì)一個(gè)數(shù)據(jù)庫連接,如果沒有顯示的聲明并實(shí)例化TDatabase對(duì)象,系統(tǒng)就會(huì)產(chǎn)生一個(gè)帶有默認(rèn)屬性的TDatabase對(duì)象。TdataSource對(duì)象用于在DataSet對(duì)象(包括Tquery,TstoredProc,Ttable等)和數(shù)據(jù)感知組件之間提供一個(gè)連接的紐帶,以便在窗體上顯示數(shù)據(jù)庫中的數(shù)據(jù),在數(shù)據(jù)庫中導(dǎo)航定位與編輯數(shù)據(jù)集中的數(shù)據(jù)。如果一個(gè)DataSet對(duì)象中的數(shù)據(jù)想在數(shù)據(jù)感知組件中顯示和修改,它就必須和TdataSource對(duì)象相聯(lián)系。同樣,一個(gè)數(shù)據(jù)感知組件如果想和數(shù)據(jù)源相聯(lián)系以便顯示和操縱數(shù)據(jù),就必須以TDataSource對(duì)象為中介。用Delphi6作數(shù)據(jù)庫應(yīng)用開發(fā)概括來說如下:先利用數(shù)據(jù)存取組件和實(shí)際的數(shù)據(jù)庫建立連接,并用Tsession對(duì)象和Tdatabase對(duì)象管理這些連接。然后以Tdatasource對(duì)象為中介,用數(shù)據(jù)感知組件向用戶顯示數(shù)據(jù)庫的容并接受用戶的查詢和修改等操作。3.2.4SQL語言在Delphi中的應(yīng)用在Delphi中使用SQL語言非常方便,一般來說,都是通過Tquery組件來使用SQL語言的??梢栽赥Query組件的SQL屬性中設(shè)置SQL語句。設(shè)計(jì)程序時(shí),在該組件的屬性對(duì)話框中選擇SQL屬性,單擊帶省略號(hào)的按鈕,就可以打開StringListEditor對(duì)話框,然后我們就可以在對(duì)話框中添加SQL語句。還可以使用Delphi的SQLBuilder來自動(dòng)生成SQL語句,這樣可以避免手工編寫SQL而可能造成的語法錯(cuò)誤。靜態(tài)SQL語句在程序設(shè)計(jì)時(shí)便已固定下來,它不包含任何參數(shù)和變量。動(dòng)態(tài)SQL語句,也被稱作參數(shù)化的語句,在其中間包含著表示字段名或表名的參數(shù),例如下面的語句是一條動(dòng)態(tài)SQL語句:Select*FromStudentsWhereStudentCode=:StudentCode;其中的變量StudentCode便是一個(gè)參數(shù)變量,它由一個(gè)冒號(hào)引導(dǎo),在程序運(yùn)行過程中,必須要為該參數(shù)賦值,該條SQL語句才能正確執(zhí)行,每次運(yùn)行應(yīng)用程序時(shí)可以為該參數(shù)變量賦予不同的值。為參數(shù)賦值有三種方法:①根據(jù)參數(shù)在SQL語句中出現(xiàn)的順序,設(shè)置TQuery部件的Params屬性值為參數(shù)賦值。②直接根據(jù)SQL語句中各參數(shù)的名字,調(diào)用ParamByName方法來為各參數(shù)賦值。③將TQuery部件的DataSource屬性設(shè)置為另一個(gè)數(shù)據(jù)源,這樣將另一個(gè)數(shù)據(jù)源中與當(dāng)前TQuery部件的SQL語句中的參數(shù)名相匹配的字段值賦給其對(duì)應(yīng)的參數(shù)。利用這種方法也能實(shí)現(xiàn)所謂的連接查詢,創(chuàng)建主要—明細(xì)型數(shù)據(jù)庫應(yīng)用。在程序運(yùn)行過程中,要想設(shè)置TQuery部件的SQL屬性,必須首先調(diào)用Close方法,關(guān)閉TQuery部件,然后再調(diào)用Clear方法清除SQL屬性中現(xiàn)存的SQL命令語句,最后再調(diào)用Add方法為SQL屬性設(shè)置新的SQL命令語句。例如:Query1.Close{關(guān)閉Query1)Query1.SQL.Clear{清除SQL屬性中的SQL命令語句}Query1.SQL.Add(‘Select*FromStudents‘);Query1.SQL.Add(‘WhereName="Lucy"‘);在為TQuery部件設(shè)置SQL屬性時(shí)調(diào)用Close方法總是很安全的,如果TQuery部件已經(jīng)被關(guān)閉了,調(diào)用Close方法時(shí)不會(huì)產(chǎn)生任何影響。在應(yīng)用程序中為SQL屬性設(shè)置新的SQL命令語句時(shí),必須要調(diào)用Clear方法以清除SQL屬性中現(xiàn)存的SQL命令語句,如果不調(diào)用Clear方法,便調(diào)用Add方法向SQL屬性中設(shè)置SQL命令語句,那么新設(shè)置的SQL命令語句會(huì)追加在現(xiàn)存SQL命令語句后面,在程序運(yùn)行時(shí)常常會(huì)出現(xiàn)出乎意料的查詢結(jié)果甚至程序無法運(yùn)行下去。在這里要特別注意的,一般情況下TQuery部件的SQL屬性只能包含一條完整的SQL語句,它不允許被設(shè)置成多條SQL語句。當(dāng)然有些數(shù)據(jù)庫服務(wù)器也支持在TQuery部件的SQL屬性中設(shè)置多條SQL語句,只要數(shù)據(jù)庫服務(wù)器允許這樣,我們?cè)诰幊虝r(shí)可以為SQL屬性設(shè)置多條SQL語句。在為TQuery部件設(shè)置完SQL屬性的屬性值之后,也即編寫好適當(dāng)?shù)腟QL程序之后,可以有多種方式來執(zhí)行SQL程序。在設(shè)計(jì)過程中,設(shè)置完TQuery部件的SQL屬性之后將其Active屬性的值置為True,這樣便可以執(zhí)行SQL屬性中的SQL程序,如果應(yīng)用中有與TQuery部件相連的數(shù)據(jù)瀏覽部件(如TDDGridTDBEdit等)那么在這些數(shù)據(jù)瀏覽部件中會(huì)顯示SQL程序的執(zhí)行結(jié)果。在應(yīng)用程序運(yùn)行過程中,通過程序調(diào)用TQuery部件的Open方法或ExecSQL方法可以執(zhí)行其SQL屬性中的SQL程序。Open方法和ExecSQL方法是不一樣的。Open方法只能用來執(zhí)行SQL語言的查詢語句(Select命令),并返回一個(gè)查詢結(jié)果集,而ExecSQL方法還可以用來執(zhí)行其它常用的SQL語句(如INSERT,UPDATE,DELETE等命令),例如:Query1.Open(這樣會(huì)返回一個(gè)查詢結(jié)果集)如果調(diào)用Open方法,而沒有查詢結(jié)果時(shí),會(huì)出錯(cuò)。此時(shí)應(yīng)該調(diào)用ExecSQL方法來代替Open方法。如:Query1.ExecSQL(沒有返回結(jié)果)當(dāng)然在設(shè)計(jì)應(yīng)用程序時(shí),程序設(shè)計(jì)人員是無法確定TQuery部件中的SQL語句是否會(huì)返回一個(gè)查詢結(jié)果的。對(duì)于這種情況應(yīng)當(dāng)用Try…Except模塊來設(shè)計(jì)程序。在Try部分調(diào)用Open方法,而在Except部分調(diào)用ExceSQL方法,這樣才能保證程序的正確運(yùn)行。Delphi中用ADOQuery來使用SQL語句同樣十分方便。在ADOQuery組件中首先通過ConnectionString屬性值來聯(lián)接數(shù)據(jù)源,然后就通過雙擊SQL…屬性值來寫入SQL語句。在Delphi中調(diào)用數(shù)據(jù)庫,就可以調(diào)用ADOQuery組件,通過修改其中的SQL…屬性中的SQL語句來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的各項(xiàng)操作。值得注意的是,ADOQuery組件只有在激活的情況下才可以被正確地使用,這樣就提出了一個(gè)問題,也就是說,在每次修改ADOQuery組件的SQL…屬性時(shí)都必須先行進(jìn)行關(guān)閉,待清除掉SQL…中所有的SQL語句后才可以添加新的SQL語句。而且,在每一次修改完成以后,還應(yīng)該記得重新將ADOQuery激活。其它的使用方法與TTQuery有許多的相似之處?!?.3Access簡(jiǎn)介建立一個(gè)數(shù)據(jù)庫我們有多種選擇,現(xiàn)在市場(chǎng)上有各種各樣的數(shù)據(jù)庫,而且每一種數(shù)據(jù)庫都有其自身的特點(diǎn),不能說哪一種更好,只能在其中尋找一種能更好地適應(yīng)系統(tǒng)需求、更好地滿足用戶的要求以與適應(yīng)開發(fā)人員的習(xí)慣。在本系統(tǒng)中,做為圖書倉(cāng)庫管理系統(tǒng)是一個(gè)比較小的應(yīng)用系統(tǒng),它所產(chǎn)生和處理的數(shù)據(jù)量也比較小。因此,沒有必要使用像SQLServer和Oracle這樣的大型數(shù)據(jù)庫。我首先想到的數(shù)據(jù)庫是Borland公司的Paradox數(shù)據(jù)庫。另外,MicrosoftOffice中的Access數(shù)據(jù)庫在計(jì)算機(jī)上的應(yīng)用比較普與,是開發(fā)小型數(shù)據(jù)庫系統(tǒng)的比較理想的選擇,所以,在本系統(tǒng)中我選擇了Access數(shù)據(jù)庫。Access做為一個(gè)數(shù)據(jù)庫管理系統(tǒng),它被集成在MicrosoftOffice中。Access數(shù)據(jù)庫處理的基本結(jié)構(gòu),采取關(guān)系型數(shù)據(jù)庫模式。與其他的數(shù)據(jù)庫系統(tǒng)相比,Access更加簡(jiǎn)單易學(xué),一個(gè)普通的計(jì)算機(jī)用戶可以很快地掌握它。Access2000的功能十分強(qiáng)大,利用它可以方便地實(shí)現(xiàn)對(duì)信息保存、維護(hù)、查詢、統(tǒng)計(jì)、打印、交流、發(fā)布,而且它可以十分方便地與Office其他組件交流數(shù)據(jù),這些功能對(duì)一個(gè)一般用戶而言已經(jīng)足夠了第四章系統(tǒng)總體設(shè)計(jì)軟件系統(tǒng)的總體設(shè)計(jì)大約要經(jīng)歷可行性分析和項(xiàng)目開發(fā)計(jì)劃,需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼,測(cè)試以與維護(hù)等七個(gè)階段??尚行苑治龊晚?xiàng)目開發(fā)計(jì)劃在前面已經(jīng)敘述,下面所要做的是進(jìn)行軟件需求分析,概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。編碼過程將在下一節(jié)論述,而測(cè)試和維護(hù)過程不在本文敘與?!?.1系統(tǒng)需求分析在經(jīng)過前一階段的分析之后,我確定了我的開發(fā)課題為圖書倉(cāng)庫管理。現(xiàn)在所要做的是要準(zhǔn)確定義系統(tǒng)必須做什么以與系統(tǒng)必須具備的功能。軟件需求分析中我采用結(jié)構(gòu)化分析方法(StructuredAnalysis,簡(jiǎn)稱SA),SA是面向數(shù)據(jù)流進(jìn)行需求分析的方法,像所有的軟件分析方法(如面向?qū)ο蠓治龇椒?、IDEF方法等等)一樣,SA也是一種建?;顒?dòng),它使用簡(jiǎn)單易讀的符號(hào),根據(jù)軟件部數(shù)據(jù)傳遞、變換的關(guān)系,自頂向下逐層分解,描繪滿足功能要求的軟件模型。在系統(tǒng)中我采用數(shù)據(jù)流圖(DFD)這種半形式化的描述方式表達(dá)需求。它是一種功能模型,以圖形的方式描繪數(shù)據(jù)在系統(tǒng)中流動(dòng)和處理的過程,只反映系統(tǒng)必須完成的邏輯功能。它有四種基本圖形符號(hào):◆→:箭頭,表示數(shù)據(jù)流;◆〇:圓或橢圓,表示加工;◆═:雙杠,表示數(shù)據(jù)存儲(chǔ);◆□:方框,表示數(shù)據(jù)的源點(diǎn)或終點(diǎn)。為了表達(dá)較為復(fù)雜問題的數(shù)據(jù)處理過程,用一數(shù)據(jù)流圖是不夠的,要按照問題的層次結(jié)構(gòu)進(jìn)行逐步分解,并以一套分層的數(shù)據(jù)流圖反映這種結(jié)構(gòu)關(guān)系。在這里我一共使用了三層數(shù)據(jù)流圖,即頂層圖,0層圖和1層圖(也是底層圖)。在多層數(shù)據(jù)流圖中,頂層流圖僅包含一個(gè)加工,它代表被開發(fā)系統(tǒng),它的輸入流是該系統(tǒng)的輸入數(shù)據(jù)了,輸出流是該系統(tǒng)的輸出數(shù)據(jù);底層流圖是指其加工不需要再做分解的數(shù)據(jù)流圖,中間層流圖表示對(duì)其上層父圖的細(xì)化,它的每一步加工可能繼續(xù)細(xì)化成子圖。經(jīng)過對(duì)系統(tǒng)的分析首先得到系統(tǒng)的頂層DFD,如下:一步細(xì)化得到系統(tǒng)的0層DFD,如下:再進(jìn)一步細(xì)化每一個(gè)數(shù)據(jù)加工功能,得到系統(tǒng)的1層DFD圖。在這里只給出有關(guān)入庫管理和出庫管理的1層數(shù)據(jù)流圖,它們是系統(tǒng)的關(guān)鍵部分,也是主要的部分。通過以上對(duì)數(shù)據(jù)流圖的分析之后,我們已大體地了解了系統(tǒng)的功能和目標(biāo),接下來所要做的就是系統(tǒng)功能模塊的劃分和數(shù)據(jù)庫的設(shè)計(jì),也就是系統(tǒng)的概要設(shè)計(jì)?!?.2系統(tǒng)概要設(shè)計(jì)在軟件需求分析階段,搞清楚了軟件“做什么”的問題,形成了目標(biāo)系統(tǒng)的邏輯模型?,F(xiàn)在我們所要做的就是要把軟件“做什么”的邏輯模型變換為“怎么做”的物理模型,即著手實(shí)現(xiàn)軟件的需求。首先,我們需要描述的是系統(tǒng)的總的體系結(jié)構(gòu)。4.2.1系統(tǒng)結(jié)構(gòu)設(shè)計(jì)系統(tǒng)的概要設(shè)計(jì)中最重要的就是系統(tǒng)的模塊化。模塊化是指解決一個(gè)復(fù)雜問題時(shí)自項(xiàng)向下逐層把軟件系統(tǒng)劃分成若干個(gè)模塊的過程。每個(gè)模塊完成一個(gè)特定的功能,所有的模塊按某種方法組織起來,成為一個(gè)整體,完成整個(gè)系統(tǒng)所要求的功能。將系統(tǒng)劃分為多個(gè)模塊是為了降低軟件系統(tǒng)的復(fù)雜性,提高可讀性、可維護(hù)性,但模塊的劃分不能是任意的,應(yīng)盡量保持其獨(dú)立性。也就是說,每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡(jiǎn)單,即盡量做到高聚低耦合,提高模塊的獨(dú)立性,為設(shè)計(jì)高質(zhì)量的軟件結(jié)構(gòu)奠定基礎(chǔ)。在系統(tǒng)的概要設(shè)計(jì)中我采用結(jié)構(gòu)化設(shè)計(jì)(StructureDesign,簡(jiǎn)稱SD),SD以需求分析階段產(chǎn)生的數(shù)據(jù)流圖DFD為基礎(chǔ),按一定的步驟映射成軟件結(jié)構(gòu)。我首先將整個(gè)系統(tǒng)化分為幾個(gè)小問題,小模塊,在系統(tǒng)中,我設(shè)計(jì)了用戶管理、庫存管理、入庫管理、出庫管理、員工管理和供應(yīng)商管理6個(gè)小模塊。然后,進(jìn)一步細(xì)分模塊,添加細(xì)節(jié)。比如,用戶管理我又將其分為用戶注冊(cè)、用戶注銷、密碼修改;庫存管理分為庫存記錄查詢、庫存記錄修改、庫存記錄打印等等。以下就是系統(tǒng)的結(jié)構(gòu)圖:(在這里為了表達(dá)方便我將結(jié)構(gòu)圖分開來表達(dá)。)在得到系統(tǒng)的第一層功能模塊圖后,經(jīng)過進(jìn)一步地細(xì)化,得一系統(tǒng)的子功能模塊圖:4.2.2數(shù)據(jù)庫設(shè)計(jì)在信息世界中,信息從客觀事物出發(fā)流經(jīng)數(shù)據(jù)庫,通過決策機(jī)構(gòu)最后又回到客觀世界,信息的這一循環(huán)經(jīng)歷了三個(gè)領(lǐng)域:信息世界,數(shù)據(jù)世界,現(xiàn)實(shí)世界?,F(xiàn)實(shí)世界的事物反映到人的頭腦中,人的大腦對(duì)它有個(gè)認(rèn)識(shí)過程,經(jīng)過分析(選擇、命名、分類等)進(jìn)入信息世界。這些信息再進(jìn)一步加工、編碼,然后進(jìn)數(shù)據(jù)世界,而軟件系統(tǒng)的開發(fā)工作需要考慮這兩個(gè)方面的問題,也就是要考慮系統(tǒng)開發(fā)所需要的數(shù)據(jù),以與如何對(duì)這些數(shù)據(jù)進(jìn)行操作。這兩個(gè)問題貫穿了整個(gè)軟件系統(tǒng)的開發(fā)過程,這也就是數(shù)據(jù)庫的設(shè)計(jì)問題,軟件設(shè)計(jì)的一個(gè)核心。ER圖設(shè)計(jì)在系統(tǒng)設(shè)計(jì)的開始,我首先考慮的是如何用數(shù)據(jù)模型來數(shù)據(jù)庫的結(jié)構(gòu)與語義,以對(duì)現(xiàn)實(shí)世界進(jìn)行抽象。目前廣泛使用的數(shù)據(jù)模型可分為兩種類型,一種是獨(dú)立于計(jì)算機(jī)系統(tǒng)的“概念數(shù)據(jù)模型”,如“實(shí)體聯(lián)系模型”;另一種是直接面向數(shù)據(jù)庫邏輯結(jié)構(gòu)的“結(jié)構(gòu)數(shù)據(jù)模型”。在本系統(tǒng)中我采用“實(shí)體聯(lián)系模型”(ER模型)來描述數(shù)據(jù)庫的結(jié)構(gòu)與語義,以對(duì)現(xiàn)實(shí)世界進(jìn)行第一次抽象。ER模型直接從現(xiàn)實(shí)世界抽象出實(shí)體類型與實(shí)體間聯(lián)系,然后用ER圖來表示數(shù)據(jù)模型。它有兩個(gè)明顯的優(yōu)點(diǎn):接近于人的思維,容易理解;與計(jì)算機(jī)無關(guān),用戶容易接受。但ER模型只能說明實(shí)體間語義的聯(lián)系,不能進(jìn)一步說明詳細(xì)的數(shù)據(jù)結(jié)構(gòu),它只是數(shù)據(jù)庫設(shè)計(jì)的第一步。ER圖是直觀表示概念模型的工具,它有四個(gè)基本成分:◆矩形框,表示實(shí)體類型(考慮問題的對(duì)象)?!袅庑慰颍硎韭?lián)系類型(實(shí)體間的聯(lián)系)?!魴E圓形框,表示實(shí)體類型和聯(lián)系類型的屬性。對(duì)于關(guān)鍵碼的屬性,在屬性名下劃一橫線?!糁本€,聯(lián)系類型與其涉與的實(shí)體類型之間以直線連接。本系統(tǒng)為圖書倉(cāng)庫管理,主要管理圖書的入庫、出庫以與庫存等事項(xiàng)。倉(cāng)庫根據(jù)需要可以查詢圖書供應(yīng)商的信息,同時(shí)還需要了解在入庫和出庫中員工的參與情況。依據(jù)倉(cāng)庫管理的實(shí)際情況,考慮了多方面的因素以后,確定系統(tǒng)的ER圖如下:(為了表達(dá)的方便,在這里我沒有在一圖上表達(dá)出所有的關(guān)系,而是用一總體ER圖,和幾實(shí)體屬性關(guān)系圖來表達(dá)數(shù)據(jù)庫的結(jié)構(gòu)。)在該數(shù)據(jù)庫中,我設(shè)計(jì)了三個(gè)實(shí)體,分別是庫存、員工和供應(yīng)商以與兩個(gè)聯(lián)系類型入庫和出庫。在本系統(tǒng)中庫存是核心,也是基本,沒有了庫存其它的也就沒有什么意義了。員工記錄的添加是考慮到責(zé)任問題,也就是說,在倉(cāng)庫管理的實(shí)際運(yùn)用中,出現(xiàn)了責(zé)任不清的現(xiàn)象,特別是由于倉(cāng)庫的進(jìn)出圖書數(shù)量都比較大時(shí)產(chǎn)生了一系列問題,所以在設(shè)計(jì)數(shù)據(jù)庫時(shí),我特別考慮到這一點(diǎn),加入了員工記錄這一實(shí)體。供應(yīng)商信息的添加主要出于對(duì)圖書來源問題的思考。通過添加供應(yīng)商信息可以比較清楚地了解圖書的進(jìn)貨渠道,從圖書的質(zhì)量到供應(yīng)商的信譽(yù)都可以進(jìn)行了解,同時(shí)可以為以后的圖書進(jìn)購(gòu)提供一定有用的信息。入庫聯(lián)系類型將庫存信息、供應(yīng)商信息和員工信息聯(lián)系在一起,可以方便地實(shí)現(xiàn)三個(gè)實(shí)體之間的聯(lián)接,而出庫聯(lián)系類型則將庫存信息和員工信息較好地聯(lián)接起,同時(shí)這兩個(gè)聯(lián)系類型又都具有各自特有的屬性。下面就是各實(shí)體與聯(lián)系類型的屬性圖:(帶#號(hào)的屬性為關(guān)鍵字段)數(shù)據(jù)庫表格設(shè)計(jì)在完成系統(tǒng)的ER圖之后,需要將ER模型轉(zhuǎn)化為關(guān)系模型,也就是說,要設(shè)計(jì)出數(shù)據(jù)庫所需要的表格。在這里,我選用的是關(guān)系數(shù)據(jù)庫。因?yàn)殛P(guān)系數(shù)據(jù)庫中的二維表格可以很清楚地描述數(shù)據(jù)之間的聯(lián)系。在這里不得不提到一個(gè)概念——式。其實(shí)在上一節(jié)的ER圖設(shè)計(jì)中,已經(jīng)運(yùn)用了式的思想,不僅如此,在數(shù)據(jù)庫的表格設(shè)計(jì)中更離不開式的思想,它是數(shù)據(jù)庫設(shè)計(jì)的基礎(chǔ),如果不注意這個(gè)問題將會(huì)導(dǎo)致一系列問題的出現(xiàn)。我在系統(tǒng)中定義的表格都嚴(yán)格地按照式的思想和要求去完成,數(shù)據(jù)庫中的所有表格都達(dá)到了三式的要求。根據(jù)系統(tǒng)ER圖,針對(duì)本系統(tǒng)的特點(diǎn),在對(duì)所搜集的數(shù)據(jù)進(jìn)行規(guī)化之后,定義了如下六表格,分別是庫存信息表,入庫信息表,出庫信息表,員工信息表,供應(yīng)商信息表和密碼信息表。通過對(duì)這六表格的操作可以較好地完成系統(tǒng)設(shè)計(jì)的各項(xiàng)功能,六表格之間有著不同程度的聯(lián)系。(說明:在以下數(shù)據(jù)表中,K代表主鍵,#代表外鍵,字段值不為空。)BookRecord表(庫存信息表)字段名稱數(shù)據(jù)類型說明KBookID數(shù)字圖書編號(hào)BookName文本圖書名Author文本作者Publisher文本PubDate日期/時(shí)間出版日期Price貨幣價(jià)格BookType文本圖書類型Number1數(shù)字庫存數(shù)量Addation文本備注圖4.13庫存信息表庫存信息表主要用于記錄倉(cāng)庫中現(xiàn)存放的所有圖書的詳細(xì)信息,包括圖書編號(hào)、書名、作者、、圖書類型等有關(guān)圖書的各類信息,它即是該數(shù)據(jù)庫的主表,也是系統(tǒng)主界面的主要容。在該表中圖書編號(hào)是主鍵,它按圖書入庫的先后次序來編寫,每當(dāng)有圖書入庫,系統(tǒng)自動(dòng)給出圖書編號(hào),這樣我們按圖書編號(hào)來查找圖書是比較方便的??紤]到編號(hào)比較難于記憶,所以使用了和圖書類型兩個(gè)字段,在系統(tǒng)中我提供了和圖書類型的分類查找,而且全部采用自動(dòng)生成,每當(dāng)系統(tǒng)中有新的類型和圖書類型,彈出菜單會(huì)自動(dòng)添中新類型,這樣就可以比較方便地實(shí)現(xiàn)按和按圖書類型查找。此外,庫存數(shù)量也是一個(gè)比較關(guān)鍵的字段,該字段是在系統(tǒng)初始化時(shí)就給定的,每當(dāng)有圖書入庫或出庫操作,系統(tǒng)就會(huì)自動(dòng)修改圖書的庫存數(shù)量,以保持?jǐn)?shù)據(jù)的一致性。做為備注有一點(diǎn)說明,我的數(shù)據(jù)庫中備注的數(shù)據(jù)類型是文本,而不是備注類型,主要考慮到該字段的長(zhǎng)度并不大,而且在Delphi中文本數(shù)據(jù)類型的處理也比較方便一點(diǎn)。Employee表(員工信息表)字段名稱數(shù)據(jù)類型說明KEmployeeID數(shù)字員工編號(hào)EmployeeName文本員工Sex文本性別BornDate日期/時(shí)間出生日期Grade文本職稱WorkDate日期/時(shí)間工作日期Telephone文本聯(lián)系A(chǔ)ddress文本圖4.14員工信息表員工信息表主要用于記錄有關(guān)員工的各類信息,包括、職稱、出生日期、聯(lián)系、等。它主要用來為系統(tǒng)提供員工的有關(guān)信息,因?yàn)樵谙到y(tǒng)中,入庫和出庫操作均與員工有著一定的聯(lián)系,在查詢?nèi)霂煨畔⒑统鰩煨畔r(shí),有時(shí)需要查找有關(guān)此項(xiàng)記錄有關(guān)的員工信息,在系統(tǒng)中我是通過入庫記錄與員工記錄(出庫記錄和員工記錄)之間的聯(lián)接查詢來完成的。另外,作為一個(gè)倉(cāng)庫也有必要了解其所屬員工的一些基本情況,以便查詢。Shopkeeper表(供應(yīng)商信息表)字段名稱數(shù)據(jù)類型說明KShopkeeperID數(shù)字供應(yīng)商編號(hào)ShopkeeperName文本供應(yīng)商Address文本地址PostNo數(shù)字OfficePhone文本辦公HomePhone文本住宅Email文本E-mailPayType文本付款方式圖4.15供應(yīng)商信息表供應(yīng)商信息表主要用于記錄有關(guān)供應(yīng)商的各類信息,包括、地址、、付款方式等。它主要用來為系統(tǒng)提供供應(yīng)商的有關(guān)信息,在系統(tǒng)中入庫記錄是與供應(yīng)商記錄相聯(lián)系的,通過入庫記錄可以查找相關(guān)的供應(yīng)商信息。在供應(yīng)商信息中,考慮當(dāng)實(shí)際情況,我特別加入了Email和付款方式這兩個(gè)字段,因?yàn)樵诋?dāng)今信息世界中,多種多樣的通訊方式和多種多樣的付款方式是必然的,是數(shù)據(jù)庫中必須與以記錄。InRecord表(入庫信息表)字段名稱數(shù)據(jù)類型說明KInID數(shù)字入庫編號(hào)#BookID數(shù)字圖書編號(hào)#EmployeeID數(shù)字員工編號(hào)#ShopkeeperID數(shù)字供應(yīng)商編號(hào)Number數(shù)字入庫數(shù)量BuyDate日期/時(shí)間入庫日期圖4.16入庫信息表OutRecord表(出庫信息表)字段名稱數(shù)據(jù)類型說明KOutID數(shù)字出庫編號(hào)#BookID數(shù)字圖書編號(hào)#EmployeeID數(shù)字員工編號(hào)Number2數(shù)字出庫數(shù)量OutDate日期/時(shí)間出庫日期圖4.17出庫信息表入庫信息表主要用于記錄有關(guān)入庫的詳細(xì)信息,包括入庫數(shù)量、入庫日期以與圖書、員工、供應(yīng)商三方的編號(hào),以便查詢。出庫信息表主要用于記錄有關(guān)出庫的詳細(xì)信息,包括出庫數(shù)量、出庫日期以與圖書、員工的編號(hào)。出庫信息表和入庫信息表一樣,其實(shí)它們都屬于聯(lián)系類型,系統(tǒng)通過這兩個(gè)表可以聯(lián)接上其它的表為用戶提供多種條件的聯(lián)接查詢。值得提出的一點(diǎn)是入庫記錄和出庫記錄的添加不僅僅是單表操作,由于它們都與庫存記錄相聯(lián)系,所以,無論您是添中入庫記錄還是添加出庫記錄,都必須同時(shí)修改庫存記錄,以保持?jǐn)?shù)據(jù)的一致性,否則將引發(fā)系統(tǒng)出錯(cuò)而這些我都讓其在系統(tǒng)中自動(dòng)完成。無論您是添加入庫記錄,還是添加出庫記錄,系統(tǒng)都將自動(dòng)修改庫存中圖書的數(shù)量,而且,在您出庫的數(shù)量大于庫存數(shù)量時(shí),系統(tǒng)還會(huì)自動(dòng)提示錯(cuò)誤,這樣就可以防止一定錯(cuò)誤的發(fā)生。在入庫信息表和出庫信息表中我還定義了幾個(gè)外鍵,它提供了一種表示幾個(gè)關(guān)系聯(lián)系的方法。比如,系統(tǒng)過在入庫信息表中定義的外鍵BookID、EmployeeID和ShopkeeperID可以將庫存信息表、員工信息表和供應(yīng)商信息表聯(lián)系在一起,從而方便地實(shí)現(xiàn)聯(lián)接查詢,而且,引入外鍵的定義是實(shí)體完整性約束的一個(gè)主要方面。Key表(密碼信息表)字段名稱數(shù)據(jù)類型說明KKeyName文本用戶KeyNo文本用戶密碼圖4.18密碼信息表密碼信息表主要用于記錄所有的用戶名和用戶密碼。它是在用戶登陸時(shí)用來確定用戶和密碼的正確性,以防止非法用戶登陸。通過以上設(shè)計(jì)已經(jīng)完成了系統(tǒng)的概要設(shè)計(jì),當(dāng)我們有了系統(tǒng)的功能模塊圖和數(shù)據(jù)庫之后,就需要著手去實(shí)現(xiàn)每一個(gè)模塊,為每一個(gè)功能設(shè)計(jì)程序流程圖,這也就是系統(tǒng)的詳細(xì)設(shè)計(jì)?!?.3系統(tǒng)詳細(xì)設(shè)計(jì)在前面的概要設(shè)計(jì)中,已將系統(tǒng)劃分為多個(gè)模塊,并將它們按照一定的原則組裝起來,同時(shí)確定了每個(gè)功能與模塊之間的外部接口。現(xiàn)在所要做的就是確定每個(gè)模塊具體執(zhí)行過程,也可以說是“過程設(shè)計(jì)”。在處理過程設(shè)計(jì)時(shí)我采用的是結(jié)構(gòu)化程序設(shè)計(jì)(簡(jiǎn)稱SP)方法。需要指出的是系統(tǒng)的詳細(xì)設(shè)計(jì)并不是指具體的編程序,而是將概要設(shè)計(jì)階段產(chǎn)生的系統(tǒng)功能模塊圖細(xì)化成很容易產(chǎn)生程序的圖紙。因此詳細(xì)設(shè)計(jì)的結(jié)果基本決定了最終程序的質(zhì)量。為軟件的質(zhì)量,延長(zhǎng)軟件的生存期,軟件的可測(cè)試性、可維護(hù)性提供重要的保障。詳細(xì)設(shè)計(jì)的目標(biāo)不僅是邏輯上正確地實(shí)現(xiàn)每個(gè)模塊的功能,還應(yīng)使設(shè)計(jì)出的處理過程清晰易讀。由前一階段產(chǎn)生的系統(tǒng)功能模塊圖,我為系統(tǒng)的主要部分設(shè)計(jì)了如下程序流程圖:通過以上步驟,基本上完成了對(duì)整個(gè)系統(tǒng)的總體設(shè)計(jì),接下來所要做的就是軟件的編碼工作。系統(tǒng)總體設(shè)計(jì)的好壞直接影響著下一步工作,只有在這一階段設(shè)計(jì)出好的模塊圖和程序流程圖,才能更有利于編碼,產(chǎn)生好的軟件系統(tǒng)。第五章系統(tǒng)應(yīng)用程序設(shè)計(jì)§5.1系統(tǒng)窗體模塊組成§5.2數(shù)據(jù)模塊窗體的設(shè)置在編寫數(shù)據(jù)庫應(yīng)用程序時(shí),經(jīng)常要遇到這樣的情況,即好多組件、窗體同時(shí)訪問一樣的數(shù)據(jù)源,如果為每一個(gè)組件或者窗體都設(shè)置一個(gè)數(shù)據(jù)源將是十分耗時(shí)的工件,而且要保證這些數(shù)據(jù)源的確是一樣的也需花一番功夫。那么,能不能將這些數(shù)據(jù)源集中管理,最好是做成一個(gè)統(tǒng)一的模塊,需要時(shí)就將該模塊引入而不必直接操作數(shù)據(jù)源本身呢?數(shù)據(jù)模塊(DataModule)是解決這個(gè)問題最好的答案。簡(jiǎn)單說來,數(shù)據(jù)模塊是用來集中管理數(shù)據(jù)源的一個(gè)窗體,該窗體可被需要的地方隨時(shí)引入。圖5.2給出了本程序的數(shù)據(jù)模塊(datamoduleform)窗體圖,除報(bào)表窗
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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年度年福建省高校教師資格證之高等教育心理學(xué)自我檢測(cè)試卷A卷附答案
- 2024年度山西省高校教師資格證之高等教育法規(guī)通關(guān)提分題庫及完整答案
- 2024年合成膠粘劑項(xiàng)目投資申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2024年私人損害賠償自愿協(xié)議
- 高校食品專業(yè)實(shí)驗(yàn)室安全管理探究
- 新形勢(shì)下企業(yè)經(jīng)濟(jì)管理創(chuàng)新思路探究
- 2024年商業(yè)樓宇化糞池建造協(xié)議范例
- 2024年加工區(qū)租賃協(xié)議
- 2024年度工程地質(zhì)勘察協(xié)議范本
- 2024屆安徽省安大附中高三下學(xué)期第一次診斷測(cè)試數(shù)學(xué)試題
- S2-旋挖樁機(jī)安裝拆卸專項(xiàng)方案
- 普通高中物理課程標(biāo)準(zhǔn)解讀
- 成人失禁相關(guān)性皮炎的預(yù)防與護(hù)理-護(hù)理團(tuán)標(biāo)
- 西南師大版二年級(jí)下冊(cè)三位數(shù)加減混合運(yùn)算200題及答案
- 國(guó)外保護(hù)非物質(zhì)文化遺產(chǎn)的現(xiàn)狀
- 瓜子二手車商業(yè)計(jì)劃書
- 蒙牛品牌分析報(bào)告
- 充電樁采購(gòu)安裝投標(biāo)方案(技術(shù)方案)
- 《桌面應(yīng)急演練》
- 《嬰幼兒視力發(fā)育》課件
- 小學(xué)語文數(shù)字化閱讀教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論