c++课设图书管理系统_第1页
c++课设图书管理系统_第2页
c++课设图书管理系统_第3页
c++课设图书管理系统_第4页
c++课设图书管理系统_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上南京航空航天大学面向对象程序设计语言课程设计报告图 书 管 理 系 统学号:姓名:日期: 目 录2223467123一 需求分析本系统旨在实现一个小型的图书管理系统,对于一个小型的图书馆或藏书室来说,实施本系统不仅可以减少工作人员数量,降低成本,而且可以大大提高工作效率,降低工作强度,方便读者借书查书及办理各种手续,更方便工作人员对图书进行更有效的管理。程序主要实现读者管理、图书基本信息及库存管理、图书借还管理以及一些辅助功能等。(1) 以菜单的方式工作(2) 图书、读者的基本信息的新增(3) 图书、读者的基本信息的修改(4) 图书、读者记录的删除(5) 图书的借阅,

2、归还(6) 查询图书、读者信息及借阅状态二 程序主要功能 该程序的主要功能有:l 读者功能可进行增加读者、读者信息修改、注销读者、读者查询、显示读者信息、显示所有读者信息等操作。l 图书信息管理可以进行查询图书、增加图书、删除图书信息、图书信息修改、显示全部图书信息等操作。其中添加内容包括:书名、ISBN编号、作者、出版商、出版日期、方便读者查看;l 图书借还功能 应该说这是整个系统最主要的功能,借还时要输入编号已及读者编号l 帮助一个简单的操作指南,指导用户下一步该如何操作。l 退出系统在运行时将从文件载入信息。运行程序后每一步都会有详细的提示,操作简便,大多数地方都考虑到防止用户出现误操作

3、的情况,以提高程序的健壮性,可以放心使用!三程序运行平台该程序是用VC+6.0制做的,使用Microsoft Visual C+ 6.0运行该程序,具体操作是:打开Microsoft Visual C+ 6.0,菜单栏里点文件打开工作区找到“图书管理系统.dsw”这个文件打开,或者在资源管理器中双击该文件,此时,VC+6.0会自动打开,并载入该系统相关资源,点击Run命令菜单或者或用快捷键Ctrl+F5运行该程序。trl计分析能借书/还书读者信息管理图书管理系统图书信息管理帮 助统计查询.新增图书信息.删除图书信息.显示图书信息.修改图书信息.帮助说明.显示读者信息.返回上一层.新增读者信息.

4、修改读者信息.删除图书信息.显示图书信息.帮助说明.返回上一层 输入图书编号及读者编号.还书 借书.返回上一层四系统功能框架图五程序类说明有关图书信息的类struct BookInfochar BookCode6;/图书编号char BookName30;/图书名字char BookAuthor20;/作者名 char BookPress50;/出版社 char BookPublicationDate8;/出版日期 char ISBN8;/图书isbn号 char BookStatus;/图书借阅状态 0未借出 1借出 char ReaderCode6;/读者编号 编号为0为未借阅char I

5、sAvailable;/图书是否有效,0无效,1,有效 ;void AddBookInfo();/增加图书void ModifyBookInfo();/修改图书void DelBookInfo();/删除图书int CountBook();/获得图书记录数int IsBookExist(char *);/判断图书(编号)是否存在void ShowBookInfo();/显示图书清单 void ShowReaderInfo(); /显示读者清单int IsBorrow(char *);/判断是否在借int IsBorrowed(char *);/统计在借书的总数 void BookBorrow(

6、);/借书手续 void BookReturn();/还书手续有关读者信息的类struct ReaderInfochar ReaderCode6;/读者编号 char ReaderName20;/读者姓名 char Sex3;/读者性别 char IsAvailable;/读者是否有效,0无效,1,有效 ;void AddReaderInfo();/增加读者void ModifyReaderInfo();/修改读者void DelReaderInfo();/删除读者void ShowReaderInfo(); /显示读者清单int CountReader();/获得读者记录数六.模块分析1、读

