基于面向对象(C++)的图书管理系统

本文介绍了一个基于C++的图书管理系统,采用面向对象设计,包含图书类、人员类(包括管理员和读者)以及界面设计。系统支持动态内存分配、类的继承与派生、多态性,实现图书的查询、借阅、归还,以及读者和管理员的个人信息管理等功能。
摘要由CSDN通过智能技术生成

摘要:本文介绍了一个基于C++语言的图书管理系统的设计和实现。该系统采用面向对象的设计方法,通过控制台应用方式进行开发,实现读者可以查询借阅和归还图书记录、查看和修改个人信息等功能,管理员查询、修改和删除读者和图书信息以及添加新图书等功能。在此代码编写中合理利用类的继承以节省代码量,提高代码的结构性和可读性;使用vector方法实现动态内存分配提高内存利用率,同时通过统一的读者类(Reader)接口访问不同读者类型实现多态性。

关键词:类的继承与派生、动态内存分配、多态性

正文:本次图书管理系统设计人员包含管理员与读者两个大类,读者又分为教师与学生,由于两者功能相似故将两者归为一类进行操作但有所区分。基于不同类别拥有不同功能对程序进行分块编写及功能验证,模块功能验证成功后再将不同的部分进行整合,最后完成设计。依据代码编写过程及其框架,本文按照以下几个部分撰写:

  1. 总体设计
  2. 模块设计方法描述
  3. 测试样例验证
  4. 总结与收获

一、总体设计

完成图书管理系统的设计我将其分成以下几个大模块进行:图书类、人员类、界面设计。图书类包含书籍的基本信息,需要满足图书借阅与归还后的信息自动修改以及管理员对图书的查询、修改、删除和添加的操作,并且要求能对所有图书中任意一本进行操作。人员类分为教师类、学生类、管理员类三部分,此部分设计需要合理且正确的使用类的继承与派生减少代码冗余量。与图书类的设计类似,人员类不仅需要实现对个人的操作,还需要能对整个集体的同一类人员进行指定的操作。界面设计需要能进行菜单选择进入下一级、返回上一级和退出系统等功能,这部分只需要做出菜单选择可视化,具体对应功能的操作在各个类的设计中同时完成界面展示。实验过程如下:

实验的基本功能框图如下:

二、模块设计方法描述

  由于代码编写分为四个文件编写——书籍类头文件、人员类头文件、界面头文件、主函数部分故模块设计分别详细介绍三个头文件的设计方法。

2.1 图书类

图书类的私有属性包括编号、书名、作者、出版社、价格、剩余数量。成员函数包括构造函数、获取私有信息、展示图书信息、修改信息、借书、还书等。

         在定义好图书类后,可以对单本图书进行不同的操作但对于一个“图书馆”而言需要存储许多书籍,并对这些书籍进行操作。于是,需要建立一个文本文档对图书信息进行统一的保存操作。同时,也出现一个问题即如何从文件中找到其中一本需要进行操作的“图书”。在这里,我定义了一个“全体图书类”,这个类的目的是从文件中提取所有图书信息并找到特定图书对其进行操作。此类的私有属性定义为一个Book类的vector变量,使用动态存储的方法由系统自动为“每一本书”分配内存空间。

        此类中的构造函数为从文本文件中读取所有图书信息并存入vector容器构成一个可以进行修改的全体图书,其析构函数为将此时vector容器内的图书信息再逐一存入文本文档中。这就解决了如何找到图书并对其进行操作的问题。此类的其他成员函数为添加图书、删除图书、修改图书、查询图书、展示图书信息、借还书、通过书名或编号找到图书,由于篇幅有限其代码细节不在此展示。整体框架如下:

2.2人员类

在此部分设计中,读者信息(教师与学生)和管理员信息分别使用两个文本文件存储。为了区分不同的人员,增设身份的私有属性——教师的职称属性归属到身份属性中,这样三者均拥有了身份这一属性。于是定义了一个人员基类,其属性为姓名、卡号、身份,成员函数包括获取全部私有属性、展示信息、更新信息、修改密码、分别获取私有属性——密码、卡号、姓名。此基类的基本属性和功能与设计的管理员一致,故人员基类也是管理员类。在更新信息过程函数中通过卡号索引到具体的人,卡号属性不可修改。于是继承关系为:

在创建了基类后,在其基础上派生出读者类,其私有属性增加了学院、最大借书量、已借阅图书和已归还图书。针对读者类的两个借阅及归还图书信息的存储使用动态存储的思想,创建string类型的向量vector来存储书名,这样就可以让系统动态的分配空间而不需要预先开辟一个较大的空间。读者类的成员函数有构造函数(初始默认借阅归还图书为无)、显示信息、获取私有信息、修改信息、借阅及归还图书。值得一提的是,在借还书函数中需要将Books类的中的借还书操作对接,于是需要创建一个全局的Books对象B便于在人员类访问。

    由于学生类和教师类需要区分最大借书量,故均继承读者类,并分别设置最大借阅量。

    创建好三种成员类后利用书籍类中使用的方法,设置两个新类分别为Readers、Librarian作为“读者集体”、“管理员集体”,为读者信息和管理信息的管理与修改带来了极大的便利。这其中需要注意的是“读者集体”的私有属性为Reader的vector容器,而读者是被区分成了学生和教师。所以直接使用书籍管理的方法存入vector会出现错误,这里需要将子类的Student和Teacher类利用引用的方式转成其父类Reader对象就可以存入vector容器内,所有读者写入同一个文本文档。利用Reader类接口处理不同子类实现多态性。其中,“管理员集体”中的新建管理员部分设置内置密码szu123才可以进行添加。

读者类框架图如下:

管理员类框架如下:

2.3界面设计

    界面分为五个部分——主页界面、管理员登录界面、读者登录界面、管理员菜单界面、读者菜单界面。分别建立五个函数,在各函数内部利用switch语句判断选择菜单中的内容,将不同界面层层嵌套起来即可实现一级与一级之间的来回界面转化。由于具体功能显示部分在各自的“整体类”中已经封装完成,故在此部分只需要调用其中的功能函数即可。

完整版代码请私信沟通!!!

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值