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

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書(shū)管理系統(tǒng)一 需求分析該程序是模擬圖書(shū)館管理系統(tǒng),實(shí)現(xiàn)圖書(shū)采編入庫(kù)、借書(shū)、還書(shū)、查詢(xún)等基本業(yè)務(wù)。此程序規(guī)定:(1) 管理員能夠向系統(tǒng)中輸入每種書(shū)的基本信息,包括書(shū)號(hào)、書(shū)名、作者、現(xiàn)存量和庫(kù)存量、借閱記錄,并保存記錄;(2) 用戶(讀者)能夠按書(shū)號(hào)、書(shū)名、作者查詢(xún)圖書(shū)信息;(3) 管理員能夠?qū)崿F(xiàn)圖書(shū)采編入庫(kù)(新購(gòu)入一本書(shū),經(jīng)分類(lèi)和確定書(shū)號(hào)之后登記到圖書(shū)賬目中去。如果這種書(shū)在帳中已有,則只將總庫(kù)存量增加)、借閱(如果書(shū)的現(xiàn)存量大于0,則借出一本,登記借閱者的圖書(shū)證號(hào)和歸還期限)、歸還(刪除對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量)、銷(xiāo)毀(將圖書(shū)從賬目中刪除)等操作。二 概要設(shè)計(jì)l 系統(tǒng)用

2、到的抽象數(shù)據(jù)類(lèi)型定義: 1、ADT LinearList數(shù)據(jù)元素:D=ai|aiD0,i=1,2,n,n0,D0為某一數(shù)據(jù)對(duì)象關(guān)系: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ù)據(jù)對(duì)象:D=ai|a

3、iCharacterSet,i=1,2,n;n0 數(shù)據(jù)關(guān)系: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)中的子程序和功能說(shuō)明:InitBo(Book &boo);初始化圖書(shū)信息InitRe(lend &Lin);初始化借閱者信息BinarySearch(Book boo,char SearchNum);二分法查找比較書(shū)號(hào)Buy(Book &boo, char BuyNum);新書(shū)采編入庫(kù)系統(tǒng)Delete(Book &boo,char DeleteNum);清除圖書(shū)信息系統(tǒng)Borrow(Book &boo,lend &Lin,char BorrowNum,char CaNum);借

5、閱圖書(shū)處理系統(tǒng)Return(Book &boo,lend &Lin,char ReturnNum,char BorrowerNum);歸還圖書(shū)系統(tǒng)SearchByNum(Book &boo,char SeaNum);按書(shū)號(hào)查找系統(tǒng)SearchByName(Book &boo);按書(shū)名查找系統(tǒng)SearchByAuth(Book &boo);按作者查詢(xún)系統(tǒng)Menu();主菜單顯示系統(tǒng)Search();查詢(xún)系統(tǒng)子菜單main();主函數(shù)l 系統(tǒng)程序功能結(jié)構(gòu)圖圖書(shū)館管理系統(tǒng)圖書(shū)信息錄入查詢(xún)圖書(shū)信息處理圖書(shū)信息基本信息借閱記錄按書(shū)號(hào)查詢(xún)按書(shū)名查詢(xún)按作者查詢(xún)圖書(shū)采編

6、入庫(kù)圖書(shū)借閱情況圖書(shū)歸還情況圖書(shū)銷(xiāo)毀情況三 詳細(xì)設(shè)計(jì)l 功能實(shí)現(xiàn)過(guò)程bool BinarySearch(Book boo,char SearchNum) /二分法查找比較書(shū)號(hào)while(low<=high)計(jì)算中間點(diǎn);if(查找到書(shū)號(hào)相同的) 返回值true;if(查找書(shū)號(hào)不相同)用二分法進(jìn)一步進(jìn)行查找;if(庫(kù)中沒(méi)有所要查找的書(shū)) 返回值false; void Buy(Book &boo, char BuyNum)/*采編入庫(kù)*/ if(書(shū)庫(kù)中有此書(shū)) 總庫(kù)存加1; 現(xiàn)庫(kù)存加1;if(書(shū)庫(kù)中無(wú)此書(shū)) for(i=total;i>mid&&total;i-)

7、/*將新采購(gòu)的書(shū)插在適合位置,保持有序*/ 空出插入位置; 輸入新購(gòu)書(shū)籍的相關(guān)信息:書(shū)號(hào)、書(shū)名、作者、出版社;booi.next=NULL;total+;/*總量加1*/void Delete(Book &boo,char DeleteNum)/*清除圖書(shū)信息*/ if(書(shū)庫(kù)中沒(méi)有此書(shū))輸出“無(wú)此書(shū)”;if(書(shū)庫(kù)中有此書(shū)) strcpy(連續(xù)兩本書(shū)的相關(guān)信息);現(xiàn)存量減1;庫(kù)存量減1;else 輸出“此書(shū)已有借閱者,無(wú)法刪除!”;void Borrow(Book &boo,lend &Lin,char BorrowNum,char CaNum)/*借閱圖書(shū)信息*/ if

