图书馆源代码_第1页
图书馆源代码_第2页
图书馆源代码_第3页
图书馆源代码_第4页
图书馆源代码_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include #include #include #include /输入/输出文件流类using namespace std;const int Maxr=100;/最多的读者const int Maxb=100;/最多的图书const int Maxbor=5;/每位读者最多借五本书/读者类,实现对读者的信息的描述class Reader private: int tag; /删除标记 1:已删 0:未删 int no; /读者编号 char name10; /读者姓名 int borbookMaxbor;/所借图书 public: Reader() char *getname() r

2、eturn name; /获取姓名 int gettag() return tag; /获取删除标记 int getno() return no; /获取读者编号 void setname(char na) /设置姓名 strcpy(name,na); void delbook() tag=1; /设置删除标记 1:已删 0:未删 void addreader(int n,char *na)/增加读者 tag=0; no=n; strcpy(name,na); for(int i=0;iMaxbor;i+) borbooki=0; void borrowbook(int bookid)/借书操

3、作 for(int i=0;iMaxbor;i+) if (borbooki=0) borbooki=bookid; return; int retbook(int bookid)/还书操作 for(int i=0;iMaxbor;i+) if(borbooki=bookid) borbooki=0; return 1; return 0; void disp()/读出读者信息 cout setw(5) no setw(10) name借书编号:; for(int i=0;iMaxbor;i+) if(borbooki!=0) cout borbooki |; cout endl; ;/读者类

4、库,实现建立读者的个人资料 class RDatabase private: int top; /读者记录指针 Reader readMaxr;/读者记录public: RDatabase() /构造函数,将reader.txt读到read中 Reader s; top=-1; fstream file(reader.txt,ios:in);/打开一个输入文件 while (1) file.read(char *)&s,sizeof(s); if (!file)break; top+; readtop=s; file.close(); /关闭 reader.txt void clear()/删

5、除所有读者信息 top=-1; int addreader(int n,char *na)/添加读者时先查找是否存在 Reader *p=query(n); if (p=NULL) top+; readtop.addreader(n,na); return 1; return 0; Reader *query(int readerid)/按编号查找 for (int i=0;i=top;i+) if (readi.getno()=readerid & readi.gettag()=0) return &readi; return NULL; void disp() /输出所有读者信息 for

6、(int i=0;i=top;i+) readi.disp(); void readerdata();/读者库维护 RDatabase() /析构函数,将read写到reader.txt文件中 fstream file(reader.txt,ios:out); for (int i=0;i=top;i+) if (readi.gettag()=0) file.write(char *)&readi,sizeof(readi); file.close(); ;void RDatabase:readerdata() char choice; char rname20; int readerid;

7、Reader *r; while (choice!=0) cout nnttt读 者 维 护nnntt 1 新 增nntt 2 更 改nntt 3 删 除nntt 4 查 找nntt 5 显 示nntt 6 全 删nntt 0 退 出 choice; switch (choice) case 1: cout readerid; cout rname; addreader (readerid,rname); break; case 2: cout readerid; r=query(readerid); if (r=NULL) cout 该读者不存在 endl; break; cout rnam

8、e; r-setname(rname); break; case 3: cout readerid; r=query(readerid); if (r=NULL) cout 该读者不存在 delbook(); break; case 4: cout readerid; r=query(readerid); if (r=NULL) cout 该读者不存在disp(); break; case 5: disp(); break; case 6: clear(); break; default:cout输入错误,请从新输入:;break; /图书类,实现对图书的描述,图书的编号,书名,借出,还入等c

9、lass Bookprivate: int tag;/删除标记 1:已删 0:未删 int no;/图书编号 char name20;/书名 int onshelf;/是否再架 1:再架 2:已借public: Book() char *getname() return name; /获取姓名 int getno() return no; /获取图书编号 int gettag() return tag; /获取删除标记 void setname(char na)/设置书名 strcpy(name,na); void delbook() tag=1;/删除图书 void addbook(int

10、n,char *na)/增加图书 tag=0; no=n; strcpy(name,na); onshelf=1; int borrowbook()/借书操作 if (onshelf=1) onshelf=0; return 1; return 0; void retbook()/还书操作 onshelf=1; void disp()/输出图书 cout setw(6) no setw(18) name setw(10) (onshelf=1? 在架:已借) endl; ;/图书库类,实现对图书的维护,查找,删除等class BDatabaseprivate: int top; /图书记录指针

