1. 程式人生 > >圖書管理系統資料庫設計實驗報告

圖書管理系統資料庫設計實驗報告

圖書管理系統設計實驗報告

PB15051157 茹思淞

一、實驗題目及其要求

編寫一個圖書管理系統,要求具有以下內容:

1)儲存圖書資訊、採購和淘汰情況、租借情況

2)實現圖書採購、淘汰、租借功能。

3)實現圖書資訊、採購和淘汰、庫存、和租借情況查詢

4)實現圖書的採購、庫存、淘汰、租借情況等統計

二、具體實現

在本次系統設計中,我採用了袁老師推薦的Delphi7來進行圖書館管理系統的開發,因為對比其他工具來說用Delphi進行圖形介面(GUI)應用程式開發更加簡便,而且其與資料庫的連線也相當緊密和直接,使得整個開發過程事半功倍。

而對於DBMS,考慮到整個個開發過程的簡便,我決定採用Microsoft SQL Server來進行開發,由於之前的實驗已經對SQL Server已經比較熟悉,而且該伺服器由於是搭建在學校伺服器上,所以檢查起來也就更加方便。

下面是具體的資料庫設計:

1.資料庫設計

首先,在得到題目後,我認真地研究了中國科大圖書館的圖書管理系統,並且向圖書館管理人員諮詢了一些細節設計問題,最終我設計瞭如下的5張表來作為本次圖書管理系統的後臺資料,如下:

首先是我們的E-R圖,在這裡我們的E-R圖中省略了實體的屬性值,因為在後面每張表中我們都會一一涉及到,所以在這裡為了版面原因不再贅述。可以看到,我們的E-R圖主要包含了三個實體:使用者,書本,書目。其中使用者具有多重身份,這是由於其中包含了多級使用者,既可以對圖書進行借閱、採購,又可以進行下架。在一個書目下又包含了多個書本資訊,這是由於在圖書館中,同樣的書不可能只有一本所造成。

未命名檔案(1)

下面是第一張表:使用者(讀者)資訊表。

/* 表Reader :使用者資訊表*/
create table PB15051157_LibrarySys_Reader
(
    學工號 char(20) not null, constraint PK_學工號 primary key(學工號),
    姓名 char(50) not null,
    聯絡方式 char(100) not null,
    已借書數目 int not null, constraint CK_已借書數目 check (已借書數目>= 0),
    讀者級別 int not null, constraint CK_讀者級別 check
(讀者級別in (0, 1, 2)), --0:開發人員 1:圖書館管理員 2:普通讀者 密碼char(100) not null, )

這是一張使用者資訊表,用以存放各個讀者(包括圖書管理人員)的資訊,學工號是主鍵這裡定義了讀者級別,0級也就是最高階是圖書館系統維護人員,最主要的工作是管理圖書館管理人員的帳戶,同時也可以進行修改、新增圖書資訊的工作;1級也就是圖書館管理人員,主要工作是修改、新增圖書資訊,同時管理普通讀者的帳戶;2級也就是普通讀者,可以借書還書還有檢視自己的資訊。

/* 表TypeBook :每一種圖書資訊表*/
create table PB15051157_LibrarySys_TypeBook
(
    書目號 char(10) not null, constraint PK_書目號 primary key(書目號),
    圖書位置 char(50) not null,
    書名 char(100) not null,
    作者 char(100) not null,
    出版社 char(100) not null,
    出版時間 char(50) not null,
    關鍵詞 char(200),
    庫存 int not null, constraint CK_庫存 check (庫存>= 0),
    可借閱數量 int not null, constraint CK_可借閱數量 check (庫存>= 可借閱數量 and 可借閱數量>=0),
    單價 float not null, constraint CK_單價 check (單價>= 0)
);

這張表主要存放每種書的資訊,比如說“資料庫系統原理教程”就是當中的一個元素,同時書目號作為主鍵,這裡要注意區別於下表之中的圖書編號,這兩個是完全不一樣的兩個概念,前者意味著兩本相同的書具有相同的書目號,而後者則是每一本書都具有一個唯一的編號。“關鍵詞”的設計主要是考慮到檢索的時候可以更加方便讀者利用關鍵詞進行查詢,而不必記得書本的全名。

