一、项目背景介绍:
随着社会信息化的快速发展,图书馆作为知识传播和学术研究的重要场所,扮演着不可替代的角色。然而,传统的图书馆借阅方式存在一些问题,如人工操作复杂、排队等待时间长、信息交流不便等。为了提高用户体验、优化图书管理效率,图书馆借阅系统的引入成为了迫切需求。
目前,一些图书馆已经开始引入计算机技术来改进借阅流程,并且不断涌现出各种图书借阅系统。这些系统通过应用先进的技术手段,例如互联网和移动设备等,实现了更高效、便捷的图书借阅方式,受到了广泛的欢迎和应用。
然而,在一些小型图书馆或教育机构中,仍然存在着借阅过程繁琐、信息不透明、借还效率低等问题。因此,开发一套基于Spring Boot、Vue.js和uni-app的图书借阅系统具有重要的实际意义和研究价值。
该系统将利用Spring Boot提供的快速开发和便捷部署的特性,基于Vue.js构建友好的用户界面,并使用uni-app实现跨平台的移动应用。通过这个系统,用户可以方便地浏览图书信息、进行在线借阅、查询借阅记录等操作;管理员可以进行图书管理、借阅管理、统计分析等工作。这将大大提高图书馆的服务质量和管理效率。
因此,本研究旨在设计与实现一套基于Spring Boot、Vue.js和uni-app的图书借阅系统,以满足用户借阅需求,提高图书馆服务质量和管理效率,促进图书馆建设的数字化和智能化进程。通过对系统的开发和实施,将探索先进技术在图书借阅领域的应用,为类似机构提供参考和借鉴。
二、项目技术简介:
- JAVA:Java是一门 面向对象编程语言 ,不仅 吸收了C++语言的各种优点 ,还摒弃了C++里难以理解的 多继承、指针 等概念,因此Java语言具有 功能强大和简单易用 两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
- Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。 Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。
- SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来 简化 新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
- Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
- smart:微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。 全面开放申请后,主体类型为企业、政府、媒体、其他组织或个人的开发者,均可申请注册小程序。微信小程序、微信订阅号、微信服务号、微信企业号是并行的体系。 微信小程序是一种不用下载就能使用的应用,也是一项创新,经过将近两年的发展,已经构造了新的微信小程序开发环境和开发者生态。微信小程序也是这么多年来中国IT行业里一个真正能够影响到普通程序员的创新成果,已经有超过150万的开发者加入到了微信小程序的开发,与我们一起共同发力推动微信小程序的发展,微信小程序应用数量超过了一百万,覆盖200多个细分的行业,日活用户达到两个亿,微信小程序还在许多城市实现了支持地铁、公交服务。微信小程序发展带来更多的就业机会,2017年小程序带动就业104万人,社会效应不断提升。
- Redis:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
三、系统功能模块介绍:
四、数据库设计:
1:advertisement(advertisement)
字段名 | 类型 | 默认值 | 列注释 |
id | bigint | NULL | 主键 |
title | varchar | NULL | 发送标题 |
type | tinyint | NULL | 类型 |
Banner | |||
提示 | |||
弹窗 | |||
content | text | NULL | 发送内容 |
cover | varchar | NULL | 图片 |
state | tinyint | NULL | 状态 |
creator | bigint | NULL | 创建者 |
add_time | datetime | NULL | 创建时间 |
editor | bigint | NULL | 编辑者 |
edit_time | datetime | NULL | 编辑时间 |
deleted | tinyint | NULL | 逻辑删除 |
2:attachment(attachment)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 主键 |
file_name | varchar | NULL | 文件原名 |
file_size | int | NULL | 附件大小 |
file_type | varchar | NULL | 附件类型 |
name | varchar | NULL | 附件名称 |
url | varchar | NULL | 附件地址 |
save_path | varchar | NULL | 保存路径 |
add_time | datetime | NULL | 添加时间 |
3:dict(dict)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 主键 |
name | varchar | NULL | 组名 |
code | varchar | NULL | 编码 |
remark | varchar | NULL | 信息 |
4:dict_item(dict_item)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 主键 |
dict_id | int | NULL | 组id |
name | varchar | NULL | 名称 |
info | varchar | NULL | 说明 |
5:notice(notice)
字段名 | 类型 | 默认值 | 列注释 |
id | bigint | NULL | id |
title | varchar | NULL | 公告标题 |
content | text | NULL | 公告内容 |
creator | bigint | NULL | 创建人 |
editor | bigint | NULL | 编辑人 |
add_time | datetime | NULL | 添加时间 |
edit_time | datetime | NULL | 编辑时间 |
deleted | tinyint | NULL | 删除标记 |
6:org(org)
字段名 | 类型 | 默认值 | 列注释 |
id | bigint | NULL | 主键 |
pid | bigint | NULL | 上级 |
name | varchar | NULL | 名称 |
shortname | varchar | NULL | 简称 |
level | tinyint | NULL | 级别 |
id_path | varchar | NULL | 路径 |
name_path | varchar | NULL | 部门名路径 |
contact_name | varchar | NULL | 联系人 |
phone | varchar | NULL | 联系电话 |
| varchar | NULL | |
info | varchar | NULL | 描述 |
state | tinyint | NULL | 是否有效 |
creator | bigint | NULL | 创建人 |
add_time | datetime | NULL | 添加时间 |
editor | bigint | NULL | 编辑人 |
edit_time | datetime | NULL | 编辑时间 |
address | varchar | NULL | 地址 |
deleted | tinyint | NULL | 逻辑删除 |
7:setting(setting)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 主键 |
type | int | NULL | 类型 |
name | varchar | NULL | 名称 |
code | varchar | NULL | 码 |
value | varchar | NULL | 值 |
value_type | varchar | NULL | 值数据类型 |
info | varchar | NULL | 说明 |
8:staff(staff)
字段名 | 类型 | 默认值 | 列注释 |
id | bigint | NULL | id |
name | varchar | NULL | 姓名 |
mobile | varchar | NULL | 手机号 |
password | varchar | NULL | 密码 |
birthday | date | NULL | 生日 |
gender | tinyint | NULL | 性别 |
id_card | varchar | NULL | 身份证 |
school | varchar | NULL | 毕业院校 |
degree | tinyint | NULL | 学历 |
head_img | varchar | NULL | 头像 |
hire_date | date | NULL | 入职日期 |
fire_date | date | NULL | 离职日期 |
intro | varchar | NULL | 简介 |
state | tinyint | NULL | 在职状态 |
creator | bigint | NULL | 创建人 |
add_time | datetime | NULL | 创建时间 |
editor | bigint | NULL | 编辑人 |
edit_time | datetime | NULL | 编辑时间 |
deleted | tinyint | NULL | 是否删除 |
org_id | bigint | NULL | 所属组织部门ID |
9:‘员工角色’(staff_role)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 自增id |
staff_id | bigint | NULL | 员工id |
role_id | int | NULL | 角色id |
10:sys_log(sys_log)
字段名 | 类型 | 默认值 | 列注释 |
id | bigint | NULL | 主键 |
operator | bigint | NULL | 操作人 |
user_id | bigint | NULL | 用户id |
type | varchar | NULL | 类型 |
info | varchar | NULL | 信息 |
path | varchar | NULL | 路径 |
url | varchar | NULL | 请求地址 |
method | varchar | NULL | 请求方法 |
param | text | NULL | 参数 |
ip | varchar | NULL | IP地址 |
browser_name | varchar | NULL | 浏览器名 |
browser_ver | varchar | NULL | 浏览器版本 |
os_name | varchar | NULL | 系统名称 |
add_time | datetime | NULL | 日志时间 |
time_cost | int | NULL | 响应时间毫秒 |
org_id | bigint | NULL | 所属组织ID |
11:‘权限’(sys_permission)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 自增id |
name | varchar | NULL | 菜单名称 |
url | varchar | NULL | url |
code | varchar | NULL | 代码 |
enabled | smallint | NULL | 是否启用 1 启用,0 禁用 |
group_name | varchar | NULL | 分组 |
12:‘角色’(sys_role)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 自增id |
name | varchar | NULL | 角色名称 |
code | varchar | NULL | 角色编码 |
13:‘角色权限’(sys_role_permission)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 自增id |
role_id | int | NULL | 角色id |
permission_id | int | NULL | 菜单id |
14:‘用户表’(user)
字段名 | 类型 | 默认值 | 列注释 |
id | bigint | NULL | 用户主键 |
name | varchar | NULL | 昵称 |
avatar | varchar | NULL | 头像 |
mobile | varchar | NULL | 手机号/账号 |
password | varchar | NULL | 密码 |
balance | decimal | NULL | 余额 |
login_times | int | NULL | 登录次数 |
latest_login_time | datetime | NULL | 上次登录时间 |
latest_login_ip | varchar | NULL | 上次登录ip |
remark | varchar | NULL | 备注 |
state | tinyint | NULL | 账号状态 |
add_time | datetime | NULL | 注册时间 |
deleted | tinyint | NULL | 逻辑删除 |
15:‘图书表’(z_book)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | id |
info_id | int | NULL | 书本信息id |
code | varchar | NULL | 书本编号 |
state | int | NULL | 状态 |
user_id | bigint | NULL | 借阅者 |
library_id | int | NULL | 图书馆id |
editor | bigint | NULL | 更新者 |
edit_time | datetime | NULL | 更新时间 |
deleted | int | NULL | 逻辑删除 |
16:‘图书信息表’(z_bookinfo)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | id |
code | varchar | NULL | 图书编码 |
name | varchar | NULL | 书名 |
author | varchar | NULL | 主编/作者 |
cover | varchar | NULL | 封面 |
isbn | bigint | NULL | isbn |
press | varchar | NULL | 出版社 |
version | tinyint | NULL | 版次 |
public_time | date | NULL | 出版时间 |
num_pages | int | NULL | 页数 |
introduce | varchar | NULL | 简介 |
type_id | int | NULL | 类型id |
creator | bigint | NULL | 创建者 |
add_time | datetime | NULL | 创建时间 |
editor | bigint | NULL | 更新者 |
edit_time | datetime | NULL | 更新时间 |
deleted | tinyint | NULL | 逻辑删除 |
b_num | int | NULL | 借阅次数 |
v_num | int | NULL | 查看次数 |
17:‘图书类型表’(z_booktype)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | id |
name | varchar | NULL | 类型名字 |
code | varchar | NULL | 代码 |
introduce | varchar | NULL | 简介 |
subarea | varchar | NULL | 分区 |
num | int | NULL | 排号 |
18:‘图书借阅记录’(z_borrow)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | id |
bn | varchar | NULL | 借阅号 |
user_id | bigint | NULL | 用户id |
book_id | int | NULL | 书本号 |
add_time | datetime | NULL | 借阅时间 |
overdue_date | date | NULL | 逾期日期 |
state | int | NULL | 借阅状态 |
return_time | datetime | NULL | 归还时间 |
remark | varchar | NULL | 备注 |
deleted | int | NULL | 逻辑删除 |
19:z_idCard(z_idCard)
字段名 | 类型 | 默认值 | 列注释 |
id | bigint | NULL | |
name | varchar | NULL | |
id_no | varchar | NULL | |
state | int | NULL | |
address | varchar | NULL | |
birthday | varchar | NULL | |
sex | int | NULL | |
age | int | NULL | |
user_id | int | NULL |
20:‘身份信息表’(z_idcard)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | id |
name | varchar | NULL | 名字 |
id_no | varchar | NULL | 身份证号码 |
state | int | NULL | 审核状态 |
remark | varchar | NULL | 验证结果信息 |
address | varchar | NULL | 地址 |
birthday | date | NULL | 生日 |
sex | int | NULL | 性别 |
age | int | NULL | 年龄 |
user_id | bigint | NULL | 用户id |
21:‘图书馆表’(z_library)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | |
name | varchar | NULL | 名字 |
short_name | varchar | NULL | 简称 |
code | varchar | NULL | 编码 |
address | varchar | NULL | 地址 |
admin | bigint | NULL | 管理员 |
introduce | varchar | NULL | 介绍 |
creator | bigint | NULL | 创建者 |
add_time | datetime | NULL | 创建时间 |
editor | bigint | NULL | 编辑者 |
edit_time | datetime | NULL | 编辑时间 |
deleted | tinyint | NULL | 逻辑删除 |
22:z_overdue(z_overdue)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | id |
dn | varchar | NULL | 逾期单号 |
book_id | int | NULL | 图书id |
borrow_id | int | NULL | 借阅id |
user_id | bigint | NULL | 用户id |
overdue_date | date | NULL | 逾期日期 |
return_date | date | NULL | 归还时间 |
pay_type | int | NULL | 支付方式 |
amount | decimal | NULL | 金额 |
pay_time | datetime | NULL | 支付时间 |
state | int | NULL | 状态 |
deleted | tinyint | NULL | 逻辑删除 |
remark | varchar | NULL | 备注 |
23:z_recharge(z_recharge)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | 主键 |
rn | varchar | NULL | 充值单号 |
user_id | bigint | NULL | 用户id |
pay_type | int | NULL | 支付方式 |
amount | decimal | NULL | 充值金额 |
state | int | NULL | 状态 |
remark | varchar | NULL | 备注 |
pay_time | datetime | NULL | 充值时间 |
deleted | int | NULL | 逻辑删除 |
24:z_section(z_section)
字段名 | 类型 | 默认值 | 列注释 |
id | int | NULL | id |
title | varchar | NULL | 章节 |
content | varchar | NULL | 内容 |
info_id | int | NULL | 关联图书 |
五、功能模块:
- 小程序端(用户端)-登录注册:用户通过手机号进行登录注册,系统模拟短信验证码的功能进行校验
- 系统首页:用户可以在系统首页查看公告信息,借阅记录,图书检索,当前借阅情况,预期缴费,以及图书推荐等功能。
- 图书详情:详情包括图书的基本信息,图书的章节目录,以及图书所在的图书馆和剩余的可借书的状态等,点击扫码借阅可以借阅图书
- 图书分类:用户可以在图书分类页面根据不同的分类检索图书,并查看图书的详细信息,也可以通过扫码借阅功能进行借书。
- 个人中心:用户可以在个人中心页面查看图书借阅即将预期情况,预期未归还情况,欠缴费单量,以及借阅记录等信息。也可以进行在线充值、模拟借书还书操作,以及管理自己的个人信息。
- 运营驾驶舱:管理员可以在运营驾驶舱页面查看数据中心的统计信息。
- 用户管理:管理员可以在用户管理页面管理所有用户的账户信息以及充值记录。
- 图书管理:管理员可以在图书管理页面管理图书信息以及图书类型,同时也可以管理书店信息。
- 借阅管理:管理员可以在借阅管理页面查看所有借阅记录、预期缴费情况等信息。
- 用户公告管理:管理员可以在用户公告管理页面管理用户公告信息。
- 数据中心:管理员可以在数据中心页面查看图书统计信息、用户统计信息以及借阅统计信息等。
- 部门人员管理:管理员可以在部门人员管理页面管理部门信息和员工信息。
- 系统管理:管理员可以在系统管理页面管理内部公告和系统参数等。
六、代码示例:
@RestController
@RequestMapping(USER_APP_URL_PREFIX+"/borrow")
@Api(value = "借阅记录移动端接口", tags = "移动端接口")
public class UBorrowController {
@Autowired
private BorrowService borrowService;
@ApiOperation("借阅记录")
@GetMapping("/list")
public Object list(@RequestParam("state") Integer state) {
BorrowListParamDTO param = new BorrowListParamDTO(UserAuthUtil.getCurrentUserId(),state);
return borrowService.getBorrowList(param);
}
@ApiOperation("归还记录")
@GetMapping("/listPage")
public Object listPage(@RequestParam(value = "page", defaultValue = "") Integer page,
@RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize,
@RequestParam(value = "state", defaultValue = "-1")Integer state) {
BorrowListParamDTO param = new BorrowListParamDTO(UserAuthUtil.getCurrentUserId(),state);
param.setPage(page);
param.setPageSize(pageSize);
return JsonResponseUtil.paginate(borrowService.getBorrowListPage(param));
}
@ApiOperation("删除借阅记录")
@Log(description = "删除借阅记录", type = "借阅记录管理")
@PostMapping("/delete")
public Object delete(@RequestBody CommonParamDTO param) {
if (borrowService.removeById(param.getId())) {
return JsonResponseUtil.success();
} else {
return JsonResponseUtil.error("删除失败");
}
}
@ApiOperation("续借")
@Log(description = "续借", type = "用户续借", isStaff = false)
@PostMapping("/renew")
public Object renew(@RequestBody CommonParamDTO param) {
UpdateWrapper<Borrow> wrapper = new UpdateWrapper<>();
//续上30天
wrapper.lambda().eq(Borrow::getId,param.getId()).eq(Borrow::getState,1)
.set(Borrow::getState,2).setSql("overdue_date = DATE_ADD(overdue_date, INTERVAL 30 DAY)");
if (borrowService.update(wrapper)) {
return JsonResponseUtil.success();
} else {
return JsonResponseUtil.error("续借失败");
}
}
@ApiOperation("借阅详情")
@GetMapping("/info")
public Object info(@RequestParam("id")Integer id) {
return borrowService.getBorrowInfo(id);
}
}
七、项目总结:
开发基于JAVA+SpringBoot+UniApp+Vue的前后端分离的手机移动端图书借阅平台是作为毕设作品进行设计的,这个毕设作品是我在校进行知识学习的一个毕业考核项目,也是检验我通过网络工具,图书工具等学习工具进行自学的能力水平,让我在根据程序开发的需求分析初步完成程序功能之外,还接触了程序的测试过程,了解程序测试的具体的过程,以及遇到问题怎么去寻找相应的解决办法等等,毕业作品的制作以及设计才是学校对我真正的考验。
在程序软件没能进行开发之前,我去了学校的图书馆借了有关数据库操作的书籍,在查看了sqlserver和mysql两种数据库的相关知识之后,我最后选择了我比较熟悉的mysql数据库。在编程语言的抉择上,由于自己之前接触过Java程序的开发,所以为了让我尽快在短时间内完成程序制作,我确定用Java编程语言进行程序编程。另外我从百度上下载了很多的有关信息增加,信息删除等操作的源代码,并通过不断调试以及完成配套的数据库的设计,开始完成程序的各个部分的功能。每当我粗心大意,致使我深陷程序开发困扰不能自拔之时,值得庆幸的是,我就会得到老师,还有我的寝室同学的耐心指导。
历经长达几个月的毕业作品制作,我凭借自己的知识技能,还有大家的指导帮助,能够在学校规定的时间段之内提交毕业作品。虽然已经算是完成了毕业作品,但是付出了这么多心血,还是想把这个作品做得更加完美一点。针对我的毕业作品学生信息管理系统,我觉得还有很多方面需要完善,第一就是界面上需要细微调整,比如色彩搭配有点违背广众的审美,需要细微调整,还有系统里面的字体大小也需要调大一点,太小的字体看起来有些费眼。然后在程序的功能上因为自己的入门开发水平的影响,所以目前只能做到这个境界,这个系统相比其他类似系统来说功能很简单,逻辑结构设计得也比较合理。
自己一个人完成程序的开发,我不仅亲自体验了程序的开发流程,体验到了程序开发的各种不易。这种体验也还加深了我对知识的尊重。学海无涯,知识不是大学短短四年就能学完的,在大学学到的知识在最终经历检验时,才会深深地明白自己的知识积累原来还很浅薄。所以今后不管身在何处,自己的学习心态一定要时刻体现出来,要深刻明白知识学到手里就是自己的。同时,自己也不必过多抱怨学到的知识没有用处,相信学到的知识总会有派上用处的那天。不要等到需要用时再去学习知识,那样就会导致自己错失很多本该属于自己的机遇。
八、源码获取:
此源码非开源,若需要此源码可扫码添加微信进行咨询!