11、 Book bookMaxb; /图书记录public: BDatabase()/构造函数,将book.txt读到book中 Book b; top=-1; fstream file(book.txt,ios:in); while (1) file.read(char *)&b,sizeof(b); if (!file) break; top+; booktop=b; file.close(); void clear()/全删 top=-1; int addbook(int n,char *na)/增加图书 Book *p=query(n); if (NULL=p) top+; booktop

12、.addbook(n,na); return 1; return 0; Book *query(int bookid)/查找图书 for (int i=0;i=top;i+) if (booki.getno()=bookid &booki.gettag()=0) return &booki; return NULL; void bookdata();/图书库维护 void disp() for (int i=0;i=top;i+) if (booki.gettag()=0) booki.disp(); BDatabase()/析构函数,将book写到book.txt文件中 fstream fi

13、le(book.txt,ios:out); for (int i=0;i=top;i+) if (booki.gettag()=0) file.write(char *)&booki,sizeof(booki); file.close(); ;void BDatabase:bookdata() char choice; char bname40; int bookid; Book *b; while (choice!=0) cout nnnttt图 书 维 护 endlendl; couttt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0

14、退 出 choice; switch (choice) case 1: cout 输入图书编号: bookid; cout 输入图书书名: bname; addbook(bookid,bname); break; case 2: cout 输入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图书不存在 endl; break; cout 输入新的书名: bname; b-setname(bname); break; case 3: cout 读入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图

15、书不存在 delbook(); break; case 4: cout 读入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图书不存在disp(); break; case 5: disp(); break; case 6: clear(); break; default:cout输入错误,请从新输入:; /main() 函数的实现,程序的主界面的引导void main() char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Boo

16、k *b; while(choice!=0) cout endlendlttt 图 书 管 理 系 统nnn; cout ttt1 借 书nnttt2 还 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开 choice; switch (choice) case 1: cout readerid; cout bookid; r=ReaderDB.query(readerid);/按编号查找 if (NULL=r) cout 不存在该读者,不能借书 endl; break; b=BookDB.query(bookid); if (b=NULL) cout 不存在该