8、(沒(méi)有找到此書(shū)) 輸出“書(shū)庫(kù)中無(wú)此書(shū)!”; if(書(shū)庫(kù)中有此書(shū)) 借出一本書(shū)后,該書(shū)的現(xiàn)存量減1;并在借閱記錄鏈表中插入該條記錄;再對(duì)應(yīng)讀者信息記錄鏈表,如果已有該讀者證號(hào)信息,直接在該鏈表中插入此次借閱記錄;如果無(wú)該讀者證號(hào)信息,申請(qǐng)新單鏈表存放借閱記錄。 else 輸出“該書(shū)現(xiàn)存量為0”;void Return(Book &boo,lend &Lin,char ReturnNum,char BorrowerNum)/*歸還圖書(shū)信息*/ if(書(shū)庫(kù)中無(wú)此書(shū))輸出“無(wú)此書(shū)記錄”; if(書(shū)庫(kù)中有此書(shū)) 查找圖書(shū)文件,修改圖書(shū)的現(xiàn)存量;查找記錄借閱信息的單鏈表,填入還書(shū)日期,刪除

9、借閱信息;查找記錄讀者信息的單鏈表,刪除證號(hào)信息。void SearchByNum(Book &boo,char SeaNum)/*按書(shū)號(hào)查找*/ if(書(shū)庫(kù)中無(wú)此書(shū)信息)/*用二分法查找*/ 輸出“無(wú)此書(shū)”; else/*書(shū)庫(kù)中有此書(shū)信息*/ 輸出與此書(shū)有關(guān)的相關(guān)信息;void SearchByName(Book &boo)/*按書(shū)名查找*/輸入想要查找書(shū)的書(shū)名;用順序查找法查找;if(查找到需要查找的書(shū)) 輸出與此書(shū)相關(guān)的信息;建議畫(huà)出主要模塊流程圖。四 設(shè)計(jì)與調(diào)試分析1、這個(gè)程序設(shè)計(jì)中要注意定義兩個(gè)結(jié)構(gòu)體:圖書(shū)結(jié)構(gòu)體、借閱人結(jié)構(gòu)體。其中定義數(shù)組存放圖書(shū)信息,申請(qǐng)鏈表存放借

10、閱記錄和讀者信息記錄。2、程序中運(yùn)用到大多的插入與刪除,所以申請(qǐng)鏈表比較方便插入與刪除。但應(yīng)前期需求分析的準(zhǔn)備工作不充分,導(dǎo)致程序運(yùn)行功能不全,比如查找時(shí)關(guān)于此書(shū)的信息不能全部顯示出來(lái),并且添加刪除時(shí)庫(kù)存的變化不能直接顯示出來(lái)。程序的健壯性不能達(dá)到預(yù)期的結(jié)果,這些都是需要改進(jìn)的。3、在程序中的函數(shù)調(diào)用是個(gè)非常重要的部分,也是經(jīng)常需要用到的,在編寫(xiě)程序過(guò)程中,因?yàn)楹瘮?shù)調(diào)用不準(zhǔn)確,使得循環(huán)進(jìn)不去,后來(lái)改變函數(shù)的調(diào)用關(guān)系,才達(dá)到了預(yù)期結(jié)果。4、程序中還定義了全局變量,之前沒(méi)定義全局變量,在下面的編寫(xiě)過(guò)程,同樣性質(zhì)的地方需要重復(fù)定義,比較麻煩,定義全局變量使得程序比較簡(jiǎn)明一點(diǎn)。五 用戶手冊(cè)【 使用說(shuō)明

11、 】1、進(jìn)入圖書(shū)館管理系統(tǒng)主頁(yè)面2、若有新書(shū)要新編入庫(kù),選擇1,進(jìn)入新書(shū)入庫(kù)系統(tǒng),輸入入庫(kù)書(shū)的書(shū)號(hào),若書(shū)庫(kù)中無(wú)該書(shū),則設(shè)立新書(shū)目,輸入新書(shū)信息。若書(shū)庫(kù)中已有該書(shū),則輸入新信息覆蓋修改原書(shū)庫(kù)中該書(shū)號(hào)對(duì)應(yīng)書(shū)的信息。3、若有書(shū)籍信息需要?jiǎng)h除,選擇2,進(jìn)入清空庫(kù)存系統(tǒng),輸入想要?jiǎng)h除書(shū)的書(shū)號(hào),則此書(shū)信息就已刪除。4、若要借閱圖書(shū),選擇3,進(jìn)入圖書(shū)借閱系統(tǒng),輸入需要借閱書(shū)的書(shū)號(hào)以及讀者證號(hào),并輸入還書(shū)日期,則借書(shū)成功。5、若要?dú)w還圖書(shū),選擇4,進(jìn)入圖書(shū)歸還系統(tǒng),輸入需要?dú)w還圖書(shū)的書(shū)號(hào)以及讀者證號(hào),則還書(shū)成功。6、若要查找信息,選擇5,進(jìn)入查找信息子系統(tǒng)。若要按書(shū)號(hào)查找,則選擇子系統(tǒng)中的1,輸入需要查找的書(shū)

