數(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頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、用C+語言實(shí)現(xiàn)圖書管理系統(tǒng)摘 要 圖書管理系統(tǒng)主要是對圖書的錄入、讀者借閱、讀者歸還等功能進(jìn)行實(shí)現(xiàn)。本課程設(shè)計的系統(tǒng)開發(fā)平臺為Windows XP,程序設(shè)計語言為C+,程序運(yùn)行平臺為Windws98/2000/XP/Seven。在程序設(shè)計中采用了B-樹方法提高書籍的查找速度。關(guān)鍵詞 程序設(shè)計;圖書管理系統(tǒng); C+;數(shù)據(jù)結(jié)構(gòu);B-樹1 索引1.1課程設(shè)計目的設(shè)計一個小型的圖書管理系統(tǒng),可以實(shí)現(xiàn)新增圖書,讀者借閱,讀者歸還等功能。1.2.系統(tǒng)性能要求能較快的查到所要查找的圖書;能準(zhǔn)確統(tǒng)計當(dāng)前每種書的庫存,以確定此書是否可以外借;并且對外借的圖書進(jìn)行管理,記錄借出時間、應(yīng)還時間等。1.3.功能的實(shí)現(xiàn)

2、1) 新書入庫:確定書號后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加;2) 借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書證號和歸還期限,改變現(xiàn)存量;3)歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。2 系統(tǒng)詳細(xì)設(shè)計及實(shí)現(xiàn)1.所用的知識體系在整個程序的設(shè)計過程當(dāng)中,用到了C+的一些基礎(chǔ)知識,面向?qū)ο蟮乃枷牒徒Y(jié)構(gòu)化的程序設(shè)計思想。數(shù)據(jù)結(jié)構(gòu)的B-樹建立索引,用索引提高查找的效率等。主程序輸入顯示借閱添加加查找退出圖2.1 系統(tǒng)功能組成框圖顯示庫存借出圖書新書入庫書號查找歸還歸還圖書2.系統(tǒng)功能組成框圖排序3  . 系統(tǒng)功能模塊劃分 摸塊保稱功能說明1系統(tǒng)管理

3、顯示庫存,借閱,歸還2圖書管理圖書的添加,查詢等操作 3借還書管理對每次借書信息的添加,刪除等操作4.流程圖4.1錄入圖書信息錄入圖書信息判斷是否已經(jīng)存在該圖書在原有的記錄上加上現(xiàn)有的圖書數(shù)量Y向系統(tǒng)中加入新紀(jì)錄N4.2借閱圖書 輸入要借閱的圖書信息判斷圖書是否存在輸出提示信息告訴讀者圖書不存在N處理借閱功能,將該圖書數(shù)量減一Y判斷圖書數(shù)目是否大于0提示讀者該圖書都已借出NY4.3歸還圖書輸入圖書和讀者信息處理歸還圖書功能,清讀者的借閱記錄,將圖書的在庫數(shù)加一書號排序書名排序5 功能實(shí)現(xiàn)51 運(yùn)行程序的主界面圖51 操作界面5.2 新書入庫功能的操作界面圖5-2新書入庫5.3 查詢數(shù)據(jù)的界面圖

4、5-3查詢書籍5.4 查詢所有書籍的界面圖 5-4顯示庫存5.5 圖書借閱的界面圖5-5借閱書籍5.6 還書的界面圖5-6還書3 參考文獻(xiàn) 1 譚浩強(qiáng)  C語言設(shè)計(第三版)清華大學(xué)出版社2 嚴(yán)蔚敏 吳偉民 數(shù)據(jù)結(jié)構(gòu)(C語言版) 清華大學(xué)出版社3 譚浩強(qiáng)  C+ 程序設(shè)計清華大學(xué)出版社45附錄#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<time.h>/定義局變量#define N 1

