1、面向对象程序设计图书管理系统设计面向对象程序设计专题实验报告题 目: 图书管理系统设计 班 级: 姓 名: 学 号: 摘要二十一世纪是信息的社会,信息作为社会最主要的资源,将成为战略资源引起人们广泛的关注。如何获取信息?图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来。迫使人们起用新的管理方法来管理图书,如何把图书管理员从繁重的工作中解脱出来呢?科学技术日新月异的进步,让人类生活发生了巨大的变化,计算机技术的飞速发展,使各行各业在计算机技术应用方面得到了广泛的普及和使用。信息化时代的到来成为不可抗拒的潮流,人类文明正在进入一个崭新的时代。因此
2、,图书管理系统也以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传统的图书管理方式彻底的解脱出来,提高效率,减轻工人人员以往繁忙的工作,减小出错的概率,使读者能够花更多的时间在选择书和看书上。从而使人们有更多时间来获取信息、了解信息、掌握信息。关键词: C+;图书管理系统 Visual C+ 6.0 Abstract 21centuriesisresourcesthatinformationthatsociety,socialmostinconductandactionsininformation,willbecomethestrategyresourcescausetheextensiv
3、econcerninpeople.Howtoobtaintheinformation?Booksisworkthatthewaythatweobtaintheinformationbest,butcollectandkeeptohavegreatcapacitythe bigincrementbecauseofthelibrarybooks,maketraditionalbooksmanagingpersonincreasinglyheavytogetup.Forcingpeoplerisestomanagethebookswiththenewmanagementmethod,showingt
4、osetfreeoutthebooksthemanagingpersonfromtheheavywork?Theadvanceofthesciencetechniquecontinuouschangesandimprovements,letmankindthelifetookplacetheenormousvariety,thecalculatorfliestechnicallytodevelopsoon,makingtheeverytradegettheextensiveuniversalitywithuseintheaspectsofcalculatortechniqueapplying.
5、Theinformationturnstheagescomesthecurrentthatbecomecantresist,humancivilizationenterabrand-newages.Therefore,booksmanagementsystemtoowiththeconvenience,fast,lowadvantageinexpensesisenteringpeoplelifeslowly,managethetraditionalbookstowaytosetfreeoutthoroughly,lifthigh-efficiency,alleviateworkersperso
6、nnelformerbusywork,letuptocomeamissallrate,canmakethereaderspendmoretimeatchoosethebookwithreadtheinthebook.Frombutmakethatpeoplehavemoretimetoobtaintheinformation,understandtheinformationandcontroltheinformation.Keywords:C+;Booksmanagementsystem;Visual C+6.0目录第1章 概述11.1 题目及要求11.2背景和意义11.3问题的解决方案2第2
7、章 系统分析22.1系统的整体需求22.2 系统的功能需求22.3系统功能总体设计33.1 系统的整体设计33.2 系统的主要模块设计4第4章 系统实现6第5章 结束语11参考文献12附录13第1章 概述1.1 题目及要求1)问题描述定义图书类,属性有:书名、出版社、ISBN号、作者、库存量、价格等信息和相关的对属性做操作的行为。主要完成对图书的销售、统计和图书的简单管理。2)功能要求(1)销售功能。购买书籍时,输入相应的ISBN号,并在书库中查找该书的相关信息。如果有库存量,输入购买的册数,进行相应计算。如果库存量不够,给出提示信息,结束购买。(2)图书简单管理功能。添加功能:主要完成图书信
8、息的添加,要求ISBN号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加。查询功能:可按书名、ISBN号、作者、出版社进行查询。若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该标题不存在!”。修改功能:可根据查询结果对相应的记录进行修改,修改时注意ISBN号的唯一性。删除功能:主要完成图书信息的删除。输入要删除的ISBN号,根据编号删除该物品的记录,如果该编号不在物品库中,则提示“该编号不存在”。(3)统计功能。输出当前书库中所有图书的总数及详细信息;可按书的价格、库存量、作者、出版社进行统计,输出统计信息时,要按从大到小进行排序。图书存盘:将当前程序中的图书信息存入文件中
9、。读出信息:从文件中将图书信息读入程序。1.2背景和意义背景:图书馆是我们日常生活中必不可少的学习、阅读的场所,借阅图书则是我们进入图书馆进行阅读的首要行为。为了能够借阅到我们想要借阅的图书,我们需要借助电脑查询需要借阅的图书的具体信息,然后找出图书后再去借阅处刷卡登记。如今我们处于一个知识大爆炸的时代,图书种类数量剧增,工作人员每天不但要登记借阅者借阅的图书,还要登记新购进的图书,工作量繁重。而随着科学技术的进步,计算机日益进入我们的生活工作之中,我们能否利用计算机技术,取代原来的手工登记,提高图书管理的效率呢?答案是肯定的。意义:借助计算机C+中的知识,编写相应的图书管理程序就能够实现这一
10、功能。利用图书管理系统对图书记录进行统一管理,包括新增图书记录,更改图书记录,删除图书记录等功能,实现图书管理工作的系统化,规范化和自动化,为图书管理提供便利。,不但能节省我们大量的工作时间,减轻巨大的工作量,提高工作效率,还能够减少工作失误。有助于加深对面向对象程序设计中基础理论和基本知识的理解,培养了实践能力,促进理论与实践的结合。1.3问题的解决方案根据系统功能要求,能够将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述; (5)完
11、成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试;(8)完成系统总结报告。第2章 系统分析2.1系统的整体需求该系统需要完成的内容:用类和对象实现新书上架、 图书浏览、 图书查询、图书下架。该系统需要完成的整体目标:系统能够正常运行,基本上实现添加、删除图书信息,显示所有信息,能够由相应条件查阅图书信息这四种功能。2.2 系统的功能需求必须完成的模块:(1)界面模块:当进入该管理系统时候,提示相应的说明,引导如何操作(2) 新书上架模块:能够添加书号、书名、作者名、出版社、出版时间、价格这些图书信息。(3) 图书浏览模块:能够输出所有图书信息。(4) 图书查询模块:可按条
12、件查询图书信息,当输入书号或书名或作者名时候,相对应的图书信息便可自动搜索出来。(5) 图书下架模块:可按书号删除指定图书信息。2.3系统功能总体设计 图书管理系统主界面系统退出图书删除图书查询图书浏览图书修改信息录入按ISBN按出版社按作者按书名价格出版时间作者出版社书名ISBN 图1 系统功能总框图 第3章 系统设计开始输入a3.1 系统的整体设计NY a=1NY创立新书信息 a=2YN a=3NY显示所有图书修改图书信息 a=4NY a=5按条件查询 a=6按书号删除图书结束 图2 系统整体流程图3.2 系统的主要模块设计(1) 主界面模块。该模块显示管理程序的名称,提示相应的操作。(2
13、) 信息录入模块。在主界面情况下,选择1,即进入图书信息录入模块,录完后信息保存到txt文件中。开始输入a a=1创立新书信息录入ISBN、书名、书号、作者、出版社、出版时间、价格保存到txt文件中 图3 信息录入模块流程图 (3)信息修改模块。开始程序开始,进入主界面,输入2,输入要修改图书的ISBN,对图书的信息进行修改。输入a a=2输入要修改图书的ISBN录入新的图书信息修改完成 图4 信息修改模块流程图(4) 图书浏览模块程序开始,进入主界面,输入3,就能够对所有的图书信息进行浏览,查看。开始输入a a=3 读取txt文件信息 显示图书信息 图5 图书浏览模块流程图 (5)图书查询模
14、块开始 程序开始,进入主界面,输入4,进入查询模块,可分别按ISBN、书名、作者、出版社等选项查询图书信息输入a a=4 进入图书查询界面输入b b=1YNNY按ISBN查询 b=2NY b=3按书名查询N b=4Y按作者查询输入错误按出版社查询显示图书信息 图6 图书查询模块流程图(6)图书下架模块 开始进入主界面,选择5,就能够按ISBN好删除图书。开始输入a a=5 选择要删除图书的ISBN删除完成 图7 图书下架模块流程图第4章 系统实现1登入界面实现方式:调用主函数,利用Book.read ()读入数据,同时定义功能选项按钮char function=0;,对function的真假进
15、行判断,若function为真,即与初值相同,实现while循环内语句。界面主要程序语句:coutendl;coutt*n;couttttt欢迎使用图书管理系统endl;coutttttt请选择操作nendl;couttttt1 创立新书信息endl; couttttt2 修改图书信息endl;couttttt3 显示所有图书endl;couttttt4 按指定条件查询书目endl;couttttt5 按书号删除书目endl; couttttt6 退出系统并保存修改endl; coutttt(查询可按书号/ 作者/ 书名查询)endl; coutt*n;调试运行代码后结果如下: 图82、创立图
16、书信息当选择按钮1,执行main函数中function=1的条件语句,首先定义字符串string a,b,c,d,e,f; 然后调用#include,根据提示输入相应的书本信心,建立对象book newbook(a,b,c,d,e,f);,利用添加函数Book.add(newbook)把数据添加到新建对象里,然后调用display()函数显示此次输入的信息。 输入数字1后按提示输入相应信息,结果如下: 图93、 显示所有图书信息当选择按钮3,执行function=3的条件语句。Main函数调用#include,利用如下语句: cout这是所有藏书:endl; cout*endl;输出相应的提示
17、信息和图案,然后调用函数display_all (),显示出所有信息。 图10 4、 按条件查询 当选择按钮4,执行function=4的条件语句。main函数调用#include,输出相应选择的提示,执行如下代码: cout请选择查询方式endl; cout1 按ISBN查询endl; cout2 按书名查询endl; cout3 按作者查询endl; cout3 按出版社查询endl;然后定义字符j和字符串search,此时j是作为按钮使用,search是为了输入你要查询的内容。子按钮功能的实现再次调用#include文件,当输入好相应的信息,执行如下语句: cout以下是查询结果endl
18、; cout-endl;给出提示后执行搜索函数search_by_isbn(),同理利用search_by_name()、search_by_writer()实现书名查找,按作者查找的功能。(1)按书号查询查询书号为0001的图书步骤一:在主界面选择4。步骤二:回车后点击“1”,然后输入0001,回车。 图11(2)按书名查询查询书名为“高等数学”这本书步骤一:在主界面选择4。步骤二:回车后点击“2”,然后输入“高等数学”,回车 图12(3)按作者名查询步骤一:在主界面选择4。步骤二:回车后点击“3”,然后输入“天路公考”,回车 图135、 按书号删除图书信息 当选择按钮5,执行functio
19、n=5的条件语句。首先定义字符串a,然后main函数调用#include,输入相应的书号,接下来建立对象del(a, , , , , ),调用删除函数delete_by_isbn(),实现删除功能。例如删除0003号图书步骤一:在登陆界面输入“5”,回车;步骤二:按提示输入要删除的书号“0003”,回车。 图146、 退出图书管理系统 当选择按钮6,执行function=6的条件语句。此时执行空操作,跳出while循环,执行main函数后续语句,利用system(CLS);清屏后由写函数Book.write ();把操作后的数据读入到文件中,最后调用头文件#include输出相应的提示信息后退
20、出系统。 在登录界面输入“5”,回车。 图15第5章 结束语这次课程设计历时三个星期,经过课程设计,我发现了自己的很多不足,知识上还存在很多漏洞,我看到了自己的实践经验还比较缺乏,理论联系实际的能力还急需提高。当自己做的时候才知道好多地方不懂,然后又找来C+的书仔细看相关知识。再做再改,虽然现在还有好多缺陷,但好歹也算是完成了。 为完成这次课程设计我确实付出很多,有苦有乐,这十几天的工作日子,怎么形容呢,每次做不出来就会心情不好,感觉自己什么都没有做成,慢慢的摸索着,开始入门,而且有了一点成就感,就这样每一次都比前一次收获多,心情也慢慢好了,而且我的系统也一天比一天的完善。毕竟没有白费心血,以
21、艰辛的付出最终还是获得不少回报! 总之,计算机是一门实践性很强的学科,要想学好,就必须多练习,多总结,只有这样,才能够更加深入地了解,才能够学会如何去运用它。参考文献1郑莉,董渊,何江舟.C+程序设计M.清华大学出版社, .2谭浩强.C程序设计M.清华大学出版社. 3李强,贾云霞.Visual C+项目开发实践.北京:中国铁道出版社, .4李书贤.C+Primer中文版M.人民邮电出版社附录源代码:#include#include /cstdio是将stdio.h的内容用C+头文件的形式表示出来。 #include /stdlib 头文件即standard library标准库头文件using
22、 namespace std;#include class book private:string isbn; /书号 string name; /书名string writer; /作者string publisher; /出版社string time; /出版时间string price; /图书价格public:book()book(string a,string b,string c,string d,string e,string f) isbn=a;name= b;writer=c;publisher=d;time=e; price=f; string get_name()retu
23、rn name; string get_isbn()return isbn; string get_writer()return writer; string get_publisher()return publisher;void display() /图书内容的显示 cout-endl; coutISBN号:isbnendl书名:nameendl作者:writerendl出版社:publisherendl出版时间:timeendl价格:price元endl;cout-endl; class database:public book /公有继承(public)的定义class B:publi
24、c A ;private:book shumu100;int sum;public: database()sum=0; void add(book a) if(sum=100) cout添加失败,内存已满!endl; else shumusum=a; sum+; cout添加新书目成功,以下是本书信息endl; void rebookinfo(book a) int flag=0; if(sum=0)cout修改失败,已经没有存档了!endl; else for(int i=0;isum;i+) if(shumui.get_isbn()=a.get_isbn() cout修改书目成功,以下是修
25、改的书信息endl;/shumui.display ();break; if(!flag) cout该书籍不存在!=100) cout添加失败,内存已满!endl; else shumusum=a; sum+; cout添加新书目成功,以下是本书信息=100) cout添加失败,内存已满!endl; else shumusum=a; sum+; cout添加新书目成功,以下是本书信息endl; void delete_by_isbn(book a) /按编号删除 int flag=0; if(sum=0) cout删除失败,已经没有存档了!endl; else for(int i=0;isum
26、;i+) if(shumui.get_isbn()=a.get_isbn() cout删除书目成功,以下是删除的书信息endl; shumui.display (); for(int j=i;jsum-1;j+) shumuj=shumuj+1; flag=1; sum-; break; if(!flag) cout该书籍不存在!endl; void search_by_name(string names) /按书名查找 int flag=0; for(int i=0;isum;i+) if(shumui.get_name()=names) shumui.display (); flag=1;
27、 if(flag=0) cout该书籍不存在!endl; void search_by_isbn(string names) /按书号查找 int flag=0; for(int i=0;isum;i+) if(shumui.get_isbn()=names) shumui.display (); flag=1; if(flag=0) cout该编号不存在!endl; void search_by_writer(string names) /按作者查找 int flag=0; for(int i=0;isum;i+) if(shumui.get_writer()=names) shumui.d
28、isplay (); flag=1; if(flag=0) cout该作者不存在!endl; void search_by_publisher(string names) /按出版社查找 int flag=0; for(int i=0;isum;i+) if(shumui.get_writer()=names) shumui.display (); flag=1; if(flag=0) cout该出版社不存在!endl; void display_all() /显示全部信息 for(int i=0;isum;i+) shumui.display (); void read() FILE *fp
29、; if(fp=fopen(book.txt,rb+)=NULL)/注意路径; rb+读写打开一个二进制文件,只允许读写数据。 cout文件打开失败n; system(PAUSE); exit(0); fread(&sum,2,1,fp); /从一个文件中读数据&sum:用于接收数据的地址(指针);4:单个元素的大小,单位是字节;1:.元素个数,每次读取个元素;fp:提供数据的文件指针for(int i=0;isum;i+) fread(&shumui,sizeof(shumui),1,fp);fclose(fp); void write() FILE *fp2; if(fp2=fopen(b
30、ook.txt,wb+)=NULL)/注意路径;wb+只写打开或新建一个二进制文件;只允许写数据。 cout文件打开失败n; system(PAUSE); exit(0);/exit(0)表示正常退出 fwrite(&sum,2,1,fp2); for(int i=0;isum;i+)fwrite(&shumui,sizeof(shumui),1,fp2);/sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 fputc(EOF,fp2);/将字符ch写到文件指针fp所指向的文件的当前写指针的位置;EOF是End Of File 的缩写,表示“文件结束”。 fc
31、lose(fp2); ; /主函数void main() database Book;char function=0;Book.read ();int i; /界面while (function!= 6)coutendl;coutt-n;couttttt欢迎使用图书管理系统endl;coutttttendl;couttttt 请选择操作nendl;couttttt1 创立新书信息endl;couttttt2 修改图书信息endl;couttttt3 显示所有图书endl;couttttt4 按指定条件查询书目endl;couttttt5 按书号删除书目endl; couttttt6 退出系统并
32、保存修改endl;coutttttendl; coutttt (查询可按书号/ 作者/ 书名查询)endl; coutfunction;/图书书号、书名、作者、出版社、出版时间、价格信息的录入换码符t,表示水平制表位(horizeontal tab),它的作用是将光标移到最接近8的倍数的位置,使得后面的输入从此开始。换句话说,让所有的数据都紧跟在制表符后面输出。/换码符t,表示水平制表位,它的作用是将光标移到最接近8的倍数的位置,使得后面的输入从此开始。换句话说,让所有的数据都紧跟在制表符后面输出。if(function=1) string a,b,c,d,e,f; /定义字符串cout请输入
33、书的isbn编号a;cout请输入书名b;cout请输入书作者名c;cout请输入书的出版社d;cout请输入书的出版时间e;cout请输入书的价格f;book newbook(a,b,c,d,e,f);Book.add(newbook); newbook.display();system(PAUSE);system(CLS);else if(function=2)string a,b,c,d,e,f;/定义字符串cout 请输入需要修改的图书的编号:a; cout请输入书的isbn编号a;cout请输入书名b;cout请输入书作者名c;cout请输入书的出版社d;cout请输入书的出版时间e;cout请输入书的价格f;book newbook(a,