數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告圖書館管理系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告圖書館管理系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告圖書館管理系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告圖書館管理系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告圖書館管理系統(tǒng)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、圖書館管理系統(tǒng)專 業(yè) 班 級 :XXX學(xué) 號 :XXX姓 名 :XXX指 導(dǎo) 教 師 :XXX課程設(shè)計時間:XXX注:本實驗報告的實驗源碼需要到這里下載/data/ 計算機專業(yè) 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計任務(wù)書學(xué)生姓名XXX專業(yè)班級XXX學(xué)號XXX題 目圖書館管理系統(tǒng)課題性質(zhì)工程設(shè)計課題來源XXX指導(dǎo)教師XXX同組姓名XXX主要內(nèi)容 1. 采編入庫:新購入一本書,如果給書在圖書賬目中已經(jīng)存在,則其庫存量增加(包括總庫存量和現(xiàn)庫存量)。如果該書不存在圖書賬目中增加一本書,總庫存量和現(xiàn)庫存量都為輸入的數(shù)字。 2. 清空庫存:某一種書已無保留價值,將它從圖書賬目中注銷

2、。 3. 借 閱:如果一種書的庫存量大于零,則借出一本書,將現(xiàn)庫存量減1,并登記借閱者的圖書證號和歸還期限。 4. 歸 還:注銷對借閱者登記,改變該書的現(xiàn)存量。 5. 按書號查找。 6. 按書名查找。 7. 按作者查找。 8. 查看某圖書證號的借閱者借閱的全部圖書。 9. 查看全部超期未還的圖書。 0. 退出圖書管理系統(tǒng)。任務(wù)要求1研究圖書館管理系統(tǒng)的數(shù)據(jù)存儲方式2實現(xiàn)圖書館管理系統(tǒng)的主要算法3分析算法的運行效率4具有良好的運行界面5算法具有良好的健壯性6按要求撰寫課程設(shè)計報告和設(shè)計總結(jié)。參考文獻1數(shù)據(jù)結(jié)構(gòu)(C語言版),嚴蔚敏、吳偉民,清華大學(xué)出版社,1997.2Visual C+實用教程(第

3、一版),張榮梅、梁曉林,冶金工業(yè)出版社,2004.審查意見指導(dǎo)教師簽字: 教研室主任簽字: 年 月 日 1、 設(shè)計題目簡單的圖書館管理系統(tǒng)2、 設(shè)計意義熟悉和掌握數(shù)據(jù)結(jié)構(gòu)課程所學(xué)的各種算法在實際項目中的應(yīng)用,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)算法的c+實現(xiàn)方法等。3、 系統(tǒng)需求程序中傳遞的有信息有:圖書信息(包括圖書編號、書名、作者、出版社、總庫存和剩余庫存)和讀者信息(包括借閱證號和借閱圖書)。1. 圖書管理對書庫中的圖書信息進行管理和查看功能,包括新書入庫和清空庫存功能,主要解決實際應(yīng)用中圖書館增進新書種類數(shù)目或已有圖書損壞丟失問題。其中,新書入庫功能要求輸入圖書編號、書名、作者、出版社四項信息,用戶輸入圖書編

4、號后,系統(tǒng)首先判斷書庫中是否有該書的記錄,如果滿足條件,則要求輸入購入數(shù)量后修改總庫存和現(xiàn)有庫存,如果不滿足條件,則要求補全圖書信息后新建一條庫存記錄;清空庫存功能要求輸入圖書編號,用戶輸入圖書編號后,系統(tǒng)首先判斷書庫中是否有該書的記錄,如果滿足條件,則刪除書庫中該書的記錄,如果不滿足條件,則返回錯誤提示。2. 借閱管理管理書庫中的圖書借閱相關(guān)行為,包括圖書借閱和圖書歸還功能,主要解決實際應(yīng)用中圖書館圖書借出和歸還信息的管理的問題。其中,圖書借閱功能要求輸入圖書編號,用戶輸入圖書編號后,系統(tǒng)首先判斷書庫中是否有該書的記錄以及是否還存在剩余庫存,如果有且剩余庫存大于0,則借出一本書,將該書現(xiàn)庫存

