图书信息管理系统设计 c语言

图书信息管理系统设计 c语言

第1个回答  2016-06-13
高级语言程序设计(2)课程设计 一程序设计说明书【设计题目】图书馆借阅管理【问题描述】图书馆,适合用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;i#include#include#includeconstintMaxr=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;i>choice;switch(choice){case1:cout>readerid;cout>rname;addreader(readerid,rname);break;case2:cout>readerid;r=query(readerid);if(r==NULL){cout>rname;r->setname(rname);break;case3:cout>readerid;r=query(readerid);if(r==NULL){coutdelbook();break;case4:cout>readerid;r=query(readerid);if(r==NULL){cout>choice;switch(choice){case1:cout>bookid;cout>bname;addbook(bookid,bname);break;case2:cout>bookid;b=query(bookid);if(b==NULL){cout>bname;b->setname(bname);cout>bookid;b=query(bookid);if(b==NULL){coutdelbook();break;case4:cout>bookid;b=query(bookid);if(b==NULL){coutdisp();break;case5:disp();break;case6:clear();break;}}} voidmain(){intchoice=1,bookid,readerid;RDatabaseReaderDB;Reader*r;BDatabaseBookDB;Book*b;while(choice!=0){cout>choice;switch(choice){case1:cout>readerid;cout>bookid;r=ReaderDB.query(readerid);if(r==NULL){coutborrowbook()==0){coutborrowbook(b->getno());break;cout>readerid;cout>bookid;r=ReaderDB.query(readerid);if(r==NULL){coutretbook();r->retbook(b->getno());break;cout<<"还书成功!"<
相似回答