您現(xiàn)在的位置: test4exam >> 學(xué)歷考試 >> 自考報(bào)考指南 >> 正文
圖書館管理系統(tǒng)
摘 要
圖書管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開發(fā)主要包括后臺(tái)數(shù)據(jù)庫的建立和維護(hù)以及前端應(yīng)用程序的開發(fā)兩個(gè)方面。對(duì)于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的庫。而對(duì)于后者則要求應(yīng)用程序功能完備,易使用等特點(diǎn)。
因此本人結(jié)合開入式圖書館的要求,對(duì)MS SQL Server2000數(shù)據(jù)庫管理系統(tǒng)、SQL語言原理、Delphi應(yīng)用程序設(shè)計(jì),Delphi數(shù)據(jù)庫技術(shù)進(jìn)行了較深入的學(xué)習(xí)和應(yīng)用,主要完成對(duì)圖書管理系統(tǒng)的需求分析、功能模塊劃分、數(shù)據(jù)庫模式分析,并由此設(shè)計(jì)了數(shù)據(jù)庫結(jié)構(gòu)和應(yīng)用程序。系統(tǒng)運(yùn)行結(jié)果證明,本文所設(shè)計(jì)的圖書管理系統(tǒng)可以滿足借閱者、圖書館工作人員和高級(jí)管理員三方面的需要。
第一章對(duì)數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)和圖書管理系統(tǒng)進(jìn)行了簡(jiǎn)明的介紹,并分析了開發(fā)圖書管理系統(tǒng)所應(yīng)進(jìn)行的工作。
第二章對(duì)數(shù)據(jù)庫的設(shè)計(jì)和SQL語言的使用進(jìn)行了系統(tǒng)分析,為深入理解數(shù)據(jù)庫應(yīng)用打下了基礎(chǔ)。
第三章學(xué)習(xí)了具體的開發(fā)工具Delphi 6.0,對(duì)其數(shù)據(jù)庫組件,SQL語言在Delphi中的應(yīng)用等數(shù)據(jù)庫編程關(guān)鍵技術(shù)進(jìn)行了系統(tǒng)的介紹。
第四章分析了圖書管理信息系統(tǒng)的應(yīng)用需求,按照數(shù)據(jù)庫設(shè)計(jì)理論一步一步地給出了系統(tǒng)需求說明書、局部ER圖、全局ER圖、系統(tǒng)關(guān)系模式,子模式,利用MS SQL Server2000建立了數(shù)據(jù)庫
第五章進(jìn)行了具體的程序設(shè)計(jì),具體劃分了三類用戶的操作權(quán)限,設(shè)計(jì)了了三個(gè)操作界面。實(shí)現(xiàn)了數(shù)據(jù)庫表的瀏覽,記錄的添加、刪除和修改,報(bào)表的生成,實(shí)現(xiàn)了多數(shù)據(jù)庫表的連接操作,實(shí)現(xiàn)了多條件查詢和模糊查詢,并靈活實(shí)現(xiàn)了對(duì)不可更新查詢結(jié)果集的更新操作,實(shí)現(xiàn)了主從表操作,實(shí)現(xiàn)了密碼維護(hù)功能,最后,系統(tǒng)還可以導(dǎo)入數(shù)據(jù)庫以對(duì)任意同結(jié)構(gòu)的數(shù)據(jù)庫進(jìn)行操作。
設(shè)計(jì)充分利用Delphi 6、MS SQL Server2000數(shù)據(jù)庫技術(shù)的強(qiáng)大力量,提高了編程效率和可靠性。
關(guān)鍵詞:數(shù)據(jù)庫,SQL語言,MS SQL Server,Delphi6,
數(shù)據(jù)庫組件,圖書管理,窗體,listview組件
目 錄
摘 要 ……………………………………………………………………………… I
第一章 緒 論 …………………………………………………………………… 1
§1.1 數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)簡(jiǎn)介 ……………………………………………… 1
§1.2 圖書管理系統(tǒng) ……………………………………………………… 4
§1.3 本文所做的主要工作 …………………………………………………… 6
第二章 數(shù)據(jù)庫理論基礎(chǔ) ………………………………………………………… 7
§2.1 數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)及范式分析 …………………………………………… 7
§2.2 SQL語言介紹………………………………………………………………… 11
2.2.2 SQL語句 ………………………………………………………………… 12
第三章 應(yīng)用系統(tǒng)開發(fā)工具………………………………………………… 16
§3.1 Delphi6.0 VCL組件的體系結(jié)構(gòu)……………………………………… 16
§3.2 數(shù)據(jù)庫組件介紹 …………………………………………………………… 17
§3.3 SQL語言在Delphi中的應(yīng)用 …………………………………………… 18
§3.4 MS SQL Server簡(jiǎn)述 …………………………………………………… 22
第四章 圖書管理系統(tǒng)設(shè)計(jì)分析 ………………………………………… 24
§4.1 應(yīng)用需求分析 …………………………………………………………… 24
§4.2 系統(tǒng)功能模塊劃分 ……………………………………………………… 29
§4.3 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì) ………………………………………………………… 29
第五章 圖書管理系統(tǒng)應(yīng)用程序設(shè)計(jì) …………………………………… 37
§5.1 系統(tǒng)窗體模塊組成 ………………………………………………………… 37
§5.2 數(shù)據(jù)模塊窗體的設(shè)置 ……………………………………………………… 37
§5.3啟動(dòng)畫面的實(shí)現(xiàn)…………………………………………………………… 38
§5.4用戶登錄窗體的的實(shí)現(xiàn)……………………………………………………… 39
§5.5用戶密碼認(rèn)證窗體的的實(shí)現(xiàn)………………………………………………… 39
§5.6借閱者服務(wù)模塊的實(shí)現(xiàn)…………………………………………………… 40
5.6.1圖書查詢功能的實(shí)現(xiàn)………………………………………………… 41
5.6.2借閱者登錄功能的實(shí)現(xiàn)………………………………………………… 42
5.6.3借閱者借閱情況功能的實(shí)現(xiàn)…………………………………………… 43
5.6.4借閱者個(gè)人資料維護(hù)功能的實(shí)現(xiàn)……………………………………… 47
§5.7工作人員-圖書借閱/歸還模塊的實(shí)現(xiàn)……………………………………… 49
5.7.1工作人員進(jìn)行圖書借閱功能實(shí)現(xiàn)……………………………………… 50
5.7.2工作人員進(jìn)行圖書歸還功能實(shí)現(xiàn)……………………………………… 53
§5.8圖書館管理員模塊的實(shí)現(xiàn)…………………………………………… 54
5.8.1圖書館管理員圖書管理功能的實(shí)現(xiàn)…………………………………… 55
5.8.2圖書館管理員工作人員和管理員管理功能的實(shí)現(xiàn)…………………… 58
5.8.3圖書館管理員修改圖書類別及統(tǒng)記功能的實(shí)現(xiàn)……………………… 60
5.8.4圖書館管理員借閱者管理功能的實(shí)現(xiàn)………………………………… 62
5.8.5圖書館維護(hù)借閱者管理功能的實(shí)現(xiàn)………………………………… 62
5.8.6圖書館身份維護(hù)功能的實(shí)現(xiàn)……………………………………… 64
5.8.7圖書館借閱者統(tǒng)計(jì)功能的實(shí)現(xiàn)………………………………… 65
5.8.8圖書館統(tǒng)計(jì)借閱過期記錄功能的實(shí)現(xiàn)………………………… 67
§5.9系統(tǒng)信息顯示的實(shí)現(xiàn)………………………………………………… 68
第六章 結(jié)束語 ……………………………………………………………… 69
致 謝 ………………………………………………………………………………70
參考書目 …………………………………………………………………………… 70
第一章 緒 論
§1.1 數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)簡(jiǎn)介
在數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)之前,對(duì)開發(fā)數(shù)據(jù)庫的基本概念應(yīng)當(dāng)了解,對(duì)數(shù)據(jù)庫的結(jié)構(gòu)、開發(fā)數(shù)據(jù)庫應(yīng)用程序的步驟、開發(fā)體系及方法都應(yīng)當(dāng)有相當(dāng)清晰的了解和認(rèn)識(shí)。
數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)的目標(biāo)是建立一個(gè)滿足用戶長(zhǎng)期需求的產(chǎn)品。開發(fā)的主要過程為:理解用戶的需求,然后,把它們轉(zhuǎn)變?yōu)橛行У臄?shù)據(jù)庫設(shè)計(jì)。把設(shè)計(jì)轉(zhuǎn)變?yōu)閷?shí)際的數(shù)據(jù)庫,并且這些數(shù)據(jù)庫帶有功能完備、高效能的應(yīng)用。
數(shù)據(jù)庫技術(shù)在計(jì)算機(jī)軟件鄰域研究中一直是非常重要的主題,產(chǎn)生于60年代,30多年來數(shù)據(jù)庫技術(shù)得到了迅速發(fā)展,并已形成較為完整的理論體系和一大批實(shí)用系統(tǒng)。并且,近年來,隨著World Wide Web(WWW)的猛增及Internet技術(shù)的迅速發(fā)展,使得數(shù)據(jù)庫技術(shù)之時(shí)成為最熱門技術(shù)之一。
如圖1.1顯示了數(shù)據(jù)庫系統(tǒng)的主要組件。數(shù)據(jù)庫由DBMS(數(shù)據(jù)庫管理系統(tǒng))處理,DBMS則由開發(fā)人員和用戶通過應(yīng)用程序直接或間接地使用。它主要包括四個(gè)要素:用戶數(shù)據(jù)、元數(shù)據(jù)、索引和應(yīng)用元數(shù)據(jù)。
目前,大多數(shù)主流數(shù)據(jù)庫管理系統(tǒng)把用戶數(shù)據(jù)表示為關(guān)系,F(xiàn)在把關(guān)系看作數(shù)據(jù)表。表的列包含域或?qū)傩,表的行包含?duì)應(yīng)業(yè)務(wù)環(huán)境中的實(shí)體的記錄。并非所有的關(guān)系都同樣符合要求,有些關(guān)系比其它關(guān)系更結(jié)構(gòu)化一些。第二章描述了一個(gè)用以產(chǎn)生良好結(jié)構(gòu)關(guān)系的過程,稱作規(guī)范化。
為了對(duì)比結(jié)構(gòu)差的關(guān)系和結(jié)構(gòu)好的關(guān)系之間的差別,以本文所設(shè)計(jì)的圖書管理系統(tǒng)中的圖書和圖書借閱者關(guān)系為例來說明,假若設(shè)計(jì)關(guān)系R1(借書證號(hào),姓名,性別,身份編號(hào),身份證,聯(lián)系電話,圖書編號(hào),圖書名稱,圖書類別,作者,出版社,出版日期,備注,價(jià)格,數(shù)量);這個(gè)關(guān)系的問題出在它有關(guān)于兩個(gè)不同主題的數(shù)據(jù),就是圖書借閱者和圖書。用這種方式構(gòu)成的關(guān)系在進(jìn)行修改時(shí),會(huì)出現(xiàn)問題。因?yàn)橐粋(gè)圖書借閱者可能借閱多本書,如果某個(gè)圖書借閱者的某個(gè)字段(如聯(lián)系電話)出現(xiàn)變更,它所借閱的圖書記錄(可能多個(gè))也就必須變化,這是不好的。因此數(shù)據(jù)用兩個(gè)關(guān)系表示更好,F(xiàn)在如果某圖書借閱者改變了它的聯(lián)系電話,只有關(guān)系(表)user的對(duì)應(yīng)行需要改變。當(dāng)然,要想產(chǎn)生一個(gè),顯示圖書名稱及其借閱者聯(lián)系電話的報(bào)表,就需要將這兩個(gè)表的行結(jié)合起來。結(jié)果表明,將關(guān)系分別存儲(chǔ),在生成報(bào)表的時(shí)候?qū)⑺鼈兘Y(jié)合起來,比把它們存儲(chǔ)在一個(gè)合成的表中更好。
user(借書證號(hào),姓名,性別,身份編號(hào),身份證,聯(lián)系電話,)
book(圖書編號(hào),圖書名稱,圖書類別,作者,出版社,出版日期,備注,價(jià)格,數(shù)量)
1.1.1.2 元數(shù)據(jù)
數(shù)據(jù)庫是自描述的,這就意味著它自身包含了它的結(jié)構(gòu)的描述,這種結(jié)構(gòu)的描述稱作元數(shù)據(jù)。因?yàn)?SPAN lang=EN-US>DBMS產(chǎn)品是用來存儲(chǔ)和操縱表的,所以大多數(shù)產(chǎn)品把元數(shù)據(jù)以表的形式存儲(chǔ),有時(shí)稱作系統(tǒng)表。這些系統(tǒng)表存儲(chǔ)了數(shù)據(jù)庫中表的情況,指出每一個(gè)表中有多少列,那一列是主關(guān)鍵字,每一列的數(shù)據(jù)類型的描述,它也存儲(chǔ)索引、關(guān)鍵字、規(guī)則和數(shù)據(jù)庫結(jié)構(gòu)的其他部分。
在表中存儲(chǔ)元數(shù)據(jù)不僅對(duì)DBMS是有效的,對(duì)用戶也是方便的,因?yàn)樗麄兛梢允褂门c查詢用戶數(shù)據(jù)同樣的查詢工具來查詢?cè)獢?shù)據(jù)。本文第二章所介紹的SQL語言可以同時(shí)用于元數(shù)據(jù)和用戶數(shù)據(jù)。
1.1.1.3 索引
第三種類型的數(shù)據(jù)改進(jìn)了數(shù)據(jù)庫的性能和可訪問性,這種數(shù)據(jù)經(jīng)常稱作開銷數(shù)據(jù),盡管有時(shí)也采用其他類型的數(shù)據(jù)結(jié)構(gòu),如鏈表,但它主要還是索引。索引可以用來排序和快速訪問數(shù)據(jù)。下面以本人的圖書管理信息系統(tǒng)中的book表為例來說明。
假定數(shù)據(jù)在磁盤上是按’圖書編號(hào)’的遞增順序排列的,用戶想打印一個(gè)按’圖書名稱’排序的圖書數(shù)據(jù)報(bào)表。為此,所有的數(shù)據(jù)都需要從源表中提取出來并排序,除非表很小,否則這是一個(gè)很費(fèi)時(shí)的過程;蛘,可以在‘圖書名稱’字段上創(chuàng)建一個(gè)索引,該索引的條目按照‘圖書名稱’排序,這樣,該索引的條目可以讀出來,并用來按順序訪問book數(shù)據(jù)。
索引用于快速訪問數(shù)據(jù)。例如,一個(gè)用戶只想訪問book表中‘圖書類別’值為‘
索引對(duì)排序和查找是有幫助的,但要付出代價(jià)。book表中的行每次改變時(shí),索引也必須改變,這意味著索引并非隨意的,應(yīng)該在真正需要時(shí)保存。
1.1.1.4 應(yīng)用元數(shù)據(jù)
存儲(chǔ)在數(shù)據(jù)庫中的第四種數(shù)據(jù)是應(yīng)用元數(shù)據(jù),它用來存儲(chǔ)用戶窗體、報(bào)表、查詢和其他形式的查詢組件。并非所有的DBMS都支持應(yīng)用組件,支持組件的DBMS也不一定把全部組件的結(jié)構(gòu)作為應(yīng)用元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中。然而,大多數(shù)現(xiàn)代的DBMS產(chǎn)品存儲(chǔ)這種數(shù)據(jù)作為數(shù)據(jù)庫的一部分。一般來說,數(shù)據(jù)庫開發(fā)人員和用戶都不直接訪問應(yīng)用元數(shù)據(jù),想反,他們通過DBMS中的工具來處理這些數(shù)據(jù)。
MS SQL Server2000中就支持窗體、存儲(chǔ)過程等應(yīng)用元數(shù)據(jù)。
1.1.2 數(shù)據(jù)庫管理系統(tǒng)
數(shù)據(jù)庫管理系統(tǒng)(DBMS)是指數(shù)據(jù)庫系統(tǒng)中管理數(shù)據(jù)的軟件系統(tǒng)。DBMS是數(shù)據(jù)庫系統(tǒng)的核心組成部分。對(duì)數(shù)據(jù)庫的一切操作,包括定義、更新及各種控制,都是通過DBMS進(jìn)行的。DBMS總是基于某種數(shù)據(jù)模型,可以把DBMS看成是某種數(shù)據(jù)模型在計(jì)算機(jī)系統(tǒng)上的具體實(shí)現(xiàn)。根據(jù)數(shù)據(jù)模型的不同,DBMS可以分成層次型、網(wǎng)狀型、關(guān)系型、面向?qū)ο笮偷取?SPAN lang=EN-US>MS SQL Server2000就是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。
關(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)用。
如圖1.1所示,DBMS的特點(diǎn)和功能可以分為三個(gè)子系統(tǒng):設(shè)計(jì)工具子系統(tǒng)、運(yùn)行子系統(tǒng)和DBMS引擎。
設(shè)計(jì)子系統(tǒng)有一個(gè)方便數(shù)據(jù)庫及其應(yīng)用創(chuàng)建的工具集。它典型地包含產(chǎn)生表、窗體、查詢和報(bào)表的工具。DBMS產(chǎn)品還提供編程語言和對(duì)編程語言的接口。
運(yùn)行子系統(tǒng)處理用設(shè)計(jì)子系統(tǒng)開發(fā)的應(yīng)用組件。它所包含的運(yùn)行處理器用來處理窗體和數(shù)據(jù)庫的數(shù)據(jù)交互,以及回答查詢和打印報(bào)表等。
DBMS引擎從其他兩個(gè)組件接受請(qǐng)求,并把它們翻譯成對(duì)操作系統(tǒng)的命令,以便讀寫物理介質(zhì)上的數(shù)據(jù)。DBMS引擎還涉及事務(wù)管理、鎖、備份和恢復(fù)。
1.1.3 創(chuàng)建數(shù)據(jù)庫
1.1.3.1 數(shù)據(jù)庫模式
數(shù)據(jù)庫模式定義了數(shù)據(jù)庫的結(jié)構(gòu)、表、關(guān)系、域和業(yè)務(wù)規(guī)則。數(shù)據(jù)庫模式是一種設(shè)計(jì),數(shù)據(jù)庫和應(yīng)用正是建立在此基礎(chǔ)上的。
域是一列可能擁有的值的集合。必須為每一個(gè)表的每一列確定域。除了數(shù)據(jù)的物理格式外,還需要確定是否有些域?qū)Ρ韥碚f是唯一的。
數(shù)據(jù)庫模式的最后一個(gè)要素是業(yè)務(wù)規(guī)則,它是對(duì)需要反映在數(shù)據(jù)庫和數(shù)據(jù)庫應(yīng)用程序中的業(yè)務(wù)活動(dòng)的約束。業(yè)務(wù)規(guī)則是模式的一個(gè)重要部分,因?yàn)樗麄冎付藷o論什么數(shù)據(jù)變化到達(dá)DBMS引擎,允許的數(shù)據(jù)值必須滿足的約束。不管無效的數(shù)據(jù)變化請(qǐng)求是來自窗體的用戶、查詢/修改請(qǐng)求還是應(yīng)用程序,DBMS都應(yīng)該拒絕。
遺憾的是,不同的DBMS產(chǎn)品用不同的方法實(shí)施業(yè)務(wù)規(guī)則。在某些情況下,DBMS產(chǎn)品不具備實(shí)施必要業(yè)務(wù)規(guī)則的能力,必須以代碼形式把它們編入應(yīng)用程序。
1.1.3.2 創(chuàng)建表
1.1.3.3 定義聯(lián)系
1.1.4 應(yīng)用組件
數(shù)據(jù)庫應(yīng)用包括窗體、查詢、報(bào)表、菜單和應(yīng)用程序。
§1.2 圖書管理系統(tǒng)
當(dāng)今時(shí)代是飛速發(fā)展的信息時(shí)代。在各行各業(yè)中離不開信息處理,這正是計(jì)算機(jī)被廣泛應(yīng)用于信息管理系統(tǒng)的環(huán)境。計(jì)算機(jī)的最大好處在于利用它能夠進(jìn)行信息管理。使用計(jì)算機(jī)進(jìn)行信息控制,不僅提高了工作效率,而且大大的提高了其安全性。
尤其對(duì)于復(fù)雜的信息管理,計(jì)算機(jī)能夠充分發(fā)揮它的優(yōu)越性。計(jì)算機(jī)進(jìn)行信息管理與信息管理系統(tǒng)的開發(fā)密切相關(guān),系統(tǒng)的開發(fā)是系統(tǒng)管理的前提。本系統(tǒng)就是為了管理好圖書館信息而設(shè)計(jì)的。
圖書館作為一種信息資源的集散地,圖書和用戶借閱資料繁多,包含很多的信息數(shù)據(jù)的管理,現(xiàn)今,有很多的圖書館都是初步開始使用,甚至尚未使用計(jì)算機(jī)進(jìn)行信息管理。根據(jù)調(diào)查得知,他們以前對(duì)信息管理的主要方式是基于文本、表格等紙介質(zhì)的手工處理,對(duì)于圖書借閱情況(如借書天數(shù)、超過限定借書時(shí)間的天數(shù))的統(tǒng)計(jì)和核實(shí)等往往采用對(duì)借書卡的人工檢查進(jìn)行,對(duì)借閱者的借閱權(quán)限、以及借閱天數(shù)等用人工計(jì)算、手抄進(jìn)行。數(shù)據(jù)信息處理工作量大,容易出錯(cuò);由于數(shù)據(jù)繁多,容易丟失,且不易查找?偟膩碚f,缺乏系統(tǒng),規(guī)范的信息管理手段。盡管有的圖書館有計(jì)算機(jī),但是尚未用于信息管理,沒有發(fā)揮它的效力,資源閑置比較突出,這就是管理信息系統(tǒng)的開發(fā)的基本環(huán)境。
數(shù)據(jù)處理手工操作,工作量大,出錯(cuò)率高,出錯(cuò)后不易更改。圖書館采取手工方式對(duì)圖書借閱情況進(jìn)行人工管理,由于信息比較多,圖書借閱信息的管理工作混亂而又復(fù)雜;一般借閱情況是記錄在借書證上,圖書的數(shù)目和內(nèi)容記錄在文件中,圖書館的工作人員和管理員也只是當(dāng)時(shí)對(duì)它比較清楚,時(shí)間一長(zhǎng),如再要進(jìn)行查詢,就得在眾多的資料中翻閱、查找了,造成查詢費(fèi)時(shí)、費(fèi)力。如要對(duì)很長(zhǎng)時(shí)間以前的圖書進(jìn)行更改就更加困難了。
基于這此問題,我認(rèn)為有必要建立一個(gè)圖書管理系統(tǒng),使圖書管理工作規(guī)范化,系統(tǒng)化,程序化,避免圖書管理的隨意性,提高信息處理的速度和準(zhǔn)確性,能夠及時(shí)、準(zhǔn)確、有效的查詢和修改圖書情況。
§1.1 系統(tǒng)所做工作
1) 了解應(yīng)用開發(fā)工具的現(xiàn)狀
2) DelPHi6.0編程基礎(chǔ)
3) MS SQL Server基礎(chǔ)
4) 設(shè)計(jì)數(shù)據(jù)庫;設(shè)計(jì)界面
5) 開發(fā)數(shù)據(jù)庫。數(shù)據(jù)庫實(shí)現(xiàn)的一些功能有
l 數(shù)據(jù)和數(shù)據(jù)說明的醒目顯示;
l 多條件的查詢、多條記錄的檢索、模糊查詢;
l 數(shù)據(jù)文件某種存儲(chǔ)格式導(dǎo)入數(shù)據(jù)窗體,經(jīng)過數(shù)據(jù)完整性校驗(yàn)存入數(shù)據(jù)庫;
l 數(shù)據(jù)庫安全性的設(shè)計(jì);
l 數(shù)據(jù)庫的設(shè)計(jì)、數(shù)據(jù)接口、界面的設(shè)計(jì)。
§1.3 本文所作工作
緒論部分對(duì)數(shù)據(jù)庫應(yīng)用系統(tǒng)的結(jié)構(gòu)、開發(fā)進(jìn)行了簡(jiǎn)要介紹,分析了圖書管理信息系統(tǒng)設(shè)計(jì)的特點(diǎn)和任務(wù)。
第二章介紹了數(shù)據(jù)庫的設(shè)計(jì)和范式分析,并系統(tǒng)介紹了SQL語言,為設(shè)計(jì)和理解應(yīng)用程序做了鋪墊。
第三章對(duì)系統(tǒng)介紹了Delphi 6.0的數(shù)據(jù)庫編程技術(shù)、SQL語言在Delphi 6.0中的應(yīng)用、MS SQL Server基礎(chǔ)。
第四章分析了圖書管理系統(tǒng)的應(yīng)用需求,設(shè)計(jì)了系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu),并根據(jù)需求對(duì)系統(tǒng)功能進(jìn)行了劃分和細(xì)化。
第五章根據(jù)第四章的設(shè)計(jì)結(jié)果利用MSSQL Server2000和Delphi 6.0進(jìn)行了具體的應(yīng)用程序設(shè)計(jì)。
總結(jié)部分介紹了設(shè)計(jì)體會(huì)和編程體會(huì),并指出了系統(tǒng)設(shè)計(jì)中的不足和改進(jìn)的方向。
第二章 數(shù)據(jù)庫理論基礎(chǔ)
一個(gè)成功的信息管理系統(tǒng),是建立在許多條件之上的,而數(shù)據(jù)庫是其中一個(gè)非常重要的條件和關(guān)鍵技術(shù)。
信息管理系統(tǒng)所涉及的數(shù)據(jù)庫設(shè)計(jì)分五個(gè)步驟:數(shù)據(jù)庫需求分析、概念設(shè)計(jì)、邏輯設(shè)計(jì)、物理設(shè)計(jì)與加載測(cè)試。
(1) 數(shù)據(jù)庫需求分析的任務(wù)是將業(yè)務(wù)管理單證流化為數(shù)據(jù)流,劃分主題之間的邊界,繪制出DFD圖,并完成相應(yīng)的數(shù)據(jù)字典。
(2) 概念設(shè)計(jì)的任務(wù)是從DFD出發(fā),繪制出本主題的實(shí)體-關(guān)系圖,并列出各個(gè)實(shí)體與關(guān)系的綱要表。
(3) 邏輯設(shè)計(jì)的任務(wù)是從E-R圖與對(duì)應(yīng)的綱要表出發(fā),確定各個(gè)實(shí)體及關(guān)系的表名屬性。
(4) 物理設(shè)計(jì)的任務(wù)是確定所有屬性的類型、寬度與取值范圍,設(shè)計(jì)出基本表的主鍵,將所有的表名與字段名英文化(現(xiàn)在很多軟件能支持中文字段,如MS SQL Server,我就是用的中文字段名),實(shí)現(xiàn)物理建庫,完成數(shù)據(jù)庫物理設(shè)計(jì)字典。
(5) 加載測(cè)試工作貫穿于程序測(cè)試工作的全過程,整個(gè)錄入、修改、查詢、處理工作均可視為對(duì)數(shù)據(jù)庫的加載測(cè)試工作。
要設(shè)計(jì)出一個(gè)好的信息管理系統(tǒng)數(shù)據(jù)庫,除滿足系統(tǒng)所要求的功能外,還必須遵守下列原則:
² 基本表的個(gè)數(shù)越少越好。
² 主鍵的個(gè)數(shù)越少越好。鍵是表間連接的工具,主鍵越少,表間的連接就越簡(jiǎn)單。
² 字段的個(gè)數(shù)越少越好。
² 所有基本表的設(shè)計(jì)均應(yīng)盡量符合第三范式。
數(shù)據(jù)庫的設(shè)計(jì)中,如何處理多對(duì)多的關(guān)系和如何設(shè)計(jì)主鍵,是兩個(gè)有著較大難度、需要重點(diǎn)考慮的問題。下面我們著重從SQL應(yīng)用、數(shù)據(jù)庫設(shè)計(jì)范式和查詢優(yōu)化等方面來分析本課題的系統(tǒng)關(guān)鍵技術(shù)和實(shí)現(xiàn)難點(diǎn)并加以解決。
§2.1 數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)及范式分析
信息系統(tǒng)的主要任務(wù)是通過大量的數(shù)據(jù)獲得管理所需要的信息,這就必須存儲(chǔ)和管理大量的數(shù)據(jù)。因此建立一個(gè)良好的數(shù)據(jù)組織結(jié)構(gòu)和數(shù)據(jù)庫,使整個(gè)系統(tǒng)都可以迅速、方便、準(zhǔn)確地調(diào)用和管理所需的數(shù)據(jù),是衡量信息系統(tǒng)開發(fā)工作好壞的主要指標(biāo)之一。
數(shù)據(jù)庫設(shè)計(jì)主要是進(jìn)行數(shù)據(jù)庫的邏輯設(shè)計(jì),即將數(shù)據(jù)按一定的分類、分組系統(tǒng)和邏輯層次組織起來,是面向用戶的。數(shù)據(jù)庫設(shè)計(jì)時(shí)需要綜合企業(yè)各個(gè)部門的存檔數(shù)據(jù)和數(shù)據(jù)需求,分析各個(gè)數(shù)據(jù)之間的關(guān)系,按照DBMS提供的功能和描述工具,設(shè)計(jì)出規(guī)模適當(dāng)、正確反映數(shù)據(jù)關(guān)系、數(shù)據(jù)冗余少、存取效率高、能滿足多種查詢要求的數(shù)據(jù)模型。
數(shù)據(jù)庫設(shè)計(jì)的步驟是:
(1) 數(shù)據(jù)庫結(jié)構(gòu)定義:目前的數(shù)據(jù)庫管理系統(tǒng)(DBMS)有的是支持聯(lián)機(jī)事務(wù)處理CLTP(負(fù)責(zé)對(duì)事務(wù)數(shù)據(jù)進(jìn)行采集、處理、存儲(chǔ))的操作型DBMS,有的可支持?jǐn)?shù)據(jù)倉(cāng)庫、有聯(lián)機(jī)分析處理CLAP(指為支持決策的制定對(duì)數(shù)據(jù)的一種加工操作)功能的大型DBMS,有的數(shù)據(jù)庫是關(guān)系型的、有的可支持面向?qū)ο髷?shù)據(jù)庫。針對(duì)選擇的DBMS,進(jìn)行數(shù)據(jù)庫結(jié)構(gòu)定義。
(2) 數(shù)據(jù)表定義:數(shù)據(jù)表定義指定義數(shù)據(jù)庫中數(shù)據(jù)表的結(jié)構(gòu),數(shù)據(jù)表的邏輯結(jié)構(gòu)包括:屬性名稱、類型、表示形式、缺省值、校驗(yàn)規(guī)則、是否關(guān)鍵字、可否為空等。關(guān)系型數(shù)據(jù)庫要盡量按關(guān)系規(guī)范化要求進(jìn)行數(shù)據(jù)庫設(shè)計(jì),但為使效率高,規(guī)范化程度應(yīng)根據(jù)應(yīng)用環(huán)境和條件來決定。數(shù)據(jù)表設(shè)計(jì)不僅要滿足數(shù)據(jù)存儲(chǔ)的要求,還要增加一些如反映有關(guān)信息、操作責(zé)任、中間數(shù)據(jù)的字段或臨時(shí)數(shù)據(jù)表。
(3) 存儲(chǔ)設(shè)備和存儲(chǔ)空間組織:確定數(shù)據(jù)的存放地點(diǎn)、存儲(chǔ)路徑、存儲(chǔ)設(shè)備等,備份方案,對(duì)多版本如何保證一致性和數(shù)據(jù)的完整性。
(4) 數(shù)據(jù)使用權(quán)限設(shè)置:針對(duì)用戶的不同使用要求,確定數(shù)據(jù)的用戶使用權(quán)限,確保數(shù)據(jù)安全。
(5) 數(shù)據(jù)字典設(shè)計(jì):用數(shù)據(jù)字典描述數(shù)據(jù)庫的設(shè)計(jì),便于維護(hù)和修改。
為了更好地組織數(shù)據(jù)和設(shè)計(jì)出實(shí)際應(yīng)用數(shù)據(jù)庫,應(yīng)該注意如下問題:
規(guī)范化地重組數(shù)據(jù)結(jié)構(gòu):對(duì)數(shù)據(jù)進(jìn)行規(guī)范化表達(dá),這在后面將會(huì)具體討論。
關(guān)系數(shù)據(jù)結(jié)構(gòu)的建立:在進(jìn)行了數(shù)據(jù)基本結(jié)構(gòu)的規(guī)范化重組后,還必須建立整體數(shù)據(jù)的關(guān)系結(jié)構(gòu)。這一步設(shè)計(jì)完成后數(shù)據(jù)庫和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)工作基本完成,只待系統(tǒng)實(shí)現(xiàn)時(shí)將數(shù)據(jù)分析和數(shù)據(jù)字典的內(nèi)容代入到所設(shè)計(jì)的數(shù)據(jù)整體關(guān)系結(jié)構(gòu)中,一個(gè)規(guī)范化數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)就建立起來了。
建立關(guān)系數(shù)據(jù)結(jié)構(gòu)涉及三方面內(nèi)容:確定關(guān)聯(lián)的關(guān)鍵指標(biāo)項(xiàng)并建立關(guān)聯(lián)表;確定單一的父系記錄結(jié)構(gòu);建立整個(gè)數(shù)據(jù)庫的關(guān)系結(jié)構(gòu)。
(1)鏈接關(guān)系的確定
在進(jìn)行了上述數(shù)據(jù)規(guī)范化重組后,已經(jīng)可以確保每一個(gè)基本數(shù)據(jù)表(我們簡(jiǎn)稱為表)是規(guī)范的,但是這些單獨(dú)的表并不能完整地反映事物,通常需要通過指標(biāo)體系整體指標(biāo)數(shù)據(jù)才能完整全面地反映問題。也就是說在這些基本表的各宇段中,所存儲(chǔ)的是同一事物不同側(cè)面的屬性。那么計(jì)算機(jī)系統(tǒng)如何能知道哪些表中的哪些記錄應(yīng)與其它表中的哪些記錄相對(duì)應(yīng),它們表示的是同一個(gè)事物呢?這就需要在設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)時(shí)將這種各表之間的數(shù)據(jù)記錄關(guān)系確定下來。這種表與表之間的數(shù)據(jù)關(guān)系一般都是通過主或輔關(guān)鍵詞之間的連接來實(shí)現(xiàn)的。因?yàn)樵诿總(gè)表中只有主關(guān)鍵詞才能唯一地標(biāo)識(shí)表中的這一個(gè)記錄值(因?yàn)楦鶕?jù)第三范式的要求,表中其它數(shù)據(jù)字段函數(shù)都依賴于主關(guān)鍵詞),所以將表通過關(guān)鍵詞連接就能夠唯一地標(biāo)識(shí)出某一事物不同屬性在不同表中的存放位置。
(2)確定單一的父子關(guān)系結(jié)構(gòu)
所謂確定單一的父系關(guān)系結(jié)構(gòu)就是要在所建立的各種表中消除多對(duì)多(以下用M:N來表示)的現(xiàn)象,即設(shè)法使得所有表中記錄之間的關(guān)系呈樹狀結(jié)構(gòu)(只能由一個(gè)主干發(fā)出若干條分支,而不能有若干條主干交錯(cuò)發(fā)出若干條分支狀況)。所謂的“父系”就是指表的上一級(jí)關(guān)系表。消除多對(duì)多關(guān)系可以借助于E-R圖的方法來解決,也可以在系統(tǒng)分析時(shí)予以注意,避免這種情況的發(fā)生。
消除這種M:N情況的辦法也很簡(jiǎn)單,只需在二表之間增加一個(gè)表,則原來M:N的關(guān)系就改成了M:1,1:N的關(guān)系了。
確定數(shù)據(jù)資源的安全保密屬性:
一般DBMS都提供給我們自己定義數(shù)據(jù)安全保密性的功能。系統(tǒng)所提供的安全保密功能一般有8個(gè)等級(jí)(0-7級(jí)),4種不同方式(只讀、只寫、刪除、修改),而且允許用戶利用這8個(gè)等級(jí)的4種方式對(duì)每一個(gè)表自由地進(jìn)行定義。
定義安全保密性的方法一般有如下幾種:
a.原則上所有文件都定義為4級(jí),個(gè)別優(yōu)先級(jí)特別高的辦公室(終端或微機(jī)的入網(wǎng)賬號(hào))可定義高于4級(jí)的級(jí)別,反之則定義為低于4的級(jí)別。
b.統(tǒng)計(jì)文件(表)和數(shù)據(jù)錄入文件一般只對(duì)本工作站定義為只寫方式,對(duì)其它工作站則定義為只讀方式。
c.財(cái)務(wù)等保密文件一般只對(duì)中工作站(如財(cái)務(wù)科等)定義為可寫、可改、可刪除方式,對(duì)其它工作站則定義為只讀方式,而且不是每個(gè)人都能讀,只有級(jí)別相同和高級(jí)別者才能讀。
2.1.2 數(shù)據(jù)庫設(shè)計(jì)范式分析
建立起一個(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ī)范化的重新組織。
a. 數(shù)據(jù)組織的規(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ù)元素(data element),這種關(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ì):
l 在表中的任意一列上,數(shù)據(jù)項(xiàng)應(yīng)屬于同一個(gè)屬性(如圖中每一列都存放著不同合同記錄的同一屬性數(shù)據(jù))。
l 表中所有行都是不相同的,不允許有重復(fù)組項(xiàng)出現(xiàn)(如圖中每一行都是一個(gè)不同的合同記錄)。
l 在表中,行的順序無關(guān)緊要(如圖中每行存的都是合同記錄,至于先放哪一個(gè)合同都沒關(guān)系)。
l 在表中,列的順序無關(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)滿足第一、二、三范式,……,依此類推。
第一范式(first normal form,簡(jiǎn)稱1st NF)就是指在同一表中沒有重復(fù)項(xiàng)出現(xiàn),如果有則應(yīng)將重復(fù)項(xiàng)去掉。這個(gè)去掉重復(fù)項(xiàng)的過程就稱之為規(guī)范化處理。在本文所討論的開發(fā)方法里,1st NF實(shí)際上是沒有什么意義的。因?yàn)槲覀儼匆?guī)范化建立的指標(biāo)體系和表的過程都自動(dòng)保證了所有表都滿足1st NF。
第二范式(second normal form,簡(jiǎn)稱 2nd NF)是指每個(gè)表必須有一個(gè)(而且僅一個(gè))數(shù)據(jù)元素為主關(guān)鍵字(primary key),其它數(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ù)依賴(functional depEndence)關(guān)系。即表中其它數(shù)據(jù)元素都依賴于主關(guān)鍵字,或稱該數(shù)據(jù)元素唯一地被主關(guān)鍵字所標(biāo)識(shí)。
第三范式(third normal form,簡(jiǎn)稱 3rd NF)就是指表中的所有數(shù)據(jù)元素不但要能夠唯一地被主關(guān)鍵字所標(biāo)識(shí),而且它們之間還必須相互獨(dú)立,不存在其它的函數(shù)關(guān)系。也就是說對(duì)于一個(gè)滿足了 2nd NF的數(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ì)。
§2.2 SQL語言介紹
2.2.1 SQL基礎(chǔ)
SQL(Structured Query Language,結(jié)構(gòu)查詢語言)是一個(gè)功能強(qiáng)大的數(shù)據(jù)庫語言。SQL通常使用于數(shù)據(jù)庫的通訊。ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì))聲稱,SQL是關(guān)系數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言。SQL語句通常用于完成一些數(shù)據(jù)庫的操作任務(wù),比如在數(shù)據(jù)庫中更新數(shù)據(jù),或者從數(shù)據(jù)庫中檢索數(shù)據(jù)。使用SQL的常見關(guān)系數(shù)據(jù)庫管理系統(tǒng)有:Oracle、 Sybase、 Microsoft SQL Server、 Access、 Ingres等等。雖然絕大多數(shù)的數(shù)據(jù)庫系統(tǒng)使用SQL,但是它們同樣有它們自立另外的專有擴(kuò)展功能用于它們的系統(tǒng)。但是,標(biāo)準(zhǔn)的SQL命令,比如"Select"、 "Insert"、 "Update"、 "Delete"、 "Create"和 "Drop"常常被用于完成絕大多數(shù)數(shù)據(jù)庫的操作。MS SQL Server 就是用的Transact- SQL。
SQL語言有著非常突出的優(yōu)點(diǎn),主要是:
n 非過程化語言
n 統(tǒng)一的語言
n 是所有關(guān)系數(shù)據(jù)庫的公共語言
非過程化語言:SQL是一個(gè)非過程化的語言,因?yàn)樗淮翁幚硪粋(gè)記錄,對(duì)數(shù)據(jù)提供自動(dòng)導(dǎo)航。SQL允許用戶在高層的數(shù)據(jù)結(jié)構(gòu)上工作,而不對(duì)單個(gè)記錄進(jìn)行操作,可操作記錄集,所有SQL 語句接受集合作為輸入,返回集合作為輸出。SQL的集合特性允許一條SQL語句的結(jié)果作為另一條SQL語句的輸入。
SQL不要求用戶指定對(duì)數(shù)據(jù)的存放方法, 這種特性使用戶更易集中精力于要得到的結(jié)果;所有SQL語句使用查詢優(yōu)化器,它是RDBMS的一部分,由它決定對(duì)指定數(shù)據(jù)存取的最快速度的手段,查詢優(yōu)化器知道存在什么索引,在哪兒使用索引合適,而用戶則從不需要知道表是否有索引、有什么類型的索引。
統(tǒng)一的語言:SQL可用于所有用戶的DB活動(dòng)模型,包括系統(tǒng)管理員、數(shù)據(jù)庫管理員、應(yīng)用程序員、決策支持系統(tǒng)人員及許多其它類型的終端用戶。
SQL為許多任務(wù)提供了命令,其中包括:
n 查詢數(shù)據(jù)
n 在表中插入、修改和刪除記錄
n 建立、修改和刪除數(shù)據(jù)對(duì)象
n 控制對(duì)數(shù)據(jù)和數(shù)據(jù)對(duì)象的存取
n 保證數(shù)據(jù)庫一致性和完整性
以前的數(shù)據(jù)庫管理系統(tǒng)為上述各類操作提供單獨(dú)的語言,而SQL 將全部任務(wù)統(tǒng)一在一種語言中。
所有關(guān)系數(shù)據(jù)庫的公共語言:由于所有主要的關(guān)系數(shù)據(jù)庫管理系統(tǒng)都支持SQL語言,用戶可將使用SQL的技能從一個(gè)RDBMS(關(guān)系數(shù)據(jù)庫管理系統(tǒng))轉(zhuǎn)到另一個(gè),所有用SQL編寫的程序都是可以移植的。
2.2.2 SQL語句
SQL功能強(qiáng)大,是一種完備的數(shù)據(jù)處理語言,不僅用于數(shù)據(jù)庫查詢,而且用于數(shù)據(jù)庫中的數(shù)據(jù)修改和更新,概括起來,它可以分成以下幾組:
DML(Data Manipulation Language,數(shù)據(jù)操作語言):用于檢索或者修改數(shù)據(jù);
DDL(Data Definition Language,數(shù)據(jù)定義語言): 用于定義數(shù)據(jù)的結(jié)構(gòu),比如創(chuàng)建、修改或者刪除數(shù)據(jù)庫對(duì)象;
DCL(Data Control Language,數(shù)據(jù)控制語言):用于定義數(shù)據(jù)庫用戶的權(quán)限。
DML組可以細(xì)分為以下的幾個(gè)語句:
SELECT:用于檢索數(shù)據(jù);
INSERT:用于增加數(shù)據(jù)到數(shù)據(jù)庫;
UPDATE:用于從數(shù)據(jù)庫中修改現(xiàn)存的數(shù)據(jù);
DELETE:用于從數(shù)據(jù)庫中刪除數(shù)據(jù)。
DDL語句可以用于創(chuàng)建用戶和重建數(shù)據(jù)庫對(duì)象。下面是DDL命令:
CREATE TABLE,ALTER TABLE,DROP TABLE,CREATE INDEX,DROP INDEX
下面是一個(gè)簡(jiǎn)單SQL語句的例子:
我們使用SQL語句來從Book中檢索‘借書證號(hào)’為‘
SELECT 姓名 FROM Book WHERE 借書證號(hào) = ‘
2.2.2.1 DDL與DML
數(shù)據(jù)定義語言DDL:它是用來創(chuàng)建和修改數(shù)據(jù)庫結(jié)構(gòu)的一種語句,包括 Create、Alter和Drop 語句。
數(shù)據(jù)操作語言DML:包括數(shù)據(jù)查詢與數(shù)據(jù)更新。數(shù)據(jù)查詢主要是由Select語句完成,這一點(diǎn)不再贅述。而數(shù)據(jù)更新所造成的風(fēng)險(xiǎn)大大超過數(shù)據(jù)查詢。數(shù)據(jù)庫管理系統(tǒng)必須在更改期內(nèi)保護(hù)所存儲(chǔ)的數(shù)據(jù)的一致性,確保有效的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫,數(shù)據(jù)庫必須保持一致性,DBMS還必須協(xié)調(diào)多用戶的并行更新,以確保用戶和它們的更改不至于影響其它用戶的作業(yè)。
用于修改數(shù)據(jù)庫內(nèi)容的 SQL 語句主要有以下三個(gè):
(1) Insert,向一個(gè)表中加入新的數(shù)據(jù)行
(2) Delete,從一個(gè)表中刪除數(shù)據(jù)行
(3) Update,更改數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù)
Insert標(biāo)準(zhǔn)語法:
INSERT INTO table_name (col1, col2...) VALUES(value1, value2...)
下例要將借書證號(hào)為‘
Insert Into
owner (借書證號(hào),圖書編號(hào),借書日期)
values (‘
Insert 語句還可以將多行數(shù)據(jù)添加到目標(biāo)表中去,在這種形式的 Insert 語句中,新行的數(shù)據(jù)值不是在語句正文中明確地指定的,而是語句中指定的一個(gè)數(shù)據(jù)庫查詢。添加的值來自數(shù)據(jù)庫自身的行,在某些特定的狀態(tài)下,這是非常有用的。多行 Insert 語句為拷貝數(shù)據(jù)提供了一種緊湊而高效的方法,但我在自已做的圖書管理系統(tǒng)中沒有使用這種方法,我在系統(tǒng)中是使用循環(huán)依照上面的用法來完成多個(gè)記錄的插入。
Update語句用于更新單表中選定行的一列或多列的值。要更新的目標(biāo)表在語句中定義,Set子句則指定要更新哪些列并計(jì)算它們的值。Update語句總是包含Where語句,而且Update語句比較危險(xiǎn),所以您必須明確地認(rèn)識(shí)到Where語句的重要性,Where語句被用來指定需要更新的行。
標(biāo)準(zhǔn)語法:
UPDATE table_name
SET columnname1 = value1
[, columname2 = value2]...
WHERE search_condition
Delete 語句標(biāo)準(zhǔn)語法:
DELETE FROM tablename WHERE condition
2.2.2.2 復(fù)雜操作實(shí)現(xiàn)
在信息管理系統(tǒng)中,我們往往會(huì)遇到歸類、匯總、映射、索引、子查詢等復(fù)雜操作,相應(yīng)的支持與實(shí)現(xiàn)如下:
u GROUP BY方法
GROUP BY子句語法為:
SELECT column1, SUM(column2)
FROM "list-of-tables"
GROUP BY "column-list";
這個(gè)GROUP BY子句將集中所有的行在一起,它包含了指定列的數(shù)據(jù)以及允許合計(jì)函數(shù)來計(jì)算一個(gè)或者多個(gè)列。
在本人的系統(tǒng)中在顯示數(shù)據(jù)時(shí)用到了此語句來對(duì)查詢所得的內(nèi)容排序然后再顯示。
u 組合條件和布爾運(yùn)算符
以下的SQL語句中就含有組合條件:
SELECT column1, SUM(column2)
FROM "list-of-tables"
WHERE "condition1" AND "condition2";
下面是一個(gè)示例:
SELECT 身份描述
FROM ID,user
WHERE ID.身份編號(hào)=USER.身份編號(hào) and user.借書證號(hào)=’
這條SQL語句是從user、id表中查找借閱證號(hào)為000001的借閱者的身份描述,第三條語句中如果其中有一個(gè)條件為假,那么就什么都沒有顯示。
u UNION子句
有些時(shí)候,需要一起瀏覽多個(gè)查詢的結(jié)果、組合它們的輸出,我們可以使用UNION關(guān)鍵字。
第三章 應(yīng)用系統(tǒng)開發(fā)工具
§3.1 Delphi6.0 VCL組件的體系結(jié)構(gòu)
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ū)ο缶幊痰幕舅枷,就使得用戶可?SPAN lang=EN-US>Tobject類這個(gè)類型代替任何其它類的數(shù)據(jù)類型。實(shí)際上在Delphi的類庫中,Tobject類派生出了為數(shù)相當(dāng)眾多的子類,它們形成了一個(gè)龐大的體系,通常情況下,如果不自行開發(fā)組件,就不必了解整個(gè)類的體系結(jié)構(gòu),只用到類層次樹的葉結(jié)點(diǎn)就足夠了。
這一小節(jié)簡(jiǎn)略介紹一下Delphi 6.0中VCL(可視化組件庫)組件的體系結(jié)構(gòu)。凡是做過程序開發(fā)的人都知道從來沒有單純的數(shù)據(jù)應(yīng)用程序,也就是說,數(shù)據(jù)庫應(yīng)用程序必須和用戶界面(可以是圖形界面,也可以是命令接口)元素相結(jié)合,只講界面或只講數(shù)據(jù)庫本身都構(gòu)不成數(shù)據(jù)庫應(yīng)用程序,因而用Delphi 6.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。由此可以看出圖形組件的功能很弱,圖形組件的用處何在呢?其實(shí)使用圖形組件的最大好處在于節(jié)省資源,正是因?yàn)樗鼈兊墓δ茌^弱,所以使用的系統(tǒng)資源就要少。在一個(gè)應(yīng)用程序中,如果能在不影響其功能的前提下合理大量地使用圖形組件,將會(huì)大減少程序?qū)ο到y(tǒng)資源的消耗。
非可視組件是與可視組件相并列的另一類組件,非可視組件在程序運(yùn)行中是不可見的(除各種對(duì)話框組件之外,事實(shí)上有人認(rèn)為對(duì)話框組件不能歸入非可視組件,應(yīng)該是另一種介于可視與非可視之間的組件)。
最后要說明一下,常說的控件實(shí)際上是一種組件。也就是說組件這個(gè)概念要大于控件,控件在內(nèi)涵上包含于組件中?丶Windows系列操作系統(tǒng)提出并使用,而組件是Borland和其它廠商在對(duì)Windows控件做了必要的擴(kuò)展之后提出來的概念,它們是在不同時(shí)期由不同的廠商提出的概念。
§3.2 數(shù)據(jù)庫組件介紹
用Delphi6開發(fā)數(shù)據(jù)庫應(yīng)用,重點(diǎn)是和各種數(shù)據(jù)庫組件打交道,能和數(shù)據(jù)庫掛鉤的組件對(duì)象有5種,它們是:Session(數(shù)據(jù)庫會(huì)話)、Database(數(shù)據(jù)庫)、Dataset(數(shù)據(jù)集)、DataSource(數(shù)據(jù)源)、Data control(數(shù)據(jù)控制組件,也叫data-controls即數(shù)據(jù)感知組件)。其中前面4種統(tǒng)稱為數(shù)據(jù)訪問(Data Access)組件。這些組件的相互關(guān)系如圖3-2所示。
ADO組件 Delphi6.0包含了可以用來訪問Microsoft公司的ActiveX Data Objects(ADO)格式數(shù)據(jù)庫的組件。ADO是Micrsoft公司關(guān)于各種類型數(shù)據(jù)的高等界面,后來逐漸演變成滿足所有數(shù)據(jù)訪問需要的完整解決辦法。ADO的對(duì)象模型是所有數(shù)據(jù)訪問接口對(duì)象模型中最簡(jiǎn)單的一種。Microsoft公司用來訪問ADO數(shù)據(jù)的應(yīng)用程序界面技術(shù)是OLE DB。OLE DB是一種底層編程接口,用來訪問許多不同類型的數(shù)據(jù)源,其中包括消息、文件系統(tǒng)以及其他一些非傳統(tǒng)的數(shù)據(jù)源。OLE DB是一個(gè)由Component Object Model(COM)接口組成的集合,用來隱藏創(chuàng)建數(shù)據(jù)訪問服務(wù)過程中的細(xì)節(jié)。OLEDB提供了訪問任何數(shù)據(jù)資源的方法,包括相互關(guān)聯(lián)的數(shù)據(jù)庫和相互不關(guān)聯(lián)的數(shù)據(jù)庫、Email和文件系統(tǒng)、文本和圖形以及用戶定義的數(shù)據(jù)對(duì)象。
Delphi的ADO組件無需依靠BDE而是使用ADO技術(shù),提供了可以通過數(shù)據(jù)控制組件訪問數(shù)據(jù)的新方法。唯一的要求是在使用ADO組件時(shí)必須運(yùn)行ADO/OLE-DB。ADO組件的使用使得DELPHI在訪問數(shù)據(jù)的類型和采用的技術(shù)方面都有了很大的突破。
數(shù)據(jù)模塊設(shè)計(jì)窗口 數(shù)據(jù)模塊設(shè)計(jì)窗口是用來設(shè)計(jì)和維護(hù)數(shù)據(jù)模塊的。數(shù)據(jù)模塊設(shè)計(jì)窗口中包含了所有以.DTI作為文件擴(kuò)展名的Data Diagram文件的信息。DTI文件在編譯時(shí)不起任何作用。
§3.3 SQL語言在Delphi中的應(yīng)用
在Delphi中使用SQL語言非常方便,一般來說,都是通過Tquery或TADOquery組件來使用SQL語言的?梢栽Tquery或TADOquery組件的SQL屬性中設(shè)置SQL語句。設(shè)計(jì)程序時(shí),在該組件的屬性對(duì)話框中選擇SQL屬性,單擊帶省略號(hào)的按鈕,就可以打開String List Editor對(duì)話框,然后我們就可以在對(duì)話框中添加SQL語句。還可以使用Delphi的SQL Builder來自動(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 * From Book Where 圖書編號(hào) =:bookCode;
其中的變量bookCode便是一個(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è)置TADOQuery組件的parameters屬性值為參數(shù)賦值。
②直接根據(jù)SQL語句中各參數(shù)的名字,調(diào)用ParamByName方法來為各參數(shù)賦值。
③將TADOQuery組件的DataSource屬性設(shè)置為另一個(gè)數(shù)據(jù)源,這樣將另一個(gè)數(shù)據(jù)源中與當(dāng)前TADOQuery組件的SQL語句中的參數(shù)名相匹配的字段值賦給其對(duì)應(yīng)的參數(shù)。利用這種方法也能實(shí)現(xiàn)所謂的連接查詢,創(chuàng)建主要—明細(xì)型數(shù)據(jù)庫應(yīng)用。
在使用動(dòng)態(tài)SQL語句編程時(shí),常常用到一個(gè)很重要的方法Prepare,調(diào)用Prepare 方法之后,Delphi會(huì)將帶參數(shù)的SQL語句傳送給與其對(duì)應(yīng)的數(shù)據(jù)庫引擎,對(duì)動(dòng)態(tài)SQL語句進(jìn)行語法分析和優(yōu)化。雖然在用動(dòng)態(tài)SQL語句編程時(shí),調(diào)用Prepare方法并不是必須的,但是調(diào)用Prepare方法后,會(huì)極大地提高動(dòng)態(tài)SQL 語句的執(zhí)行性能,特別是當(dāng)要反復(fù)多次執(zhí)行同一條動(dòng)態(tài)SQL語句時(shí),其優(yōu)越性會(huì)更加明顯。 如果在應(yīng)用程序中執(zhí)行一條SQL語句之前并沒有顯式地調(diào)用Prepare方法,每次在執(zhí)行SQL 語句時(shí),Delphi會(huì)隱含地調(diào)用Prepare方法以準(zhǔn)備這個(gè)查詢。
TadoQuery部件還有一個(gè)Prepare屬性,這是一個(gè)布爾型屬性,當(dāng)其屬性值為True時(shí), 表明該查詢已被準(zhǔn)備好了( SQL 語句已被傳送到數(shù)據(jù)庫引擎中 ) , 當(dāng)我們使用參數(shù)編輯器Parameters Editor來為動(dòng)態(tài)SQL語句中的參數(shù)賦值時(shí),當(dāng)設(shè)置完相應(yīng)的參數(shù)值并退出參數(shù)編輯器時(shí),Delphi會(huì)隱含地調(diào)用Prepare方法以準(zhǔn)備好查詢。
當(dāng)SQL語句執(zhí)行完之后,要想準(zhǔn)備下一個(gè)查詢,首先必須調(diào)用Close方法,然后才能調(diào)用Prepare方法準(zhǔn)備下一個(gè)查詢。一般來說,在一個(gè)應(yīng)用程序中應(yīng)該調(diào)用一次Prepare方法,常常在窗體的OnCreate事件處理過程中調(diào)用Prepare方法, 然后用上述介紹的方法為參數(shù)賦值,最后調(diào)用Open方法或ExecSQL方法執(zhí)行SQL語句,以完成查詢。
當(dāng)然在調(diào)用Prepare方法準(zhǔn)備好一個(gè)查詢時(shí),會(huì)消耗一些數(shù)據(jù)庫資源, 因而每當(dāng)一個(gè)查詢執(zhí)行完畢之后,要養(yǎng)成調(diào)用UnPrepare方法以撤消查詢的好習(xí)慣。在運(yùn)行程序過程中,通過程序改變TQuery或TADOquery部件的SQL屬性值時(shí),Delphi會(huì)自動(dòng)地調(diào)用Close方法和UnPrepare 方法,以撤消查詢。
在程序運(yùn)行過程中,要想設(shè)置Tquery或TADOquery部件的SQL屬性,必須首先調(diào)用Close方法,關(guān)閉TQuery或TADOquery部件,然后再調(diào)用Clear方法清除SQL屬性中現(xiàn)存的SQL命令語句,最后再調(diào)用Add方法為SQL屬性設(shè)置新的SQL命令語句。例如:
datamodule4.adoquery2.close;
datamodule4.adoquery2.sql.clear;
datamodule4.adoquery2.sql.add('SELECT 借書證號(hào),密碼 FROM [user] WHERE (借書證號(hào) = :tt)');
datamodule4.adoquery2.parameters[0].value:=username;
datamodule4.adoquery2.open;
在為TQuery或TADOquery部件設(shè)置SQL屬性時(shí)調(diào)用Close方法總是很安全的,如果TQuery或TADOquery部件已經(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或TADOquery部件的SQL屬性只能包含一條完整的SQL語句,它不允許被設(shè)置成多條SQL語句。當(dāng)然有些數(shù)據(jù)庫服務(wù)器也支持在TQuery或TADOquery部件的SQL屬性中設(shè)置多條SQL語句,只要數(shù)據(jù)庫服務(wù)器允許這樣,我們?cè)诰幊虝r(shí)可以為 SQL 屬性設(shè)置多條SQL語句。
在為TQuery或TADOquery部件設(shè)置完SQL屬性的屬性值之后,也即編寫好適當(dāng)?shù)?SPAN lang=EN-US>SQL程序之后,可以有多種方式來執(zhí)行SQL程序。
在設(shè)計(jì)過程中,設(shè)置完TQuery或TADOquery部件的SQL屬性之后將其Active屬性的值置為True, 這樣便可以執(zhí)行SQL屬性中的SQL程序,如果應(yīng)用中有與TQuery或TADOquery部件相連的數(shù)據(jù)瀏覽部件( 如TDDGrid TDBEdit等)那么在這些數(shù)據(jù)瀏覽部件中會(huì)顯示SQL程序的執(zhí)行結(jié)果。
在應(yīng)用程序運(yùn)行過程中,通過程序調(diào)用TQuery或TADOquery組件的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或TADOquery組件中的SQL 語句是否會(huì)返回一個(gè)查詢結(jié)果的。對(duì)于這種情況應(yīng)當(dāng)用Try…Except模塊來設(shè)計(jì)程序。在 Try 部分調(diào)用Open方法,而在Except部分調(diào)用ExceSQL方法,這樣才能保證程序的正確運(yùn)行。
例如:
Try
Query1.Open
Except
Query1.ExecSQL
End
通過Tquery或TADOquery組件可以獲得兩種類型的數(shù)據(jù):
u “活動(dòng)”的數(shù)據(jù)
這種數(shù)據(jù)就跟通過TTable部件獲得的數(shù)據(jù)一樣,用戶可以通過數(shù)據(jù)瀏覽部件來編輯修改這些數(shù)據(jù),并且當(dāng)調(diào)用Post方法或當(dāng)焦點(diǎn)離開當(dāng)前的數(shù)據(jù)瀏覽部件時(shí),用戶對(duì)數(shù)據(jù)的修改自動(dòng)地被寫回到數(shù)據(jù)庫中。
u 非活動(dòng)的數(shù)據(jù)(只讀數(shù)據(jù))
用戶通過數(shù)據(jù)瀏覽部件是不能修改其中的數(shù)據(jù)。在缺省情況下,通過TQuery部件獲得的查詢結(jié)果數(shù)據(jù)是只讀數(shù)據(jù),要想獲得“活動(dòng)”的數(shù)據(jù),在應(yīng)用程序中必須要設(shè)置Tquery或TADOquery組件的RequestLive屬性值為True,然而并不是在任何情況下(通過設(shè)置RequestLive的屬值True)都可以獲得“活動(dòng)”的數(shù)據(jù)的,要想獲得“活動(dòng)”的數(shù)據(jù),除了將TQuery部件的RequestLive屬性設(shè)置為True外,相應(yīng)的SQL命令還要滿足以下條件。
本地SQL語句查詢情況下,要得到可更新的數(shù)據(jù)集,SQL語句的限制為:
n 查詢只能涉及到一個(gè)單獨(dú)的表
n SQL語句中不能包含ORDER BY命令
n SQL語句中不能含聚集運(yùn)算符SUM或AVG
n 在Select后的字段列表中不能有計(jì)算字段
n 在Select語句WHERE部分只能包含字段值與常量的比較運(yùn)算,這些比較運(yùn)算符是:Like, >, <, >=, <=。各比較運(yùn)算之間可以有并和交運(yùn)算:AND和OR
當(dāng)通過SQL語句查詢數(shù)據(jù)庫服務(wù)器中的數(shù)據(jù)庫表:
n 查詢只能涉及到一個(gè)單獨(dú)的表
n SQL語句中不能包含ORDER BY命令
n SQL語句中不能含聚集運(yùn)算符SUM或AVG運(yùn)算
另外,如果是查詢Sybase數(shù)據(jù)庫中的表,那么被查詢的表中只能有一個(gè)索引。
如果在應(yīng)用程序中要求TQuery或TADOquery組件返回一個(gè)“活動(dòng)”的查詢結(jié)果數(shù)據(jù)集,但是SQL 命令語句不滿足上述約束條件時(shí),對(duì)于本地?cái)?shù)據(jù)庫的SQL查詢,BDE只能返回只讀的數(shù)據(jù)集。對(duì)于數(shù)據(jù)庫服務(wù)器中的SQL查詢,只能返回錯(cuò)誤的代碼。當(dāng)Tquery或TADOquery組件返回一個(gè)“活動(dòng)”的查詢結(jié)果數(shù)據(jù)集時(shí),它的CanModIfy屬性的值會(huì)被設(shè)置成True。
§3.4 MS SQL Server簡(jiǎn)述
SQL Server 是一個(gè)后臺(tái)數(shù)據(jù)庫管理系統(tǒng),它功能強(qiáng)大操作簡(jiǎn)便,日益為廣大數(shù)據(jù)庫用戶所喜愛。越來越多的開發(fā)工具提供了與SQL Server的接口。SQL Server 是一個(gè)關(guān)系數(shù)據(jù)庫管理系統(tǒng),它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同開發(fā)的。于1988 年推出了第一個(gè)OS/2 版本,在Windows NT 推出后,Microsoft與Sybase 在SQL Server 的開發(fā)上就分道揚(yáng)鑣了,Microsoft 將SQL Server 移植到Windows NT系統(tǒng)上,專注于開發(fā)推廣SQL Server 的Windows NT 版本。
SQL Server 2000 是Microsoft 公司推出的SQL Server 數(shù)據(jù)庫管理系統(tǒng)的最新版本,該版本繼承了SQL Server 7.0 版本的優(yōu)點(diǎn),同時(shí)又比它增加了許多更先進(jìn)的功能、具有使用方便、可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點(diǎn)?煽缭綇倪\(yùn)行Microsoft Windows 98 的膝上型電腦到運(yùn)行Microsoft Windows 2000 的大型多處理器的服務(wù)器等多種平臺(tái)使用。MSSQL Server不但可以應(yīng)用于大中型數(shù)據(jù)庫管理中,建立分布式關(guān)系數(shù)據(jù)庫,并且也可以開發(fā)桌面數(shù)據(jù)庫。事實(shí)上,SQL Server數(shù)據(jù)庫處理的基本結(jié)構(gòu),采取關(guān)系型數(shù)據(jù)庫模式,盡管如此,相信大家都可以輕易的發(fā)現(xiàn),在SQL Server的數(shù)據(jù)庫處理方式,則是使用面向?qū)ο蟮牟僮鞣绞脚c精神,也就是說,SQL Server的所有功能,都可以基于系統(tǒng)已經(jīng)建立好的一些對(duì)象來達(dá)成,是相當(dāng)OO(面向?qū)ο螅┑囊粋(gè)系統(tǒng)結(jié)構(gòu)。
SQL Server 企業(yè)管理器是 SQL Server 的主要管理工具,它提供了一個(gè)遵從 MMC 標(biāo)準(zhǔn)的用戶界面,使用戶得以:
· 定義 SQL Server 實(shí)例組。
· 將個(gè)別服務(wù)器注冊(cè)到組中。
· 為每個(gè)已注冊(cè)的服務(wù)器配置所有 SQL Server 選項(xiàng)。
· 在每個(gè)已注冊(cè)的服務(wù)器中創(chuàng)建并管理所有 SQL Server 數(shù)據(jù)庫、對(duì)象、登錄、用戶和權(quán)限。
· 在每個(gè)已注冊(cè)的服務(wù)器上定義并執(zhí)行所有 SQL Server 管理任務(wù)。
· 通過喚醒調(diào)用 SQL 查詢分析器,交互地設(shè)計(jì)并測(cè)試 SQL 語句、批處理和腳本。
· 喚醒調(diào)用為 SQL Server 定義的各種向?qū)А?/FONT>
·
第三章 圖書管理系統(tǒng)設(shè)計(jì)分析
§4.1 應(yīng)用需求分析
圖書管理系統(tǒng)需要滿足來自三方面的需求,這三個(gè)方面分別是圖書借閱者、圖書館工作人員和圖書館管理人員。圖書借閱者的需求是查詢圖書館所存的圖書、個(gè)人借閱情況及個(gè)人信息的修改;圖書館工作人員對(duì)圖書借閱者的借閱及還書要求進(jìn)行操作,同時(shí)形成借書或還書報(bào)表給借閱者查看確認(rèn);圖書館管理人員的功能最為復(fù)雜,包括對(duì)工作人員、圖書借閱者、圖書進(jìn)行管理和維護(hù),及系統(tǒng)狀態(tài)的查看、維護(hù)并生成催還圖書報(bào)表。
圖書借閱者可直接查看圖書館圖書情況,如果圖書借閱者根據(jù)本人借書證號(hào)和密碼登錄系統(tǒng),還可以進(jìn)行本人借書情況的查詢和維護(hù)部分個(gè)人信息。一般情況下,圖書借閱者只應(yīng)該查詢和維護(hù)本人的借書情況和個(gè)人信息,若查詢和維護(hù)其他借閱者的借書情況和個(gè)人信息,就要知道其他圖書借閱者的借書證號(hào)和密碼。這些是很難得到的,特別是密碼,所以不但滿足了圖書借閱者的要求,還保護(hù)了圖書借閱者的個(gè)人隱私。
圖書館工作人員有修改圖書借閱者借書和還書記錄的權(quán)限,所以需對(duì)工作人員登陸本模塊進(jìn)行更多的考慮。在此模塊中,圖書館工作人員可以為圖書借閱者加入借書記錄或是還書記錄,并打印生成相應(yīng)的報(bào)表給用戶查看和確認(rèn)。
圖書館管理人員功能的信息量大,數(shù)據(jù)安全性和保密性要求最高。本功能實(shí)現(xiàn)對(duì)圖書信息、借閱者信息、總體借閱情況信息的管理和統(tǒng)計(jì)、工作人員和管理人員信息查看及維護(hù)。圖書館管理員可以瀏覽、查詢、添加、刪除、修改、統(tǒng)計(jì)圖書的基本信息;瀏覽、查詢、統(tǒng)計(jì)、添加、刪除和修改圖書借閱者的基本信息,瀏覽、查詢、統(tǒng)計(jì)圖書館的借閱信息,但不能添加、刪除和修改借閱信息,這部分功能應(yīng)該由圖書館工作人員執(zhí)行,但是,刪除某條圖書借閱者基本信息記錄時(shí),應(yīng)實(shí)現(xiàn)對(duì)該圖書借閱者借閱記錄的級(jí)聯(lián)刪除。并且還應(yīng)具有生成催還圖書報(bào)表,并打印輸出的功能。
在本系統(tǒng)中由于沒有打印機(jī)設(shè)備供試驗(yàn),所以預(yù)先把報(bào)表打印改成報(bào)表預(yù)覽。
設(shè)計(jì)不同用戶的操作權(quán)限和登陸方法
對(duì)所有用戶開放的圖書查詢
借閱者維護(hù)借閱者個(gè)人部分信息
借閱者查看個(gè)人借閱情況信息
維護(hù)借閱者個(gè)人密碼
根據(jù)借閱情況對(duì)數(shù)據(jù)庫進(jìn)行操作并生成報(bào)表
根據(jù)還書情況對(duì)數(shù)據(jù)庫進(jìn)行操作并生成報(bào)表
查詢及統(tǒng)計(jì)各種信息
維護(hù)圖書信息
維護(hù)工作人員和管理員信息
維護(hù)借閱者信息
處理信息的完整性
對(duì)借閱過期的圖書生成報(bào)表
圖4-2 圖書管理系統(tǒng)數(shù)據(jù)庫應(yīng)用需求的總結(jié)
根據(jù)以上所做的需求分析,并略掉一些細(xì)節(jié)(如不考慮用戶的登錄;對(duì)記錄的維護(hù)),得出以下的三層數(shù)據(jù)流圖。
§4.2 系統(tǒng)功能模塊劃分
系統(tǒng)功能框圖如圖4-10所示。
§4.3 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)
在概念設(shè)計(jì)階段中,設(shè)計(jì)人員從用戶的角度看待數(shù)據(jù)及處理要求和約束,產(chǎn)生一個(gè)反映用戶觀點(diǎn)的概念模式。然后再把概念模式轉(zhuǎn)換成邏輯模式。將概念設(shè)計(jì)從設(shè)計(jì)過程中獨(dú)立開來,使各階段的任務(wù)相對(duì)單一化,設(shè)計(jì)復(fù)雜程度大大降低,不受特定DBMS的限制。
利用ER方法進(jìn)行數(shù)據(jù)庫的概念設(shè)計(jì),可分成三步進(jìn)行:首先設(shè)計(jì)局部ER模式,然后把各局部ER模式綜合成一個(gè)全局模式,最后對(duì)全局ER模式進(jìn)行優(yōu)化,得到最終的模式,即概念模式。
(1) 設(shè)計(jì)局部ER模式
實(shí)體和屬性的定義:
圖書(圖書編號(hào),圖書名稱,作者,出版社,出版日期,備注,價(jià)格,數(shù)量,)
借閱者(借書證號(hào),姓名,性別,身份證,聯(lián)系電話,密碼)
身份(身份編號(hào),身份描述,最大借閱數(shù))
圖書類別(圖書類別編號(hào),類別描述)
ER模型的“聯(lián)系”用于刻畫實(shí)體之間的關(guān)聯(lián)。一種完整的方式是對(duì)局部結(jié)構(gòu)中任意兩個(gè)實(shí)體類型,依據(jù)需求分析的結(jié)果,考察局部結(jié)構(gòu)中任意兩個(gè)實(shí)體類型之間是否存在聯(lián)系。若有聯(lián)系,進(jìn)一步確定是1:N,M:N,還是1:1等。還要考察一個(gè)實(shí)體類型內(nèi)部是否存在聯(lián)系,兩個(gè)實(shí)體類型之間是否存在聯(lián)系,多個(gè)實(shí)體類型之間是否存在聯(lián)系,等等。聯(lián)系定義如圖4-5所示。解釋如下:
u 一個(gè)借閱者(用戶)只能具有一種身份,而一種身份可被多個(gè)借閱者所具有;
u 一本圖書只能屬于一種圖書類別(類別),而一種圖書類別可以包含 多本圖書;
u 一個(gè)用戶可以借閱多本不同的書,而一本書也可以被多個(gè)不同的用戶所借閱。
(2)設(shè)計(jì)全局ER模式
所有局部ER模式都設(shè)計(jì)好了后,接下來就是把它們綜合成單一的全局概念結(jié)構(gòu)。全局概念結(jié)構(gòu)不僅要支持所有局部ER模式,而且必須合理地表示一個(gè)完整、一致的數(shù)據(jù)庫概念結(jié)構(gòu)。
1)確定公共實(shí)體類型
為了給多個(gè)局部ER模式的合并提供開始合并的基礎(chǔ),首先要確定各局部結(jié)構(gòu)中的公共實(shí)體類型。在這一步中我們僅根據(jù)實(shí)體類型名和鍵來認(rèn)定公共實(shí)體類型。一般把同名實(shí)體類型作為公共實(shí)體類型的一類候選,把具有相同鍵的實(shí)體類型作為公共實(shí)體類型的另一類候選。
2)局部ER模式的合并
合并的原則是:首先進(jìn)行兩兩合并;先和合并那些現(xiàn)實(shí)世界中有聯(lián)系的局部結(jié)構(gòu);合并從公共實(shí)體類型開始,最后再加入獨(dú)立的局部結(jié)構(gòu)。
3)消除沖突
沖突分為三類:屬性沖突、結(jié)構(gòu)沖突、命名沖突。
設(shè)計(jì)全局ER模式的目的不在于把若干局部ER模式形式上合并為一個(gè)ER模式,而在于消除沖突,使之成為能夠被所有用戶共同理解和接受的同一的概念模型。
3)全局ER模式的優(yōu)化
在得到全局ER模式后,為了提高數(shù)據(jù)庫系統(tǒng)的效率,還應(yīng)進(jìn)一步依據(jù)處理需求對(duì)ER模式進(jìn)行優(yōu)化。一個(gè)好的全局ER模式,除能準(zhǔn)確、全面地反映用戶功能需求外,還應(yīng)滿足下列條件:實(shí)體類型的個(gè)數(shù)要盡可能的少;實(shí)體類型所含屬性個(gè)數(shù)盡可能少;實(shí)體類型間聯(lián)系無冗余。
綜上所述,“圖書管理系統(tǒng)”的全局ER模式如圖4-13所示。
由于概念設(shè)計(jì)的結(jié)果是ER圖,DBMS一般采用關(guān)系型(本人所使用的MS SQL Server就是關(guān)系型的DBMS),因此數(shù)據(jù)庫的邏輯設(shè)計(jì)過程就是把ER圖轉(zhuǎn)化為關(guān)系模式的過程。由于關(guān)系模型所具有的優(yōu)點(diǎn),邏輯設(shè)計(jì)可以充分運(yùn)用關(guān)系數(shù)據(jù)庫規(guī)范化理論,使設(shè)計(jì)過程形式化地進(jìn)行。設(shè)計(jì)結(jié)果是一組關(guān)系模式的定義。
(1) 導(dǎo)出初始關(guān)系模式
book(圖書編號(hào)#,圖書名稱,圖書類別#,作者,出版社,出版日期,備注,價(jià)格,數(shù)量)class(圖書類別#,類別名)user(借書證號(hào)#,姓名,性別,身份編號(hào)#,身份證,聯(lián)系電話,密碼)ID(身份編號(hào)#,身份描述,最大借閱數(shù))Owner(借書證號(hào)#,圖書編號(hào)#,借書日期)
圖4-14 關(guān)系模式集
(2) 產(chǎn)生子模式
子模式是用戶所用到的那部分?jǐn)?shù)據(jù)的描述。除了指出用戶用到的數(shù)據(jù)外,還應(yīng)指出數(shù)據(jù)與概念模式中相應(yīng)數(shù)據(jù)的聯(lián)系,即指出概念模式與子模式之間的對(duì)應(yīng)性。
借書子模式(借書證號(hào)#,姓名,圖書編號(hào)#,圖書名稱,借書日期)
圖4-15 部分子模式
(3) 根據(jù)設(shè)計(jì)中出現(xiàn)的問題本人在寫系統(tǒng)時(shí)還加入了兩個(gè)關(guān)系模式:
1、 ownertemp:用于工作人員在處理借書、還書工作時(shí)臨時(shí)存儲(chǔ)借書、還書信息,以便打印報(bào)表時(shí)使用。
2、 keyer:用于存儲(chǔ)工作人員和圖書館管理員的用戶名和密碼及權(quán)限,以便工作人員或圖書館管理員進(jìn)入相應(yīng)的功能模塊時(shí)進(jìn)行驗(yàn)證用戶的身份。
4.3.3 數(shù)據(jù)庫的實(shí)現(xiàn)
我選用Microsoft SQL Server2000(企業(yè)版)數(shù)據(jù)庫來進(jìn)行數(shù)據(jù)庫的邏輯設(shè)計(jì)。首先創(chuàng)建七個(gè)基本數(shù)據(jù)庫表如表4-1-4-7所示,然后根據(jù)全局ER圖,建立各個(gè)表之間的聯(lián)系,如圖4-8所示。
表4-1 借閱者基本信息表的結(jié)構(gòu)(User)
表4-2 圖書信息表的結(jié)構(gòu)(Book)
表4-3 圖書類別信息表的結(jié)構(gòu)(Class)
表4-4 借閱者身份信息表的結(jié)構(gòu)(ID)
表4-5 借閱情況信息表的結(jié)構(gòu)(Owner)
表4-6 借閱情況臨時(shí)存儲(chǔ)信息表的結(jié)構(gòu)(Ownertemp)
注:在owner表和ownertemp表中加入了索引字段,用來唯一標(biāo)識(shí)一條借書記錄,并且設(shè)置為標(biāo)識(shí),標(biāo)識(shí)種子為1。
表4-7 工作人員和管理員信息表的結(jié)構(gòu)(Keyer)
圖4-8 數(shù)據(jù)庫表間聯(lián)系圖
第五章 圖書管理系統(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í)引入。
但本人在開發(fā)這個(gè)系統(tǒng)時(shí),開始使用了一下數(shù)據(jù)模塊,但在使用過程中卻碰到了一些問題。并且考慮這個(gè)系統(tǒng)使用到的TADOQuery控件比較多,如果使用數(shù)據(jù)控件可能會(huì)帶來管理上的麻煩,如弄混各個(gè)數(shù)據(jù)控件的作用。還考慮到使用動(dòng)態(tài)生成ADOQuery可能會(huì)更節(jié)省資源。所以在本人的系統(tǒng)中,開始做的第一個(gè)模塊“借閱者個(gè)人模塊”中還稍微使用了一下數(shù)據(jù)模塊。但在后面做的兩個(gè)模塊中大多都是用動(dòng)態(tài)生成ADOQuery來實(shí)現(xiàn)的。并且由于SQL語句是動(dòng)態(tài)加入的所以datamodule中的控件也不會(huì)多。
§5.3 啟動(dòng)畫面的實(shí)現(xiàn)
啟動(dòng)畫面是為了給用戶一個(gè)良好的印像,加深軟件的親和力,沒有實(shí)際的功能,在Form1窗體中加入了Image和Time組件。啟動(dòng)畫面的窗體略,主要的源代碼如下:
§5.4 用戶登錄窗體的的實(shí)現(xiàn)
本窗體是為三種不同的用戶(一般用戶,工作人員,管理員)提供選擇以進(jìn)入不同的模塊,滿足不同用戶的需求。源代碼比較簡(jiǎn)單,略。
§5.5 用戶密碼認(rèn)證窗體的的實(shí)現(xiàn)
本窗體是為了讓工作人員或圖書館管理員按照用戶名和密碼進(jìn)行登錄,并且跟據(jù)用戶名檢查Keyer表中的“權(quán)限”字段,以分辯進(jìn)入圖書館管理人員模塊還是進(jìn)入工作人員模塊。窗體界面、源代碼如下
§5.6 借閱者服務(wù)模塊的實(shí)現(xiàn)
借閱者服務(wù)窗體的功能主要是圖書的查詢,個(gè)人借閱情況查看及個(gè)人部分信息的修改。界面圖如下:
在本系統(tǒng)中,任何人都有權(quán)限使用查詢功能,不做任何限制。界面如下,
由于實(shí)現(xiàn)的查詢功能有多種,如按圖書編號(hào)、圖書名稱等字段進(jìn)行完全體配查找和部分體配的模糊查找,還有按多個(gè)條件進(jìn)行邏輯與或是邏輯或的多條件查找。其中實(shí)現(xiàn)的方法者差不多,所以只給出多條件查找的代碼,如下:
這個(gè)功能的實(shí)現(xiàn)與工作人員和管理人員登錄功能實(shí)現(xiàn)的方法大致一樣,并且還要簡(jiǎn)單。是從User表中查到到借閱證號(hào)與密碼,看與用戶輸入的是否一致。如果一致,那么用戶就可查看自已的借閱情況并維護(hù)自己的部分信息。源代碼與借閱者登錄界面都略。
5.6.3借閱者借閱情況功能的實(shí)現(xiàn)
當(dāng)借閱者正確登錄到系統(tǒng)后,此功能將被激活,使用戶能查看到自身的借閱情況。在此系統(tǒng)中,信息的顯示一般用ListView來實(shí)現(xiàn),只在較少的情況下用到了DBgrid,因?yàn)槲矣X得ListView更好實(shí)現(xiàn),并能使信息數(shù)據(jù)對(duì)用戶的完全分離。
在這里跟據(jù)借閱者的不同要求實(shí)現(xiàn)借閱情況的查詢,有檢查所有的借閱情部、某本書的借閱情況、和根據(jù)已借閱天數(shù)的來查詢。其中根椐借閱天數(shù)來查詢更有代表性,有方式一和方式二。以下給出此功能的源代碼
按借閱天數(shù)查詢 方式一
按借閱天數(shù)查詢 方式二
此功能實(shí)現(xiàn)當(dāng)前借閱者部份資料的修改,但借書證號(hào)和身份類別這樣的信息不允許修改,這是圖書館管理員模塊的功能。在此界面中點(diǎn)擊修改按鈕將出現(xiàn)“修改”窗體(Form8),點(diǎn)擊修改密碼按鈕將出現(xiàn)groupbox8,在這里進(jìn)行密碼修改。關(guān)鍵源代碼如下。
這里給出個(gè)人部分信息修改的源代碼:
這里給出密碼修改的源代碼:
5.7工作人員-圖書借閱/歸還模塊的實(shí)現(xiàn)
在這個(gè)功能中,工作人員輸入借閱者的借閱證號(hào)和所要借閱的圖書的圖書編號(hào),然后點(diǎn)擊借閱按鈕就可進(jìn)行圖書借閱?紤]到實(shí)際中可能會(huì)出現(xiàn)只知圖書名而不知圖書編號(hào)的情況,在此界面下方加入了一個(gè)轉(zhuǎn)換功能,可以把圖書名稱轉(zhuǎn)換成圖書編號(hào),再進(jìn)行圖書借閱。
在借閱完成后會(huì)生借閱報(bào)表以便借閱者檢查和確認(rèn),借閱報(bào)表的打印效果如下圖,實(shí)現(xiàn)比較簡(jiǎn)單,略去實(shí)現(xiàn)過程。
在此功能中,工作人員根據(jù)借閱者的借書證號(hào)和歸還的圖書編號(hào)進(jìn)行圖書的歸還工作。并且根據(jù)現(xiàn)實(shí)中可能會(huì)出現(xiàn)的只知圖書名不知圖書編號(hào)的歸還情況,所以加入了按書籍名稱進(jìn)行歸還的功能。這個(gè)功能是圖書借閱功能中把圖書名稱轉(zhuǎn)換成圖書編號(hào)的一種改進(jìn)方法,這樣就不用如借閱功能中一樣要先轉(zhuǎn)換再借閱了。歸還完成后,同樣會(huì)打印出歸還報(bào)表以便用戶檢查和確認(rèn)。
5.8圖書館管理員模塊的實(shí)現(xiàn)
在這個(gè)功能中可以在(*圖書編號(hào))中輸入圖書編號(hào),點(diǎn)查找按鈕后就會(huì)在各個(gè)相應(yīng)的組件中顯示出信息,或按圖書名稱模糊查找到所要的記錄,在各個(gè)相應(yīng)的組件中顯示第一條記錄的信息,也可在下端的ListView組件中點(diǎn)擊某一條記錄,在各個(gè)相應(yīng)的組件中也會(huì)顯示所選記錄的信息。在入庫功能中只要不是相同的圖書編號(hào)并且?guī)В?hào)提示的字段不為空就可插入新的圖書記錄。刪除則刪除那些Book表中的圖書記錄,如果借出還可依用戶要求連帶刪除owner表中的記錄。因?yàn)閳D書修改與圖書入庫的功能與工作人員記錄修改和工作人員記錄添加的實(shí)現(xiàn)過程一樣,所以下面僅給出刪除功能的源代碼,如下
在此功能中可以加入工作人員或是管理員,或是修改他們的密碼、權(quán)限。
在此功能中如果選中ListView中的記錄,則在右邊相應(yīng)的組件中顯示出信息,并且管理員還可對(duì)這些記錄進(jìn)行修改或加入新的記錄。并且也可以點(diǎn)刪除按鈕刪除選中的一條或多條記錄。刪除功能與圖書記錄的刪除一般,所以下面只給出添加與修改的實(shí)現(xiàn)過程。
在此窗體中能對(duì)圖書的類別進(jìn)行刪除,添加和修改,這模塊的功能的實(shí)現(xiàn)過程與圖書記錄的刪除,添加和修改一樣的,但是這個(gè)窗體還能跟據(jù)圖書類別進(jìn)行統(tǒng)計(jì),還可根據(jù)Book表和owner表統(tǒng)計(jì)出圖書總數(shù)目,庫存圖書數(shù)目,借出圖書數(shù)目及借閱過期的圖書數(shù)目。在這里給出統(tǒng)計(jì)圖書總數(shù)目,庫存圖書數(shù)目,借出圖書數(shù)目及借閱過期的圖書數(shù)目的實(shí)現(xiàn)過程中的幾個(gè)函數(shù)和過程
查詢借閱者可根據(jù)借閱者的借書證號(hào)或姓名或身份編號(hào)查找到借閱者的信息,也可以實(shí)行模糊查找,這個(gè)功能的實(shí)現(xiàn)與前面圖書查找的實(shí)現(xiàn)過程一般,就不再詳細(xì)說明。
此功能能對(duì)借閱者信息進(jìn)行查看添加、刪除、修改。在這里給出刷新按鈕的實(shí)現(xiàn)過程
這一部分是對(duì)借閱者身份進(jìn)行管理,能對(duì)身份進(jìn)行添加、刪除、修改。并且同樣的在listview中選中某條或多條記錄時(shí)會(huì)在相應(yīng)的右邊的組件中顯示出信息。此功能實(shí)現(xiàn)過程與前面所敘有雷同,略。
5.8.7圖書館借閱者統(tǒng)計(jì)功能的實(shí)現(xiàn)
此功能按借閱者身份進(jìn)行統(tǒng)計(jì),得出具有某種身份的借閱者總數(shù),此種身份的并借閱圖書的借閱者數(shù)和所借閱的圖書數(shù),在下面給出實(shí)現(xiàn)過程。
打印出的借閱過期催還報(bào)表如下圖所示:
此報(bào)表能顯示按借書證號(hào)升序排列的借閱信息超過限定時(shí)限的信息,其中主要的SQL語句如下:
Copyright ©2013-2015 江浙滬招生考試網(wǎng) All Rights Reserved.
地址: 蘇州市姑蘇區(qū)閶胥路483號(hào)(工投創(chuàng)業(yè)園) 電話:0512-85551931 郵編: 214000
郵箱: [email protected] 版權(quán)所有:蘇州邁峰教育科技有限公司 蘇ICP備15050684號(hào)-2