《图书管理系统》word版 (2)_第1页
《图书管理系统》word版 (2)_第2页
《图书管理系统》word版 (2)_第3页
《图书管理系统》word版 (2)_第4页
《图书管理系统》word版 (2)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、.1、问题描述:对一个有N本书籍的图书馆进行计算机管理,通过该系统实现对该图书图的基本功能的管理,包括:增加新书、借书、还书、查询书籍等操作。2、功能要求:1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:书号、书名、作者姓名、借书证号、借还标志、借还书日期等。2)本系统显示这样的菜单:请选择系统功能项:a. 增加新书b. 书籍查询(1)按书号查询(2)按书名查询(3)按作者查询c. 借还书(1)借书(2)还书d. 退出系统3)执行一个具体的功能之后,程序将重新显示菜单。也可以通过判断“借书日期”的内容是否为0来确定该书是否借出。3、算法提示:1、数据结构:结构体类型数组2、

2、数据库结构:该系统的基本数据库如下:书号书名作者姓名借书证号借书日期Charchar charCharchar4、测试数据:图书数N=5高级语言程序设计(2)课程设计?一 程序设计说明书【设计题目】 图书馆借阅管理【问题描述】图书馆,适合用C+面向对象的功能来描述。图书馆管理系统分为借书、还书、图书管理和读者服务等四个部分。设计一个读者类Reader,记录每个读者基本信息;读者库类Rdatabase,记录所有读者信息;图书类Book, 记录每本书的基本信息;图书库类Bdatabase, 记录所有图书信息。【基本要求】1读者库类RDatabase中,其构造函数中,将read.txt文件中所有读入

3、读者记录rede中。处理完毕,在析构函数中将read中的所有未删记录写入到read.txt中。2图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book中。处理完毕,在析构函数中将book中的所有未删记录写入到book.txt中。3 利用构造函数完成读者和图书数据初始化,完成内存分配。程序结束前,析构函数完成所申请的堆内存空间。4 编写主函数,对所编写的矩阵类进行全面测试。要求用户界面采用菜单方式。测试中需要读者和图书数据通过I/O流从磁盘文件读入,同时显示在屏幕上。得到的数据通过I/O流写入磁盘文件保存,同时显示在屏幕上。5 源程序中要有充分的注释,报告中

4、要有详细的流程图和文字材料。【类的设计】该程序包含了四个类,如下:1. Reader类,有读者的基本管理功能,具有以下私有数据:int tag;/删除标记 1:已删;0:未删int no;/读者编号char name10;/读者姓名int borbookMaxbor;/所借图书2. 读者库类Rdatabase, 具有以下私有数据:int top;/读者记录指针Reader readMaxr;/读者记录3. 图书库类Book,有一本图书的基本功能,有以下私有数据:int tag;/删除标记 1:已删;0:未删int no;/图书编号char name20;/书名int onshelf;/是否在架

5、 1在架 0已借4. 图书库类BDatabase,有以下私有数据:int top;/图书记录指针Book bookMaxb;/图书记录【特殊函数的设计说明】构造函数1. Reader类中构造函数Reader(),初始化函数;2. 读者库类RDatabase中,其构造函数Rdatabase(),将read.txt文件中所有读入读者记录rede中。3. Book类中构造函数Book(),初始化函数;4. 图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book中。?拷贝构造函数Reader类中的拷贝构造函数将getname()的返回值读者姓名拷贝到setname

6、()中,Book类中的拷贝构造函数将getname()函数的返回值图书名拷贝到图书名设置函数setname()中。?析构函数1. 读者库类RDatabase中,其析构函数Rdatabase(),将read中的所有未删记录写入到read.txt中;2. 图书库类BDatabase中,其析构函数Bdatabase(),将book中的所有未删记录写入到book.txt中。?运算符重载重载了“=”,当比较读者编号和图书编号时,重载;重载位运算符“”和“”等。?【主要函数算法流程图】?【程序的使用方法】1. 进入操作页面,按提示操作;2. 首先,新增图书和读者信息,之后就可以对以存在的信息进行操作;3.

7、 操作当中,可以随时增加,更改和删除图书或读者信息;4. 当选择退出时,进行清屏。?二 程序上机调试报告【语法错误及其排除】1在敲程序时,有很多拼写错误,例好多处把Readdata()误打Readdate();结束的分号,在不同的输入法状态下输入,这些小错误刚开始很难发现,不过有了经验,就很容易了。2创建新的构造函数时,使用出现了错误。重载构造函数要注意函数的访问权限,结果就不会出现错误。【算法错误及其排除】1. 读者类中借书操作函数中,采用循环语句时判断读者已借图书量时for(int i=0;i<Maxbor;i+)误写为for(int i=1;i<Maxbor;i+),使循环发

8、生错误。2. 指针使用错误,指针b和r混淆,导致编译错误得到“error C2660: 'retbook' : function does not take 1 parameters”错误报告。三 程序测试结果【收获及体会】除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计这段时间,时刻都感觉自己有好多不懂,要学的太多了!经过这次课程设计,让我对C+这门语言有了更深的认识,操作能力有了提高。要想得到敲的代码运行出来后的满足感,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才达到所要的运行结果。学习

