數據結構課程設計圖書館管理系統_第1頁
數據結構課程設計圖書館管理系統_第2頁
數據結構課程設計圖書館管理系統_第3頁
數據結構課程設計圖書館管理系統_第4頁
數據結構課程設計圖書館管理系統_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、哈爾濱理工大學圖書館管理系統專 業 班 級 :XXX學 號 :XXX姓 名 :XXX指 導 教 師 :XXX課程設計時間:XXX 計算機專業 數據結構 課程設計任務書學生姓名XXX專業班級XXX學號XXX題 目圖書館管理系統課題性質工程設計課題來源XXX指導教師XXX同組姓名XXX主要內容 1. 采編入庫:新購入一本書,如果給書在圖書賬目中已經存在,則其庫存量增加(包括總庫存量和現庫存量)。如果該書不存在圖書賬目中增加一本書,總庫存量和現庫存量都為輸入的數字。 2. 清空庫存:某一種書已無保留價值,將它從圖書賬目中注銷。 3. 借 閱:如果一種書的庫存量大于零,則借出一本書,將現庫存量減1,并

2、登記借閱者的圖書證號和歸還期限。 4. 歸 還:注銷對借閱者登記,改變該書的現存量。 5. 按書號查找。 6. 按書名查找。 7. 按作者查找。 8. 查看某圖書證號的借閱者借閱的全部圖書。 9. 查看全部超期未還的圖書。 0. 退出圖書管理系統。任務要求1研究圖書館管理系統的數據存儲方式2實現圖書館管理系統的主要算法3分析算法的運行效率4具有良好的運行界面5算法具有良好的健壯性6按要求撰寫課程設計報告和設計總結。參考文獻1數據結構(C語言版),嚴蔚敏、吳偉民,清華大學出版社,1997.2Visual C+實用教程(第一版),張榮梅、梁曉林,冶金工業出版社,2004.審查意見指導教師簽字: 教

3、研室主任簽字: 年 月 日 1、 設計題目簡單的圖書館管理系統2、 設計意義熟悉和掌握數據結構課程所學的各種算法在實際項目中的應用,學習數據結構算法的c+實現方法等。3、 系統需求程序中傳遞的有信息有:圖書信息(包括圖書編號、書名、作者、出版社、總庫存和剩余庫存)和讀者信息(包括借閱證號和借閱圖書)。1. 圖書管理對書庫中的圖書信息進行管理和查看功能,包括新書入庫和清空庫存功能,主要解決實際應用中圖書館增進新書種類數目或已有圖書損壞丟失問題。其中,新書入庫功能要求輸入圖書編號、書名、作者、出版社四項信息,用戶輸入圖書編號后,系統首先判斷書庫中是否有該書的記錄,如果滿足條件,則要求輸入購入數量后

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

5、功能要求輸入圖書編號和借閱證編號,用戶輸入圖書編號和借閱證編號后,系統首先判斷書庫中是否有該書的記錄及是否借出,如果滿足條件,則歸還一本書,將該書現庫存量加1,并刪除該借閱證下該條借閱記錄,如果不滿足條件,則返回錯誤信息。3. 圖書查找查找書庫中的圖書信息,包括按編號查找,按書名查找和按作者查找功能,主要解決實際應用中借閱者查找想要借閱的圖書信息和圖書館對圖書各類信息的實時管理問題。其中,編號查找功能要求輸入圖書編號,用戶輸入圖書編號后,系統首先判斷書庫中是否有該書的記錄,如果滿足條件,則輸出包括圖書編號、書名、作者、出版社、總庫存和剩余庫存等全部圖書信息,如果不滿足條件,則返回錯誤信息;書名

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

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

8、truct Boro并決定函數按照功能劃分,共使用函數十五個,包括兩個公用函數用于庫存檢查和信息顯示,一個菜單函數和九個分別對應九大功能的功能函數。他們分別是功能函數名稱新書入庫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 BorrowerNum)編號查找Sear