/* 表SingleBook:每一本圖書資訊表*/
create table PB15051157_LibrarySys_SingleBook
( 
    圖書編號 char(20) not null, constraint PK_圖書編號 primary key(圖書編號),
    書目號 char(10) not null, constraint FK_書目號 foreign key(書目號) references PB14209054_LibraryTable_TypeBook(書目號),
    採購號 char(10) not null, constraint FK_採購號 foreign key(採購號) references PB14209054_LibraryTable_InBook(採購號),
    下架號 char(10), constraint FK_下架號 foreign key(下架號) references PB14209054_LibraryTable_OutBook(下架號),
    借出狀態 char(6) not null, constraint CK_借出狀態 check (借出狀態in ('可借閱','已下架', '已借出')),
    借出時間 char(50),
    應歸還時間 char(50),
    借閱人 char(20), constraint FK_借閱人 foreign key(借閱人) references PB15051157_LibrarySys_Reader(學工號),
);

這張表主要用於存放每一本書的具體資訊,比如說“資料庫系統原理教程”這種數有n本這樣的數,而每一本書的資訊就是存放在這張表裡。“書目號”“採購號”還有“下架號”分別對應著這本書所屬書的種類、以及採購和下架時對應的編號,並且作為外來鍵可以查閱到相關的書籍資訊、採購、下架資訊,這裡借閱人儲存的是對應的借出的同學的學工號,並且作為外來鍵方便查詢對方資訊。

/* 表BookIn :圖書採購資訊表*/
create table PB15051157_LibrarySys_BookIn
(
    採購號 char(10) not null, constraint PK_採購號 primary key(採購號),
    採購時間 char(50) not null,
    採購人 char(20) not null, constraint FK_採購人 foreign key(採購人) references PB14209054_LibraryTable_Reader(學工號),
    供應商 char(100) not null,
    採購數量 int not null, constraint CK_採購數量 check (採購數量>= 0),
    採購總額 float not null, constraint CK_採購總額 check (採購總額>= 0)
);

/* 表BookOut :圖書下架資訊表*/
create table PB15051157_LibrarySys_BookOut
(
    下架號char(10) not null, constraint PK_下架號p rimary key(下架號),
    下架時間char(50) not null,
    下架人char(20) not null, constraint FK_下架人 foreign key(下架人) references PB14209054_LibraryTable_Reader(學工號),
    下架數量int not null, constraint CK_下架數量 check (下架數量>= 0)
);

這兩張表分別為採購表及下架表,用以記錄採購資訊及下架資訊,在這裡不做詳細介紹。

2.SQL Server伺服器的搭建

對於資料庫的搭建,我們使用MicroSoft SQLServer 登陸了202.38.88.99並且在資料庫中建立了如圖的五個表格:

![Image 1](C:\Users\rusis\Documents\資料庫報告\Image 1.png)

然後使用SQLServer的GUI工具向其中插入了相應的讀者,圖書,採購,淘汰資訊,在這裡所執行的SQL語句詳情可見附件中的SQL檔案。

3.Delphi 7圖書管理系統應用的開發

在Delphi 7的設計當中,我們主要考慮了三個介面。

  • 主介面,主要是供讀者進行查詢圖書以及歸還和借閱圖書的操作

  • 開發者介面,主要是供開發者進行新讀者註冊,讀者密碼重置,新圖書上架,舊圖書淘汰,新增採購資訊的功能。

    在開發者介面裡,還內嵌了一個圖書情況統計的頁面,可以詳細統計以下:

    • 圖書情況統計
    • 下架資訊統計
    • 借閱資訊統計
    • 採購資訊統計
  • 讀者介面,讀者可以查詢相關的借閱資訊。

下面我們來按照題目要求逐步分析該系統的功能:

1、儲存圖書資訊、採購和淘汰情況、租借情況

對於該點,由於我們採用了微軟的SQL Server,因此相應的圖書資訊,採購和淘汰情況,租借情況全都儲存在了學校機房上的SQL Server 伺服器上,因此不必擔心,只要通過我們的應用程式就可以實現對我們所儲存的資訊的讀寫。

2、實現圖書採購、淘汰、租借功能

在我們的系統設計當中,有三類不同的賬戶,其中一二類賬戶登陸進去之後可以進行圖書採購、淘汰、租借功能。而三類賬戶即讀者賬戶,僅僅可以實現租借功能。如下圖,先是登入了-0級賬戶,在藍色方框出進行登入,然後上面顯示了讀者級別,並且會自動彈出開發者管理介面。

main

下圖即為管理介面:

捕獲

該介面比較直觀,主要具備了以下功能:

  • 註冊新使用者/重置舊使用者的密碼

register

resetPNG

  • 對圖書進行淘汰下架

    bookout

  • 新增採購資訊

