圖書館數據庫管理系統解析_第1頁
圖書館數據庫管理系統解析_第2頁
圖書館數據庫管理系統解析_第3頁
圖書館數據庫管理系統解析_第4頁
圖書館數據庫管理系統解析_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論