5、0000 /表示狀態(tài)的字段#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef char *string ;#define m 3 /B-樹的階,設(shè)為/ 借閱者的結(jié)構(gòu)體typedef struct Userunsigned int number; /借書證號碼int year;int month;int day;/借書時間int dyear;/截至日期的年int dmonth;/截至日期的月int dda

6、y;/截至日期的日struct User *next; /下一個借閱者User; /定義用戶的的信息/書的結(jié)構(gòu)體 struct Bookunsigned int key; /圖書的書號 char bname20; / 書名 char writter20;/ 著者 unsigned int left; / 現(xiàn)存量 unsigned int total; / 總存量User *user;/借閱該書的人bN;/定義書的信息/B- 樹的存儲結(jié)構(gòu)typedef Book KeyType;typedef struct BTNodeint keynum; /結(jié)點(diǎn)中關(guān)鍵字個數(shù),即結(jié)點(diǎn)的大小struct BTN

7、ode *parent; /指向雙親結(jié)點(diǎn)KeyType keym + 1; /關(guān)鍵字向量,號單元未用struct BTNode *ptrm + 1; /子樹指針向量BTNode,*BTree;/查找結(jié)果的存儲結(jié)構(gòu)體typedef structBTNode *pt; /指向找到的結(jié)點(diǎn) int i; /1m,在結(jié)點(diǎn)中的關(guān)鍵字序號int tag; /B- 樹的查找結(jié)果類型Result;BTree root = NULL; /樹根/*函數(shù)聲明部分/輸入書的具體信息void InBookMess(KeyType &book);/輸入書的關(guān)鍵字void InBookKey(KeyType &

8、;book);/顯示書的具體信息,如果書存在就顯示void ShowBookMess(Book book);/顯示一個結(jié)點(diǎn)中所包含的全部信息,顯示單個結(jié)點(diǎn)void ShowBTNode(BTree p);/顯示,以層次的方法顯示樹的結(jié)點(diǎn)void display(BTree T);/復(fù)制關(guān)鍵字的信息void KeyTypeCopy(KeyType &bak,KeyType k);/查找在某個結(jié)點(diǎn)中的位置int Search(BTree p, KeyType K);/查找Result SearchBTree(BTree T, KeyType K);/插入void Insert(BTree

9、&q, int i, KeyType x, BTree ap);/分裂結(jié)點(diǎn)void split(BTree &q, int s, BTree &ap);/生成一個新的結(jié)點(diǎn)void NewRoot(BTree &T, BTree p, KeyType x, BTree ap);/將書的信息插入到B- 樹中Status InsertBTree(BTree &T, KeyType K);/刪除樹結(jié)點(diǎn)Status DeleteBT(BTree &T,KeyType k);/與右最左結(jié)點(diǎn)交換void exchange(BTree &T,int i)

10、;/用戶借閱Status BorrowBook(BTree T,KeyType k);/注銷對借閱者的登記,改變該書的顯存量Status ReturnBook(BTree T,KeyType k);void temp(BTree T);void save(BTree p);/*/void save(BTree p)/保存模塊程序 FILE *fp;/定義文件指針if (fp=fopen("book.txt","wb")=NULL )/判斷文件的存在,若非空,將fp指向filename中記載的文件名的文件printf("創(chuàng)建文件失敗!nn&quo

11、t;);/打印出錯提示getchar();return; for(int i = 1; i <= p->keynum; i+)fprintf(fp,"%d %s %s %d %d n",p->keyi.key,p->keyi.bname,p->keyi.writter,p->keyi.left,p->keyi.total);fclose(fp);/關(guān)閉文件void temp(BTree T)int i;if(T) save(T);/保存這個結(jié)點(diǎn)的全部值for(i=0; i<=T->keynum; i+) /使用遞歸的方法

