c语言程序设计课程设计 图书管理系统 求原代码
答案:1 悬赏:60 手机版
解决时间 2021-10-14 07:32
- 提问者网友:不爱我么
- 2021-10-13 13:23
c语言程序设计课程设计 图书管理系统 求原代码
最佳答案
- 五星知识达人网友:低音帝王
- 2021-10-13 14:48
高级语言程序设计(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类,有读者的基本管理功能,具有以下私有数据:int tag;//删除标记 1:已删;0:未删int no;//读者编号char name[10];//读者姓名int borbook[Maxbor];//所借图书2.读者库类Rdatabase, 具有以下私有数据:int top;//读者记录指针Reader read[Maxr];//读者记录3.图书库类Book,有一本图书的基本功能,有以下私有数据:int tag;//删除标记 1:已删;0:未删int no;//图书编号char name[20];//书名int onshelf;//是否在架 1在架 0已借4.图书库类BDatabase,有以下私有数据:int top;//图书记录指针Book book[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(int i=0;i<Maxbor;i++)误写为for(int i=1;i<Maxbor;i++),使循环发生错误。2.指针使用错误,指针b和r混淆,导致编译错误得到“error C2660: 'retbook' : function does not take 1 parameters”错误报告。三 程序测试结果【收获及体会】除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计这段时间,时刻都感觉自己有好多不懂,要学的太多了!经过这次课程设计,让我对C++这门语言有了更深的认识,操作能力有了提高。要想得到敲的代码运行出来后的满足感,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才达到所要的运行结果。学习编程,需要多揣摩,实践,实践,再实践,编程技能才能更上一层楼,此外还得多向高手请教!【源程序代码】//图书馆借阅管理//班级://学号://姓名://********************#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;//读者编号char name[10];//读者姓名int borbook[Maxbor];//所借图书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 i=0;i<Maxbor;i++)borbook[i]=0;}void borrowbook(int bookid)//借书操作{for(int i=0;i<Maxbor;i++){if(borbook[i]==0){borbook[i]=bookid;}}}int retbook(int bookid)//还书操作{for(int i=0;i<Maxbor;i++){if (borbook[i]==bookid){borbook[i]=0;return 1;}}return 0;}void disp()//输出读者信息{cout<<setw(5)<<no<<setw(10)<<name<<"借书编号:";for(int i=0;i,Maxbor;i++)if(borbook[i]!=0)cout<<borbook[i]<<endl;}}; class RDatabase//读者库类{int top;//读者记录指针Reader read[Maxr];//读者记录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++;read[top]=s;}file.close();}void clear()//删除所有读者信息{top=-1;}int addreader(int n,char *na)//添加读者,检查是否已存在{Reader *p=query(n);if(p==NULL){top++;read[top].addreader(n,na);return 1;}return 0;}Reader*query(int readerid)//按编号查找{for(int i=0;i<=top;i++)if(read[i].getno()==readerid&&read[i].gettag==0)return &read[i];return NULL;}void disp()//删除读者所有信息{for(int i=0;i<=top;i++)read[i].disp();}void readerdata();//读者库维护~RDatabase()//析构函数,将read[]写入reader.txt文件中{fstream file("reader.txt",ios::out);for(int i=0;i<=top;i++)if(read[i].gettag()==0)file.write((char*)&read[i],sizeof(read[i]));file.close();}};void RDatabase::readerdata(){int choice=1;char rname[20];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(readerid,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(readerid);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:未删int no;//图书编号char name[20];//书名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 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 BDatabase//图书库类{int top;//图书记录指针Book book[Maxb];//图书记录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++;book[top]=b;}file.close();}void clear()//全删{top=-1;}int addbook(int n,char*na)//增加图书{Book*p=query(n);if(p==NULL){top++;book[top].addbook(n,na);return 1;}cout<<"新增成功!"<<endl;}Book*query(int bookid)//查找图书{for(int i=0;i<=top;i++)if(book[i].getno()==bookid&&book[i].gettag()==0)return NULL;}void bookdata();//图书库维护void disp(){for(int i=0;i<=top;i++)if(book[i].gettag()==0)book[i].disp();}~BDatabase()//析构函数,将book[]写入book.txt文件中{fstream file("book.txt",ios::out);for (int i=0;i<=top;i++)if(book[i].gettag()==0)file.write((char*)&book[i],sizeof(book[i]));file.close();}};void BDatabase::bookdata(){int choice;char bname[40];int bookid;Book *b;while(choice!=0){cout<<"图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出"<<endl;cin>>choice;switch(choice){case 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>>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(bookid);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还书 "<<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());break;cout<<"借书成功!"<<endl;case 2:cout<<"还书,请输入读者编号:";cin>>readerid;cout<<"请输入图书编号;";cin>>bookid;r=ReaderDB.query(readerid);if(r==NULL){cout<<"不存在该读者!"<<endl;break;}b->retbook();r->retbook(b->getno());break;cout<<"还书成功!"<<endl;case 3:BookDB.bookdata();break;case 4:ReaderDB.readerdata();break;}}}【输出结果】1借书2还书3图书管理4读者服务0退出3图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出1输入图书编号:1111输入图书书名:武林外传新增成功!图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出1输入图书编号:2222输入图书书名:今夜无眠新增成功!图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出01借书2还书3图书管理4读者服务0退出4读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出1请输入读者编号:001读入读者姓名:周强读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出01借书2还书3图书管理4读者服务0退出1借书,请输入读者编号:001图书编号:1111哈哈,借书成功! 1借书2还书3图书管理4读者服务0退出2还书,请输入读者编号:001请输入图书编号;1111还书成功!1借书2还书3图书管理4读者服务0退出3图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出2输入图书编号:2222输入新书名:金庸全集更名成功!Press any key to continue
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