图书管理系统
总体设计
本程序前后端分离,用户界面部分与数据管理部分没有耦合,因此可以方便地更换为各种不同类型的
前端界面。数据管理部分首先基于面向对象思想进行抽象,用 reader 和 book 类分别存储图书馆会员
和书籍的信息。并对其进行封装,生成简洁易用的过程式接口——静态空间 bookManage 和 statistics
供给前端界面调用。其中,bookManage 中含有保存所有 reader 和 book 对象的两个 vector。在这个
顶层设计的基础上,我们根据实际功能需求进一步细化数据结构:
借阅管理部分
� 图书的分类管理 为了实现这个功能,book 类引入表示图书类型的成员。该成员的作用主要
是在显示所有图书时——对外接口 statistics::display 函数有参数 type,使得上层可以选择要
预览的图书种类。如果不传该参数,则默认输出所有图书信息。
� 借还书操作及记录 首先考虑记录的问题,借书记录中包含借书用户、借的书、借书日期以
及应还日期等信息。因此使用一个交集类型 borrowStru 来表示。续借、计算罚款等操作就
可以作为这个类的成员。然后就要考虑该类型与其它类型之间的关联,通过分析需求可以知
道,借书操作更多地与借书者相关(如需要在超期还书后输出该借书者目前超期的所有书
等),因此为了直接从借书者访问其借书记录,给 reader 类添加一个 vector 成员来存储其
所有借书记录。并在 reader 类中添加增删 borrowStru 对象的借还书成员函数。
读者管理部分
� 读者等级 根据需求,读者需要有一个“读者等级”属性用来记录读者的身份、最多同时借书本
书以及单次借书时间,因此显然“读者等级”也应该用一个交集类型表示,在这里我们创建了
readerType 类用来表示。并给 reader 类添加一个 readerType 类型的成员变量用来表示其类
型。readerType 中记录的信息在 borrowStru 和 reader 的借书函数中被使用——borrowStru
的续借成员函数中,通过读取 readerType 的 time 成员得到借书月数;reader 的借书函数中
比较当前用户借书数量与 readerType 中规定的最多借书数量判定用户是否能继续借书。
� 增删查改操作 对于读者的录入、挂失、注销和查询,均在 reader 类或 bookManage 中提供
了单个函数。直接调用即可完成该工作。
统计分析部分
排序的功能提供在静态空间 statistics 中,支持用户持书数量、用户借书数量、图书借阅量、超期未
还数量四个维度的排序统计。排序采用标准库提供的 sort 函数直接对 reader 和 book 的 vector 进行