面向对象技术的应用——图书管理系统(C++)学院:专业:摘要图书管理系统将传统的图书管理方法彻底地解脱出来,大大提高了人们对图书的管理效率,减轻工作人员以往繁忙的工作,并且减小出错的概率。本文采用面向对象技术在VC上编写图书管理系统,充分阐述了OO技术在其中的应用,展现了该程序的进行分析,设计和实现的过程。关键词:图书管理系统面向对象技术VC一、课题背景面向对象(object-oriented,OO)技术充分体现了分解、抽象、模块化、信息隐蔽等思想,可以有效地提高软件生产率、缩短软件开发时间、提高软件质量,是控制软件复杂性的有效途径。传统的结构化方法的着眼点在于一个信息系统需要什么样的方法和处理过程。以过程抽象来对待系统的需求,其主要思想就是对问题进行功能分解,如果分解后得到的功能过大,那么再对这些功能进行分解,直到最后分解得到的功能比较方便地处理和理解为止。所以结构化方法也称为功能分解法(functionaldecomposition)。与传统的结构化软件开发方法相比,面向对象软件开发方法在描述和理解问题域时采用截然不同的方法。其基本思想是,对问题域进行自然分割,以更接近于人类思维的方式建立问题域模型,从而使设计出的软件尽可能直接地描述现实世界,具有更好的可维护性,能适应用户需求的变化。在实际生活中,图书馆工作人员都面临着一个非常具体现实的问题,即图书借阅的管理。当图书与读者数量不大时,工作人员可以根据相关纸质纪录进行定期检查与核对而清楚的掌握书籍与读者信息,并对其行修改与维护,但是现实生活中工作人员管理的数据数量庞大,不可能人工完成相关管理。为了迎合自动化办公的要求,现要求设计一个图书借阅管理系统完成对于图书相关信息的记录操作及添加、修改、更新等维护操作。本次课程报告的题目是图书管理系统,主要目的是利用OO技术在VC上实现图书的管理工作。二、系统的主要功能1、进入系统身份验证:在进入系统的时候,避免非工作人员对信息进行修改,要进行账号和密码的验证;2、新增图书信息:通过输入编号,判断此图书是否存在,若不存在则提示用户添加一本图书信息包括编号、书名、作者等;3、更改图书信息:通过输入编号,判断此图书是否存在,若不存在则提示用户重新输入图书编号。4、删除图书信息:删除一本图书信息,提示用户是否显示删除后的信息,若不存在则提示用户重新输入图书编号;5、查找图书信息:通过输入图书编号完成图书信息的查找,并在屏幕上显示;6、查询所有图书信息:显示所有图书信息包括编号、书名、作者等;7、清空所有信息:清空在TXT文件中的所有图书信息;8、退出系统:退出系统返回主菜单。如图1所示:图1三、结构设计主要声明了图书和管理两个类,通过管理员和图书的函数成员来实现新增,更改,删除,查找,显示,清空等操作,在图书的结构中,按键0键退出管理系统,总体结构如图2所示:主函数输入账号和密码登陆图书馆管理管理员系统更改图书记录新增图书记录删除图书记录查找图书记录显示图书记录情况全部记录退出系统图2四、类的设计类是C++面向对象技术中的一个重要概念,它提供了抽象和封装机制,是一种较好的模块化编程手段。从面向对象的观点来看,客观世界就是由一个个独立的对象组成,在程序中,对象存储着数据和相应操作。类对具有共性的对象进行统一描述。在本图书管理系统中定义了两个类,一个是book类即图书类,另一个是Administer类即管理类。这里将对着两个类进行详细说明。1、Book类图书具有的信息为图书编号booknum,图书名称name,图书作者writer,把这三项作为book类的私有成员。然后定义book类的共有成员,包括:构造函数Book(){},获取图书编号函数get_booknum(),获取删除标记函数get_delflag(),设置书名函数set_name(charna[]),设置作者函数set_writer(charwr[]),删除图书函数delbook(),增加图书函数addbook(intn,char*na,char*wri),显示图书函数disp()2、Administer类管理员对图书进行管理需要正确的账号和密码,在管理的过程中需要对每一本图书进行操作,于是可以将工作员账号wkname,工作员密码wksecret,图书记录指针top,图书信息book等四项信息作为Administer类的私有成员。其成员函数有:类的构造函数Administer(),验证用户信息函数Access(),增加图书函数addbook(intn,char*na,char*wri),查找图书指针函数*query(intbookid),图书记录的数据管理函数bookdata(),显示所有图书信息函数disp(),因为需要写入文本文件中,所以这里定义一个显视的析构函数~Administer()在结束进程时将图书的信息写入到文本文件中。五、成员函数的实现成员函数是类中描述行为的成员,同时也是对封装的数据进行操作的惟一途径。从类的定义可知,一般在类中说明成员函数原型,在类外具体实现成员函数。如果成员函数以及在类中定义,则无须在类外实现。首先是在图书类Book中:1、get_booknum()与get_delflag()函数使用retur语句分别返回图书编号作与判断该图书是否存在的标记;2、delbook()是删除图书的函数,若该图书被删除,则令delflag等于1;3、set_name(charna[])与set_writer(charwr[])函数使用strcpy语句修改图书名name和图书作者writer;init(intn,char*na,char*wri)初始化图书函数,包括删除标记置为0,给予图书编号,图书名,图书作者赋值;4、disp()输出图书信息到屏幕显示。然后是在管理类Administer中:5、构造函数Administer()有两个功能,第一个功能是定义一个Book类的临时变量b与指向每一本图书的标记变量top,打开根目录下的txt文件,增加top的值不断指向新的图书对象,并将其写入到book[]中。第二个功能是设置图书管理员的账号和密码,只允许后台操作,不能在程序运行中更改;6、在刚进入系统时,系统要求验证用户,这是使用Access()函数来实现的,用if判断语句,判断所输入的信息是否正确,匹配则返回1,不匹配则返回0,如下图3所示;图37、增加图书记录的操作利用函数addbook(),令标记变量top指向下一个图书对象,并用函数图书类中的初始化函数book[top].init(n,na,wri)对新增的图书进行初始赋值,增加成功返回1,失败返回0;如图4所示图48、在执行查找某一本图书时,仅支持按编号查找,通过比较输入编号和文本中现有的编号,判断是否存在所要查找的图书编号,若存在返回该图书所存放位置的首地址,不存在返货NULL;如图5所示图59、显示所有图书只需用一个for循环遍历所有图书信息即可;如图6所示图610、删除图书是对图书对象的删除标记delflag置1操作,但并不是立即删除,而是在结束进程,写入文本的时候不予写入,这样在第二次进入的时候就完全清除了该图书信息。这样的好处是若对程序修改,增加对删除标记操作的函数,错误删除的图书还可以找回来,本程序暂无此功能;如图7所示图711、删除所有图书控制标记变量top,其原理同删除图书类似;如图8所示图812、对所有图书,也就是图书库的操作使用函数bookdata(),用while语句实现死循环,用switch语句实现每一种操作的选择;13、将图书信息写入文本是在管理类的析构函数~Administer()中实现,依次判断所有图书的删除标记是否为0,若为0写入,反之不写入。六、结果分析本程序总共涉及了两个类,满足了单方面对图书的管理要求。在设计局的过程中,建立了较为清晰的类层次,也利用了面对对象方法以及C++的编程思想来完成系统的涉及,做到了图书的增加,删除,查找等相关的功能。而且界面美观,容易操作。但并非完整的图书管理系统,应该还具有读者类,和对读者类的管理,但是时间有限,现在的程序还有许多可以加强的地方。七、课程总结此次面向对象技术C++程序设计,经过一周多的时间编写了一个简单的C++应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现啥少年宫,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询修改。根据面向对象技术C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤设计出一个适当规模的程序;进一步加深对面向对象技术以及C++语言的理解和掌握。理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。参考文献[1]甘玲,邱劲.面向对象技术与VisualC++[M].北京:清华大学出版社,2004.8.[2]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2007.1.[3]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,2008.3.[4]王秀明.面向对象技术的概说[J].热带农业工程:2011.2(1).24-27.附录(程序源代码):#includeiostream.h#includeiomanip.h#includestring.h#includeprocess.h#includefstream.h//输入/输出文件流类constintMaxb=100;//最多可存储的图书classBook{private:intdelflag;//删除标记intbooknum;//图书编号charname[20];//书名charwriter[10];//图书作者public:Book(){}intget_booknum()//获取图书编号{returnbooknum;}intget_delflag()//获取删除标记{returndelflag;}voidset_name(charna[])//设置书名{strcpy(name,na);}voidset_writer(charwr[])//设置作者{strcpy(writer,wr);}voiddelbook()//删除图书{delflag=1;}voidinit(intn,char*na,char*wri)//初始化图书{delflag=0;booknum=n;strcpy(name,na);strcpy(writer,wri);}voiddisp()//输出图书{cout.flags(ios::left);//设置对齐的标志位为左coutsetw(15)booknumsetw(20)namesetw(15)writerendl;}};/*****************************************************************************************/classAdminister{private:charwkname[20];//工作员账号charwksecret[10];//工作员密码inttop;//图书记录指针Bookbook[Maxb];//图书记录public:Administer()//构造函数,将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();strcpy(wkname,adm);strcpy(wksecret,adm);}intAccess(){charpwkname[20];charpwksecret[10];cout请输入用户账号:;cinpwkname;cout请输入用户密码:;cinpwksecret;if(strcmp(pwkn