5、量減1,并登記借閱者的圖書證號和歸還期限,如果沒有,則返回錯誤提示;圖書歸還功能要求輸入圖書編號和借閱證編號,用戶輸入圖書編號和借閱證編號后,系統(tǒng)首先判斷書庫中是否有該書的記錄及是否借出,如果滿足條件,則歸還一本書,將該書現(xiàn)庫存量加1,并刪除該借閱證下該條借閱記錄,如果不滿足條件,則返回錯誤信息。3. 圖書查找查找書庫中的圖書信息,包括按編號查找,按書名查找和按作者查找功能,主要解決實際應(yīng)用中借閱者查找想要借閱的圖書信息和圖書館對圖書各類信息的實時管理問題。其中,編號查找功能要求輸入圖書編號,用戶輸入圖書編號后,系統(tǒng)首先判斷書庫中是否有該書的記錄,如果滿足條件,則輸出包括圖書編號、書名、作者、

6、出版社、總庫存和剩余庫存等全部圖書信息,如果不滿足條件,則返回錯誤信息;書名查找功能要求輸入圖書書名,用戶輸入圖書書名后,系統(tǒng)首先判斷書庫中是否有該書的記錄,如果滿足條件,則輸出包括圖書編號、書名、作者、出版社、總庫存和剩余庫存等全部圖書信息,如果不滿足條件,則返回錯誤信息;作者查找功能要求輸入圖書作者,用戶輸入圖書作者后,系統(tǒng)首先判斷書庫中是否有該書的記錄,如果滿足條件,則輸出包括圖書編號、書名、作者、出版社、總庫存和剩余庫存等全部圖書信息,如果不滿足條件,則返回錯誤信息。4. 信息查看查看書庫中讀者相關(guān)的借出相關(guān)信息,包括讀者信息和超期未還功能,主要解決實際應(yīng)用中圖書館管理者對書庫中讀者借

7、閱信息和圖書借閱信息的實時查看問題。讀者信息功能要求輸入借閱證編號,用戶輸入借閱證編號后,系統(tǒng)首先判斷書庫中是否有該讀者的記錄,如果滿足條件,則輸出讀者所借閱的圖書書名,如果不滿足條件,則返回錯誤信息。超期未還功能要求輸入當前日期,用戶輸入當前日期后,系統(tǒng)輸出所有當前日期之前的所有圖書借出記錄。4、 功能設(shè)計在仔細分析系統(tǒng)需求后決定按照需求分類設(shè)計程序模塊,既圖書管理、借閱管理、圖書查找和信息查看四大模塊以及新書入庫、清空庫存、圖書借閱、圖書歸還、編號查找、書名查找、作者查找、讀者信息和超期未還九大功能。為方便查找和修改,定義結(jié)構(gòu)體四個,他們分別是功能結(jié)構(gòu)體名圖書鏈表struct LinkBo

8、ok讀者鏈表struct LNode圖書信息struct book借閱行為struct Boro并決定函數(shù)按照功能劃分,共使用函數(shù)十五個,包括兩個公用函數(shù)用于庫存檢查和信息顯示,一個菜單函數(shù)和九個分別對應(yīng)九大功能的功能函數(shù)。他們分別是功能函數(shù)名稱新書入庫Buy(ook &boo, char BuyNum)清空庫存Delete(ook &boo,char DeleteNum)圖書借閱Borrow(ook &boo,lend &Lin,char BorrowNum,char CaNum)圖書歸還Return(ook &boo,lend &Lin,char ReturnNum,char Borrow

9、erNum)編號查找SearchByNum(ook &boo,char SeaNum)書名查找SearchByName(ook &boo)作者查找SearchByAuth(ook &boo)讀者信息ViewCard(ook &boo,lend &Lin)超期未還ViewBook(ook &boo,lend &Lin)庫存檢查BinarySearch(ook boo,char SearchNum)信息顯示Out(ook &boo)菜單函數(shù)Menu()主函數(shù)main()初始化圖書InitBo(ook &boo)初始化讀者InitBo(ook &boo)五、運行環(huán)境(軟、硬件環(huán)境)1) 硬件:PC機