7、者信息:下设子菜单,包括:a.新增读者 b.修改读者c.删除读者d.读者查询 e.显示读者信息 f.返回上一层 (1)读者编号:读者唯一的识别方式,所以不可以重复,长度小于六个字符。(2)读者姓名:长度小于20个字符。(3)读者性别:长度小于三个字符。2、书库信息:该部分内容最丰富,下设子菜单,包括a.新书入库 b.删除 c.修改 d.返回上一层 链表的思路也跟读者信息一样,从头结点开始建,每当新增加一个类节点时,就把新增结点加到链表尾部,再让其中的next指向NULL空,这里没有对链表进行排序。 有关菜单的制作,就是先显示菜单,让用户输入选择,进行输入有效性检查,然后用switch来对不同的

8、选择调用类中不同的函数。3、 借书/还书:借书需要判断的条件不只是判断图书是否存在、图书是否借出、读者是否存在。还书需要提供读者编号再判断图书是否已经借出。十程序源代码#include<iostream>#include<string.h>#include<stdlib.h>#include<fstream> #include<iomanip> #include<stdio.h>using namespace std;#define BOOKLEN sizeof(struct BookInfo)#define READER

9、LEN sizeof(struct ReaderInfo) /函数声明void Welcome();int MainMenu();void SubMenu1();int CreatSubMenu1();void SubMenu2();int CreatSubMenu2();void SubMenu3();int CreatSubMenu3();void SubMenu();int CreatSubMenu4();void AddBookInfo();/增加图书void ModifyBookInfo();/修改图书void DelBookInfo();/删除图书int CountBook();/

10、获得图书记录数int CountReader();/获得读者记录数int IsBookExist(char *);/判断图书(编号)是否存在int IsReaderExist(char *);/判断读者(编号)是否存在void AddReaderInfo();/增加读者void ModifyReaderInfo();/修改读者void DelReaderInfo();/删除读者void ShowBookInfo();/显示图书清单 void ShowReaderInfo(); /显示读者清单int IsBorrow(char *);/判断是否在借int IsBorrowed(char *);/

11、统计在借书的总数 void BookBorrow();/借书手续 void BookReturn();/还书手续 void SearchBook();/图书查询 void SearchReader();/读者查询 int GetPosition(char *,struct BookInfo*);/修改图书信息,获得修改记录的位置 int GetRdPosition(char *,struct ReaderInfo*);/修改读者信息,获得修改记录的位置 void ShowAReader(char *); /显示指定编号的读者的信息int InvalidBookPosition();/查询第一条

12、无效图书信息 int InvalidReaderPosition();/查询第一条无效读者信息 /图书结构定义struct BookInfochar BookCode6;/图书编号char BookName30;/图书名字char BookAuthor20;/作者名 char BookPress50;/出版社 char BookPublicationDate8;/出版日期 char ISBN8;/图书isbn号 char BookStatus;/图书借阅状态 0未借出 1借出 char ReaderCode6;/读者编号 编号为0为未借阅char IsAvailable;/图书是否有效,0无效

13、,1,有效 ;/读者结构体struct ReaderInfochar ReaderCode6;/读者编号 char ReaderName20;/读者姓名 char Sex3;/读者性别 char IsAvailable;/读者是否有效,0无效,1,有效 ; void Welcome()cout<<"*"<<endl;cout<<"*图书信息借阅系统*"<<endl; cout<<"*"<<endl;cout<<"*现有图书"<

14、<CountBook()<<"册"<<"读者"<<CountReader()<<"人"<<"*"<<endl;int MainMenu()int m;while(1)cout<<"*欢迎使用图书管理系统*"<<endl;cout<<"*"<<endl;cout<<"*1.图书信息管理*"<<endl;cout

