小議DELPHI圖書管理資訊制度論文
摘要:這篇論文主要講述關於圖書管理資訊系統的資訊。在本論文中講述的圖書管理資訊系統擁有一個互動式的介面、邏輯的資料庫結構。許多涉及到圖書、圖書借閱者的資訊的功能在本系統中都有實現。例如,你可以將新書的資訊插入到資料庫的圖書基本情況表裡;還可以對已經插入的關於圖書的資訊進行修改;更重要的是,圖書借閱者可以從圖書館裡借閱書籍。
關鍵詞:圖書、圖書借閱者、管理系統、Delphi7.0、SQLServer2000資料庫
一、前言
隨著人類社會的發展,人類對知識的需求也在不斷增長。雖然人們可以從網際網路上獲得知識,但書本閱讀起來更加方便,所以,在這種形勢下,書籍就漸漸地成為人們獲取並增長知識的主要途徑,而圖書館就理所當然的在人們的生活中佔據了一定的位置,如何科學合理的管理圖書不僅關係到讀者求知的方便程度,也關係到圖書館的發展,面對龐大的資訊量,就需要有圖書管理系統來提高圖書管理工作的效率。傳統手工的圖書管理,就是對圖書的編目、查詢及讀者資訊的管理,核心是圖書的資訊管理,包括圖書的採購、編目、下架、遺失等。圖書的管理是一個工作量大而且較為繁雜的工作,執行效率低並且易於出錯。透過開發這樣的系統,我們可以做到圖書規範管理和快速查詢,從而減少了管理方面的工作量;可以實現圖書管理的系統化和自動化,提高管理效率,降低管理成本。因此,開發一套完善的圖書管理系統,是必不可少的了。
本系統的開發不僅讓圖書合理規範的管理,同時也方便借閱者快速的查詢。對圖書資訊進行圖書入庫、借閱登記、借閱查詢、過期提示等這些日常業務的管理。
(一)系統開發工具
本系統的開發工具是用面向物件的Delphi進行設計的。Delphi是著名的Borland公司開發的視覺化軟體開發環境,是面向物件的視覺化軟體開發平臺,它提供了大量VCL(視覺化元件庫)元件,具有強大的資料庫開發和網路程式設計能力,極大地提高了應用系統的開發速度,是目前最優秀的軟體開發工具之一。Delphi語言具有簡單、高效和功能強大等特點,具備豐富的環境、友好的介面、高速的編譯器、強大的資料庫支援,提供了方便、快捷的Windows應用程式開發工具。對於廣大的程式開發人員而言,使用Delphi開發應用軟體,無疑會大大提高程式設計效率。
Delphi最顯著的特點就是高效性和穩定性,主要體現在以下4個方面:
(1)視覺化的開發環境的效能。
(2)編譯器的速度和已編譯程式碼的效率。
(3)程式語言的功能及複雜性。
(4)豐富的VCL。
Delphi應用程式主要是圍繞著窗體和單元兩個部分進行,窗體(Form)是與使用者直接可見的物件,Delphi的應用程式由多個窗體(Form)組成,與之相對應的是單元,每個單元對應一個Form程式區段,包含事件處理程式、過程和函式。
(二)資料庫選擇
圖書管理資訊系統是一個小型的資料庫系統。我選擇MicrosoftSQLServer2000資料庫進行開發。MicrosoftSQLServer是一種關係型資料庫管理系統,具有使用方便、學習簡單、易學易用、安全性高等特點。關係模型是當前最受歡迎的資料儲存和資料檢索模型。所有的資料處理都涉及儲存和檢索資料的操作,MicrosoftSQLServer是作為一個組織內部的全部資料的中心儲存器來設計的。組織中資料的關鍵特徵強調了這一方法的重要性。MicrosoftSQLServer在其網路元件的頂部添加了服務特有的中介元件:開放式資料庫連線(OpenDatabaseConnectivity,ODBC)能使不同客戶機進行相互連線,而不要求變更伺服器及其他現存客戶應用程式。
二、資料庫應用系統開發基礎
在資料庫應用系統開發之前,對開發資料庫的基本概念應當瞭解,對資料庫的結構、開發資料庫應用程式的步驟、開發體系及方法都應當有相當清晰的瞭解和認識。資料庫應用系統開發的目標是建立一個滿足使用者長期需求的產品。開發的主要過程為:理解並分析使用者的需求,然後把它們轉變為有效的資料庫設計。把設計轉變為實際的資料庫,並且這些資料庫帶有功能完備、高效能的應用。
資料庫由DBMS(資料庫管理系統)處理,DBMS則由開發人員和使用者透過應用程式直接或間接地使用。它主要包括四個要素:使用者資料、元資料、索引和應用元資料。
(一)使用者資料
目前,大多數主流資料庫管理系統把使用者資料表示為關係。現在把關係看作資料表。表的列包含域或屬性,表的行包含對應業務環境中實體的記錄。並非所有的關係都同樣符合要求,有些關係比其它關係更結構化一些。
為了對比結構差的關係和結構好的關係之間的差別,以本圖書管理資訊系統中的圖書和圖書借閱者關係為例來說明,假若設計關係R1(借書證號,姓名,性別,身份編號,身份證,聯絡電話,圖書編號,圖書名稱,圖書類別,作者,出版社,出版日期,備註,價格,數量);這個關係的問題出在它有關於兩個不同主題的資料,就是圖書借閱者和圖書。用這種方式構成的關係在進行修改時會出現問題。因為一個圖書借閱者可能借閱多本書,如果某個圖書借閱者的某個欄位(如聯絡電話)出現變更,它所借閱的圖書記錄(可能多個)也就必須變化,這是不好的。因此資料用兩個關係表示更好。現在如果某圖書借閱者改變了它的聯絡電話,只有關係(表)user的對應行需要改變。當然要想產生一個顯示圖書名稱及其借閱者聯絡電話的報表,就需要將這兩個表的行結合起來。結果表明將關係分別儲存,在生成報表的時候將它們結合起來,比把它們儲存在一個合成的表中更好。User和book表結構如下:
user(借書證號,姓名,性別,身份編號,身份證,聯絡電話,)
book(圖書編號,圖書名稱,圖書類別,作者,出版社,出版日期,備註,價格,數量)
(二)元資料
資料庫是自描述的,這就意味著它自身包含了它的結構的描述,這種結構的描述稱作元資料。因為DBMS產品是用來儲存和操縱表的,所以大多數產品把元資料以表的形式儲存,有時稱作系統表。這些系統表儲存了資料庫中表的情況,指出每一個表中有多少列,那一列是主關鍵字,每一列的資料型別的描述,它也儲存索引、關鍵字、規則和資料庫結構的其他部分。
在表中儲存元資料不僅對DBMS是有效的,對使用者也是方便的,因為他們可以使用與查詢使用者資料同樣的查詢工具來查詢元資料。
(三)索引
第三種類型的資料改進了資料庫的效能和可訪問性,儘管有時也採用其他型別的資料結構,如連結串列,但主要還是索引。索引可以用來排序和快速訪問資料。下面以我所設計的圖書管理資訊系統中的book表為例來說明。
假定資料在磁碟上是按“圖書編號”的遞增順序排列的,使用者想列印一個按“圖書名稱”排序的圖書資料報表。為此,所有的資料都需要從源表中提取出來並排序,除非表很小,否則這是一個很費時的過程。或者可以在“圖書名稱”欄位上建立一個索引,該索引的條目按照“圖書名稱”排序,這樣該索引的條目可以讀出來,並用來按順序訪問book資料。
索引用於快速訪問資料。例如一個使用者只想訪問book表中‘圖書類別’值為“01”的那些圖書,如果沒有索引,則必須搜尋整個源表;但有了索引之後,可以找到索引條目,並使用它來挑選所有合適的行。索引對排序和查詢是有幫助的,但要付出代價。book表中的行每次改變時,索引也必須改變,這意味著索引並非隨意的,應該在真正需要時儲存。
(四)應用元資料
儲存在資料庫中的第四種資料是應用元資料,它用來儲存使用者窗體、報表、查詢和其他形式的查詢元件。並非所有的DBMS都支援應用元件,支援元件的DBMS也不一定把全部元件的結構作為應用元資料儲存在資料庫中。然而大多數現代的DBMS產品儲存這種資料作為資料庫的一部分。一般來說,資料庫開發人員和使用者都不直接訪問應用元資料,想反,他們透過DBMS中的'工具來處理這些資料。
我所選用的MSSQLServer2000中就支援窗體、儲存過程等應用元資料。
三、圖書系統設計分析
(一)需求分析
圖書管理資訊系統需要滿足來自三方面的需求,這三個方面分別是圖書借閱者、圖書館工作人員和圖書館管理人員。圖書借閱者的需求是查詢圖書館所存的圖書、個人借閱情況及個人資訊的修改;圖書館工作人員對圖書借閱者的借閱及還書要求進行操作,同時形成借書或還書報表給借閱者檢視確認;圖書館管理人員的功能最為複雜,包括對工作人員、圖書借閱者、圖書進行管理和維護,及系統狀態的檢視、維護並生成催還圖書報表。
圖書借閱者可直接檢視圖書館圖書情況,如果圖書借閱者根據本人借書證號和密碼登入系統,還可以進行本人借書情況的查詢和維護部分個人資訊,但是不能查詢和維護其他借閱者的借書情況和個人資訊,這不但滿足了圖書借閱者的要求,還保護了圖書借閱者的個人隱私。
圖書館工作人員有修改圖書借閱者借書和還書記錄的許可權,所以需對工作人員登陸本模組進行更多的考慮。在此模組中,圖書館工作人員可以為圖書借閱者加入借書記錄或還書記錄,並列印生成相應的報表給使用者檢視和確認。
圖書館管理人員的功能資訊量大,資料安全性和保密性要求高。本功能實現對圖書資訊、借閱者資訊、總體借閱情況資訊的管理和統計、工作人員和管理人員資訊檢視及維護。圖書館管理員可以瀏覽、查詢、新增、刪除、修改、統計圖書的基本資訊;瀏覽、查詢、統計、新增、刪除和修改圖書借閱者的基本資訊,瀏覽、查詢、統計圖書館的借閱資訊,但不能新增、刪除和修改借閱資訊,這部分功能應該由圖書館工作人員執行,但是刪除某條圖書借閱者基本資訊記錄時,應實現對該圖書借閱者借閱記錄的級聯刪除。並且還應具有生成催還圖書報表,具有列印輸出的功能。
(二)系統資料庫的概念設計
在概念設計階段中,設計人員從使用者的角度看待資料及處理要求和約束,產生一個反映使用者觀點的概念模式。然後再把概念模式轉換成邏輯模式。將概念設計從設計過程中獨立開來,使各階段的任務相對單一化,設計複雜程度大大降低,不受特定DBMS的限制。
利用ER方法進行資料庫的概念設計,可分成三步進行:首先設計區域性ER模式,然後把各區域性ER模式綜合成一個全域性模式,最後對全域性ER模式進行最佳化,得到最終的模式,即概念模式。
1、設計區域性ER模式
實體和屬性的定義:
圖書(圖書編號,圖書名稱,作者,出版社,出版日期,備註,價格,數量,)
借閱者(借書證號,姓名,性別,身份證,聯絡電話,密碼)
身份(身份編號,身份描述,最大借閱數)
圖書類別(圖書類別編號,類別描述)
ER模型的“聯絡”用於刻畫實體之間的關聯。一種完整的方式是對區域性結構中任意兩個實體型別,依據需求分析的結果,考察區域性結構中任意兩個實體型別之間是否存在聯絡。若有聯絡,進一步確定是1:N,M:N,還是1:1等。還要考察一個實體型別內部是否存在聯絡,兩個實體型別之間是否存在聯絡,多個實體型別之間是否存在聯絡等等。分析如下:
1)一個借閱者(使用者)只能具有一種身份,而一種身份可被多個借閱者所具有;
2)一本圖書只能屬於一種圖書類別(類別),而一種圖書類別可以包含多本圖書;
3)一個使用者可以借閱多本不同的書,而一本書也可以被多個不同的使用者所借閱。
2、設計全域性ER模式
所有區域性ER模式都設計好了後,接下來就是把它們綜合成單一的全域性概念結構。全域性概念結構不僅要支援所有區域性ER模式,而且必須合理地表示一個完整、一致的資料庫概念結構。
1)確定公共實體型別
為了給多個區域性ER模式的合併提供開始合併的基礎,首先要確定各區域性結構中的公共實體型別。在這一步中我們僅根據實體型別名和鍵來認定公共實體型別。一般把同名實體型別作為公共實體型別的一類候選,把具有相同鍵的實體型別作為公共實體型別的另一類候選。
2)區域性ER模式的合併
合併的原則是:首先進行兩兩合併;先和合並那些現實世界中有聯絡的區域性結構;合併從公共實體型別開始,最後再加入獨立的區域性結構。
3)消除衝突
衝突分為三類:屬性衝突、結構衝突、命名衝突。設計全域性ER模式的目的不在於把若干區域性ER模式形式上合併為一個ER模式,而在於消除衝突使之成為能夠被所有使用者共同理解和接受的同一概念模型。
3、全域性ER模式的最佳化
在得到全域性ER模式後,為了提高資料庫系統的效率,還應進一步依據處理需求對ER模式進行最佳化。一個好的全域性ER模式,除能準確、全面地反映使用者功能需求外,還應滿足下列條件:實體型別的個數要儘可能的少;實體型別所含屬性個數儘可能少;實體型別間聯絡無冗餘。
(三)系統資料庫的邏輯設計
由於概念設計的結果是ER圖,DBMS一般採用關係型(MSSQLServer就是關係型的DBMS),因此資料庫的邏輯設計過程就是把ER圖轉化為關係模式的過程。由於關係模型所具有的優點,邏輯設計可以充分運用關係資料庫規範化理論,使設計過程形式化地進行。設計結果是一組關係模式的定義。
1、匯出初始關係模式
book(圖書編號#,圖書名稱,圖書類別#,作者,出版社,出版日期,備註,價格,數量)class(圖書類別#,類別名)user(借書證號#,姓名,性別,身份編號#,身份證,聯絡電話,密碼)ID(身份編號#,身份描述,最大借閱數)Owner(借書證號#,圖書編號#,借書日期)
2、產生子模式
子模式是使用者所用到的那部分資料的描述。除了指出使用者用到的資料外,還應指出資料與概念模式中相應資料的聯絡,即指出概念模式與子模式之間的對應性。
借書子模式(借書證號#,姓名,圖書編號#,圖書名稱,借書日期)
3、特別的兩個關係模式:
ownertemp:用於工作人員在處理借書、還書工作時臨時儲存借書、還書資訊以便列印報表時使用。
keyer:用於儲存工作人員和圖書館管理員的使用者名稱和密碼及許可權,以便工作人員或圖書館管理員進入相應的功能模組時進行驗證使用者的身份。
(四)系統資料庫的物理實現
我選用MicrosoftSQLServer2000資料庫來進行資料庫的物理實現。
四、圖書系統應用程式設計
程式的結構設計如圖所示,該程式由11個窗體組成,它們是資料模組窗體,使用者登入視窗的窗體,圖書館管理系統介面窗體,修改圖書記錄的窗體,修改供閱者記錄的窗體,修改密碼設定的窗體,生成預約圖書報表的窗體,生成催還圖書報表的窗體,圖書館服務系統介面窗體,查詢、借閱、預約圖書的窗體以及查詢個人借閱資訊和歸還已借閱圖書的窗體。
(一)系統窗體模組
(二)資料模組窗體的設定
在編寫資料庫應用程式時,經常要遇到這樣的情況,即好多元件、窗體同時訪問相同的資料來源,如果為每一個元件或者窗體都設定一個數據源將是十分耗時的工作,而且要保證這些資料來源的確是相同的也需花一番功夫。那麼能不能將這些資料來源集中管理,最好是做成一個統一的模組,需要時就將該模組引入而不必直接操作資料來源本身呢?資料模組(DataModule)是解決這個問題最好的答案。簡單說來,資料模組是用來集中管理資料來源的一個窗體,該窗體可被需要的地方隨時引入。
但在開發這個系統時,在開始使用資料模組過程中卻碰到了一些問題。並且考慮這個系統使用到的TADOQuery控制元件比較多,如果使用資料控制元件可能會帶來管理上的麻煩,如弄混各個資料控制元件的作用。還考慮到使用動態生成ADOQuery可能會更節省資源。所以在本系統中,開始做的第一個模組“借閱者個人模組”中還使用了資料模組。但在後面做的兩個模組中大多都是用動態生成ADOQuery來實現的。並且由於SQL語句是動態加入的所以datamodule中的控制元件也不會多。
(三)啟動畫面的實現
啟動畫面是為了給使用者一個良好的印像,加深軟體的親和力,在Form1窗體中加入了Image和Time元件。
(四)使用者登入窗體的實現
本窗體是為三種不同的使用者(圖書借閱者、圖書館工作人員和圖書館管理人員)提供選擇以進入不同的模組,滿足不同使用者的需求。
(五)使用者密碼論證窗體的實現
本窗體是為了讓工作人員或圖書館管理員按照使用者名稱和密碼進行登入,並且跟據使用者名稱檢查Keyer表中的“許可權”欄位,以分辯進入圖書館管理人員模組還是進入工作人員模組。
以下為不同使用者功能模組的實現。
(六)供閱者服務模組的實現
借閱者服務窗體的功能主要是圖書的查詢,個人借閱情況檢視及個人部分資訊的修改。
1、圖書查詢功能的實現
在系統中任何人都有許可權使用查詢功能,不做任何限制。由於實現的查詢功能有多種,如按圖書編號、圖書名稱等欄位進行完全體配查詢和部分體配的模糊查詢,還有按多個條件進行邏輯與或是邏輯或的多條件查詢。
2、供閱者登入功能的實現
這個功能的實現與工作人員和管理人員登入功能實現的方法大致一樣,是從User表中查到到借閱證號與密碼,看與使用者輸入的是否一致。如果一致使用者就可檢視自已的借閱情況並維護自己的部分資訊。
3、借閱者借閱情況功能的實現
當借閱者正確登入到系統後,使用者能檢視到自已的借閱情況。在此係統中,資訊的顯示一般用ListView來實現,只在較少的情況下用到了DBgrid,因為ListView更好實現,並能使資訊資料對使用者的完全分離。
借閱者對借閱情況的查詢有多種方式,但主要是根椐借閱天數來查詢。
4、供閱者個人資料維護功能的實現
此功能實現當前借閱者部份資料的修改,但借書證號和身份類別這樣的資訊不允許修改,這是圖書館管理員模組的功能。在此介面中點選修改按鈕將出現“修改”窗體(Form),點選修改密碼按鈕將出現groupbox8進行密碼修改。
(七)工作人員――圖書借閱/歸還模組的實現
1、工作人員進行圖書借閱功能的實現
在此功能中,工作人員輸入借閱者的借閱證號和所要借閱圖書的圖書編號,然後點選借閱按鈕就可進行圖書借閱。考慮到實際中可能會出現只知圖書名而不知圖書編號的情況,在此介面下方加入了一個搜尋轉換功能,可以把圖書名稱轉換成圖書編號,再進行圖書借閱。
在借閱完成後會生借閱報表以便借閱者檢查和確認,實現過程比較簡單。
2、工作人員圖書歸還功能的實現
在此功能中,工作人員根據借閱者的借書證號和歸還的圖書編號進行圖書的歸還工作。並且根據現實中可能會出現的只知圖書名不知圖書編號的歸還情況,所以加入了按書籍名稱進行歸還的功能。這個功能是圖書借閱功能中把圖書名稱搜尋轉換成圖書編號的一種改進方法。歸還完成後,同樣會打印出歸還報表以便使用者檢查和確認。
(八)圖書館管理員模組和管理員圖書管理功能的實現
在這個功能模組中可以在(圖書編號)中輸入圖書編號,點查詢按鈕後就會在各個相應的元件中顯示出資訊,或按圖書名稱模糊查詢到所要的記錄,在各個相應的元件中顯示第一條記錄的資訊,也可在下端的ListView元件中點選某一條記錄,在各個相應的元件中也會顯示所選記錄的資訊。在入庫功能中只要不是相同的圖書編號並且帶*號提示的欄位不為空就可插入新的圖書記錄。刪除則刪除那些Book表中的圖書記錄,如果借出還可依使用者要求連帶刪除owner表中的記錄。因為圖書修改與圖書入庫的功能與工作人員記錄修改和工作人員記錄新增的實現過程一樣。
1、圖書館管理員管理功能的實現
在此功能中可以加入工作人員或是管理員,或是修改他們的密碼、許可權。
如果選中ListView中的記錄,則在右邊相應的元件中顯示出資訊,並且管理員還可對這些記錄進行修改或加入新的記錄。也可以點刪除按鈕刪除選中的一條或多條記錄。刪除功能與圖書記錄的刪除一般。
2、圖書館管理員修改圖書類別及統計功能的實現
在此窗體中能對圖書的類別進行刪除,新增和修改,此模組功能的實現過程與圖書記錄的刪除,新增和修改一樣的,但是這個窗體還能跟據圖書類別進行統計,還可根據Book表和owner表統計出圖書總數目,庫存圖書數目,借出圖書數目及借閱過期的圖書數目。
3、圖書館管理員借閱者管理功能的實現
查詢借閱者可根據借閱者的借書證號或姓名或身份編號查詢到借閱者的資訊,也可以實行模糊查詢,這個功能的實現與前面圖書查詢的實現過程一樣。
4、圖書館維護借閱者管理功能的實現
此功能能對借閱者資訊進行檢視新增、刪除、修改。
5、圖書館身份維護功能的實現
這一部分是對借閱者身份進行管理,能對身份進行新增、刪除、修改。並且同樣的在listview中選中某條或多條記錄時會在相應的右邊的元件中顯示出資訊。
6、圖書館借閱者統計功能的實現
此功能按借閱者身份進行統計,得出具有某種身份的借閱者總數。
7、圖書館統計借閱過期記錄功能的實現
此報表能顯示按借書證號升序排列的借閱資訊超過限定時限的資訊。
五、結論
透過本次畢業設計我學到了不少新的東西。在開發的過程中,很多看起來簡單的問題實際動手起來卻不是那麼回事,往往有這樣或那樣的錯誤,需要我一步一步地去解決,我查閱了大量的資料,向老師請教,學到了不少課本上學不到的知識,也發現了大量的問題,有些在設計過程中已經解決,有些還有待今後慢慢學習。
最後,向在此次畢業設計寫作過程中給與我幫助的指導教師表示感謝,也感謝她給予我的這次機會,謝謝!
參考文獻:
[1]李炎清編著,畢業論文寫作與範例[M],廈門大學出版社,2007
[2]韓強編著,SQLSERVER2000程式設計師手冊,機械工業出版社,2000
[3]蔡宏編著,開發技術原理與實踐教程,電子工業出版社,2007
[4]薩師煊、王珊編著,資料庫系統概論,高等教育出版社,2000
[5]楊長春主編,DELPHI程式設計教程,清華大學出版社,2008
[6]李之明,高玉編著,Delphi7.0元件經典解析,中國鐵道出版社,2003