




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數(shù)據結構課程設計圖書管理系統(tǒng)一 需求分析該程序是模擬圖書館管理系統(tǒng),實現(xiàn)圖書采編入庫、借書、還書、查詢等基本業(yè)務。此程序規(guī)定:(1) 管理員能夠向系統(tǒng)中輸入每種書的基本信息,包括書號、書名、作者、現(xiàn)存量和庫存量、借閱記錄,并保存記錄;(2) 用戶(讀者)能夠按書號、書名、作者查詢圖書信息;(3) 管理員能夠實現(xiàn)圖書采編入庫(新購入一本書,經分類和確定書號之后登記到圖書賬目中去。如果這種書在帳中已有,則只將總庫存量增加)、借閱(如果書的現(xiàn)存量大于0,則借出一本,登記借閱者的圖書證號和歸還期限)、歸還(刪除對借閱者的登記,改變該書的現(xiàn)存量)、銷毀(將圖書從賬目中刪除)等操作。二 概要設計l 系統(tǒng)用
2、到的抽象數(shù)據類型定義: 1、ADT LinearList數(shù)據元素:D=ai|aiD0,i=1,2,n,n0,D0為某一數(shù)據對象關系:S=<ai,ai+1>|ai,ai+1D0,i=1,2,n-1基本操作:(1) InitList(L)(2) DestroyList(L)(3) ClearList(L)(4) EmptyList(L)(5) ListLength(L)(6) Locate(L,e)(7) GetData(L,i)(8) InsList(L,i,e)(9) DelList(L,i,&e)ADT LinearList2、ADT String 數(shù)據對象:D=ai|a
3、iCharacterSet,i=1,2,n;n0 數(shù)據關系:R=<ai-1,ai>|ai-1,aiD,i=2,n;n0 基本操作:(1) StrAsign(S,chars)(2) StrInsert(S,pos,T)(3) StrDelete(S,pos,len)(4) StrCopy(S,T)(5) StrEmpty(S)(6) StrCompare(S,T)(7) StrLength(S)(8) StrClear(S)(9) StrCat(S,T)(10)SubString(Sub,S,pos,len)(11)StrIndex(S,pos,T)(12)StrReplace(S,
4、T,V)(13)StrDestroy(S)ADT Stringl 系統(tǒng)中的子程序和功能說明:InitBo(Book &boo);初始化圖書信息InitRe(lend &Lin);初始化借閱者信息BinarySearch(Book boo,char SearchNum);二分法查找比較書號Buy(Book &boo, char BuyNum);新書采編入庫系統(tǒng)Delete(Book &boo,char DeleteNum);清除圖書信息系統(tǒng)Borrow(Book &boo,lend &Lin,char BorrowNum,char CaNum);借
5、閱圖書處理系統(tǒng)Return(Book &boo,lend &Lin,char ReturnNum,char BorrowerNum);歸還圖書系統(tǒng)SearchByNum(Book &boo,char SeaNum);按書號查找系統(tǒng)SearchByName(Book &boo);按書名查找系統(tǒng)SearchByAuth(Book &boo);按作者查詢系統(tǒng)Menu();主菜單顯示系統(tǒng)Search();查詢系統(tǒng)子菜單main();主函數(shù)l 系統(tǒng)程序功能結構圖圖書館管理系統(tǒng)圖書信息錄入查詢圖書信息處理圖書信息基本信息借閱記錄按書號查詢按書名查詢按作者查詢圖書采編
6、入庫圖書借閱情況圖書歸還情況圖書銷毀情況三 詳細設計l 功能實現(xiàn)過程bool BinarySearch(Book boo,char SearchNum) /二分法查找比較書號while(low<=high)計算中間點;if(查找到書號相同的) 返回值true;if(查找書號不相同)用二分法進一步進行查找;if(庫中沒有所要查找的書) 返回值false; void Buy(Book &boo, char BuyNum)/*采編入庫*/ if(書庫中有此書) 總庫存加1; 現(xiàn)庫存加1;if(書庫中無此書) for(i=total;i>mid&&total;i-)
7、/*將新采購的書插在適合位置,保持有序*/ 空出插入位置; 輸入新購書籍的相關信息:書號、書名、作者、出版社;booi.next=NULL;total+;/*總量加1*/void Delete(Book &boo,char DeleteNum)/*清除圖書信息*/ if(書庫中沒有此書)輸出“無此書”;if(書庫中有此書) strcpy(連續(xù)兩本書的相關信息);現(xiàn)存量減1;庫存量減1;else 輸出“此書已有借閱者,無法刪除!”;void Borrow(Book &boo,lend &Lin,char BorrowNum,char CaNum)/*借閱圖書信息*/ if
8、(沒有找到此書) 輸出“書庫中無此書!”; if(書庫中有此書) 借出一本書后,該書的現(xiàn)存量減1;并在借閱記錄鏈表中插入該條記錄;再對應讀者信息記錄鏈表,如果已有該讀者證號信息,直接在該鏈表中插入此次借閱記錄;如果無該讀者證號信息,申請新單鏈表存放借閱記錄。 else 輸出“該書現(xiàn)存量為0”;void Return(Book &boo,lend &Lin,char ReturnNum,char BorrowerNum)/*歸還圖書信息*/ if(書庫中無此書)輸出“無此書記錄”; if(書庫中有此書) 查找圖書文件,修改圖書的現(xiàn)存量;查找記錄借閱信息的單鏈表,填入還書日期,刪除
9、借閱信息;查找記錄讀者信息的單鏈表,刪除證號信息。void SearchByNum(Book &boo,char SeaNum)/*按書號查找*/ if(書庫中無此書信息)/*用二分法查找*/ 輸出“無此書”; else/*書庫中有此書信息*/ 輸出與此書有關的相關信息;void SearchByName(Book &boo)/*按書名查找*/輸入想要查找書的書名;用順序查找法查找;if(查找到需要查找的書) 輸出與此書相關的信息;建議畫出主要模塊流程圖。四 設計與調試分析1、這個程序設計中要注意定義兩個結構體:圖書結構體、借閱人結構體。其中定義數(shù)組存放圖書信息,申請鏈表存放借
10、閱記錄和讀者信息記錄。2、程序中運用到大多的插入與刪除,所以申請鏈表比較方便插入與刪除。但應前期需求分析的準備工作不充分,導致程序運行功能不全,比如查找時關于此書的信息不能全部顯示出來,并且添加刪除時庫存的變化不能直接顯示出來。程序的健壯性不能達到預期的結果,這些都是需要改進的。3、在程序中的函數(shù)調用是個非常重要的部分,也是經常需要用到的,在編寫程序過程中,因為函數(shù)調用不準確,使得循環(huán)進不去,后來改變函數(shù)的調用關系,才達到了預期結果。4、程序中還定義了全局變量,之前沒定義全局變量,在下面的編寫過程,同樣性質的地方需要重復定義,比較麻煩,定義全局變量使得程序比較簡明一點。五 用戶手冊【 使用說明
11、 】1、進入圖書館管理系統(tǒng)主頁面2、若有新書要新編入庫,選擇1,進入新書入庫系統(tǒng),輸入入庫書的書號,若書庫中無該書,則設立新書目,輸入新書信息。若書庫中已有該書,則輸入新信息覆蓋修改原書庫中該書號對應書的信息。3、若有書籍信息需要刪除,選擇2,進入清空庫存系統(tǒng),輸入想要刪除書的書號,則此書信息就已刪除。4、若要借閱圖書,選擇3,進入圖書借閱系統(tǒng),輸入需要借閱書的書號以及讀者證號,并輸入還書日期,則借書成功。5、若要歸還圖書,選擇4,進入圖書歸還系統(tǒng),輸入需要歸還圖書的書號以及讀者證號,則還書成功。6、若要查找信息,選擇5,進入查找信息子系統(tǒng)。若要按書號查找,則選擇子系統(tǒng)中的1,輸入需要查找的書
12、的書號,若按書名查找,則選擇子系統(tǒng)中的2,輸入需要查找的書名,若按作者查找,輸入需要查找書的作者進行查找,若查找結束,則按0退出。7、若系統(tǒng)使用結束,按0退出?!?程序中的頭文件 】#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAXSIZE 100 #define LIST_INIT_SIZE 100int Retotal;/*定義的全局變量*/int total;六 測試成果1、采編入庫2、清空庫存3、圖書借閱4、圖書歸還5、圖書查找七 附錄(源程序清單)#include
13、<stdio.h>#include <string.h>#include <stdlib.h>#define MAXSIZE 100 #define LIST_INIT_SIZE 100typedef struct Borochar BNum20; char RetDate8; struct Boro *next;Bor;typedef struct LinkBook Bor *next;char CNum20;int Total;lendLIST_INIT_SIZE;typedef struct LNodechar CardNum20;struct LNo
14、de *next;LinkList; typedef struct bookchar num20;char name20;char auth20;char pub20;int TotNum;int NowNum;LinkList *next;BookMAXSIZE;int Retotal;int total; void InitBo(Book &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<LI
15、ST_INIT_SIZE;i+)Lini.next=NULL;int mid=0;bool BinarySearch(Book boo,char SearchNum) int low=0,high=total;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
16、Buy(Book &boo, char BuyNum)int i;if(BinarySearch(boo,BuyNum) boomid.TotNum+; boomid.NowNum+; printf("入庫成功.n");printf("已更改書庫中該書的信息。n");printf("編號 :%s 書名:%s ",boomid.num,);printf("作者:%s 出版社:%s",boomid.auth,boomid.pub);printf("n");if(!Bin
17、arySearch(boo,BuyNum)for(i=total;i>mid&&total;i-) booi=booi-1; printf("該書在書庫中不存在,設立新書目!n");strcpy(booi.num,BuyNum);printf("該書購入的數(shù)量是:");scanf(" %d",&booi.NowNum);booi.TotNum=booi.NowNum;printf("該書的名字是:");scanf(" %s",&);prin
18、tf("該書的作者是:");scanf(" %s",&booi.auth);printf("該書的出版社是:");scanf(" %s",&booi.pub);booi.next=NULL;total+;printf("已增加該書的信息!n");printf("編號 :%s 書名:%s ",booi.num,);printf("作者:%s 出版社:%s",booi.auth,booi.pub);printf("n
19、");printf("入庫成功.n");void Delete(Book &boo,char DeleteNum)if(BinarySearch(boo,DeleteNum)=false|total=0) printf("書庫中沒有該書.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);st
20、rcpy(booj.auth,booj+1.auth);strcpy(booj.pub,booj+1.pub);booj.TotNum=booj+1.TotNum;booj.NowNum=booj+1.NowNum;printf("已成功刪除該書.n");else printf("該書有借閱者,無法刪除。n");void Borrow(Book &boo,lend &Lin,char BorrowNum,char CaNum)Bor *p,*q;LinkList *m,*n;if(!BinarySearch(boo,BorrowNum)|
21、total=0) printf("書庫里沒這書。n");if(BinarySearch(boo,BorrowNum) if(boomid.NowNum>0) boomid.NowNum-;if(boomid.next=NULL) m=(LinkList *)malloc(sizeof(LNode);boomid.next=m;strcpy(m->CardNum,CaNum);m->next=NULL;else m=boomid.next;while(m->next) m=m->next;n=(LinkList *)malloc(sizeof(L
22、Node);m->next=n;strcpy(n->CardNum,CaNum);n->next=NULL; int i=0;for(i=0;i<Retotal;i+)if(!strcmp(Lini.CNum,CaNum)p=Lini.next;while(p->next)p=p->next;q=(Bor *)malloc(sizeof(Boro);p->next=q;strcpy(q->BNum,BorrowNum); printf("輸入歸還日期:");scanf("%s",&q->Ret
23、Date);q->next=NULL;printf("借閱成功.n");break; if(i=Retotal)strcpy(Lini.CNum,CaNum); p=(Bor *)malloc(sizeof(Boro);Lini.next=p;strcpy(p->BNum,BorrowNum);printf("輸入歸還日期:");scanf(" %s",&p->RetDate);p->next=NULL;Retotal+; printf("借閱成功.n");else printf(&
24、quot;借閱失敗.該書現(xiàn)在庫存為0.n");void Return(Book &boo,lend &Lin,char ReturnNum,char BorrowerNum)Bor *p,*q;LinkList *m,*n;int flag=0;if(!BinarySearch(boo,ReturnNum)|!total) printf("書庫中無此書.n");if(BinarySearch(boo,ReturnNum) m=boomid.next;if(!strcmp(m->CardNum,BorrowerNum) boomid.NowNu
25、m+; boomid.next=m->next; free(m); elsewhile(m->next) if(!strcmp(m->next->CardNum,BorrowerNum) n=m->next; m->next=n->next; free(n); boomid.NowNum+; 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.n
26、ext=p->next; free(p); printf("成功歸還該書.n");flag=1;break;else while(p->next) if(!strcmp(p->next->BNum,ReturnNum) q=p->next; p->next=q->next; free(q); printf("成功歸還該書.n");flag=1;break;p=p->next;for(int k=0;k<Retotal;k+)if(!Link.next)int j;for(j=k;j<Retota
27、l;j+)Linj=Linj+1; strcpy(Linj.CNum," "); Retotal-; if(flag=0) printf("無該證信息.n");void SearchByNum(Book &boo,char SeaNum)LinkList *p;p=boomid.next;if(BinarySearch(boo,SeaNum)=true)printf("書號:%sn",boomid.num);printf("書名:%sn",);printf("作者名:%sn&
28、quot;,boomid.auth);printf("出版社:%sn",boomid.pub);printf("現(xiàn)存量:%sn",boomid.NowNum);printf("庫存量:%sn",boomid.TotNum);printf(" n");elseprintf("對不起,未找到您想查找的書。n");void SearchByName(Book &boo)char SeaName20;printf("輸入想查找的書的書名:n");scanf(" %s
29、",&SeaName);printf("此書存在!n");for(int i=0;i<total;i+)if(strcmp(SeaName,)=0)printf("編號:%s 書名:%s ",booi.num,);printf("作者:%s 出版社:%s",booi.auth,booi.pub);printf("總庫存量:%s",booi.TotNum);printf("現(xiàn)庫存量:%s",booi.NowNum);printf(&quo
30、t;n");void SearchByAuth(Book &boo)char SeaAuth20;printf("輸入想查找的書的作者:n");scanf(" %s",&SeaAuth);printf("找到符合該作者的書的詳細信息如下:n");for(int i=0;i<total;i+)if(strcmp(SeaAuth,booi.auth)=0) printf("編號 :%s 書名:%s ",booi.num,); printf("作者:%s 出版社
31、:%s",booi.auth,booi.pub); printf("n");void Menu() printf(" 圖書館管理系統(tǒng) n");printf("1. 采編入庫 2. 清空庫存nn");printf("3. 圖書借閱 4、圖書歸還nn"); printf("5. 按要求查找 0. 退出nn"); printf("請選擇:");void Search()char BNum20;Book Bo;int k;printf(" 圖書館查詢子系統(tǒng)n");printf("1、按書號查詢 2、按書名查找nn");printf("3、按作者查詢 4、退出子系統(tǒng)nn");printf("請選擇:");scanf("%d",&k);switch(k)case 1:printf("請輸入書號:");/輸入書號查找scanf("
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論