17、图书,不能借书borrowbook()=0) cout 该图书已借出,不能借书borrowbook(b-getno(); break; case 2: coutreaderid; cout bookid; r=ReaderDB.query(readerid); if (r=NULL) cout 不存在该读者,不能还书 endl; break; b=BookDB.query(bookid); if (b=NULL) cout 不存在该图书,不能还书 retbook(); r-retbook(b-getno(); break; case 3: BookDB.bookdata(); break; c

18、ase 4: ReaderDB.readerdata(); break; default:cout输入错误,请从新输入:; 头文件:=#ifndef _DATA_STRUCT_H_#define _DATA_STRUCT_H_/*图书结构*/struct Book unsigned long BookID;/*图书编号*/ char BookName512;/*书名*/ char Writer512;/*作者*/ int CurrentNumber;/*现存量*/ Book *pNext;/*下一个图书信息*/;/*图书索引结构*/struct Index unsigned long Book

19、ID;/*图书编号*/ Index *pNext;/*下一个索引指针*/;/*借阅信息结构*/struct Borrow unsigned long BookID;/*借阅图书编号*/ char BookName512;/*书名*/ unsigned long StuID;/*图书证号*/ char ReturnTime512;/*归还日期*/ Borrow *pNext;/*下一个借阅信息*/;#endif/*_DATA_STRUCT_H_*/实现文件:=/ BookManage.cpp : 定义控制台应用程序的入口点。/#include #include #include #include

20、 #include DataStruct.h/*数据结构课程设计(基于C) 图书管理系统 悬赏分:100 - 离问题结束还有 14 天 23 小时 【问题描述】 图书管理基本业务活动包括,对一本书的采编入库、清楚库存、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。【基本要求】 (1) 每种书的登记至少包括书号书名作者现存量总库存量5项(2)对书号建立索引表(线性表)以提高查找效率(3) 系统要实现的操作及其功能定义如下:1 采编入库:新购入一种书,经分类和确定数好之后登记到图书馆账目中去。如果这种书在账户中已有,则只将总库存量增加。2借阅:如果一本书的现存量大于零

21、,则借出一本,登出借阅者的图书证号和归还日期3归还:注销对借阅者的登记,改变该书的现存量*/*获取输入字符串*/void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber = false);/*显示主菜单 并返回选择*/int ShowMainMenu();/*图书入库操作,传入参数为图书列表头指针的指针和索引信息的头指针的指针,因为在此函数内部可能会改变头指针的值*/void PutBookInLib(Book *pHead,Index *pIndex);/*查询图书馆库存,查询不改变数据,故传入指针即可*/void QueryBo

22、okLib(Book *pHead);/*借阅图书*/void BorrowBook(Borrow *pBorrow,Book *pHead);/*查询借阅*/void QueryBorrow(Borrow *pBorrow);/*归还图书*/void ReturnBook(Borrow *pBorrow,Book *pHead);/*释放图书链表及索引链表及借阅信息链表*/void DeleteBookList(Book *pHead);void DeleteIndexList(Index *pIndex);void DeleteBorrowList(Borrow *pBorrow);int

23、 main() /*图书列表头指针*/ Book *pBookHead = NULL; /*图书索引头指针*/ Index *pIndexHead = NULL; /*借阅信息头指针*/ Borrow *pBorrowHead = NULL; /*用来保存当前用户的输入*/ int ChoosedNum = -1; while ( true ) ChoosedNum = ShowMainMenu(); switch(ChoosedNum) case 0 :/*退出*/ return 0; break; case 1:/*图书入库*/ PutBookInLib(&pBookHead,&pInde

24、xHead); break; case 2:/*查询库存*/ QueryBookLib(pBookHead); printf(按回车键继续.); fflush(stdin); getchar(); system(cls); break; case 3:/*借阅图书*/ QueryBookLib(pBookHead); BorrowBook(&pBorrowHead,pBookHead); break; case 4:/*查询借阅*/ QueryBorrow(pBorrowHead); printf(按回车键继续.); fflush(stdin); getchar(); system(cls);

25、 break; case 5:/*归还图书*/ QueryBorrow(pBorrowHead); ReturnBook(&pBorrowHead,pBookHead); break; DeleteBookList(&pBookHead); DeleteIndexList(&pIndexHead); DeleteBorrowList(&pBorrowHead); fflush(stdin); getchar(); return 0;/*获取输入字符串*/void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber) memset(pIn

26、OutStr,0x0,StrLen); fflush(stdin); int Count = 0; while ( true ) char TmpC = 0; fread(&TmpC,1,1,stdin); if ( 10 = TmpC ) break; if ( OnlyGetNumber & TmpC = 0 & TmpC = 9 ) pInOutStrCount = TmpC; Count+; else pInOutStrCount = TmpC; Count+; /*显示主菜单 并返回选择*/int ShowMainMenu() char InPutStr1024;NO_INPUT:

27、printf(nnn); printf(*n); printf(* 图书管理系统 *n); printf(*n); printf(n); printf(请选择:n); printf(t1.图书入库n); printf(t2.查询库存n); printf(t3.借阅图书n); printf(t4.查询借阅n); printf(t5.归还图书n); printf(t0.退出n); printf(n); printf(t输入 : ); GetInput(InPutStr,1024,true); if ( strlen(InPutStr) pNext != NULL ) pWork = pWork-p