15、<<"*2.读者信息管理*"<<endl;cout<<"*3.借书 还书*"<<endl;cout<<"*4.统计 查询*"<<endl;cout<<"*0.退出 系统*"<<endl;cout<<"请选择0-4:"<<endl;cin>>m;if(m>=0&&m<=4)break;elsecout<<"选择错误,请

16、在0-4中选择"<<endl;return m;int CreatSubMenu1()int m;while(1)cout<<"*图书信息管理*"<<endl;cout<<"*"<<endl;cout<<"*1.新增 图书*"<<endl;cout<<"*2.修改 图书*"<<endl;cout<<"*3.删除 图书*"<<endl;cout<<

17、;"*0.返回上一层*"<<endl;cout<<"请选择0-3:"<<endl; cin>>m;if(m>=0&&m<=3)break;elsecout<<"选择错误,请在0-3中选择"<<endl; return m; int CreatSubMenu2()int m;while(1)cout<<"*读者信息管理*"<<endl;cout<<"*"<&

18、lt;endl;cout<<"*1.新增 读者*"<<endl;cout<<"*2.修改 读者*"<<endl;cout<<"*3.删除 读者*"<<endl;cout<<"*0.返回上一层*"<<endl;cout<<"请选择0-3:"<<endl; cin>>m;cin.ignore();if(m>=0&&m<=3)break;els

19、ecout<<"选择错误,请在0-3中选择"<<endl; return m;int CreatSubMenu3()int m;while(1)cout<<"*图书流通*"<<endl;cout<<"*"<<endl;cout<<"*1.借书*"<<endl;cout<<"*2.还书*"<<endl;cout<<"*0.返回上一层*"<&l

20、t;endl;cout<<"请选择0-2:"<<endl; cin>>m;if(m>=0&&m<=2)break;elsecout<<"选择错误,请在0-2中选择"<<endl; return m;int CreatSubMenu4()int m;while(1)cout<<"*统计查询*"<<endl;cout<<"*"<<endl;cout<<"*1.图书

21、清单*"<<endl;cout<<"*2.读者清单*"<<endl;cout<<"*3.图书查询*"<<endl;cout<<"*4.读者查询*"<<endl;cout<<"*0.返回上层*"<<endl;cout<<"请选择0-4:"<<endl;cin>>m; if(m>=0&&m<=4)break;elseco