10、2) 操作系統(tǒng):Windows 2000/XP/20033) 編譯環(huán)境:Visual C+6.0六、開發(fā)工具和編程語言開發(fā)工具:VISCALL c+6.0;編程語言:C+語言。七、程序流程開始主菜單功能選擇1采編入庫2清空庫存3圖書借閱4圖書歸還5編號查找6書名查找7作者查找8讀者信息0退出系統(tǒng)9超期未還判斷判斷判斷判斷判斷輸入不滿足條件,返回錯誤信息輸出超期未還信息輸出讀者借閱信息歸還圖書,刪除借出記錄借出圖書,增加借出記錄存在該書目,輸出圖書信息存在該書目,輸出圖書信息存在該書目,輸出圖書信息刪除書庫條目增加書庫條目終止程序源代碼#include #include #include usi

11、ng namespace std;#define MAXSIZE 100 /最大值定義為100#define LIST_INIT_SIZE 100/圖書證使用者最大值定義為100typedef struct Boro /借書行為/借書人的結(jié)構(gòu)體 char BNum20; /借書的書號 char RetDate8; /歸還日期 struct Boro *next;Bor;typedef struct LinkBook Bor *next; /該圖書證的借書行為 char CNum20; /證號 int Total; /借書的數(shù)量lendLIST_INIT_SIZE; /借書人數(shù)組typedef

12、struct LNode /圖書的結(jié)構(gòu)體信息 char CardNum20; /圖書證號 struct LNode *next;LinkList; /借書人typedef struct book/每種圖書需要登記的內(nèi)容包括書號ISBN、書名、作者、出版社、總庫存量和現(xiàn)庫存量。 char num20; /書號 char name20; /書名 char auth20; /作者 char pub20; /出版社 int TotNum; /總庫存 int NowNum; /現(xiàn)庫存 LinkList *next; /借了該書的人ookMAXSIZE;int Retotal;/讀者數(shù)量int total

13、; /定義外部變量.書的種類數(shù)void InitBo(ook &boo) /初始化圖書信息 for(int i=0;iMAXSIZE;i+) booi.NowNum=0; booi.TotNum=0; booi.next=NULL; void InitRe(lend &Lin) /初始化借閱者信息 for(int i=0;iLIST_INIT_SIZE;i+) Lini.next=NULL;int mid=0; /外部函數(shù)mid,用來返回查找到的位置/二分法查找比較書號,用bool函數(shù),但由于函數(shù)不能有兩個返回值,所以設(shè)置一個外部變量mid,用來返回查找到的位置bool BinarySearc

14、h(ook boo,char SearchNum) int low=0,high=total-1; int found=0; while(low=high) mid=(low+high)/2; /中間點 if(strcmp(boomid.num,SearchNum)=0) /書號相同 found=1;return true; /查找成功 if(strcmp(boomid.num,SearchNum)!=0) /書號不同 high=mid-1; else low=mid+1; if(found=0) return false; /查找失敗void Buy(ook &boo, char BuyNu

15、m) if(BinarySearch(boo,BuyNum) /如果書庫中有此書 boomid.TotNum+; /總庫存加1 boomid.NowNum+; /現(xiàn)庫存加1 cout入庫成功.n; cout已更改書庫中該書的信息。n; coutn; cout編號 boomid.numn; coutn; cout書名n; coutn; cout作者boomid.authn; coutn; cout 出版社 boomid.pubn; coutn; cout 現(xiàn)庫存 boomid.NowNumn; coutn; cout 總庫存 boomid.TotNumn; coutmid&

16、total;i-) /插在適合位置 保持有序 booi=booi-1; /空出插入位置 cout該書在書庫中不存在。設(shè)立新書目,請補全書的詳細信息。n; strcpy(booi.num,BuyNum); coutbooi.NowNum; booi.TotNum=booi.NowNum; ; coutbooi.auth; coutbooi.pub; /補全信息 booi.next=NULL; total+; /總量+1 cout已增加該書的信息。endl; coutn; cout編號 booi.numn; coutn; cout書名n; coutn;

