代码拉取完成,页面将自动刷新
同步操作将从 curriculum-design/图书管理系统简化版 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
本程序前后端分离,用户界面部分与数据管理部分没有耦合,因此可以方便地更换为各种不同类型的前端界面。数据管理部分首先基于面向对象思想进行抽象,用reader和book类分别存储图书馆会员和书籍的信息。并对其进行封装,生成简洁易用的过程式接口——静态空间bookManage和statistics供给前端界面调用。其中,bookManage中含有保存所有reader和book对象的两个vector。在这个顶层设计的基础上,我们根据实际功能需求进一步细化数据结构:
排序的功能提供在静态空间statistics中,支持用户持书数量、用户借书数量、图书借阅量、超期未还数量四个维度的排序统计。排序采用标准库提供的sort函数直接对reader和book的vector进行排序实现。我们建立了四个排序比较函数(作为statistics的私有成员)直接传递给sort作为参数,以实现四种不同的排序。
超期还书罚款和最多续借次数均为borrowStru的私有const成员,直接修改即可对系统进行个性化配置。
int year;
int month;
int day;
Date(int year, int month, int day)
主构造函数
void reSet(int year, int month, int day)
重设本对象的年月日
string toString()
将日期转换为“-年-月-日”的字符串
void nextMonth()
将本对象的移到下个月(跨年会自动进位)
void nextDay()
将本对象移到下一天(跨月自动调用nextMonth)
bool isBigger(Date &d)
与另一个Date对象进行大小比较,如果本对象比d大返回true,否则false
int dvalue(Date &d)
计算本对象与d所差的天数(默认d大)
string name;
类别名
int time;
默认借书时间,按月计算
int num;
可借书数量
readerType(string name, int time, int num)
主构造函数
int no;
读者编号
string name;
string c;
读者班级
readerType type;
读者类型(级别)
bool isLose = false;
是否已挂失
int total = 0;
借书总数
vector<borrowStru>allBorrow;
该vector存储当前(未还的)所有借书记录
void display(Date d)
输出本对象信息。参数为系统当前时间,用于计算该读者的超期还书数量(对于目前持有的图书)。
bool isBorrow(book* b)
判定本对象目前是否正在借用这本书
bool borrow(book* b, Date d)
本对象借书,如果借书成功返回true,否则返回false(失败原因如用户已挂失、当前借书数过多、已经借过这本书等)。参数为要借用的图书和借书时间(一般是当前系统时间)。该函数内部会创建borrowStru对象。
bool ret(book* b, Date d);
本对象还书,如果还书成功返回true,否则返回false(失败原因如用户已挂失、并没有借过这本书等)。参数为要借用的图书和还书时间(一般是当前系统时间)。该函数内部会删除对应的borrowStru对象。
bool con(book* b)
续借图书,如果续借成功返回true。该函数内部调用本对象对图书b的borrowStru对象的con成员函数。
void displayAllDebt(Date d)
输出本对象的所有超期未还图书(书名),如果本读者没有任何超期未还图书,那么什么也不会输出。参数为检查的时间(一般是当前系统时间)。该函数内部通过调用所有借书记录的isPublish成员函数进行统计。
int no;
图书编号(使用bookManage::addBook构造成员时自动确定)
string name;
书名
string author;
作者
string press;
出版社
Date d;
出版日期
int money;
金额
string type;
图书类型
int stock;
库存量
int surNum = 0;
剩余量
int publishNum = 0;
超期未还的数量,需要调用statistics::caluDebt进行全局统计
book(string name, string author, string press, Date d, int money, string type, int stock)
主构造函数
void display()
输出本对象信息
book* b;
所借图书
reader* p;
借书者
Date d1;
借书日期
Date d2;
应还日期
int nowTimes = 0;
当前续借次数
borrowStru(book* b, reader *p, Date d1)
主构造函数
bool con()
(本对象)续借,如果续借成功返回true,否则返回false(失败原因如已达到系统设置的最大续借次数)。该函数会改变d2(根据读者等级中的默认借书时间调用一定次数d2的nextMonth)
bool isPublish(Date d)
计算是否超期还书(通过将d与d2通过date类的isBigger函数进行比较)。参数为还书日期(一般是当前系统时间)
int calu(Date d)
计算超期还书罚款,通过date类的dvalue函数计算d与d2的所差天数,并乘以系统设置的每天罚款。参数为还书日期(一般是当前系统时间)
static vector<book>bookList;
所有书籍
static vector<reader>readerList;
所有读者
static Date today;
系统当前日期
static book* findBook(string name)
通过书名查找该书的对象指针
static void removeBook(string name)
通过书名在bookList中删除该书
static void addBook(string name, string author, string press, Date d, int money, string type, int number)
向bookList添加新的图书(会自动构造对象并确定编号)
static void addreader(int no, string name, string c, readerType type)
向readerList添加新的读者(会自动构造对象)
static reader* findreader(string name)
通过读者姓名查找该读者的对象指针
static void removereader(string name)
通过读者姓名在readerList中删除该读者
static void readerRank1()
用户目前持书数量排行。通过将比较函数(比较两个reader对象中的allBorrow.size)传递给标准库排序函数sort实现对readerList进行排序,并按顺序输出读者姓名和他的allBorrow.size。
static void readerRank2()
用户借书总数排行。通过将比较函数(比较两个reader对象中的total)传递给标准库排序函数sort实现对readerList进行排序,并按顺序输出读者姓名和他的total。
static void bookRank1()
当前图书借阅量排行。通过将比较函数(比较两个book对象中的stock-surNuM)传递给标准库排序函数sort实现对bookList进行排序,并按顺序输出书名和他的stock-surNuM。
static void caluDebt()
计算所有图书的当前超期未还数量(计算到每个book对象的publishNum成员)
static void bookRank2()
超期未还图书排行。先调用caluDebt计算每个对象的publishNum。再通过将比较函数(比较两个book对象中的publishNum)传递给标准库排序函数sort实现对bookList进行排序,并按顺序输出书名和他的publishNum。
static void bookRank3()
图书借阅总量排行。通过将比较函数(比较两个book对象中的total)传递给标准库排序函数sort实现对bookList进行排序,并按顺序输出书名和他的total。
static void display(string type = "")
显示图书信息。参数为要显示的图书种类,如果为默认即显示所有图书信息。
参见test.hpp
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。