9、chByNum(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)菜單函數Menu()主函數main()初始化圖書InitBo(ook &boo)初始化讀者InitBo(ook &b

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

11、lude <iostream>#include <string.h>#include <stdlib.h>using namespace std;#define MAXSIZE 100 /最大值定義為100#define LIST_INIT_SIZE 100/圖書證使用者最大值定義為100typedef struct Boro /借書行為/借書人的結構體 char BNum20; /借書的書號 char RetDate8; /歸還日期 struct Boro *next;Bor;typedef struct LinkBook Bor *next; /該圖書證

12、的借書行為 char CNum20; /證號 int Total; /借書的數量lendLIST_INIT_SIZE; /借書人數組typedef struct LNode /圖書的結構體信息 char CardNum20; /圖書證號 struct LNode *next;LinkList; /借書人typedef struct book/每種圖書需要登記的內容包括書號ISBN、書名、作者、出版社、總庫存量和現庫存量。 char num20; /書號 char name20; /書名 char auth20; /作者 char pub20; /出版社 int TotNum; /總庫存 int

13、 NowNum; /現庫存 LinkList *next; /借了該書的人ookMAXSIZE;int Retotal;/讀者數量int total; /定義外部變量.書的種類數void InitBo(ook &boo) /初始化圖書信息 for(int i=0;i<MAXSIZE;i+) booi.NowNum=0; booi.TotNum=0; booi.next=NULL; void InitRe(lend &Lin) /初始化借閱者信息 for(int i=0;i<LIST_INIT_SIZE;i+) Lini.next=NULL;int mid=0; /外

14、部函數mid,用來返回查找到的位置/二分法查找比較書號,用bool函數,但由于函數不能有兩個返回值,所以設置一個外部變量mid,用來返回查找到的位置bool BinarySearch(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)

15、/書號不同 high=mid-1; else low=mid+1; if(found=0) return false; /查找失敗void Buy(ook &boo, char BuyNum) if(BinarySearch(boo,BuyNum) /如果書庫中有此書 boomid.TotNum+; /總庫存加1 boomid.NowNum+; /現庫存加1 cout<<"入庫成功."<<'n' cout<<"已更改書庫中該書的信息。"<<'n' cout<&l

16、t;""<<'n' cout<<"編號 "<<boomid.num<<'n' cout<<""<<'n' cout<<"書名"<<<<'n' cout<<""<<'n' cout<<"作者"<<boomid.auth<

17、;<'n' cout<<""<<'n' cout<<" 出版社 "<<boomid.pub<<'n' cout<<""<<'n' cout<<" 現庫存 "<<boomid.NowNum<<'n' cout<<""<<'n' cout<<&q

18、uot; 總庫存 "<<boomid.TotNum<<'n' cout<<""<<'n' if(!BinarySearch(boo,BuyNum) int i; for(i=total;i>mid&&total;i-) /插在適合位置 保持有序 booi=booi-1; /空出插入位置 cout<<"該書在書庫中不存在。設立新書目,請補全書的詳細信息。"<<'n' strcpy(booi.num,BuyN

19、um); cout<<"該書購入的數量是:" cin>>booi.NowNum; booi.TotNum=booi.NowNum; cout<<"該書的名字是:" cin>>; cout<<"該書的作者是:" cin>>booi.auth; cout<<"該書的出版社是:" cin>>booi.pub; /補全信息 booi.next=NULL; total+; /總量+1 cout<<&q

20、uot;已增加該書的信息。"<<endl; cout<<""<<'n' cout<<"編號 "<<booi.num<<'n' cout<<""<<'n' cout<<"書名"<<<<'n' cout<<""<<'n' cout<&

21、lt;"作者"<<booi.auth<<'n' cout<<""<<'n' cout<<" 出版社 "<<booi.pub<<'n' cout<<""<<'n' cout<<" 現庫存 "<<booi.NowNum<<'n' cout<<""&

22、lt;<'n' cout<<" 總庫存 "<<booi.TotNum<<'n' cout<<""<<'n' cout<<"入庫成功。n"void Delete(ook &boo,char DeleteNum)/2、 清空庫存:某一種書已無保留價值,將它從圖書賬目中注銷。 if(BinarySearch(boo,DeleteNum)=false|total=0) /如果無此書 cout<<&q

23、uot;書庫中沒有該書."<<'n' if(BinarySearch(boo,DeleteNum)/若有 if(!boomid.next) int j; for( j=mid;j<total;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

24、.NowNum; cout<<"已成功刪除該書."<<'n' else cout<<"該書有借閱者,無法刪除。"<<'n'/3、 借閱:如果一種書的現庫存量大于零,則借出一本書,將現庫存量減1,并登記借閱者的圖書證號和歸還期限。void Borrow(ook &boo,lend &Lin,char BorrowNum,char CaNum) Bor *p,*q; LinkList *m,*n; if(!BinarySearch(boo,BorrowNum)|t

25、otal=0) /如果沒有找到此書 cout<<"書庫里沒這書。"<<'n' /如果有這書 if(BinarySearch(boo,BorrowNum) /書庫里有 if(boomid.NowNum>0) /看現庫存是否大于0 boomid.NowNum-; /借出一本,少1 if(boomid.next=NULL) /若該書信息下顯示該種書還沒被人借過 m=(LinkList *)malloc(sizeof(LNode);/分配 boomid.next=m; /該圖書信息中的鏈表的第一個結點 strcpy(m->Card

26、Num,CaNum); m->next=NULL; /后一個結點為空 else /如果已經有人在借這書了 m=boomid.next; while(m->next) /遍歷到最后一個結點 m=m->next; n=(LinkList *)malloc(sizeof(LNode);/分配空間,增加1個結點 m->next=n; strcpy(n->CardNum,CaNum); /記錄證號 n->next=NULL; int i=0; for(i=0;i<Retotal;i+) if(!strcmp(Lini.CNum,CaNum) /如果已經有該圖書證

27、的信息 p=Lini.next; while(p->next)p=p->next; /遍歷到最后一個結點 q=(Bor *)malloc(sizeof(Boro);/分配空間 p->next=q; strcpy(q->BNum,BorrowNum); /記錄書號 cout<<"輸入歸還日期:" cin>>q->RetDate; q->next=NULL; cout<<"借閱成功。"<<'n' break; /找到證了就跳出循環 if(i=Retotal)

28、/如果沒有這張證的信息 strcpy(Lini.CNum,CaNum); /記錄證號 p=(Bor *)malloc(sizeof(Boro); /分配空間 Lini.next=p; strcpy(p->BNum,BorrowNum); cout<<"輸入歸還日期:" cin>>p->RetDate; p->next=NULL; Retotal+; /借閱證號信息總數加1 cout<<"借閱成功。"<<'n' else cout<<"借閱失敗。該書現在

29、庫存為0。"<<'n'/4、 歸還:注銷對借閱者的登記,改變該書的現存量。void Return(ook &boo,lend &Lin,char ReturnNum,char BorrowerNum) Bor *p,*q; LinkList *m,*n; int flag=0; /設置一個參數 if(!BinarySearch(boo,ReturnNum)|!total) /沒書 cout<<"書庫中無此書"<<'n' if(BinarySearch(boo,ReturnNum)

30、/有書 m=boomid.next; if(!strcmp(m->CardNum,BorrowerNum) /如果是第一個借的人還的 boomid.NowNum+; /現庫存加1 boomid.next=m->next; /刪除結點 free(m); /釋放該結點的空間空間 else while(m->next) /查找歸還者的借閱者結點 if(!strcmp(m->next->CardNum,BorrowerNum) /如果找到 n=m->next; /n為歸還者的借閱結點 m->next=n->next; /m指向歸還者的借閱結點的下一結點

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

32、n' flag=1; break; else /找不到 while(p->next) /找到歸還書的借書結點 if(!strcmp(p->next->BNum,ReturnNum) /如果找到 q=p->next; /q為歸還書的借書結點 p->next=q->next; /p指向下一借書結點 free(q); /釋放空間 cout<<"成功歸還該書。"<<'n' flag=1; break; p=p->next; for(int k=0;k<Retotal;k+) if(!Li

33、nk.next) int j; for(j=k;j<Retotal;j+) Linj=Linj+1; /其后都往前移一位,覆蓋掉當前信息 strcpy(Linj.CNum," "); /刪除圖書證號 Retotal-; /圖書證數減1 /刪除當前狀態下沒借書的圖書證的信息,節省空間 if(flag=0) cout<<"無該證信息。"<<'n'/5、 查找:實現按三種查詢條件之一查找:按書號查找、按書名查找、按作者查找。注:可不實現組合查找,即幾個條件組合查找。void SearchByNum(ook &

34、;boo,char SeaNum) /BY NUM 根據書號查找 LinkList *p; p=boomid.next; if(BinarySearch(boo,SeaNum)=false) cout<<"對不起,未找到您想查找的書。"<<'n' /二分查找 沒找到 else /找到了的話 cout<<""<<'n' cout<<"書號 "<<boomid.num<<'n' cout<<&qu

35、ot;"<<'n' cout<<"書名"<<<<'n' cout<<""<<'n' cout<<"作者"<<boomid.auth<<'n' cout<<""<<'n' cout<<" 出版社 "<<boomid.pub<&l

36、t;'n' cout<<""<<'n' cout<<" 現庫存 "<<boomid.NowNum<<'n' cout<<""<<'n' cout<<" 總庫存 "<<boomid.TotNum<<'n' cout<<""<<'n' if(boomid.next

37、!=NULL) cout<<""<<'n' cout<<" 已借該書的 "<<'n' cout<<" 圖書證號 "<<'n' while(p) cout<<""<<'n' cout<<""<<p->CardNum<<""<<'n' p=p->n

38、ext; cout<<""<<'n' while(p) cout<<p->CardNum; /在按書號查找的函數里也顯示借了這本書的借閱者的證號 p=p->next; cout<<'n' /顯示查找的書籍的信息void SearchByName(ook &boo) /BY NAME 根據書名查找 char SeaName20; cout<<"輸入想查找的書的書名:"<<'n' cin>>SeaName;

39、cout<<"找到符合該書名的書的詳細信息如下:"<<'n' for(int i=0;i<total;i+) if(strcmp(SeaName,)=0) /如果書名一樣 cout<<""<<'n' cout<<"書號 "<<booi.num<<'n' cout<<""<<'n' cout<<"書名&

40、quot;<<<<'n' cout<<""<<'n' cout<<"作者"<<booi.auth<<'n' cout<<""<<'n' cout<<" 出版社 "<<booi.pub<<'n' cout<<""<<'n'

41、; cout<<" 現庫存 "<<booi.NowNum<<'n' cout<<""<<'n' cout<<" 總庫存 "<<booi.TotNum<<'n' cout<<""<<'n' /顯示符合信息的所有書籍的信息void SearchByAuth(ook &boo) / BY AUTH 根據作者查找 char SeaAu

42、th20; cout<<"輸入想查找的書的作者:"<<'n' cin>>SeaAuth; cout<<"找到符合該作者的書的詳細信息如下:"<<'n' for(int i=0;i<total;i+) if(strcmp(SeaAuth,booi.auth)=0)/如果作者一樣 cout<<""<<'n' cout<<"書號 "<<booi.num<&

43、lt;'n' cout<<""<<'n' cout<<"書名"<<<<'n' cout<<""<<'n' cout<<"作者"<<booi.auth<<'n' cout<<""<<'n' cout<<" 出版社 &quo

44、t;<<booi.pub<<'n' cout<<""<<'n' cout<<" 現庫存 "<<booi.NowNum<<'n' cout<<""<<'n' cout<<" 總庫存 "<<booi.TotNum<<'n' cout<<""<<'n

45、' /顯示符合信息的所有書籍的信息/6、 查看:可查看某圖書證號的借閱者借閱的全部圖書,可查看全部超期未還的圖書。void ViewCard(ook &boo,lend &Lin) /查看某圖書證號的借閱者借閱的全部圖書 char Num20; cout<<"請輸入您所想要查看的圖書證號:"<<'n' cin>>Num; Bor *p; int qqq=0; for(int i=0;i<Retotal;i+) if(strcmp(Lini.CNum,Num)=0) /找到該證 cout<

46、<"這個證借的書有:"<<'n' p=Lini.next; while(p) cout<<p->BNum; /書號 p=p->next; cout<<'n' qqq=1; break; if(qqq=0) cout<<"該證不存在."<<'n'void ViewBook(ook &boo,lend &Lin) /查看全部超期未還的圖書 char date8; Bor *p; cout<<"請輸

47、入日期(請按格式20060605輸入):"<<'n' cin>>date; cout<<"所有超期未還的書有:"<<'n' for(int i=0;i<Retotal;i+) p=Lini.next; while(p) /當p不空時 if(strcmp(p->RetDate,date)<0) /超過日期 cout<<""<<'n' cout<<"書號 "<<p-&g

48、t;BNum<<'n' cout<<""<<'n' cout<<"證號"<<Lini.CNum<<'n' cout<<""<<'n' cout<<"歸還日期"<<p->RetDate<<'n' cout<<""<<'n'/顯示所有超期未還的書

49、的信息 p=p->next;void Menu() /菜單 cout<<"M E N U" cout<<" " cout<<" 1. 采編入庫:新購入一種書,如果該書在圖書賬目中已經存在,則將其庫存量增 " cout<<" 加(包括總庫存量和現庫存量)。如果該書不存在,則在圖書賬目中 " cout<<" 增加一種書,總庫存量和現庫存量均為輸入的數字。 " cout<<" 2. 清空庫存:某一種書已無保留價值,

50、將它從圖書賬目中注銷。 " cout<<" 3. 借閱:如果一種書的現庫存量大于零,則借出一本書,將現庫存量減1,并" cout<<" 登記借閱者的圖書證號和歸還期限。 " cout<<" 4. 歸還:注銷對借閱者的登記,改變該書的現存量。 " cout<<" 5. 按書號查找。 " cout<<" 6. 按書名查找。 " cout<<" 7. 按作者查找。 " cout<<" 8. 查看某圖書證號的借閱者借閱的全部圖書。 " cout<<&qu

溫馨提示

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

評論

0/150

提交評論