9、编程,需要多揣摩,实践,实践,再实践,编程技能才能更上一层楼,此外还得多向高手请教!【源程序代码】/*/图书馆借阅管理/班级:/学号:/姓名:/*#include<iostream.h>#include<iomanip.h>#include<string.h>#include<fstream.h>const int Maxr=1000;/最多的读者const int Maxb=10000;/最多的图书const int Maxbor=8;/每位读者最多借8本书class Reader /读者类int tag;/删除标记 1已删;0未删int no

10、;/读者编号char name10;/读者姓名int borbookMaxbor;/所借图书public :Reader()/构造函数char *getname()return name;/获取读者姓名int gettag()return tag;/获取删除标记int getno()return no;/获取读者编号void setname(char na)/设置读者姓名strcpy(name,na);void delbook()tag=1;/设置删除标记void addreader(int n,char *na)/增加读者tag=0;no=n;strcpy(name,na);for(int

11、i=0;i<Maxbor;i+)borbooki=0;void borrowbook(int bookid)/借书操作for(int i=0;i<Maxbor;i+)if(borbooki=0)borbooki=bookid;int retbook(int bookid)/还书操作for(int i=0;i<Maxbor;i+)if (borbooki=bookid)borbooki=0;return 1;return 0;void disp()/输出读者信息cout<<setw(5)<<no<<setw(10)<<name&l

12、t;<"借书编号:"for(int i=0;i,Maxbor;i+)if(borbooki!=0)cout<<borbooki<<endl;?class RDatabase/读者库类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(!f

13、ile)break;top+;readtop=s;file.close();void clear()/删除所有读者信息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 &a

14、mp;readi;return NULL;void disp()/删除读者所有信息for(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:

15、readerdata()int choice=1;char rname20;int readerid;Reader*r;while(choice!=0)cout<<"读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出"<<endl;cin>>choice;switch(choice)case 1:cout<<"请输入读者编号:"cin>>readerid;cout<<"读入读者姓名:"cin>>rname;addreader(reader

16、id,rname);break;case 2:cout<<"请输入读者编号:"cin>>readerid;r=query(readerid);if(r=NULL)cout<<"读者不存在"<<endl;break;cout<<"请输入新读者姓名:"cin>>rname;r->setname(rname);break;case 3:cout<<"请输入读者编号:"cin>>readerid;r=query(reade

17、rid);if(r=NULL)cout<<"读者不存在"<<endl;break;r->delbook();break;case 4:cout<<"请输入读者编号:"cin>>readerid;r=query(readerid);if(r=NULL)cout<<"该读者编号不存在"<<endl;break;case 5:disp();break;case 6:clear();break;?class Book/图书类int tag;/删除标记 1:已删;0:

18、未删int no;/图书编号char name20;/书名int onshelf;/是否在架 1在架 0已借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 n,char*na)/增加图书tag=0;no=n;strcpy(name,na);onshelf=1;int bo

19、rrowbook()/借书操作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 BDatabase/图书库类int top;/图书记录指针Book bookMaxb;/图书记录public:BD

20、atabase()/构造函数,将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(p=NULL)top+;booktop.addbook(n,na);return 1;cout<<&q

21、uot;新增成功!"<<endl;Book*query(int bookid)/查找图书for(int i=0;i<=top;i+)if(booki.getno()=bookid&&booki.gettag()=0)return NULL;void bookdata();/图书库维护void disp()for(int i=0;i<=top;i+)if(booki.gettag()=0)booki.disp();BDatabase()/析构函数,将book写入book.txt文件中fstream file("book.txt"

22、;,ios:out);for (int i=0;i<=top;i+)if(booki.gettag()=0)file.write(char*)&booki,sizeof(booki);file.close();void BDatabase:bookdata()int choice;char bname40;int bookid;Book *b;while(choice!=0)cout<<"图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出"<<endl;cin>>choice;switch(choice)cas

23、e 1:cout<<"输入图书编号:"cin>>bookid;cout<<"输入图书书名:"cin>>bname;addbook(bookid,bname);break;case 2:cout<<"输入图书编号:"cin>>bookid;b=query(bookid);if(b=NULL)cout<<"该图书不存在"<<endl;break;cout<<"输入新书名:"cin>>

24、;bname;b->setname(bname);cout<<"更名成功!"<<endl;break;case 3:cout<<"输入图书编号:"cin>>bookid;b=query(bookid);if(b=NULL)cout<<"该图书不存在!"<<endl;break;b->delbook();break;case 4:cout<<"请输入图书编号:"cin>>bookid;b=query(booki

25、d);if(b=NULL)cout<<"该书不存在!"<<endl;break;b->disp();break;case 5:disp();break;case 6:clear();break;?void main()int choice=1,bookid,readerid;RDatabase ReaderDB;Reader *r;BDatabase BookDB;Book *b;while(choice!=0)cout<<" 1借书? "<<endl;cout<<" 2还书?

26、"<<endl;cout<<" 3图书维护? "<<endl;cout<<" 4读者维护? "<<endl;cout<<" 0离开? "<<endl;cin>>choice;switch(choice)case 1:cout<<"借书,请输入读者编号:"cin>>readerid;cout<<"图书编号:"cin>>bookid;r=ReaderDB.query(readerid);if(r=NULL)cout<<"哈哈,借书成功!"break;b=BookDB.query(bookid);if(b=NULL)cout<<"不存在该书!"<<endl;break;if(b->borrowbook()=0)cout<<"该书已借"<<endl;break;r->borrowbook(b->getno();brea

温馨提示

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

评论

0/150

提交评论