版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成绩济南大学面向对象程序设计课程设计报告设计名称图书管理系统设计学院信息科学与工程学院专业计算机科学与技术班级计1113班学号学生姓名薛霞设计起止时间:2023年9月2日至2023年9月6日目的及意义本题目要完毕一个图书管理系统,可以让读者实现借书,还书以及图书馆管理员实现图书维护和读者维护的功能,由图书管理员录入图书的信息,涉及图书编号、图书名、作者(涉及多个作者的情况)、出版社、出版日期、定价、馆藏数、借阅数等信息,管理员管理读者的信息,读者信息涉及读者编号、读者姓名、所借图书等,读者可以实现借书、还书等操作。这个系统方便了图书管理员管理系统,图书管理员可以实现图书的查找、删除、添加、更改等功能,以及读者的管理,如:删除读者信息,添加读者信息和更改读者信息的功能。实现这个系统重要是用面向对象的语言C++写的,程序里用到了栈的知识,对于简朴的小程序采用内联函数,在文献中写入以及读出,用常对象指定图书和读者管理人数的最大值,用类数组放图书和读者的信息。在图书类和图书库里采用类的组合,对于日期的存放用到结构体,考虑到多个图书的作者的情况,用getline()输入作者名,以‘.’结束。系统也采用了继承与派生,图书库类继承了图书类,读者库类继承了读者类,都是公有继承。系统界面采用文本菜单方式,交互性好。系统设计(一)、图书维护增长图书信息:系统可以实现从键盘上录入新的图书的信息,第一次进入系统,图书库是空的,需要录入图书信息。更改图书信息:系统可以实现从键盘上录入想要更改的图书信息,先输入要修改的图书编号,然后进入修改系统,可以修改图书名字、作者(涉及多个作者的情况)、出版社、出版日期、定价、馆藏数等信息。查找图书信息:系统可以实现查找管理员想要找到的图书信息,只需要输入图书编号,就可以实现查找图书信息。显示图书信息:系统可以实现在屏幕上显示所有图书信息。涉及图书编号、图书名、作者(涉及多个作者的情况)、出版社、出版日期、定价、馆藏数等信息。所有删除图书信息:系统可以实现删除所有图书信息,清空图书库的功能。退出图书维护系统:结束图书维护管理。查询图书馆中图书的馆藏量和借出量。(二)、读者维护新增读者信息:系统可以实现从键盘上录入新的读者信息,第一次进入系统,读者库是空的,需要录入读者信息。更改读者信息:系统可以更改读者的信息,从键盘上输入想要更改的读者编号,就可以修改读者的信息。删除读者信息:系统可以实现删除读者信息,只需要从键盘上输入要删除的读者信息的编号,就可以删除读者信息。查找读者信息:系统可以实现查找读者信息,输入读者的编号,可以查找到读者的所有信息,涉及读者编号、读者姓名、所借图书等。显示读者信息:系统可以显示读者的所有信息。所有删除读者信息:系统可以实现删除所有读者信息,清空读者库的功能。退出读者维护系统:结束读者维护管理。(三)、借书输入要借书的读者编号以及要借的图书,就可以借书。图书库里的本书的馆藏数自动减1,借阅数加1。假如没有找到与之匹配的读者编号,那么系统输出“对不起,不存在该读者,不能借书”。假如没有找到与之匹配的图书编号,那么系统输出“对不起,不存在该图书,不能借书”。假如该图书该读者已经借出去了,那么系统输出“对不起,该图书已借出,不能借书”。假如找到与之相应的编号,则输出“借书成功”。(四)、还书输入要还书的读者信息以及要还的书的编号,就可以还书,还书的时候需要输入借书时间和还书时间,以拟定是否要逾期付款,超过1个月,逾期一天,罚款1角,不超过1个月就不罚款。假如输入的读者有误,那么系统输出“对不起,不存在该读者,不能还书”。假如输入的图书有误,那么系统输出“对不起,不存在该图书,不能还书”。系统功能模块设计开始系统界面如图所示:图书管理系统:可以实现借书,还书,图书维护,读者维护,以及退出系统等功能。图1图书管理系统界面图图书维护:重要实现增长图书信息,更改图书信息,查找图书信息,显示图书信息,所有删除图书信息,退出图书维护系统的功能。图2图书管理系统图书维护界面图读者维护:重要实现新增读者信息,更改读者信息,删除读者所借图书信息,查找读者信息,显示读者信息,所有删除读者信息和退出读者维护系统。类的分析与设计系统使用类来组织管理数据,共涉及读者类Student、读者库类Borrow、图书类Book、图书库类Library用来描述图书管里各图书和读者的属性以及操作,读者类Student用来描述读者的基本信息,图书类Book用来描述图书的基本信息,读者库类Borrow用实现读者的增添、删除、查询、更改信息、显示读者基本信息的操作,读者类Library用来描述读者的基本信息,图书类Book用来描述图书的基本信息,读者库类Borrow用实现读者的增添、删除、查询、更改信息、显示读者的基本信息的操作。这几个类综合实现借书、还书。图书类图书类读者类图书库类读者库类图书库类读者库类借书、还书等操作图5图书管理系统类关系的UML图系统具体设计读者类Student.类属性涉及读者编号(number)、读者姓名(name)、所借图书编号(number)、读者所在单位(work)、读者借阅日期Bor1[],Bor2[]、Bor3[]三个日期分别表达年月日,实现对读者类的描述。成员函数涉及读者无参构造函数(Student),提取读者姓名的函数(getname),提取读者编号的函数(getnumber),重置姓名的函数(setname),重置单位的函数(setwork),增长读者信息的函数(addstudent),借书操作的函数(borrowbook),还书操作的函数(retbook),读出读者信息的函数(output)等。读者库类Borrow.类属性涉及读者记录指针(top),读者类的数组rea[]。成员函数涉及读者库类成员函数(Borrow),清除读者信息的函数(clear),增长读者信息(addStudent),查找是否和编号相匹配的函数(equal),输出读者信息的函数(output),读者库的维护函数,析构函数(~Borrow)。图书类Book.类属性涉及图书的编号(number),图书的名字(name),图书的作者(bookname),出版社(press),出版日期(date),定价(price),馆藏是否在架(onshelf)。成员函数涉及图书无参构造函数(Book),提取图书名字(getname),提取图书编号(getnumber),修改图书名字(setname),修改作者名(setzbookname),修改出版社(setpress),修改出版日期(setdate),修改定价(setprice),删除图书(delbook),借书操作(borrowbook),还书操作(retbook),输出图书信息(output)。图书库类Library.类属性涉及图书数组(book)。成员函数涉及构造函数(Library),清空所有信息(clear),增长图书信息(addbook),查找是否匹配(equal),输出信息(output),析构函数(~Library)。创建读者对象和图书对象创建读者对象和图书对象开始显示图书管理系统操作菜单根据输入执行不同操作完毕借书还书图书维护读者维护退出系统图6图书管理系统流程图开始开始图书维护系统菜单增长图书信息修改图书信息查找图书信息显示图书信息所有删除图书信息退出系统图7图书维护系统图开始开始读者维护系统菜单增长读者信息修改读者信息删除读者信息查找读者信息显示读者信息退出系统所有删除读者信息图8读者维护系统图系统调试分析、存在问题与局限性系统的健壮性不大好,还是存在假如输入错误;会导致死循环。系统对读者和图书的内容的修改功能不够完善;借书和还书的时候需要认为的输入借书和还书日期;计算借书时间的时候,不能考虑平年和闰年,不能考虑到不同月份有不同的天数,计算不能做到精确。总结与体会虽然课程设计中用到的知识点我们都学了,平时上机练习的时候感觉用的很纯熟,但是真的到了综合应用、设计东西的时候,有种摸不到头脑的感觉,很多东西综合运用起来,出现了许多无法调试的错误;并且,设计出来的东西特别麻烦复杂,程序的健壮性若。我们班那些实力很强的人,设计出来的程序,简朴有序,清楚明了,灵活性、扩展性强。从这次课程中我体会到,程序设计只是学会是远远不够的,他需要我们不断练习、实践。这样我们才会更加纯熟灵活的运用所学的知识,设计出更急简朴,健壮的程序。使我们思考问题的思绪更加灵活,扩宽我们的思维方式,提高我们思考问题解决问题的能力。解决问题我们要保持头脑清醒,冷静。一点一点的解决。附录源代码:#include<iostream>#include<iomanip>#include<string>#include<fstream>usingnamespacestd;constintReader=100;//最大读者限量constintMaxb=100;//图书馆的最大馆藏量constintBor=2;//借书的最大限量classStudent{private:inttag;intnumber;//读者编号charname[10];//读者姓名charwork[20];//工作单位intborbook[Bor];//读者编号数组 intbor1[Bor];//年 intbor2[Bor];//月 intbor3[Bor];//日public:Student(){}char*getname()//得到姓名{returnname;}intgettag(){returntag;}intgetnumber()//读者编号{returnnumber;}intgetyear(inti)//得届时间{ returnbor1[i];}intgetmonth(inti){ returnbor2[i];}intgetday(inti){ returnbor3[i];}voiddelbook()//着个删除{tag=1;}voidaddStudent1(intn,char*na,char*wo)//增长读者{tag=0;number=n;strcpy(name,na);strcpy(work,wo);for(inti=0;i<Bor;i++)borbook[i]=0;}voidaddStudent(intn,char*na)//增长读者{tag=0;number=n;strcpy(name,na);for(inti=0;i<Bor;i++)borbook[i]=0;}voidsetname(char*na){strcpy(name,na);}voidsetwork(char*wo){ strcpy(work,wo);}voidborrowbook(intbookid)//借书操作{for(inti=0;i<Bor;i++){if(borbook[i]==0){borbook[i]=bookid;cout<<"借书时间:"<<endl;cin>>bor1[i]>>bor2[i]>>bor3[i];return;}}}intbooksum()//书是否借满{intj=0;for(inti=0;i<Bor;i++){if(borbook[i]!=0)j++;}returnj;}intretbook(intbookid)//还书操作{for(inti=0;i<Bor;i++){if(borbook[i]==bookid){borbook[i]=0;{ inta,b,c; floatj; cout<<"还书时间"<<"年,月,日"<<endl; cin>>a>>b>>c; j=-((getyear(i)*365+getmonth(i)*30+getday(i))-(a*365+b*30+c))*0.1; cout<<"罚款:"<<j<<"元"<<endl;}return1;}}return0;}voidoutput()//读出读者信息{ if(gettag()==1) return;cout<<"证件:"<<setw(5)<<number<<"姓名:"<<setw(10)<<name<<"单位"<<setw(7)<<work<<"借书编号["; for(inti=0;i<Bor;i++)if(borbook[i]!=0) cout<<borbook[i]<<":"<<bor1[i]<<"-"<<bor2[i]<<"-"<<bor3[i]<<endl<<setw(50); cout<<"]"<<endl;}};classBorrow{private:inttop;//读者记录指针Studentread[Reader];public:Borrow()//构造函数,将Student.txt读到read[]中{Students;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;}intaddStudent(intn,char*na,char*wo)//查找是否存在{Student*p=equal(n);if(p==NULL){top++;read[top].addStudent1(n,na,wo);return1;}return0;}Student*equal(intStudentid)//按编号查找{for(inti=0;i<=top;i++)if(read[i].getnumber()==Studentid&&read[i].gettag()==0){return&read[i];}returnNULL;}voidoutput(){for(inti=0;i<=top;i++)read[i].output();}voidStudentdata();//读者库维护~Borrow()//析构函数,将read[]写到Student.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();}};classBook{private: inttagg;inttag;charprice[20];//价格intnumber;//charpress[20];//出版社 chardate[30];//出版日期 charwriter[100];//作者charname[20];//书的名字intonshelf;public:Book(){} intgeton() { returnonshelf; }intgettagg(){ returntagg;}char*getname(){returnname;}intgetnumber(){returnnumber;}intgettag(){returntag;} voidsetprice(charpi[]) { strcpy(price,pi); }voidsetwriter(charrwriter[]){ strcpy(writer,rwriter);}voidsetpress(charrpress[]){ strcpy(press,rpress);}voidsetdate(charrdate[]){ strcpy(date,rdate);}voidsetname(charna[]){strcpy(name,na);}voiddelbook(){ onshelf=0;tag=1; tagg=0;}voidaddbook(intn,char*na,char*wr,char*da,char*pr,char*pi){tag=0;tagg=1;number=n;setname(na); setwriter(wr); setdate(da); setpress(pr); setprice(pi);onshelf=1;}intborrowbook()//借书操作{if(onshelf==1){onshelf=0;return1;}return0;}voidretbook()//还书操作{onshelf=1;}voidoutput()//输出图书{cout<<"编号"<<setw(5)<<number<<"姓名:"<<setw(6)<<name<<"作者:"<<setw(5)<<writer<<"出版社"<<setw(12)<<"出版日期:"<<setw(9)<<date <<"价格:"<<price<<(onshelf==1?"在架":"已借")<<endl;}};classLibrary{private:inttop;Bookbook[Maxb];//图书记录public:Library()//构造函数,将book.txt读到book[]中{Bookb;top=-1;fstreamfile("book.txt",ios::in);while(1){file.read((char*)&b,sizeof(b));if(!file)break;top++;book[top]=b;}file.close();}voidclear(){top=-1;}intcha(){ return(equal1()-equal2());}intaddbook(intn,char*na,char*wr,char*da,char*pr,char*pi){Book*p=equal(n);if(NULL==p){top++;book[top].addbook(n,na,wr,da,pr,pi);return1;}return0;}Book*equal(intbookid){for(inti=0;i<=top;i++)if(book[i].getnumber()==bookid&&book[i].gettag()==0){return&book[i];}returnNULL;}intequal1(){ intj=0;for(inti=0;i<=top;i++)if(book[i].gettagg()==1)j++;returnj;}intequal2(){ intj=0;for(inti=0;i<=top;i++)if(book[i].geton()==1)j++;returnj;}voidbookdata();voidoutput(){for(inti=0;i<=top;i++)if(book[i].gettag()==0)book[i].output();}~Library()//析构函数,将book[]写到book.txt文献中{fstreamfile("book.txt",ios::out);for(inti=0;i<=top;i++)if(book[i].gettag()==0)file.write((char*)&book[i],sizeof(book[i]));file.close();}};voidLibrary::bookdata(){charchoice;charbname[40];charbwriter[100];charbpress[20];charbdate[30];charbprice[20];intbookid;Book*b;while(choice!='0'){cout<<"------------------------------\n";cout<<"------------------------------\n";cout<<"图书维护\n";cout<<"\n";cout<<"1.新增图书\n";cout<<"\n";cout<<"2.更改图书\n";cout<<"\n";cout<<"3.删除图书\n";cout<<"\n";cout<<"4.查找图书\n";cout<<"\n";cout<<"5.显示所有图书信息\n";cout<<"\n";cout<<"6.删除所有图书\n";cout<<"\n";cout<<"7.显示图书数量信息\n";cout<<"\n";cout<<"0.返回上一层\n";cout<<"------------------------------\n";cout<<"------------------------------\n";cin>>choice;switch(choice){case'1':cout<<"输入图书编号:"<<endl;cin>>bookid;if(equal(bookid)) { cout<<"该编号已存在"<<endl; break; }cout<<"输入图书书名:"<<endl;cin>>bname; cout<<"作者"<<endl; cin>>bwriter; cout<<"出版社"<<endl; cin>>bpress; cout<<"出版日期:XXXX-xx-xx"<<endl; cin>>bdate; cout<<"价格"<<endl; cin>>bprice;addbook(bookid,bname,bwriter,bdate,bpress,bprice);break;case'2':cout<<"输入图书编号:"<<endl;cin>>bookid;b=equal(bookid);if(b==NULL){cout<<"该图书不存在"<<endl;break;}cout<<"输入新的书名:"<<endl;cin>>bname;b->setname(bname);break;case'3':cout<<"读入图书编号:"<<endl;cin>>bookid;b=equal(bookid);if(b==NULL){cout<<"该图书不存在"<<endl;break;}if(! b->geton()){ cout<<"该书尚未还,不能删除"<<endl; break;}b->delbook();break;case'4':cout<<"读入图书编号:"<<endl;cin>>bookid;b=equal(bookid);if(b==NULL){cout<<"该图书不存在"<<endl;break;}b->output();break;case'5':output();break;case'6': if(equal1()-equal2()) { cout<<"存在书尚未还,不能执行此操作!"<<endl; break; }clear();break;case'7':cout<<"共有书:"<<equal1()<<"借阅数是:"<<equal1()-equal2()<<endl;break;default:cout<<"退出\n";system("cls");break;}}}voidBorrow::Studentdata(){charchoice,i;charrname[20];charrwork[20];intStudentid;Student*r;Libraryq;while(choice!='0'){cout<<"------------------------------\n";cout<<"------------------------------\n";cout<<"读者维护\n";cout<<"\n";cout<<"1.新增读者\n";cout<<"\n";cout<<"2.更改读者信息\n";cout<<"\n";cout<<"3.删除读者信息\n";cout<<"\n";cout<<"4.查找读者信息\n";cout<<"\n";cout<<"5.显示读者信息\n";cout<<"\n";cout<<"6.删除所有读者\n";cout<<"\n";cout<<"0.返回上层\n";cout<<"------------------------------\n";cout<<"------------------------------\n";cin>>choice;switch(choice){case'1':cout<<"输入读者编号:";cin>>Studentid; if(equal(Studentid)) {cout<<"该读者编号已存在!"<<endl; break; }cout<<"输入读者姓名:";cin>>rname; cout<<"输入读者单位:";cin>>rwork;addStudent(Studentid,rname,rwork);break;case'2':cout<<"输入读者编号:";cin>>Studentid;r=equal(Studentid);if(r==NULL){cout<<"该读者不存在"<<endl;break;} cout<<"1、修改姓名;2、修改单位"<<endl;cin>>i; switch(i) {case'1':{cout<<"输入新的姓名:";cin>>rname;r->setname(rname);break;} case'2':{cout<<"输入新的单位:";cin>>rwork;r->setwork(rwork);break;} default:cout<<"退出:\n";system("cls");break; }case'3':cout<<"输入读者编号:";cin>>Studentid;r=equal(Studentid);if(r==NULL){cout<<"该读者不存在"<<endl;break;} if(r->booksum()) { cout<<"不能删除该借书者信息,此人尚有图书尚未归还!"<<endl; break; }r->delbook();break;case'4':cout<<"读入读者编号:";cin>>Studentid;r=equal(Studentid);if(r==NULL){cout<<"该读者不存在"<<endl;break;}r->output();break;case'5':output();break;case'6': cout<<q.cha(); if(q.cha()) { cout<<"尚有未还图书的借书者,不能执行此操作!"<<endl; break; }clear();break;default:cout<<"退出:\n";system("cls");break;}}}voidmain(){charchoice;intbookid,Studentid;BorrowStudentDB;Student*r;LibraryBookDB;Book*b;while(choice!='0'){cout<<"------------------------------\n";cout<<"------------------------------\n";cout<<"图书管理系统\n";cout<<"\n";cout<<"1.借书\n";cout<<"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年实战手册吊带安全培训内容记录
- 机械社团工作总结报告2026年答题模板
- 2026年答题模板公司春运安全培训内容
- 2026年家政培训师授权合同
- 2026年老人孩子安全培训内容系统方法
- 合肥市长丰县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 2026年租房合同简介协议书避坑指南
- 2026年货运代理服务合同条款
- 运城市垣曲县2025-2026学年第二学期五年级语文第五单元测试卷(部编版含答案)
- 四平市铁东区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 蔬果采购员管理制度
- 2026年广州市高三语文一模作文题目解析及范文:那些被遗忘的后半句
- 广东省广州市黄埔区第八十六中学2024-2025学年八年级下学期4月期中物理试题(含答案)
- 2026年及未来5年市场数据辽宁省环保行业市场行情动态分析及发展前景趋势预测报告
- 2026年广东食品药品职业学院单招职业技能测试题库附参考答案详解(a卷)
- 企业价值成长中耐心资本的驱动作用研究
- 兰铁局防护员考核制度
- 2026届安徽省江南十校高三上学期10月联考数学试题(解析版)
- 2025年河南工业职业技术学院单招职业适应性考试题库带答案解析
- DZ/T 0275.4-2015岩矿鉴定技术规范第4部分:岩石薄片鉴定
- 贵州省六盘水市英武水库工程环评报告
评论
0/150
提交评论