22、ut<<"选择错误,请在0-4中选择"<<endl;return m;int CountBook()/统计已有图书数量(有效图书) struct BookInfo BookTemp;FILE *fp;int count=0;if(fp=fopen("bookinfo.dat","rb")=NULL)return 0;elsewhile(fread(&BookTemp,BOOKLEN,1,fp)if(BookTemp.IsAvailable='1')count+;fclose(fp);re

23、turn count;int CountReader()/统计已有读者人数(有效人数) struct ReaderInfo ReaderTemp;FILE *fp;int count =0;if(fp=fopen("bookinfo.dat","rb")=NULL)return 0;elsewhile(fread(&ReaderTemp,READERLEN,1,fp)if(ReaderTemp.IsAvailable='1')count+;fclose(fp);return count;void SubMenu1()/图书信息管理

24、 int MenuId;while(1)MenuId=CreatSubMenu1();if(MenuId=0)break;switch(MenuId)case 1:AddBookInfo();break;case 2:ModifyBookInfo();break;case 3:DelBookInfo();break;case 0:MainMenu();break;void SubMenu2()/读者信息管理 int MenuId;while(1)MenuId=CreatSubMenu2();if(MenuId=0)break;switch(MenuId)case 1:AddReaderInfo

25、();break;case 2:ModifyReaderInfo();break;case 3:DelReaderInfo();break;case 0:MainMenu();break; void SubMenu3()/图书借阅 int MenuId;while(1)MenuId=CreatSubMenu3();if(MenuId=0)break;switch(MenuId)case 1:BookBorrow();break;case 2:BookReturn();break;case 0:MainMenu();break;void SubMenu4()/信息查询 int MenuId;wh

26、ile(1)MenuId=CreatSubMenu4();if(MenuId=0)break;switch(MenuId)case 1:ShowBookInfo();break;case 2:ShowReaderInfo();break;case 3:SearchReader();break;case 4:SearchBook();break;case 0:MainMenu();break;void AddBookInfo()/新增图书记录struct BookInfo MyBook;cout<<"请输入图书编号"<<endl;cin>>

27、MyBook.BookCode;while(IsBookExist(MyBook.BookCode) cout<<"图书已存在,请重新输入"<<endl;cin>>MyBook.BookCode;cout<<"请输入书名"<<endl;cin>>MyBook.BookName;cout<<"请输入作者"<<endl;cin>>MyBook.BookAuthor;cout<<"请输入出版商"<

28、<endl;cin>>MyBook.BookPress; cout<<"请输入isbn号"<<endl; cin>>MyBook.ISBN;cout<<"请输入出版日期"<<endl; cin>>MyBook.BookPublicationDate;MyBook.BookStatus='0'strcpy(MyBook.ReaderCode,"0");MyBook.IsAvailable='1'FILE *fp;if

29、(fp=fopen("bookinfo.dat","rb+")=NULL)cout<<"文件打开错误"<<endl;exit(0); int SetPs;/查询写入文件位置SetPs=InvalidBookPosition();if(SetPs=-1) /图书记录都是有效的,文件指针定义在文件尾fseek(fp,0,SEEK_END);elsefseek(fp,(long)BOOKLEN*SetPs,SEEK_SET);/重新定位写入位置fwrite(&MyBook,BOOKLEN,1,fp);fclo

30、se(fp);cout<<"新增图书成功,现有图书"<<CountBook()<<"册"<<"按回车键继续添加"<<endl;cin.ignore();getchar(); void ModifyBookInfo()/修改图书struct BookInfo MyBook;char ModifyBookCode6;if(CountBook=0)cout<<"无法修改"<<endl;return;cout<<"请输

31、入要修改的图书编号"<<endl;cin>>ModifyBookCode;if(!IsBookExist(ModifyBookCode)cout<<"图书不存在"<<endl;return; int ModiPosition=0;ModiPosition=GetPosition(ModifyBookCode,&MyBook);cout<<"请输入新书名"<<endl;cin>>MyBook.BookName;cout<<"请输入新作

32、者"<<endl;cin>>MyBook.BookName;cout<<"请输入新出版商"<<endl;cin>>MyBook.ISBN;cout<<"请输入新的出版日期"<<endl; cin>>MyBook.BookPublicationDate; FILE *fp;if(fp=fopen("bookinfo.dat","rb+")=NULL)cout<<"文件打开错误"&l

33、t;<endl;exit(0); fseek(fp,(long)BOOKLEN*ModiPosition,SEEK_SET);fwrite(&MyBook,BOOKLEN,1,fp);fclose(fp);cout<<"修改成功,按回车键继续"<<endl;cin.ignore();getchar(); void DelBookInfo()/删除图书char DelBookCode6;if(CountBook=0)cout<<"无法删除"<<endl;return; cout<<&

34、quot;请输入要删除的图书编号"<<endl;cin>>DelBookCode; if(!IsBookExist(DelBookCode) cout<<"该书不存在"<<endl;return;if(IsBorrow(DelBookCode) /书已经借出,无法删除cout<<"书已经借出,无法删除"<<endl;return; FILE *fp;if(fp=fopen("bookinfo.dat","rb+")=NULL)cout

35、<<"文件打开错误"<<endl;exit(0); struct BookInfo MyBook;int ModiPosition=0;ModiPosition=GetPosition(DelBookCode,&MyBook);MyBook.IsAvailable='0'fseek(fp,(long)BOOKLEN*ModiPosition,SEEK_SET);fwrite(&MyBook,BOOKLEN,1,fp);fclose(fp);cout<<"删除图书成功,现有图书"<&

36、lt;CountBook()<<"册"<<endl; void BookBorrow()/图书借阅 char BookCode6;char ReaderCode6;if(CountBook()=0|CountReader()=0)cout<<"无法借书"<<endl;return;cout<<"请输入图书编号"<<endl;cin>>BookCode; if(!IsBookExist(BookCode)cout<<"借书失败,该书

37、不存在"<<endl;return; if(IsBorrow(BookCode)cout<<"书已经借出,借书失败"<<endl;return; cout<<"请输入读者编号"<<endl;cin>>ReaderCode; if(!IsReaderExist(ReaderCode)cout<<"读者不存在,借书失败"<<endl;return; FILE *fp;if(fp=fopen("bookinfo.dat&quo

38、t;,"rb+")=NULL)cout<<"文件打开错误"<<endl;exit(0); int Position=0; struct BookInfo MyBook; Position=GetPosition(BookCode,&MyBook); MyBook.BookStatus='1' strcpy(MyBook.ReaderCode,ReaderCode); fseek(fp,(long)BOOKLEN*Position,SEEK_SET); fwrite(&MyBook,BOOKLEN,1

39、,fp); fclose(fp); cout<<"借书成功,按回车键继续"<<endl; cin.ignore(); getchar(); void BookReturn()/还书 char BookCode6;if(CountBook()=0|CountReader()=0)cout<<"无法还书"<<endl;return;cout<<"请输入图书编号"<<endl;cin>>BookCode; if(!IsBookExist(BookCode)c

40、out<<"还书失败,该书不存在"<<endl;return; if(!IsBorrow(BookCode)cout<<"书未借出,还书失败"<<endl;return; FILE *fp;if(fp=fopen("bookinfo.dat","rb+")=NULL)cout<<"文件打开错误"<<endl;exit(0); int Position=0; struct BookInfo MyBook; Position=G

41、etPosition(BookCode,&MyBook); MyBook.BookStatus='0' strcpy(MyBook.ReaderCode,"0"); fseek(fp,(long)BOOKLEN*Position,SEEK_SET); fwrite(&MyBook,BOOKLEN,1,fp); fclose(fp); cout<<"还书成功,按回车键继续"<<endl; cin.ignore(); getchar(); void ShowBookInfo()/显示所有图书信息 str

42、uct BookInfo MyBookInfo;int booknum=CountBook();if(booknum=0)cout<<"没有图书信息"<<endl;return; FILE *fp;if(fp=fopen("bookinfo.dat","rb+")=NULL)cout<<"文件打开错误"<<endl;exit(0); while(fread(&MyBookInfo,BOOKLEN,1,fp)cout<<"编号"&

43、lt;<setw(6)<<MyBookInfo.BookCode<<"书名"<<setw(20)<<MyBookInfo.BookName<<"作者"<<setw(20)<<MyBookInfo.BookAuthor<<"出版商"<<setw(30)<<MyBookInfo.BookPress<<"出版日期"<<setw(8)<<MyBookInfo.Bo

44、okPublicationDate; void SearchBook()/图书查询 char BookCode6;if(CountBook()=0)cout<<"图书不存在"<<endl;return; cout<<"请输入图书编号"<<endl;cin>>BookCode;if(!IsBookExist(BookCode)cout<<"图书不存在"<<endl;return;struct BookInfo MyBook;GetPosition(Boo

45、kCode,&MyBook);cout<<"编号"<<setw(6)<<MyBook.BookCode<<"书名"<<setw(20)<<MyBook.BookName<<"作者"<<setw(20)<<MyBook.BookAuthor<<"出版商"<<setw(30)<<MyBook.BookPress<<"出版日期"<&l

46、t;setw(8)<<MyBook.BookPublicationDate; if(MyBook.BookStatus='1')/若书借出,则显示借阅的读者的信息 ShowAReader(MyBook.ReaderCode); else cout<<"该书未被借阅"<<endl; void SearchReader()/读者查询 char ReaderCode6;if(CountReader=0)cout<<"读者不存在"<<endl;return;cout<<&qu

47、ot;请输入读者编号"<<endl;cin>>ReaderCode; if(!IsReaderExist(ReaderCode)cout<<"读者不存在"<<endl;return; ShowAReader(ReaderCode);int BorrowCount=IsBorrowed(ReaderCode);if(BorrowCount=0)cout<<"读者未借阅该书"<<endl;else cout<<"读者借阅了"<<Bor

48、rowCount<<"册"<<endl;FILE *fp;if(fp=fopen("bookinfo.dat","rb")=NULL)cout<<"文件打开错误"<<endl;exit(0); struct BookInfo MyBook;int i=0;while(fread(&MyBook,BOOKLEN,1,fp)if(strcmp(MyBook.ReaderCode,ReaderCode)=0)i+;cout<<i<<MyBoo

49、k.BookCode<<MyBook.BookName<<MyBook.BookAuthor<<endl; fclose(fp); void ShowAReader(char *ReaderCode)/显示指定编号的读者详细信息 FILE *fp;if(fp=fopen("readerinfo.dat","rb")=NULL)cout<<"文件打开错误"<<endl;exit(0); struct ReaderInfo MyReader;while(fread(&My

50、Reader,READERLEN,1,fp)=NULL)if(strcmp(MyReader.ReaderCode,ReaderCode)=0)break;cout<<"借阅读者"<<ReaderCode<<MyReader.ReaderName<<MyReader.Sex<<endl;fclose(fp); int InvalidBookPosition()/查询第一条无效图书记录在文件中的位置 int InvalidPs=-1;int count=0;FILE *fp;if(fp=fopen("boo

51、kinfo.dat","rb")=NULL)cout<<"文件打开错误"<<endl;exit(0); struct BookInfo MyBook;while(fread(&MyBook,BOOKLEN,1,fp)if(MyBook.IsAvailable='0')InvalidPs=count;break;count+;fclose(fp);return InvalidPs;int IsBookExist(char *ChkBookCode)/查询指定图书在文件中是否存在 int IsExis

52、t=0;FILE *fp;if(fp=fopen("bookinfo.dat","rb")=NULL)cout<<"文件打开错误"<<endl;exit(0); struct BookInfo MyBook;while(fread(&MyBook,BOOKLEN,1,fp)if(strcmp(MyBook.BookCode,ChkBookCode)=0&&MyBook.IsAvailable)IsExist=1;break;fclose(fp);return IsExist;int Is

53、Borrow(char *BookCode)/判断图书是否已经借出 ,在借返回 1,否则返回 0 struct BookInfo temp;int IsbBorrow =0;FILE *fp;if(fp=fopen("bookinfo.dat","rb")!=NULL)while(fread(&temp,BOOKLEN,1,fp)if(strcmp(temp.BookCode,BookCode)=0&&temp.BookStatus='1')IsbBorrow=1;break;fclose(fp);return I

54、sbBorrow; int GetPosition(char *ModiCode,struct BookInfo *MyBook)/获得待修改图书的位置 int count=0;FILE *fp;if(fp=fopen("bookinfo.dat","rb")=NULL)cout<<"文件打开错误"<<endl;exit(0); while(fread(MyBook,BOOKLEN,1,fp)if(strcmp(MyBook->BookCode,ModiCode)=0&&MyBook-&g

55、t;IsAvailable='1')break;count+;fclose(fp);return count; void AddReaderInfo()/增加读者 struct ReaderInfo MyReader;cout<<"读者编号"<<endl;cin>>MyReader.ReaderCode;while(IsReaderExist(MyReader.ReaderCode) cout<<"读者已存在,请重新输入"<<endl;cin>>MyReader.ReaderCode; cout<<"读者姓名"<

温馨提示

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

评论

0/150

提交评论