图书管理系统

和搭档搞了很久很久的一个大作业,对当时大一的我产生了极大的冲击,还记得当时写到了凌晨3点。。。

源码链接:https://gitee.com/jolin-pan/code

题目:H大学图书馆

一、 问题描述

H大学图书馆

H大学图书馆邀请你建立一个图书馆信息管理系统。请使用面向对象思想完成该问题,具体要求如下:

一、设计一款文字式交互的图书管理系统;

二、图书馆必须支持至少10000册书存储,并且可动态增长(未来书目会增多,不能是固定的)

三、图书信息包含:

l 题名

l ISBN/ISSN

l 作者

l 分类号(分类规则自定,要求有三级分类,可参考中图分类法)

四、图书馆系统提供两种用户模式,请为他们设计不同的用户类:

1)管理员模式:

l 系统最初提供一个默认的管理员账户以及默认密码;

l 管理员具备以下功能:

Ø 可以使用管理员账号登录

Ø 支持对学校用户的账号进行基本管理,添加、删除学校用户默认账号和密码,默认账号为学号/教师编号,密码为123456;恢复学校用户默认密码;

Ø 管理员可以对图书信息进行修改

Ø 管理员可以增加、删除、搜索图书

2)学校用户模式(学校用户超过5千人):

l 学校用户可以通过账号和密码登录,账号为学号/教师编号,密码为123456;

l 学校用户可以修改自己的密码

l 学校用户可以搜索图书

l 学校用户可以借、还图书

l 学校用户可以查看自己的借阅记录

五、设计图书馆类,包含馆藏图书列表、用户列表等成员,可维护馆藏记录、在馆记录、用户借阅记录等。

六、图书馆系统提供根据任一信息的搜索图书功能:

l 题名,精确查找到书

l ISBN/ISSN,精确查找到书

l 作者,模糊查找到该作者所有书,字典序排序

l 分类号,三级分类,每一级分类均可模糊查找到书,字典序排序,按页显示;如,N 自然科学总论——TP 自动化技术、计算机技术——TP3 计算机技术。

在以上每一级时,均会出现该级所有数目,字典排序,按页显示;

img

不明白意思的同学,可以自行登入学校图书馆系统,进入搜索书目功能中,点击分类导航选项,然后进入每级分类的页面看看

l 搜索不考察性能,仅考察功能

七、加分项(总分不超过100分)

(1)支持大数据,比如书籍记录突破百万,用户数量突破万级规模;

(2)贴近实际的图书馆管理系统,新增若干功能等;

(3)实现文件的创建、读、写等操作;

(4)考虑用户体验,如使用方便度等;

(5)搜索时性能考察,调查、思考、设计加强搜索性能的方式,此项仅适合学有余力的同学;

八、完成进度建议和自查评分

1、第一阶段,需要完成一万的图书存储;该功能需要至少设计并完成图书类与图书馆系统类的相关部分(包括相关实验报告、代码和测试);

2、第二阶段,完成两种用户模式,欠搜索功能(包括相关实验报告、代码和测试);

3、第三阶段,搜索功能(包括相关实验报告、代码和测试);知识点:文件、排序。

img

二、 分析设计

  1. 主体结构设计:用vector声明动态结构体数组books,实现动态存储图书。

用stringstream、push_back将文件读入数组,用fstream头文件下的指令实现对txt的读写和修改,分文件定义各显示函数和功能函数,在main函数中调用各文件中的显示函数和功能函数,实现图书管理系统的基本功能。

img

  1. 数据结构定义: 大量的学生账户,书籍信息用vector向量储存并用fstream写入txt。

  2. 函数设计:用函数和return将不同功能的函数整合到一起实现各函数的交互,共同支撑系统各个功能的实现。

几个核心函数的设计方法:

Displayzhuye函数,类型 void,通过cout语句和for循环实现输出主页菜单的功能。

例如:

img

storebook函数:类型void ,通过文件输入流将书籍存入txt,并实现动态增长。

如图:

img

Displaybooks函数:类型int,用sum=books.size()得出书籍数量,用for循环输出books[i]的相关信息。

如图:

img

NameSearch函数(搜索图书):类型int, 搜索图书(尤其注意分好几册的,名字一样但本质上不是同一本,也要统计数目并输出)

如图:

img

三、输入输出测试

1、主界面

img

Part 1 学生部分

1.登录界面

img img

2.图书列表(截取部分)

img

3.搜索图书

(1)书名搜索

img img

(2)ISBN码搜索

img

img

(3)作者搜索

img

img

(4)分类号搜索(分别为一级、二级、三级查询)

一级:

img

img

二级:

img

img

三级:

img

img

4.借阅图书

img

5.借阅记录

img

6.归还图书

img

7.修改密码

img

Part 2 管理员部分

1.登录界面

img

2.增加图书

img

img

3.删除图书

img

img

img

4.修改图书

img

5.增加用户(判断账号不存在才能添加)

img

img

6.删除用户(判断账号存在才能删除)

img

img

7.重置密码(判断账号存在才能重置密码)

img

img

四.总结与反思

一开始我们对如何存储图书毫无头绪(第一个任务就卡死了),花了一周多的时间在找方法存储图书上,问了很多人,共得到了vector、fstream、MySQL三种方法,我们分别了解了一点后,选择用vector和fstream,然后对这两个知识点进行更深入的学习,最终实现书籍的存储和动态增长。

后来我们发现storebook()和storeAccount()后的cin都失效了,我们上网搜索才知道要使用cin.clear()和cin.sync()使cin恢复正常。

初次写搜索函数时,忽略了书名、ISBN、作者会有重复的情况,后来才后知后觉赶忙补上,只能说想的还不够周到。

始我们对如何存储图书毫无头绪(第一个任务就卡死了),花了一周多的时间在找方法存储图书上,问了很多人,共得到了vector、fstream、MySQL三种方法,我们分别了解了一点后,选择用vector和fstream,然后对这两个知识点进行更深入的学习,最终实现书籍的存储和动态增长。

后来我们发现storebook()和storeAccount()后的cin都失效了,我们上网搜索才知道要使用cin.clear()和cin.sync()使cin恢复正常。

初次写搜索函数时,忽略了书名、ISBN、作者会有重复的情况,后来才后知后觉赶忙补上,只能说想的还不够周到。

考虑到用户会输错,在代码中多处增加了输入不正确指令返回初始界面的情况,以及用户想要取消操作,又给每步操作增加了确定选择。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值