17、cout作者booi.authn; coutn; cout 出版社 booi.pubn; coutn; cout 現(xiàn)庫存 booi.NowNumn; coutn; cout 總庫存 booi.TotNumn; coutn; cout入庫成功。n;void Delete(ook &boo,char DeleteNum)/2、 清空庫存:某一種書已無保留價值,將它從圖書賬目中注銷。 if(BinarySearch(boo,DeleteNum)=false|total=0) /如果無此書 cout書庫中沒有該書.n; if(BinarySearch(boo,DeleteNum)/若有 if(!boo

18、mid.next) int j; for( j=mid;jtotal;j+) booj=booj+1; strcpy(booj.num,booj+1.num); strcpy(,booj+1.name); strcpy(booj.auth,booj+1.auth); strcpy(booj.pub,booj+1.pub); booj.TotNum=booj+1.TotNum; booj.NowNum=booj+1.NowNum; cout已成功刪除該書.n; else cout該書有借閱者,無法刪除。n;/3、 借閱:如果一種書的現(xiàn)庫存量大于零,則借出一本書,將現(xiàn)庫存量減1,

19、并登記借閱者的圖書證號和歸還期限。void Borrow(ook &boo,lend &Lin,char BorrowNum,char CaNum) Bor *p,*q; LinkList *m,*n; if(!BinarySearch(boo,BorrowNum)|total=0) /如果沒有找到此書 cout書庫里沒這書。0) /看現(xiàn)庫存是否大于0 boomid.NowNum-; /借出一本,少1 if(boomid.next=NULL) /若該書信息下顯示該種書還沒被人借過 m=(LinkList *)malloc(sizeof(LNode);/分配 boomid.next=m; /該圖

20、書信息中的鏈表的第一個結(jié)點 strcpy(m-CardNum,CaNum); m-next=NULL; /后一個結(jié)點為空 else /如果已經(jīng)有人在借這書了 m=boomid.next; while(m-next) /遍歷到最后一個結(jié)點 m=m-next; n=(LinkList *)malloc(sizeof(LNode);/分配空間,增加1個結(jié)點 m-next=n; strcpy(n-CardNum,CaNum); /記錄證號 n-next=NULL; int i=0; for(i=0;inext)p=p-next; /遍歷到最后一個結(jié)點 q=(Bor *)malloc(sizeof(Bo

21、ro);/分配空間 p-next=q; strcpy(q-BNum,BorrowNum); /記錄書號 coutq-RetDate; q-next=NULL; cout借閱成功。BNum,BorrowNum); coutp-RetDate; p-next=NULL; Retotal+; /借閱證號信息總數(shù)加1 cout借閱成功。n; else cout借閱失敗。該書現(xiàn)在庫存為0。n;/4、 歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。void Return(ook &boo,lend &Lin,char ReturnNum,char BorrowerNum) Bor *p,*q; LinkLi

22、st *m,*n; int flag=0; /設(shè)置一個參數(shù) if(!BinarySearch(boo,ReturnNum)|!total) /沒書 cout書庫中無此書CardNum,BorrowerNum) /如果是第一個借的人還的 boomid.NowNum+; /現(xiàn)庫存加1 boomid.next=m-next; /刪除結(jié)點 free(m); /釋放該結(jié)點的空間空間 else while(m-next) /查找歸還者的借閱者結(jié)點 if(!strcmp(m-next-CardNum,BorrowerNum) /如果找到 n=m-next; /n為歸還者的借閱結(jié)點 m-next=n-next

23、; /m指向歸還者的借閱結(jié)點的下一結(jié)點 free(n); /釋放空間 boomid.NowNum+; /現(xiàn)庫存加1 break; m=m-next; /在借閱者表里查找借閱者信息 for(int i=0;iBNum,ReturnNum) /如果是歸還的是借的第一本書 Lini.next=p-next; /指向下一借書結(jié)點 free(p); /釋放結(jié)點空間 cout成功歸還該書。next) /找到歸還書的借書結(jié)點 if(!strcmp(p-next-BNum,ReturnNum) /如果找到 q=p-next; /q為歸還書的借書結(jié)點 p-next=q-next; /p指向下一借書結(jié)點 free

24、(q); /釋放空間 cout成功歸還該書。next; for(int k=0;kRetotal;k+) if(!Link.next) int j; for(j=k;jRetotal;j+) Linj=Linj+1; /其后都往前移一位,覆蓋掉當前信息 strcpy(Linj.CNum, ); /刪除圖書證號 Retotal-; /圖書證數(shù)減1 /刪除當前狀態(tài)下沒借書的圖書證的信息,節(jié)省空間 if(flag=0) cout無該證信息。n;/5、 查找:實現(xiàn)按三種查詢條件之一查找:按書號查找、按書名查找、按作者查找。注:可不實現(xiàn)組合查找,即幾個條件組合查找。void SearchByNum(oo

25、k &boo,char SeaNum) /BY NUM 根據(jù)書號查找 LinkList *p; p=boomid.next; if(BinarySearch(boo,SeaNum)=false) cout對不起,未找到您想查找的書。n; /二分查找 沒找到 else /找到了的話 coutn; cout書號 boomid.numn; coutn; cout書名n; coutn; cout作者boomid.authn; coutn; cout 出版社 boomid.pubn; coutn; cout 現(xiàn)庫存 boomid.NowNumn; coutn; cout 總庫存 b

26、oomid.TotNumn; coutn; if(boomid.next!=NULL) coutn; cout 已借該書的 n; cout 圖書證號 n; while(p) coutn; coutCardNumnext; coutn; while(p) coutCardNum; /在按書號查找的函數(shù)里也顯示借了這本書的借閱者的證號 p=p-next; coutn; /顯示查找的書籍的信息void SearchByName(ook &boo) /BY NAME 根據(jù)書名查找 char SeaName20; cout輸入想查找的書的書名:SeaName; cout找到符合該書名的書的詳細信息如下:

27、n; for(int i=0;itotal;i+) if(strcmp(SeaName,)=0) /如果書名一樣 coutn; cout書號 booi.numn; coutn; cout書名n; coutn; cout作者booi.authn; coutn; cout 出版社 booi.pubn; coutn; cout 現(xiàn)庫存 booi.NowNumn; coutn; cout 總庫存 booi.TotNumn; coutn; /顯示符合信息的所有書籍的信息void SearchByAuth(ook &boo) / BY AUTH 根據(jù)作者查找 char

28、SeaAuth20; cout輸入想查找的書的作者:SeaAuth; cout找到符合該作者的書的詳細信息如下:n; for(int i=0;itotal;i+) if(strcmp(SeaAuth,booi.auth)=0)/如果作者一樣 coutn; cout書號 booi.numn; coutn; cout書名n; coutn; cout作者booi.authn; coutn; cout 出版社 booi.pubn; coutn; cout 現(xiàn)庫存 booi.NowNumn; coutn; cout 總庫存 booi.TotNumn; coutn; /顯示符合信息的所有

29、書籍的信息/6、 查看:可查看某圖書證號的借閱者借閱的全部圖書,可查看全部超期未還的圖書。void ViewCard(ook &boo,lend &Lin) /查看某圖書證號的借閱者借閱的全部圖書 char Num20; cout請輸入您所想要查看的圖書證號:Num; Bor *p; int qqq=0; for(int i=0;iRetotal;i+) if(strcmp(Lini.CNum,Num)=0) /找到該證 cout這個證借的書有:n; p=Lini.next; while(p) coutBNum; /書號 p=p-next; coutn; qqq=1; break; if(qq

30、q=0) cout該證不存在.n;void ViewBook(ook &boo,lend &Lin) /查看全部超期未還的圖書 char date8; Bor *p; cout請輸入日期(請按格式輸入):date; cout所有超期未還的書有:n; for(int i=0;iRetDate,date)0) /超過日期 coutn; cout書號 BNumn; coutn; cout證號Lini.CNumn; coutn; cout歸還日期RetDaten; coutnext;void Menu() /菜單 coutM E N U; cout ; cout 1. 采編入庫:新購入一種書,如果該書

31、在圖書賬目中已經(jīng)存在,則將其庫存量增 ; cout 加(包括總庫存量和現(xiàn)庫存量)。如果該書不存在,則在圖書賬目中 ; cout 增加一種書,總庫存量和現(xiàn)庫存量均為輸入的數(shù)字。 ; cout 2. 清空庫存:某一種書已無保留價值,將它從圖書賬目中注銷。 ; cout 3. 借閱:如果一種書的現(xiàn)庫存量大于零,則借出一本書,將現(xiàn)庫存量減1,并; cout 登記借閱者的圖書證號和歸還期限。 ; cout 4. 歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。 ; cout 5. 按書號查找。 ; cout 6. 按書名查找。 ; cout 7. 按作者查找。 ; cout 8. 查看某圖書證號的借閱者借閱的全部圖書。 ; cout 9. 查看全部超期未還的圖書。 ; cout 0. 退出圖書管理系統(tǒng)。 ; cout ; cout請 選 擇 你 需 要 的 操 作;void main() ook B

溫馨提示

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

評論

0/150

提交評論