addbuy

  • 新增採購的圖書資訊

    • 若採購的圖書的類別資訊已在資料庫內,從新增採購圖書處管理即可,登記完之後,庫存數量增加,可借閱圖書增加,對圖書類別資訊無影響。

    Buy

    • 若採購的圖書的類別資訊不在資料庫內,需要在新增圖書資訊處,先把圖書的資訊新增進去,然後再在新增採購圖書處新增圖書數量。

    addbook

下面再介紹租借功能的實現:

在主介面上用讀者賬號進行登入,登入成功後左上角會顯示已登入資訊,則可以進行借閱和歸還操作。若未登入則會出現提示登入資訊。

借閱圖書效果如下:

boorrow

歸還圖書如下:

reborrow

之所以設計成如上的原因主要是因為在實際上的圖書管理系統中,更多使用的是RFID技術儲存和讀取圖書對應的圖書編號,因此在這一步中,實際輸入編號的操作是由RFID感應器來自動實現的,所以這樣可以免去讀者自己輸入圖書編號的麻煩,而且在一定程度上也可以防止誤操作,保證我們系統的強壯可用性。

3&4、實現圖書資訊、採購和淘汰、庫存、和租借情況查詢和統計:

如下圖,這是對圖書資訊、採購、淘汰、庫存和租借情況的查詢和統計。

主要分為如下四個部分:

  • 對於圖書情況的查詢統計:

    由於對於圖書資訊的詳細查詢在主頁上也可以做到,因此在這裡功能上不再贅餘。只統計圖書的總數,以及其中的類別和已下架的圖書數。

searchbook

  • 對於借閱資訊的查詢和統計:

    在這裡可以查詢到每一本書的借閱情況,包括借閱人,借出時間和應歸還時間,方便圖書管理員進行管理。同時在這裡,下面一欄還顯示了未下架的圖書總數,已借出的圖書數以及尚可借閱的圖書數。

lend

  • 對於採購資訊的查詢和統計:

    這裡的設計主要是考慮到管理資訊的需求,所以統計了不同供應商的數量,總共的採購次數以及到目前為止總共的採購總額。

outbook

5、系統額外的功能設計

在我們的設計的系統比題目要求增添了一些額外的功能,其設計的依據主要是來自於現實我們中國科大的圖書館系統。

  • 讀者中心功能:主要是提供給讀者使用者,支援的功能有兩個:修改賬號的密碼,以及查詢本賬號的借閱圖書資訊(包括借閱的圖書的圖書編號,書名,借出時間,應歸還時間)

reader

  • 圖書借閱額限制:

    和科大圖書館系統類似,我們這裡也對每一個讀者的借閱額做出了限制,每個人最多的可借閱量為8本,一旦達到8本就不可繼續借閱,必須在歸還相應的圖書之後再進行借閱。

fullborrow

  • 多樣化的圖書搜尋功能:

    在我們的系統中,提供了搜尋圖書館中搜索庫存圖書的功能,並且提供了多種搜尋方式,可以依照書名、作者、出版社,關鍵字進行模糊搜尋,方便讀者進行查詢借閱,而且無需登入。

    search

  • 合理的人性化設計:

    在我們的系統中基本每一個介面都會帶有一個退出/返回按鈕,這是為了防止使用者誤操作造成無故退出,也更加符合系統的設計原則。

以上則為我們系統的所有功能介紹。

4、設計體會

在本次的大作業中,綜合使用了本次課程中所教授的基本所有東西。例如有:

  • SQL 的基本使用
  • Dephi 7的使用者程式設計
  • GUI的設計基本原則
  • 資料庫的設計理論

在本次的設計過程中,首先必須要清楚我們所需要的設計的圖書資訊管理系統的結構。一個完善的圖書館系統所需要的基本模組都必須要先設計好才能讓我們的設計過程不會被各種突然遇到的問題打斷。

而在本次的鍛鍊實踐中,我們也得到了從理論到實踐的機會。在課程中學到的很多東西都可以有所得,有所悟,而不只是單純的紙上談兵。

同時,藉此機會,我們也學到了很多課堂上學不到的東西,掌握了許多實用的工具,例如學會了SQL Server的基本使用,Dephi7 的基本使用,它們都是非常有用的工具,不僅僅是在課堂作業中,更會在我們日後的職業生涯中有著不可估摸的作用。其次本次系統的設計也對我學習使用者介面設計有所啟發,一個系統不僅僅需要具有合理的功能模組設計,而且也需要有更加人性化的介面設計,便於使用者學習使用和掌握,這樣才能使系統能夠讓更多的人接受!