一程序设计说明书【设计题目】图书馆借阅管理【问题描述】图书馆,适合用C++面向对象的功能来描述。图书馆管理系统分为借书、还书、图书管理和读者服务等四个部分。设计一个读者类Reader,记录每个读者基本信息;读者库类Rdatabase,记录所有读者信息;图书类Book,记录每本书的基本信息;图书库类Bdatabase,记录所有图书信息。【基本要求】1读者库类RDatabase中,其构造函数中,将read.txt文件中所有读入读者记录rede[]中。处理完毕,在析构函数中将read[]中的所有未删记录写入到read.txt中。2图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。处理完毕,在析构函数中将book[]中的所有未删记录写入到book.txt中。3利用构造函数完成读者和图书数据初始化,完成内存分配。程序结束前,析构函数完成所申请的堆内存空间。4编写主函数,对所编写的矩阵类进行全面测试。要求用户界面采用菜单方式。测试中需要读者和图书数据通过I/O流从磁盘文件读入,同时显示在屏幕上。得到的数据通过I/O流写入磁盘文件保存,同时显示在屏幕上。5源程序中要有充分的注释,报告中要有详细的流程图和文字材料。【类的设计】该程序包含了四个类,如下:1.Reader类,有读者的基本管理功能,具有以下私有数据:inttag;//删除标记1:已删;0:未删intno;//读者编号charname[10];//读者姓名intborbook[Maxbor];//所借图书2.读者库类Rdatabase,具有以下私有数据:inttop;//读者记录指针Readerread[Maxr];//读者记录3.图书库类Book,有一本图书的基本功能,有以下私有数据:inttag;//删除标记1:已删;0:未删intno;//图书编号charname[20];//书名intonshelf;//是否在架1在架0已借4.图书库类BDatabase,有以下私有数据:inttop;//图书记录指针Bookbook[Maxb];//图书记录【特殊函数的设计说明】构造函数1.Reader类中构造函数Reader(),初始化函数;2.读者库类RDatabase中,其构造函数Rdatabase(),将read.txt文件中所有读入读者记录rede[]中。3.Book类中构造函数Book(),初始化函数;4.图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。拷贝构造函数Reader类中的拷贝构造函数将getname()的返回值读者姓名拷贝到setname()中,Book类中的拷贝构造函数将getname()函数的返回值图书名拷贝到图书名设置函数setname()中。析构函数1.读者库类RDatabase中,其析构函数~Rdatabase(),将read[]中的所有未删记录写入到read.txt中;2.图书库类BDatabase中,其析构函数~Bdatabase(),将book[]中的所有未删记录写入到book.txt中。运算符重载重载了“=”,当比较读者编号和图书编号时,重载;重载位运算符“〈〈”和“〉〉”等。【主要函数算法流程图】【程序的使用方法】1.进入操作页面,按提示操作;2.首先,新增图书和读者信息,之后就可以对以存在的信息进行操作;3.操作当中,可以随时增加,更改和删除图书或读者信息;4.当选择退出时,进行清屏。二程序上机调试报告【语法错误及其排除】1.在敲程序时,有很多拼写错误,例好多处把Readdata()误打Readdate();结束的分号,在不同的输入法状态下输入,这些小错误刚开始很难发现,不过有了经验,就很容易了。2.创建新的构造函数时,使用出现了错误。重载构造函数要注意函数的访问权限,结果就不会出现错误。【算法错误及其排除】1.读者类中借书操作函数中,采用循环语句时判断读者已借图书量时for(inti=0;iMaxbor;i++)误写为for(inti=1;iMaxbor;i++),使循环发生错误。2.指针使用错误,指针b和r混淆,导致编译错误得到“errorC2660:'retbook':functiondoesnottake1parameters”错误报告。三程序测试结果【收获及体会】除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计这段时间,时刻都感觉自己有好多不懂,要学的太多了!经过这次课程设计,让我对C++这门语言有了更深的认识,操作能力有了提高。要想得到敲的代码运行出来后的满足感,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才达到所要的运行结果。学习编程,需要多揣摩,实践,实践,再实践,编程技能才能更上一层楼,此外还得多向高手请教!【源程序代码】//********************//图书馆借阅管理//班级://学号://姓名://********************#includeiostream.h#includeiomanip.h#includestring.h#includefstream.hconstintMaxr=1000;//最多的读者constintMaxb=10000;//最多的图书constintMaxbor=8;//每位读者最多借8本书classReader//读者类{inttag;//删除标记1已删;0未删intno;//读者编号charname[10];//读者姓名intborbook[Maxbor];//所借图书public:Reader(){}//构造函数char*getname(){returnname;}//获取读者姓名intgettag(){returntag;}//获取删除标记intgetno(){returnno;}//获取读者编号voidsetname(charna[])//设置读者姓名{strcpy(name,na);}voiddelbook(){tag=1;}//设置删除标记voidaddreader(intn,char*na)//增加读者{tag=0;no=n;strcpy(name,na);for(inti=0;iMaxbor;i++)borbook[i]=0;}voidborrowbook(intbookid)//借书操作{for(inti=0;iMaxbor;i++){if(borbook[i]==0){borbook[i]=bookid;}}}intretbook(intbookid)//还书操作{for(inti=0;iMaxbor;i++){if(borbook[i]==bookid){borbook[i]=0;return1;}}return0;}voiddisp()//输出读者信息{coutsetw(5)nosetw(10)name借书编号:;for(inti=0;i,Maxbor;i++)if(borbook[i]!=0)coutborbook[i]endl;}};classRDatabase//读者库类{inttop;//读者记录指针Readerread[Maxr];//读者记录public:RDatabase()//构造函数,将reader.txt读到read[]中{Readers;top=-1;fstreamfile(reader.txt,ios::in);while(1){file.read((char*)&s,sizeof(s));if(!file)break;top++;read[top]=s;}file.close();}voidclear()//删除所有读者信息{top=-1;}intaddreader(intn,char*na)//添加读者,检查是否已存在{Reader*p=query(n);if(p==NULL){top++;read[top].addreader(n,na);return1;}return0;}Reader*query(intreaderid)//按编号查找{for(inti=0;i=top;i++)if(read[i].getno()==readerid&&read[i].gettag==0)return&read[i];returnNULL;}voiddisp()//删除读者所有信息{for(inti=0;i=top;i++)read[i].disp();}voidreaderdata();//读者库维护~RDatabase()//析构函数,将read[]写入reader.txt文件中{fstreamfile(reader.txt,ios::out);for(inti=0;i=top;i++)if(read[i].gettag()==0)file.write((char*)&read[i],sizeof(read[i]));file.close();}};voidRDatabase::readerdata(){intchoice=1;charrname[20];intreaderid;Reader*r;while(choice!=0){cout读者服务1新增2更该3删除4查找5显示6全删0退出endl;cinchoice;switch(choice){case1:cout请输入读者编号:;cinreaderid;cout读入读者姓名:;cinrname;addreader(readerid,rname);break;case2:cout请输入读者编号:;cinreaderid;r=query(readerid);if(r==NULL){cout读者不存在endl;break;}cout请输入新读者姓名:;cinrname;r-setname(rname);break;case3:cout请输入读者编号:;cinreaderid;r=query(readerid);if(r==NULL){cout读者不存在endl;break;}r-delbook();break;case4:cout请输入读者编号:;cinreaderid;r=query(readerid);if(r==NULL){cout该读者编号不存在endl;break;}case5:disp();break;case6:clear();break;}}}classBook//图书类{inttag;//删除标记1:已删;0:未删intno;//图书编号charname[20];//书名intonshelf;//是否在架1在架0已借public:Book(){}char*getname(){returnname;}//获取读者姓名intgetno(){returnno;}//获取图书编号intgettag(){returntag;}//获取删除标记voidsetname(charna[])//设置书名{strcpy(name,na);}voiddelbook(){tag=1;}//删除图书voidaddbook(intn,char*na)//增加图书{tag=0;no=n;strcpy(name,na);onshelf=1;}intborrowbook()//借书操作{if(onshelf==1){onshelf=0;return1;}return0;}voidretbook()//还书操作{onshelf=1;}voiddisp()//输出图书{coutsetw(6)nosetw(18)namesetw(10)(onshelf==1?在架:已借)endl;}};classBDatabase//图书库类{inttop;//图书记录指针Bookbook[Maxb];//图书记录public:BDatabas