28、Next; BookID = pWork-BookID + 1; Book *pTmpNewBook = (Book *)(malloc(sizeof(Book); memset(pTmpNewBook,0x0,sizeof(Book); Index *pTmpIndex = (Index *)(malloc(sizeof(Index); memset(pTmpIndex,0x0,sizeof(Index); pTmpNewBook-BookID = BookID; pTmpIndex-BookID = BookID; system(cls); printf(输入图书名称 : ); GetIn

29、put(InPutStr,1024); strcpy(pTmpNewBook-BookName,InPutStr); system(cls); printf(n,pTmpNewBook-BookName); printf(图书作者 : ); GetInput(InPutStr,1024); strcpy(pTmpNewBook-Writer,InPutStr); system(cls); printf(n,pTmpNewBook-BookName); printf(作者:%sn,pTmpNewBook-Writer); printf(入库数量 : ); GetInput(InPutStr,10

30、24,true); pTmpNewBook-CurrentNumber = atoi(InPutStr); if ( pTmpNewBook-CurrentNumber BookName,pTmpNewBook-BookName) = 0 & strcmp(pWork-Writer,pTmpNewBook-Writer) = 0 ) pWork-CurrentNumber += pTmpNewBook-CurrentNumber; return; pWork = pWork-pNext; pWork = *pHead; while ( pWork-pNext != NULL ) pWork =

31、 pWork-pNext; pWork-pNext = pTmpNewBook; Index *pWork2 = *pIndex; while ( pWork2-pNext != NULL ) pWork2 = pWork2-pNext; pWork2-pNext = pTmpIndex; system(cls); printf(图书:n作者:%sn入库数:%dnn入库操作成功!(按回车键继续.),pTmpNewBook-BookName,pTmpNewBook-Writer,pTmpNewBook-CurrentNumber); fflush(stdin); getchar(); syste

32、m(cls);/*释放图书链表及索引链表*/void DeleteBookList(Book *pHead) Book *pWork = *pHead; Book *pNext = pWork; while ( NULL != pWork ) pNext = pWork-pNext; free(pWork); pWork = pNext; void DeleteIndexList(Index *pIndex) Index *pWork = *pIndex; Index *pNext = pWork; while ( NULL != pWork ) pNext = pWork-pNext; fr

33、ee(pWork); pWork = pNext; void DeleteBorrowList(Borrow *pBorrow) Borrow *pWork = *pBorrow; Borrow *pNext = pWork; while ( NULL != pWork ) pNext = pWork-pNext; free(pWork); pWork = pNext; /*查询图书馆库存,查询不改变数据,故传入指针即可*/void QueryBookLib(Book *pHead) Book *pWork = pHead; int TotalCount = 0; while ( NULL !

34、= pWork ) TotalCount+; pWork = pWork-pNext; system(cls); printf(当前库存共%d种图书,列表如下:n=n,TotalCount); pWork = pHead; while ( NULL != pWork ) printf(编号:%d 书名: 作者:%s 当前库存:%dn,pWork-BookID,pWork-BookName,pWork-Writer,pWork-CurrentNumber); pWork = pWork-pNext; printf(=n,TotalCount);/*借阅图书*/void BorrowBook(Bo

35、rrow *pBorrow,Book *pHead) char InPutStr1024; bool HadTheBook = false; Borrow *pTmpBorrow = (Borrow *)(malloc(sizeof(Borrow); memset(pTmpBorrow,0x0,sizeof(Borrow); printf(请输入你想借书的编号 : ); GetInput(InPutStr,1024,true); pTmpBorrow-BookID = atoi(InPutStr); Book *pWorkBook = pHead; while ( pWorkBook != N

36、ULL ) if ( pWorkBook-BookID = pTmpBorrow-BookID ) HadTheBook = true; break; pWorkBook = pWorkBook-pNext; if ( HadTheBook ) if ( pWorkBook-CurrentNumber 1 ) system(cls); printf(图书当前无库存,无法借阅!n(按回车键继续.),pWorkBook-BookName); fflush(stdin); getchar(); system(cls); free(pTmpBorrow); return; else system(cl

37、s); printf(图书编号%d不存在!n(按回车键继续.),pTmpBorrow-BookID); fflush(stdin); getchar(); system(cls); free(pTmpBorrow); return; strcpy(pTmpBorrow-BookName,pWorkBook-BookName); printf(请输入借书证号 : ); GetInput(InPutStr,1024,true); pTmpBorrow-StuID = atoi(InPutStr); if ( 0 = pTmpBorrow-StuID ) system(cls); printf(借书

38、证号不存在(借书证号输入整数)!n(按回车键继续.); fflush(stdin); getchar(); system(cls); free(pTmpBorrow); return; time_t ltime; struct tm *today; time(ime); ltime += 60 * 60 * 24 * 30; today = localtime(ReturnTime,%d年%d月%d日, today-tm_year+1900, today-tm_mon+1, today-tm_mday); if ( *pBorrow = NULL ) *pBorrow = pTmpBorrow

39、; else Borrow *pWork = *pBorrow; while ( NULL != pWork-pNext ) pWork = pWork-pNext; pWork-pNext = pTmpBorrow; pWorkBook-CurrentNumber-; system(cls); printf(借书证号:%dn借阅图书:nn操作成功!(按回车键继续.),pTmpBorrow-StuID,pTmpBorrow-BookName); fflush(stdin); getchar(); system(cls);/*查询借阅*/void QueryBorrow(Borrow *pBorrow) Borrow *pWork = pBorrow; int TotalCount = 0; while ( NULL != pWork ) TotalCount+; pWork = pWork-pNext; system(cls); printf(当前借

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论