12、顯示每個結(jié)點(diǎn)if(T->ptri)temp(T->ptri);/讀取文件void read()FILE *fp,fp1;/定義文件指針if (fp=fopen("book.txt","rb")=NULL && (fp=fopen("user.txt","rb")=NULL)/判斷文件的存在,若非空,將fp指向filename中記載的文件名的文件printf("創(chuàng)建文件失敗!nn");/打印出錯提示getchar();return;for(int i=1;i+)/讀取文

13、件 if(fscanf(fp,"%d%s%s%d%d",&bi.key,&bi.bname,&bi.writter,&bi.left,&bi.total)=EOF)break;InsertBTree(root,bi);fclose(fp);/關(guān)閉文件/*/復(fù)制結(jié)點(diǎn),將某個結(jié)點(diǎn)的值復(fù)制到另外一個值上void KeyTypeCopy(KeyType &bak,KeyType k)bak.key = k.key;strcpy(bak.bname,k.bname);bak.left = k.left;bak.total = k.tot

14、al;strcpy(bak.writter,k.writter);bak.user = k.user;/在一個結(jié)點(diǎn)中查找元素,返回結(jié)點(diǎn)的位置int Search(BTree p, KeyType K) if(!p)return -1;int i=0; for(i = 0; i < p->keynum && p->keyi+1.key <= K.key; i+); return i;/ 在m階B樹T上查找關(guān)鍵字K,返回結(jié)果(pt,i,tag)Result SearchBTree(BTree T, KeyType K) BTree p, q; int fou

15、nd, i; Result R; /初始化變量 p = T; q = NULL; found = FALSE; i = 0; / 初始化,p指向待查結(jié)點(diǎn),q指向p的雙親 while (p && !found) i = Search(p, K); / 找到待查關(guān)鍵字 if (i > 0 && p->keyi.key = K.key) found = TRUE; else q = p; p = p->ptri; /在另一個分支上查找 if (found) / 查找成功 R.pt = p; R.i = i; R.tag = 1; else / 查找不

16、成功 R.pt = q; R.i = i; R.tag = 0; / 返回結(jié)果信息: K的位置(或插入位置) return R; /插入一條記錄void Insert(BTree &q, int i, KeyType x, BTree ap) int n = q->keynum;for (int j = n; j > i; j-) KeyTypeCopy(q->keyj + 1,q->keyj); /復(fù)制結(jié)點(diǎn)值q->ptrj + 1 = q->ptrj;KeyTypeCopy(q->keyi + 1,x);q->ptri + 1 = ap

17、;if (ap) ap->parent = q; q->keynum+;/分離結(jié)點(diǎn)void split(BTree &q, int s, BTree &ap) int i,j,n = q->keynum; ap = (BTree)malloc(sizeof(BTNode); ap->ptr0 = q->ptrs; for (i = s + 1,j = 1; i <= n; i+,j+) KeyTypeCopy(ap->keyj,q->keyi); ap->ptrj = q->ptri; ap->keynum =

18、n - s; ap->parent = q->parent; for (i = 0; i <= n - s; i+) if (ap->ptri) ap->ptri->parent = ap; q->keynum = s-1;/生成一個新的樹結(jié)點(diǎn)void NewRoot(BTree &T, BTree p, KeyType x, BTree ap) T = (BTree)malloc(sizeof(BTNode); T->keynum = 1; /設(shè)置當(dāng)前結(jié)點(diǎn)的元素個數(shù) T->ptr0 = p; /設(shè)置左邊結(jié)點(diǎn)的樹根 T->pt

19、r1 = ap; /設(shè)置右邊的樹根 KeyTypeCopy(T->key1,x); /將x 元素的結(jié)點(diǎn)值復(fù)制到T 的第一個元素中 /當(dāng)孩子不空的時候就設(shè)置當(dāng)前結(jié)點(diǎn)為孩子的雙親 if (p) p->parent= T; if (ap) ap->parent = T; T->parent = NULL; /當(dāng)前結(jié)點(diǎn)的雙親為空/返回false 表示在原有結(jié)點(diǎn)上增加數(shù)量,返回true 表示創(chuàng)建了一個新的結(jié)點(diǎn)Status InsertBTree(BTree &T, KeyType K) / 在m階B樹T上結(jié)點(diǎn)*q的keyi與keyi+1之間插入關(guān)鍵字K。 / 若引起結(jié)點(diǎn)過

20、大,則沿雙親鏈進(jìn)行必要的結(jié)點(diǎn)分裂調(diào)整,使T仍是m階B樹。 BTree ap; Result rs; BTree q; int i; char addnum; int finished, needNewRoot, s; / T是空樹(參數(shù)q初值為NULL) KeyType x; /如果T 結(jié)點(diǎn)為空就生成一個新的結(jié)點(diǎn) if (!T) NewRoot(T, NULL, K, NULL); else /查找元素k 在樹中的位置 rs = SearchBTree(T,K);q = rs.pt; /查找到包含元素k 的結(jié)點(diǎn) i = rs.i; /元素k 在樹中的位置 if(rs.tag = 1) /判斷該

21、元素在樹中是否存在if(strcmp(q->keyi.bname,K.bname) != 0)printf("nt錄入失敗,原因:n");printf(".t書號沖突,請重新為該書編號!nn");printf("t已經(jīng)存在書號為%d 的書為:n",q->keyi.key);ShowBookMess(q->keyi);return FALSE;else printf("nt該書已經(jīng)存在!nn");printf("t是否增加其總量(y/n):");scanf("%s&qu

22、ot;,&addnum);if(addnum = 'Y' | addnum = 'y')q->keyi.total += K.total; /將總量增加 q->keyi.left += K.left; /將剩余量增加 printf("nt增加總量后該書的信息如下n");/ShowBookMess(q->keyi);elseprintf("nt該書的信息如下:n");/ShowBookMess(q->keyi);ShowBookMess(q->keyi); return FALSE; /

23、if x = K; ap = NULL; finished = needNewRoot = FALSE; while (!needNewRoot && !finished) Insert(q, i, x, ap); /插入結(jié)點(diǎn) if (q->keynum < m) finished = TRUE; / 插入完成 else / 分裂結(jié)點(diǎn)*q s = (m+1)/2; split(q, s, ap); x = q->keys; if (q->parent) / 在雙親結(jié)點(diǎn)*q中查找x的插入位置 q = q->parent; i = Search(q,

24、x); else needNewRoot = TRUE; / else / while if (needNewRoot) / 根結(jié)點(diǎn)已分裂為結(jié)點(diǎn)*q和*ap NewRoot(T, q, x, ap); / 生成新根結(jié)點(diǎn)*T,q和ap為子樹指針 return OK;/一個結(jié)點(diǎn)在雙親中的位置,返回其位置iint position(BTree T)if(!T)return 0;int i = 0;if(T->parent)while(i <= T->parent->keynum)if(T = T->parent->ptri)return i; /返回當(dāng)前的位置i+

25、;return -1;/調(diào)整樹的結(jié)構(gòu)Status fix(BTree &root,BTree p)int i = position(p); /取得p 在雙親中的位置int mid = (m + 1)/2 - 1; /要交換的臨界點(diǎn)BTree temp = NULL;int k;if(i > 0 && root->ptri - 1->keynum > mid) /當(dāng)i 大于零的時候就可以向左借temp = root->ptri - 1; /比自己小的兄弟結(jié)點(diǎn)p->keynum+; /增加一個結(jié)點(diǎn)for(k = p->keynum;

26、k > 1;k-)KeyTypeCopy(p->keyk,p->keyk - 1); /將前面的結(jié)點(diǎn)后移一位if(p->ptr0)for(k = p->keynum;k >= 1;k-)p->ptrk = p->ptrk - 1; /將要移動的結(jié)點(diǎn)的子結(jié)點(diǎn)向后移動KeyTypeCopy(p->key1,root->keyi); /將雙親的結(jié)點(diǎn)復(fù)制到根KeyTypeCopy(root->keyi,temp->keytemp->keynum); /將小兄弟結(jié)點(diǎn)的最大的那個移動到雙親中if(temp->ptrtemp

27、->keynum) /將兄弟結(jié)點(diǎn)的子結(jié)點(diǎn)也復(fù)制過來p->ptr0 = temp->ptrtemp->keynum; temp->ptrtemp->keynum->parent = p; /修改指向雙親的結(jié)點(diǎn)temp->ptrtemp->keynum = NULL;temp->keynum-; /將左兄弟刪除一個結(jié)點(diǎn)return OK;if(i < root->keynum && root->ptri + 1->keynum > mid) /當(dāng)i 小于最大數(shù)量的時候就可以向右借temp =

28、root->ptri + 1;p->keynum+; /增加結(jié)點(diǎn)的個數(shù)KeyTypeCopy(p->keyp->keynum,root->keyi + 1); /將根結(jié)點(diǎn)的值復(fù)制過來KeyTypeCopy(root->keyi + 1,temp->key1); /將右兄弟的結(jié)點(diǎn)復(fù)制過來for(k = 1;k < temp->keynum;k+)KeyTypeCopy(temp->keyk,temp->keyk + 1); /將后面的結(jié)點(diǎn)向前移動一位if(temp->ptr0)p->ptrp->keynum =

29、temp->ptr0;temp->ptr0->parent = p; /修改指向雙親的結(jié)點(diǎn)for(k = 0;k < temp->keynum;k+) /將子結(jié)點(diǎn)向前移動temp->ptrk = temp->ptrk + 1;temp->ptrk + 1 = NULL; /將刪除的結(jié)點(diǎn)的子結(jié)點(diǎn)置為空temp->keynum-; /將右兄弟刪除一個結(jié)點(diǎn)return OK;return FALSE;/合并結(jié)點(diǎn)Status combine(BTree &root,BTree &p)int k,i = position(p); /取

30、得p 在雙親中的位置int mid = (m + 1)/2 - 1; /交換的條件BTree p2;if(i = 0) /如果是第一個位置i = 1;p2 = root->ptri;p->keynum+; /增加一個結(jié)點(diǎn)KeyTypeCopy(p->keyp->keynum,root->keyi); /將雙親的結(jié)點(diǎn)復(fù)制下來if(p2->ptr0)p->ptrp->keynum = p2->ptr0; /將兄弟的子結(jié)點(diǎn)也復(fù)制過來p2->ptr0->parent = p; /修改雙親for(k = i;k < root->

31、;keynum;k+) /將雙親的結(jié)點(diǎn)向前移動一位KeyTypeCopy(root->keyk,root->keyk + 1);p->keynum+;p->keyp->keynum = p2->key1;if(p2->ptr1)p->ptrp->keynum = p2->ptr1; /將兄弟的子結(jié)點(diǎn)也復(fù)制過來p2->ptr1->parent = p; /修改指向雙親的結(jié)點(diǎn)root->keynum-;free(p2);p2 = NULL;for(k = 1;k <= root->keynum;k+)root

32、->ptrk = root->ptrk + 1; /將雙親結(jié)點(diǎn)子結(jié)點(diǎn)向前移動root->ptrk + 1 = NULL;else if(i > 0)p2 = root->ptri - 1;p2->keynum+;KeyTypeCopy(p2->keyp2->keynum,root->keyi); /復(fù)制根結(jié)點(diǎn)的值到子結(jié)點(diǎn)中if(p->ptr0)p2->ptrp2->keynum = p->ptr0;p->ptr0->parent = p2; /修改指向雙親的結(jié)點(diǎn)for(k = i;k < root-

33、>keynum;k+)KeyTypeCopy(root->keyk,root->keyk + 1); /將結(jié)點(diǎn)前移root->ptrk = root->ptrk + 1; /將子結(jié)點(diǎn)前移root->ptrk + 1 = NULL;root->keynum-;free(p); p = p2;return OK;/與右最左結(jié)點(diǎn)交換void exchange(BTree &T,int i)BTree p = T;User *user = NULL;if(p->ptri)p = p->ptri;while(p->ptr0)p = p-

34、>ptr0;while(T->keyi.user)user = T->keyi.user; /指向要釋放的結(jié)點(diǎn)T->keyi.user = T->keyi.user->next; /指向下一個結(jié)點(diǎn)free(user); /釋放借閱者的信息KeyTypeCopy(T->keyi,p->key1); /交換數(shù)據(jù)while(i < p->keynum) /將該結(jié)點(diǎn)后面的數(shù)據(jù)后移KeyTypeCopy(p->keyi,p->keyi + 1); /將后一個數(shù)據(jù)復(fù)制到前一個數(shù)據(jù)i+;p->keynum-; /刪除結(jié)點(diǎn)T = p

35、;return;/*/輸入書的具體信息void InBookMess(KeyType &book)char s5;printf("t請輸入書號(編號最多為位數(shù)且不大于):");doscanf("%s",s);book.key = atoi(s);if(book.key < 1 | book.key > 65535)printf("t輸入有誤,請重新輸入:");while(book.key < 1 | book.key > 65535);printf("t請輸入書名:");scanf(

36、"%s",&book.bname);printf("t請輸入作者:");scanf("%s",&book.writter);printf("t請輸入總量(不能大于):");doscanf("%s",s);book.total = atoi(s);if(book.total < 1 | book.total > 65535)printf("t輸入有誤,請重新輸入:");while(book.total < 1 | book.total >

37、 65535);book.left = book.total;book.user = NULL;/book.user = (User *)malloc(sizeof(User);/輸入書的關(guān)鍵字void InBookKey(KeyType &book)char s5;printf("t請輸入書號:");doscanf("%s",s);book.key = atoi(s);if(book.key < 1 | book.key > 65535)printf("t輸入有誤,請重新輸入:");while(book.key

38、< 1 | book.key > 65535);book.bname0 = '0'book.writter0 = '0'book.total = 0;book.left = 0;/顯示書的具體信息void ShowBookMess(Book book)User *temp;printf("t書號為:%3dn", book.key);printf("t書名為:%3sn", book.bname);printf("t作者為:%3sn", book.writter);printf("t剩

39、余量為:%3dn", book.left);printf("t總量為:%3dn", book.total);printf("t- 已借該書的人有-n");temp = book.user;while(temp)printf("t圖書證號:%dt借書日期:%d年%d月%d日t歸還日期:%d年%d月%d日n",temp->number,temp->year,temp->month,temp->day,temp->dyear,temp->dmonth,temp->dday);temp =

40、temp->next;printf("n");/顯示某個結(jié)點(diǎn)的信息void ShowBTNode(BTree p) for(int i = 1; i <= p->keynum; i+)printf("t");printf("書號為:%d ", p->keyi.key);printf("書名為:%5s ", p->keyi.bname);printf("作者為:%5s ", p->keyi.writter);printf("剩余量為:%5d "

41、;, p->keyi.left);printf("總量為:%5d", p->keyi.total);printf("n");/顯示整棵樹的信息void display(BTree T)int i = 0;if(T) ShowBTNode(T);/顯示這個結(jié)點(diǎn)的全部值for(i=0; i<=T->keynum; i+) /使用遞歸的方法顯示每個結(jié)點(diǎn)if(T->ptri)display(T->ptri);/*/*用戶借閱說明 *借閱登記的信息可以鏈接在相應(yīng)的那種書的記錄之后 */輸入借閱的信息Status InUserMe

42、ss(User *user)char s5;time_t nowtime;struct tm *timeinfo;time( &nowtime ); timeinfo = localtime( &nowtime ); printf("nt輸入借閱者的信息n");printf("t請輸入圖書證號:");doscanf("%s",s);user->number = atoi(s);if(user->number < 1 | user->number > 65535)printf("t

43、輸入有誤,請重新輸入(0到之間):");while(user->number < 1 | user->number > 65535);printf("t請輸入歸還日期(格式:%d年%d月%d日)n",timeinfo->tm_year + 1900,timeinfo->tm_mon + 1,timeinfo->tm_mday);/歸還日期的輸入printf("t年:");doscanf("%s",s);user->dyear = atoi(s);if(user->dyea

44、r < timeinfo->tm_year + 1900)printf("t輸入有誤,請重新輸入(大于%d):",timeinfo->tm_year + 1900);while(user->dyear < timeinfo->tm_year + 1900);printf("t月:");doscanf("%s",s);user->dmonth = atoi(s);if(user->dmonth > 12 | user->dmonth < 1 | (user->dmo

45、nth < timeinfo->tm_mon + 1 && user->dyear = timeinfo->tm_year + 1900)printf("t輸入有誤,請重新輸入(1到月):");while(user->dmonth > 12 | user->dmonth < 1 | (user->dmonth < timeinfo->tm_mon + 1 && user->dyear = timeinfo->tm_year + 1900);printf("

46、t日:");doscanf("%s",s);user->dday = atoi(s);if(user->dday > 31 | user->dday < 1 | (user->dday < timeinfo->tm_mday && user->dyear = timeinfo->tm_year + 1900 && user->dmonth = timeinfo->tm_mon + 1)printf("t輸入有誤,請重新輸入(1到日):");w

47、hile(user->dday > 31 | user->dday < 1 | (user->dday < timeinfo->tm_mday && user->dyear = timeinfo->tm_year + 1900 && user->dmonth = timeinfo->tm_mon + 1);/設(shè)置借書的時間user->year = timeinfo->tm_year + 1900;user->month = timeinfo->tm_mon + 1;user

48、->day = timeinfo->tm_mday;user->next = NULL;return OK;/借閱,如果一種書的顯存量大于零,則借出一本,登記借閱著的圖書證號和歸還期限Status BorrowBook(BTree T,KeyType k)Result rs = SearchBTree(T,k);User *user;if(rs.tag = 0)printf("t很抱歉!你要借閱的書不存在!n");return FALSE;if(rs.pt->keyrs.i.left < 1)printf("t很抱歉!你要借閱的書已經(jīng)

49、借完!n");return FALSE;user = (User *)malloc(sizeof(User);InUserMess(user);/查找該用戶是否已經(jīng)借過這本書User *temp;temp = rs.pt->keyrs.i.user;while(temp)if(temp->number = user->number)printf("nt你已經(jīng)借了這本書,不能夠重復(fù)借!n");free(user);return FALSE;temp = temp->next;rs.pt->keyrs.i.left-;user->n

50、ext = rs.pt->keyrs.i.user;rs.pt->keyrs.i.user = user;return OK;/還書,改變該書的庫存量Status ReturnBook(BTree T,KeyType k)User *user,*pre;int number;Result rs = SearchBTree(T,k);if(rs.tag = 0)printf("t很抱歉!不存在你要還的書!n");return FALSE;user = rs.pt->keyrs.i.user;if(!user)printf("t這本書暫無出借!n&q

51、uot;);return FALSE;printf("nt請輸入圖書證號:");scanf("%d",&number);pre = user;doif(user->number = number)if(user = rs.pt->keyrs.i.user)rs.pt->keyrs.i.user = user->next;free(user);elsepre->next = user->next;free(user);rs.pt->keyrs.i.left+;return OK;pre = user;user = user->next;while(user);printf("t你輸入的圖書證號不正確!請重新操作!n");return FALSE;/顯示某個書的信息void ShowWriterBook(BTree p,char writer

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論