版權(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ì)報(bào)告設(shè)計(jì)題目:圖書(shū)管理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)專 業(yè) 通信工程(物聯(lián)網(wǎng)) 班 級(jí) 學(xué) 生 學(xué) 號(hào) 指導(dǎo)教師 起止時(shí)間 2012-8-20至2012-9-11湖北師范學(xué)院 2012 年 下 學(xué)期一、設(shè)計(jì)題目十七、圖書(shū)管理信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)【問(wèn)題描述】圖書(shū)信息所表示的就是一個(gè)數(shù)據(jù)庫(kù)文件。圖書(shū)管理一般包括:圖書(shū)采編、圖書(shū)編目、圖書(shū)查詢及圖書(shū)流通(借、還書(shū))等。要求設(shè)計(jì)一個(gè)圖書(shū)管理信息系統(tǒng),用計(jì)算機(jī)實(shí)現(xiàn)上述系統(tǒng)功能?!净疽蟆拷⒁粋€(gè)圖書(shū)信息數(shù)據(jù)庫(kù)文件,輸入若干種書(shū)的記錄,建立一個(gè)以書(shū)號(hào)為關(guān)鍵字的索引文件;在主數(shù)據(jù)庫(kù)文件中建立以書(shū)名、作者及出版社作為次關(guān)鍵字的索引以及對(duì)應(yīng)的索引鏈頭文件
2、,如圖所示;建立關(guān)于書(shū)號(hào)、書(shū)名、作者及出版社的圖書(shū)查詢;(1) 實(shí)現(xiàn)圖書(shū)的借還子系統(tǒng),包括建立讀者文件、借還文件、讀者管理及圖書(shū)借還等相關(guān)的處理。記錄號(hào)書(shū)號(hào)書(shū)名指針1作者指針2出版社指針3分類藏書(shū)量借出數(shù)11021數(shù)據(jù)庫(kù)0李小云0人民郵電00218021014數(shù)據(jù)結(jié)構(gòu)0劉小洋0中國(guó)科學(xué)00136031106操作系統(tǒng)0許海平0人民郵電10247041108數(shù)據(jù)結(jié)構(gòu)2孫一0清華大學(xué)00135051203程序設(shè)計(jì)0李小云1中國(guó)科學(xué)20356062201數(shù)據(jù)庫(kù)1許海平3清華大學(xué)40216072360數(shù)據(jù)結(jié)構(gòu)4李小云5人民郵電30135080030程序設(shè)計(jì)5劉小洋2清華大學(xué)603570a)圖書(shū)主索引文件
3、書(shū)名鏈頭地址長(zhǎng)度作者鏈頭地址長(zhǎng)度出版社鏈頭地址長(zhǎng)度數(shù)據(jù)庫(kù)62李小云73人民郵電73數(shù)據(jù)結(jié)構(gòu)73劉小洋82中國(guó)科學(xué)52操作系統(tǒng)31許海平62清華大學(xué)83程序設(shè)計(jì)82孫一41b)書(shū)名索引鏈頭文件 c) 作者索引鏈頭文件 d)出版社索引鏈頭文件 二、設(shè)計(jì)內(nèi)容設(shè)計(jì)一個(gè)計(jì)算機(jī)管理系統(tǒng)完成圖書(shū)管理基本業(yè)務(wù)。 (1)每種書(shū)的登記內(nèi)容包括書(shū)號(hào)、書(shū)名、著作者、現(xiàn)存量和庫(kù)存量; (2)對(duì)書(shū)號(hào)建立索引表(線性表)以提高查找效率; (3)采編入庫(kù):新購(gòu)一種書(shū),確定書(shū)號(hào)后,登記到圖書(shū)帳目表中,如果表中已有,則只將庫(kù)存量增加; (4)借閱:如果一種書(shū)的現(xiàn)存量大于0,則借出一本,登記借閱者的書(shū)證號(hào)和還期限,改變現(xiàn)存量; (
4、5)歸還:注銷對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。三、概要設(shè)計(jì):確定所需模塊及模塊間調(diào)用關(guān)系分析:首先應(yīng)該定義借書(shū)人的結(jié)構(gòu)體信息和圖書(shū)結(jié)構(gòu)體信息,為了便于查找圖書(shū)和借書(shū)人,分別對(duì)其建立單鏈表。然后定義buy(),SearchByNum (),SearchByName(), borrow(),return()五個(gè)函數(shù)分別實(shí)現(xiàn)圖書(shū)采編入庫(kù)的功能,按書(shū)號(hào)查詢的功能,按書(shū)名查找的功能,借書(shū)功能和還書(shū)功能。 .根據(jù)任務(wù)的要求,先定義頭文件。然后寫(xiě)出借書(shū)人和圖書(shū)的結(jié)構(gòu)體信息。為了便于查找圖書(shū)和存儲(chǔ)借書(shū)人的信息,分別對(duì)借書(shū)人和圖書(shū)采用鏈表的形式存放。 /頭文件的聲明 #include <stdio.h&
5、gt; #include <string.h> #include <stdlib.h> #define MAXSIZE 100 /最大值定義為100 #define LIST_INIT_SIZE 100/圖書(shū)證使用者最大值定義為100 /借書(shū)人的結(jié)構(gòu)體 typedef struct Boro/借書(shū)記錄 char BNum20;/所借書(shū)的書(shū)號(hào) char BorDate8;/借書(shū)日期 char RetDate8;/歸還日期 struct Boro *next; Bor; typedef struct LinkBook Bor *next;/該圖書(shū)證的借書(shū)記錄 char CN
6、um20;/圖書(shū)證號(hào) int Total;/借書(shū)的數(shù)量 lendLIST_INIT_SIZE;/借書(shū)人數(shù)組 /圖書(shū)的結(jié)構(gòu)體信息 typedef struct LNode char CardNum20;/圖書(shū)證號(hào) struct LNode *next; LinkList; /借書(shū)人 typedef struct book /每種圖書(shū)需要登記的內(nèi)容包括書(shū)號(hào)、書(shū)名、作者、出版社、總庫(kù)存量和現(xiàn)庫(kù)量。 char num20;/書(shū)號(hào) char name20;/書(shū)名 char auth20;/作者 char pub20;/出版社 int TotNum;/總庫(kù)存 int NowNum;/現(xiàn)庫(kù)存 LinkLis
7、t *next;/借了該書(shū)的人 ook; 1、新圖書(shū)采編入庫(kù)的設(shè)計(jì)方案 采編入庫(kù):新購(gòu)入一種書(shū),如果該書(shū)在圖書(shū)賬目中已經(jīng)存在,則將其庫(kù)存量增加(包括總庫(kù)存量和現(xiàn)庫(kù)存量),如果該書(shū)不存在,則在圖書(shū)賬目中增加一種書(shū),總庫(kù)存量和現(xiàn)庫(kù)存量均為1。為了便于查找,另外定義了一個(gè)專門(mén)用于查找的函數(shù)BinarySearch(),使用的是折半查找法。 (1)折半查找法查找書(shū)號(hào) int mid=0;/外部函數(shù)mid,用來(lái)返回查找到的位置 int BinarySearch(ook boo,char SearchNum) /二分法查找比較書(shū)號(hào) 由于函數(shù)不能有兩個(gè)返回值,所以設(shè)置一個(gè)外部變量mid,用來(lái)返回查找到的位置
8、 int low=0,high=total-1; int found=0; while(low<=high) mid=(low+high)/2; /中間點(diǎn) if(strcmp(boomid.num,SearchNum)=0) /書(shū)號(hào)相同 found=1; return true; /查找成功 if(strcmp(boomid.num,SearchNum)!=0)/書(shū)號(hào)不同 high=mid-1; else low=mid+1; if(found=0) return false; /查找失敗 2.新圖書(shū)采編入庫(kù) void Buy(ook &boo, char BuyNum) if(
9、BinarySearch(boo,BuyNum) /如果書(shū)庫(kù)中有此書(shū) boomid.TotNum+; /總庫(kù)存加1 boomid.NowNum+; /現(xiàn)庫(kù)存加1 printf("入庫(kù)成功.n"); printf("已更改書(shū)庫(kù)中該書(shū)的信息。編號(hào) %s 的書(shū) %s 作者是 %s ,出版社是 %s ,目前的總庫(kù)存是 %d ,現(xiàn)庫(kù)存是 %d 。n",boomid.num,,boomid.auth,boomid.pub,boomid.TotNum,boomid.NowNum); if(!BinarySearch(boo,BuyNum) int
10、 i; for(i=total;i>mid&&total;i-) /插在適合位置 保持有序 booi=booi-1; /空出插入位置 printf("該書(shū)在書(shū)庫(kù)中不存在。設(shè)立新書(shū)目,請(qǐng)補(bǔ)全書(shū)的詳細(xì)信息。n"); strcpy(booi.num,BuyNum); printf("該書(shū)購(gòu)入的數(shù)量是:"); scanf(" %d",&booi.NowNum); booi.TotNum=booi.NowNum; printf("該書(shū)的名字是:"); scanf(" %s",
11、&); printf("該書(shū)的作者是:"); scanf(" %s",&booi.auth); printf("該書(shū)的出版社是:"); scanf(" %s",&booi.pub);/補(bǔ)全信息 booi.next=NULL; total+;/總量+1 printf("已增加該書(shū)的信息。編號(hào) %s 的書(shū) %s 作者是 %s ,出版社是 %s ,目前的總庫(kù)存是 %d ,現(xiàn)庫(kù)存是 %d 。n",booi.num,,booi.auth,booi
12、.pub,booi.TotNum,booi.NowNum); printf("入庫(kù)成功.n"); 3、查找圖書(shū)的設(shè)計(jì)方案 為了更便于查找,這里設(shè)計(jì)了兩種查找方案,按書(shū)號(hào)查找和按書(shū)名查找。在按書(shū)號(hào)查找中使用了折半查找法的查找函數(shù)。按書(shū)號(hào)查找方案中都顯示圖書(shū)的所有狀態(tài),包括是在庫(kù)還是借出,如果借出,并顯示何人借走。 (1).按書(shū)號(hào)查找 void SearchByNum(ook &boo,char SeaNum) /BY NUM 根據(jù)書(shū)號(hào)查找 LinkList *p; p=boomid.next; if(BinarySearch(boo,SeaNum)=false)pri
13、ntf("對(duì)不起,未找到您想查找的書(shū)。n");/二分查找 沒(méi)找到 else/找到了的話 printf(" 書(shū)號(hào) 書(shū)名 作者 出版社 現(xiàn)庫(kù)存 總庫(kù)存 n"); printf("-n"); printf("%10s%10s%10s%10s%10d%10dn",boomid.num,,boomid.auth,boomid.pub,boomid.NowNum,boomid.TotNum); if(boomid.next!=NULL) printf(" 已借該書(shū)的 n"); prin
14、tf(" 圖書(shū)證號(hào) n"); while(p) printf("%14sn",p->CardNum); p=p->next; while(p) printf(" %s ",p->CardNum);/在按書(shū)號(hào)查找的函數(shù)里也顯示借了這本書(shū)的借閱者的證號(hào) p=p->next; printf(" n"); /顯示查找的書(shū)籍的信息 (2).按書(shū)名查找 void SearchByName(ook &boo) /BY NAME 根據(jù)書(shū)名查找 char SeaName20; printf("
15、;輸入想查找的書(shū)的書(shū)名:n"); scanf(" %s",&SeaName); printf("找到符合該書(shū)名的書(shū)的詳細(xì)信息如下:n"); for(int i=0;i<total;i+) if(strcmp(SeaName,)=0)/如果書(shū)名一樣 printf("書(shū)號(hào):%sn書(shū)名:%sn作者:%sn出版社:%sn總庫(kù)存量:%dn現(xiàn)庫(kù)存量:%dnn",booi.num,,booi.auth,booi.pub,booi.TotNum,booi.NowNum); /顯示符合信息的所
16、有書(shū)籍的信息 4、借閱圖書(shū)的設(shè)計(jì)方案 如果一種書(shū)的現(xiàn)庫(kù)存量大于零,則借出一本書(shū),將現(xiàn)庫(kù)存量減1, 并登記借閱者的圖書(shū)證號(hào)和歸還期限。 void Borrow(ook &boo,lend &Lin,char BorrowNum,char CaNum) Bor *p,*q; LinkList *m,*n; if(!BinarySearch(boo,BorrowNum)|total=0) /如果沒(méi)有找到此書(shū) printf("書(shū)庫(kù)里沒(méi)這書(shū)。n");/如果有這書(shū) if(BinarySearch(boo,BorrowNum) /書(shū)庫(kù)里有 if(boomid.NowNum
17、>0) /看現(xiàn)庫(kù)存是否大于0 boomid.NowNum-;/借出一本,少1 if(boomid.next=NULL) /若該書(shū)信息下顯示該種書(shū)還沒(méi)被人借過(guò) m=(LinkList *)malloc(sizeof(LNode);/分配 boomid.next=m;/該圖書(shū)信息中的鏈表的第一個(gè)結(jié)點(diǎn) strcpy(m->CardNum,CaNum); m->next=NULL;/后一個(gè)結(jié)點(diǎn)為空 else /如果已經(jīng)有人在借這書(shū)了 m=boomid.next; while(m->next) /遍歷到最后一個(gè)結(jié)點(diǎn) m=m->next; n=(LinkList *)mall
18、oc(sizeof(LNode);/分配空間,增加1個(gè)結(jié)點(diǎn) m->next=n; strcpy(n->CardNum,CaNum);/記錄證號(hào) n->next=NULL; int i=0; for(i=0;i<Retotal;i+) if(!strcmp(Lini.CNum,CaNum)/如果已經(jīng)有該圖書(shū)證的信息 p=Lini.next; while(p->next)p=p->next;/遍歷到最后一個(gè)結(jié)點(diǎn) q=(Bor *)malloc(sizeof(Boro);/分配空間 p->next=q; strcpy(q->BNum,BorrowNum
19、); /記錄書(shū)號(hào) printf("輸入歸還日期:"); scanf("%s",&q->RetDate); q->next=NULL; printf("借閱成功.n"); break; /找到證了就跳出循環(huán) if(i=Retotal)/如果沒(méi)有這張證的信息 strcpy(Lini.CNum,CaNum); /記錄證號(hào) p=(Bor *)malloc(sizeof(Boro); /分配空間 Lini.next=p; strcpy(p->BNum,BorrowNum); printf("輸入歸還日期:&q
20、uot;); scanf(" %s",&p->RetDate); p->next=NULL; Retotal+; /借閱證號(hào)信息總數(shù)加1 printf("借閱成功.n"); else printf("借閱失敗.該書(shū)現(xiàn)在庫(kù)存為0.n"); 5、歸還圖書(shū)的設(shè)計(jì)方案 定義了一個(gè)return函數(shù),當(dāng)進(jìn)行還書(shū)時(shí),在借閱者表里查找借閱者,注銷對(duì)借閱者的登記。在圖書(shū)鏈表中改變?cè)摃?shū)的現(xiàn)存量,把現(xiàn)存量增加。 void Return(ook &boo,lend &Lin,char ReturnNum,char Borr
21、owerNum) Bor *p,*q; LinkList *m,*n; int flag=0;/設(shè)置一個(gè)參數(shù) if(!BinarySearch(boo,ReturnNum)|!total) /沒(méi)書(shū) printf("書(shū)庫(kù)中無(wú)此書(shū).n"); if(BinarySearch(boo,ReturnNum) /有書(shū) m=boomid.next; if(!strcmp(m->CardNum,BorrowerNum) /如果是第一個(gè)借的人還的 boomid.NowNum+; /現(xiàn)庫(kù)存加1 boomid.next=m->next; /刪除結(jié)點(diǎn) free(m); /釋放該結(jié)點(diǎn)的空
22、間空間 else while(m->next) /查找歸還者的借閱者結(jié)點(diǎn) if(!strcmp(m->next->CardNum,BorrowerNum) /如果找到 n=m->next; /n為歸還者的借閱結(jié)點(diǎn) m->next=n->next; /m指向歸還者的借閱結(jié)點(diǎn)的下一結(jié)點(diǎn) free(n); /釋放空間 boomid.NowNum+; /現(xiàn)庫(kù)存加1 break; m=m->next; /在借閱者表里查找借閱者信息 for(int i=0;i<Retotal;i+) if(!strcmp(Lini.CNum,BorrowerNum) /如果
23、找到借閱者 p=Lini.next; if(!strcmp(p->BNum,ReturnNum) /如果是歸還的是借的第一本書(shū) Lini.next=p->next; /指向下一借書(shū)結(jié)點(diǎn) free(p); /釋放結(jié)點(diǎn)空間 printf("成功歸還該書(shū).n"); flag=1; break; else /找不到 while(p->next) /找到歸還書(shū)的借書(shū)結(jié)點(diǎn) if(!strcmp(p->next->BNum,ReturnNum) /如果找到 q=p->next; /q為歸還書(shū)的借書(shū)結(jié)點(diǎn) p->next=q->next; /p
24、指向下一借書(shū)結(jié)點(diǎn) 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<Retotal;j+) Linj=Linj+1; /其后都往前移一位,覆蓋掉當(dāng)前信息 strcpy(Linj.CNum," "); /刪除圖書(shū)證號(hào) Retotal-; /圖書(shū)證數(shù)減1 /刪除當(dāng)前狀態(tài)下沒(méi)借書(shū)的圖書(shū)證的信息,節(jié)省空間 if(flag=0) printf("無(wú)該證
25、信息.n"); 6、定義主函數(shù),在主函數(shù)中設(shè)計(jì)出主界面。便于用戶進(jìn)入后能夠根據(jù)提示方便操作。并且在主函數(shù)中定義出要實(shí)現(xiàn)的基本功能,在分別另外去實(shí)現(xiàn)。分別在主函數(shù)中定義有:Buy(Bo,BNum); SearchByNum(Bo,BNum);SearchByName(Bo);Borrow(Bo,Lin,BNum,CNum);Return(Bo,Lin,BNum,CNum)五個(gè)函數(shù)。 四、算法描述:給出各模塊流程圖及代碼圖書(shū)管理系統(tǒng)的總體結(jié)構(gòu)如圖書(shū)管理系統(tǒng)圖書(shū)采編入庫(kù)按書(shū)號(hào)查找按書(shū)名查找借閱圖書(shū)圖書(shū)歸還 完整代碼如下:“wj.h”/借書(shū)人的結(jié)構(gòu)體 typedef struct Boro/
26、借書(shū)記錄 char BNum20;/所借書(shū)的書(shū)號(hào) char BorDate8;/借書(shū)日期 char RetDate8;/歸還日期 struct Boro *next; Bor; typedef struct LinkBook Bor *next;/該圖書(shū)證的借書(shū)記錄 char CNum20;/圖書(shū)證號(hào) int Total;/借書(shū)的數(shù)量 lendLIST_INIT_SIZE;/借書(shū)人數(shù)組 /圖書(shū)的結(jié)構(gòu)體信息 typedef struct LNode char CardNum20;/圖書(shū)證號(hào) struct LNode *next; LinkList; /借書(shū)人 typedef struct boo
27、k /每種圖書(shū)需要登記的內(nèi)容包括書(shū)號(hào)、書(shū)名、作者、出版社、總庫(kù)存量和現(xiàn)庫(kù)量。 char num20;/書(shū)號(hào) char name20;/書(shū)名 char auth20;/作者 char pub20;/出版社 int TotNum;/總庫(kù)存 int NowNum;/現(xiàn)庫(kù)存 LinkList *next;/借了該書(shū)的人 ook; int Retotal;/讀者數(shù)量 int total; /定義外部變量.書(shū)的種類數(shù) /結(jié)構(gòu)體初始化 void InitBo(ook boo) /初始化圖書(shū)信息 for(int i=0;i<MAXSIZE;i+) booi.NowNum=0; booi.TotNum=0
28、; booi.next=NULL; void InitRe(lend &Lin) /初始化借閱者信息 for(int i=0;i<LIST_INIT_SIZE;i+) Lini.next=NULL; int mid=0;/外部函數(shù)mid,用來(lái)返回查找到的位置 int BinarySearch(ook boo,char SearchNum) /二分法查找比較書(shū)號(hào) /由于函數(shù)不能有兩個(gè)返回值,所以設(shè)置一個(gè)外部變量mid,用來(lái)返回查找位置 int low=0,high=total-1; int found=0; while(low<=high) mid=(low+high)/2;
29、 /中間點(diǎn) if(strcmp(boomid.num,SearchNum)=0) /書(shū)號(hào)相同 found=1; return 1; /查找成功 if(strcmp(boomid.num,SearchNum)>0)/書(shū)號(hào)不同 high=mid-1; else low=mid+1; if(found=0) return 0; /查找失敗 void Buy(ook boo, char BuyNum) /* 采編入庫(kù):新購(gòu)入一種書(shū),如果該書(shū)在圖書(shū)賬目中已經(jīng)存在,則將其庫(kù)存量增加(包括總庫(kù)存量和現(xiàn)庫(kù)存量),如果該書(shū)不存在,則在圖書(shū)賬目中增加一種書(shū),總庫(kù)存量和現(xiàn)庫(kù)存量均為1。 */ if(Binar
30、ySearch(boo,BuyNum) /如果書(shū)庫(kù)中有此書(shū) boomid.TotNum+; /總庫(kù)存加1 boomid.NowNum+; /現(xiàn)庫(kù)存加1 printf("入庫(kù)成功.n"); printf("已更改書(shū)庫(kù)中該書(shū)的信息。編號(hào) %s 的書(shū) %s 作者是 %s ,出版社是 %s ,目前的總庫(kù)存是 %d ,現(xiàn)庫(kù)存是 %d 。n",boomid.num,,boomid.auth,boomid.pub,boomid.TotNum,boomid.NowNum); if(!BinarySearch(boo,BuyNum) int i=0,
31、j=0; while(booi.numj!=0) i+; /for(i=total;i>mid&&total;i-) /插在適合位置 保持有序 /booi=booi-1; /空出插入位置 printf("該書(shū)在書(shū)庫(kù)中不存在。n設(shè)立新書(shū)目,請(qǐng)補(bǔ)全書(shū)的詳細(xì)信息。n"); strcpy(booi.num,BuyNum); printf("該書(shū)購(gòu)入的數(shù)量是:"); scanf(" %d",&booi.NowNum); booi.TotNum=booi.NowNum; printf("該書(shū)的名字是:&qu
32、ot;); scanf(" %s",&); printf("該書(shū)的作者是:"); scanf(" %s",&booi.auth); printf("該書(shū)的出版社是:"); scanf(" %s",&booi.pub);/補(bǔ)全信息 booi.next=NULL; total+;/總量+1 printf("已增加該書(shū)的信息。編號(hào) %s 的書(shū) %s 作者是 %s ,出版社是 %s ,目前的總庫(kù)存是 %d ,現(xiàn)庫(kù)存是 %d 。n",booi.
33、num,,booi.auth,booi.pub,booi.TotNum,booi.NowNum); printf("入庫(kù)成功.n"); void Borrow(ook boo,lend &Lin,char BorrowNum,char CaNum) /借閱:如果一種書(shū)的現(xiàn)庫(kù)存量大于零,則借出一本書(shū),將現(xiàn)庫(kù)存量減1,并登記借閱者的圖書(shū)證號(hào)和歸還期限。 Bor *p,*q; LinkList *m,*n; /索引表中圖書(shū)信息和借書(shū)人信息 if(!BinarySearch(boo,BorrowNum)|total=0) /如果沒(méi)有找到此書(shū) printf(
34、"書(shū)庫(kù)里沒(méi)這書(shū)。n");/如果有這書(shū) if(BinarySearch(boo,BorrowNum) /書(shū)庫(kù)里有 if(boomid.NowNum>0) /看現(xiàn)庫(kù)存是否大于0 boomid.NowNum-;/借出一本,少1 if(boomid.next=NULL) /若該書(shū)信息下顯示該種書(shū)還沒(méi)被人借過(guò) m=(LinkList *)malloc(sizeof(LNode);/分配 boomid.next=m;/該圖書(shū)信息中的鏈表的第一個(gè)結(jié)點(diǎn) strcpy(m->CardNum,CaNum); m->next=NULL;/后一個(gè)結(jié)點(diǎn)為空 else /如果已經(jīng)有人
35、在借這書(shū)了 m=boomid.next; while(m->next) /遍歷到最后一個(gè)結(jié)點(diǎn) m=m->next; n=(LinkList *)malloc(sizeof(LNode);/分配空間,增加1個(gè)結(jié)點(diǎn) m->next=n; strcpy(n->CardNum,CaNum);/記錄證號(hào) n->next=NULL; int i=0; /定義整型的i記錄下讀者的數(shù)量 for(i=0;i<Retotal;i+) if(!strcmp(Lini.CNum,CaNum)/如果已經(jīng)有該圖書(shū)證的信息 p=Lini.next; /用p記下該借書(shū)證在索引表中位置 wh
36、ile(p->next)p=p->next;/遍歷到最后一個(gè)結(jié)點(diǎn) q=(Bor *)malloc(sizeof(Boro);/分配空間 ,用來(lái)記錄索引表中該借書(shū)證的信息 p->next=q; strcpy(q->BNum,BorrowNum); /記錄書(shū)號(hào) printf("輸入借書(shū)日期:"); scanf("%s",&q->BorDate);printf("輸入歸還日期:"); scanf("%s",&q->RetDate); q->next=NULL; p
37、rintf("借閱成功.n"); break; /找到證了就跳出循環(huán) if(i=Retotal)/如果沒(méi)有這張證的信息 strcpy(Lini.CNum,CaNum); /記錄證號(hào) p=(Bor *)malloc(sizeof(Boro); /分配空間 Lini.next=p; strcpy(p->BNum,BorrowNum); printf("輸入借書(shū)日期:"); scanf(" %s",&p->BorDate); printf("輸入歸還日期:"); scanf(" %s&quo
38、t;,&p->RetDate); p->next=NULL; Retotal+; /借閱證號(hào)信息總數(shù)加1 printf("借閱成功.n"); else printf("借閱失敗.該書(shū)現(xiàn)在庫(kù)存為0.n"); void Return(ook boo,lend &Lin,char ReturnNum,char BorrowerNum) / 歸還:注銷對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。 Bor *p,*q; LinkList *m,*n; int flag=0;/設(shè)置一個(gè)參數(shù) if(!BinarySearch(boo,ReturnNu
39、m)|!total) /沒(méi)書(shū) printf("書(shū)庫(kù)中無(wú)此書(shū).n"); if(BinarySearch(boo,ReturnNum) /有書(shū) m=boomid.next; if(!strcmp(m->CardNum,BorrowerNum) /如果是第一個(gè)借的人還的 boomid.NowNum+; /現(xiàn)庫(kù)存加1 boomid.next=m->next; /刪除結(jié)點(diǎn) free(m); /釋放該結(jié)點(diǎn)的空間空間 else while(m->next) /查找歸還者的借閱者結(jié)點(diǎn) if(!strcmp(m->next->CardNum,BorrowerNu
40、m) /如果找到 n=m->next; /n為歸還者的借閱結(jié)點(diǎn) m->next=n->next; /m指向歸還者的借閱結(jié)點(diǎn)的下一結(jié)點(diǎn) free(n); /釋放空間 boomid.NowNum+; /現(xiàn)庫(kù)存加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) /如果歸還的是借的第一本書(shū) Lini.next=p->
41、next; /指向下一借書(shū)結(jié)點(diǎn) free(p); /釋放結(jié)點(diǎn)空間 printf("成功歸還該書(shū).n"); flag=1; break; else /找不到 while(p->next) /找到歸還書(shū)的借書(shū)結(jié)點(diǎn) if(!strcmp(p->next->BNum,ReturnNum) /如果找到 q=p->next; /q為歸還書(shū)的借書(shū)結(jié)點(diǎn) p->next=q->next; /p指向下一借書(shū)結(jié)點(diǎn) free(q); /釋放空間 printf("成功歸還該書(shū).n"); flag=1; break; p=p->next;
42、for(int k=0;k<Retotal;k+) if(!Link.next) int j; for(j=k;j<Retotal;j+) Linj=Linj+1; /其后都往前移一位,覆蓋掉當(dāng)前信息 strcpy(Linj.CNum," "); /刪除圖書(shū)證號(hào) Retotal-; /圖書(shū)證數(shù)減1 /刪除當(dāng)前狀態(tài)下沒(méi)借書(shū)的圖書(shū)證的信息,節(jié)省空間 if(flag=0) printf("無(wú)該證信息.n"); / 查找:實(shí)現(xiàn)按兩種查詢條件之一查找:按書(shū)號(hào)查找、 /按書(shū)名查找。 void SearchByNum(ook boo,char SeaNum
43、) /BY NUM 根據(jù)書(shū)號(hào)查找 LinkList *p; p=boomid.next; if(BinarySearch(boo,SeaNum)=false)printf("對(duì)不起,未找到您想查找的書(shū)。n");/二分查找 沒(méi)找到 else/找到了的話 printf(" 書(shū)號(hào) 書(shū)名 作者 出版社 現(xiàn)庫(kù)存 總庫(kù)存 n"); printf("-n"); printf("%10s%10s%10s%10s%10d%10dn",boomid.num,,boomid.auth,boomid.pub,boom
44、id.NowNum,boomid.TotNum); if(boomid.next!=NULL) printf(" 已借該書(shū)的 n"); printf(" 圖書(shū)證號(hào) n"); while(p) printf("%14sn",p->CardNum); p=p->next; while(p) printf(" %s ",p->CardNum);/在按書(shū)號(hào)查找的函數(shù)里也顯示借了這本書(shū)的借閱者的證號(hào) p=p->next; printf(" n"); /顯示查找的書(shū)籍的信息 void
45、 SearchByName(ook boo) /BY NAME 根據(jù)書(shū)名查找 char SeaName20; printf("輸入想查找的書(shū)的書(shū)名:n"); scanf(" %s",&SeaName); printf("找到符合該書(shū)名的書(shū)的詳細(xì)信息如下:n"); for(int i=0;i<total;i+) if(strcmp(SeaName,)=0)/如果書(shū)名一樣 printf("書(shū)號(hào):%sn書(shū)名:%sn作者:%sn出版社:%sn總庫(kù)存量:%dn現(xiàn)庫(kù)存量:%dnn",booi.n
46、um,,booi.auth,booi.pub,booi.TotNum,booi.NowNum); /顯示符合信息的所有書(shū)籍的信息 “zhs.cpp”#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 100 /最大值定義為100 #define LIST_INIT_SIZE 100/圖書(shū)證使用者最大值定義為100 #include"wj.h"void main() ook BoMAXSIZE; lend Lin; int i,j; char BNum20; char CNum20; for(i=0;i<MAXSIZE;i+) for(j=0;j<20;j+) Boi.numj=0; printf("-歡 迎 進(jìn) 入 圖 書(shū) 管 理 系 統(tǒng)!-nn"); int choice=5; int SearchCho=5,View
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版信托資金借貸合同合規(guī)性審查條款3篇
- 二零二五年度古董家具修復(fù)木工合同范本4篇
- 二零二五年度智能鎖定制加工合同范本4篇
- 2025版環(huán)保木工材料供應(yīng)與分包工程合同4篇
- 2025版事業(yè)單位聘用合同續(xù)簽與績(jī)效考核及晉升標(biāo)準(zhǔn)協(xié)議3篇
- 2025版外教中介聘請(qǐng)合同標(biāo)準(zhǔn)范本3篇
- 農(nóng)產(chǎn)品倉(cāng)儲(chǔ)庫(kù)存管理與優(yōu)化考核試卷
- 2025版信托投資公司外匯存款賬戶管理合同3篇
- 2025年加盟冰淇淋店合同模板
- 2025年加盟加盟推廣合同
- 道路瀝青工程施工方案
- 內(nèi)陸?zhàn)B殖與水產(chǎn)品市場(chǎng)營(yíng)銷策略考核試卷
- 票據(jù)業(yè)務(wù)居間合同模板
- 承包鋼板水泥庫(kù)合同范本(2篇)
- DLT 572-2021 電力變壓器運(yùn)行規(guī)程
- 公司沒(méi)繳社保勞動(dòng)仲裁申請(qǐng)書(shū)
- 損傷力學(xué)與斷裂分析
- 2024年縣鄉(xiāng)教師選調(diào)進(jìn)城考試《教育學(xué)》題庫(kù)及完整答案(考點(diǎn)梳理)
- 車借給別人免責(zé)協(xié)議書(shū)
- 應(yīng)急預(yù)案評(píng)分標(biāo)準(zhǔn)表
- “網(wǎng)絡(luò)安全課件:高校教師網(wǎng)絡(luò)安全與信息化素養(yǎng)培訓(xùn)”
評(píng)論
0/150
提交評(píng)論