12、的書(shū)號(hào),若按書(shū)名查找,則選擇子系統(tǒng)中的2,輸入需要查找的書(shū)名,若按作者查找,輸入需要查找書(shū)的作者進(jìn)行查找,若查找結(jié)束,則按0退出。7、若系統(tǒng)使用結(jié)束,按0退出?!?程序中的頭文件 】#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAXSIZE 100 #define LIST_INIT_SIZE 100int Retotal;/*定義的全局變量*/int total;六 測(cè)試成果1、采編入庫(kù)2、清空庫(kù)存3、圖書(shū)借閱4、圖書(shū)歸還5、圖書(shū)查找七 附錄(源程序清單)#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("入庫(kù)成功.n");printf("已更改書(shū)庫(kù)中該書(shū)的信息。n");printf("編號(hào) :%s 書(shū)名:%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("該書(shū)在書(shū)庫(kù)中不存在,設(shè)立新書(shū)目!n");strcpy(booi.num,BuyNum);printf("該書(shū)購(gòu)入的數(shù)量是:");scanf(" %d",&booi.NowNum);booi.TotNum=booi.NowNum;printf("該書(shū)的名字是:");scanf(" %s",&);prin

18、tf("該書(shū)的作者是:");scanf(" %s",&booi.auth);printf("該書(shū)的出版社是:");scanf(" %s",&booi.pub);booi.next=NULL;total+;printf("已增加該書(shū)的信息!n");printf("編號(hào) :%s 書(shū)名:%s ",booi.num,);printf("作者:%s 出版社:%s",booi.auth,booi.pub);printf("n

19、");printf("入庫(kù)成功.n");void Delete(Book &boo,char DeleteNum)if(BinarySearch(boo,DeleteNum)=false|total=0) printf("書(shū)庫(kù)中沒(méi)有該書(shū).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("已成功刪除該書(shū).n");else printf("該書(shū)有借閱者,無(wú)法刪除。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("書(shū)庫(kù)里沒(méi)這書(shū)。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;借閱失敗.該書(shū)現(xiàn)在庫(kù)存為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("書(shū)庫(kù)中無(wú)此書(shū).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("成功歸還該書(shū).n");flag=1;break;else while(p->next) if(!strcmp(p->next->BNum,ReturnNum) q=p->next; p->next=q->next; free(q); printf("成功歸還該書(shū).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("無(wú)該證信息.n");void SearchByNum(Book &boo,char SeaNum)LinkList *p;p=boomid.next;if(BinarySearch(boo,SeaNum)=true)printf("書(shū)號(hào):%sn",boomid.num);printf("書(shū)名:%sn",);printf("作者名:%sn&

28、quot;,boomid.auth);printf("出版社:%sn",boomid.pub);printf("現(xiàn)存量:%sn",boomid.NowNum);printf("庫(kù)存量:%sn",boomid.TotNum);printf(" n");elseprintf("對(duì)不起,未找到您想查找的書(shū)。n");void SearchByName(Book &boo)char SeaName20;printf("輸入想查找的書(shū)的書(shū)名:n");scanf(" %s

29、",&SeaName);printf("此書(shū)存在!n");for(int i=0;i<total;i+)if(strcmp(SeaName,)=0)printf("編號(hào):%s 書(shū)名:%s ",booi.num,);printf("作者:%s 出版社:%s",booi.auth,booi.pub);printf("總庫(kù)存量:%s",booi.TotNum);printf("現(xiàn)庫(kù)存量:%s",booi.NowNum);printf(&quo

30、t;n");void SearchByAuth(Book &boo)char SeaAuth20;printf("輸入想查找的書(shū)的作者:n");scanf(" %s",&SeaAuth);printf("找到符合該作者的書(shū)的詳細(xì)信息如下:n");for(int i=0;i<total;i+)if(strcmp(SeaAuth,booi.auth)=0) printf("編號(hào) :%s 書(shū)名:%s ",booi.num,); printf("作者:%s 出版社

31、:%s",booi.auth,booi.pub); printf("n");void Menu() printf(" 圖書(shū)館管理系統(tǒng) n");printf("1. 采編入庫(kù) 2. 清空庫(kù)存nn");printf("3. 圖書(shū)借閱 4、圖書(shū)歸還nn"); printf("5. 按要求查找 0. 退出nn"); printf("請(qǐng)選擇:");void Search()char BNum20;Book Bo;int k;printf(" 圖書(shū)館查詢(xún)子系統(tǒng)n");printf("1、按書(shū)號(hào)查詢(xún) 2、按書(shū)名查找nn");printf("3、按作者查詢(xún) 4、退出子系統(tǒng)nn");printf("請(qǐng)選擇:");scanf("%d",&k);switch(k)case 1:printf("請(qǐng)輸入書(shū)號(hào):");/輸入書(shū)號(hào)查找scanf("

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論