文章目录

  • 1 前言
  • 2 系统简介
    • 2.1 领域模型
    • 2.2 技术栈
    • 2.3 表结构设计
    • 2.4 接口设计
      • 2.4.1 接口定义
      • 2.4.2 接口测试
    • 2.5 权限设计
  • 3 运行效果
    • 3.1 系统登录
    • 3.2 图书分类管理
    • 3.3 图书管理
    • 3.4 借阅
    • 3.5 借阅管理
    • 3.6 还书
    • 3.7 日志管理
    • 3.8 用户管理
    • 3.9 编辑用户信息
    • 3.10 角色管理
    • 3.11 普通读者登录
    • 3.12 我的借阅
    • 3.13 个人信息修改
  • 4 最后

1 前言

Hi,大家好,学长今天向大家介绍 一个java web项目

基于spring boot的图书管理系统

大家可用于 毕业设计

适合专业:计算机科学与工程、软件工程、物联网、信管、数媒、大数据、等

2 系统简介

马上年底了,对于即将毕业的学弟学妹来说,过完年应该是最忙的时候,既要为3-4月份的校园春季招聘做准备,同时又要准备毕业设计。

希望本文对这些即将毕业的学弟学妹们、以及刚入门java不久并即将就业的同学们有所帮助,本文将以最简单的业务模型来讲解如何构建一个满足毕设要求的java web系统。

2.1 领域模型

  • DO(DataObject):与数据库表结构一一对应,通过DAO层向上传输数据源对象

  • BO(BusinessObject):业务对象。由Service层输出的封装业务逻辑的对象

  • VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象

BO和VO领域模型又分为BoRequest(输入模型)、BoResponse(输出模型)、VoRequest(输入模型)、VoResponse(输出模型)

2.2 技术栈

前端:vue + element

后端:jdk1.8 + springboot + redis + mysql

系统设计

2.3 表结构设计

CREATE TABLE `account` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`passport` varchar(16) NOT NULL COMMENT '账号',`name` varchar(6) NOT NULL COMMENT '名称',`password` varchar(64) NOT NULL COMMENT '密码',`status` int(11) NOT NULL DEFAULT '0' COMMENT '用户状态',`role_id` bigint(20) NOT NULL COMMENT '角色',`email` varchar(32) NOT NULL COMMENT '邮箱',`phone` varchar(16) NOT NULL COMMENT '手机号',`address` varchar(64) DEFAULT NULL COMMENT '地址',`sex` int(11) NOT NULL DEFAULT '0' COMMENT '性别 0:女;1:男',`description` varchar(128) DEFAULT NULL COMMENT '备注',`last_login_time` bigint(20) DEFAULT '0' COMMENT '最近登录时间',`create_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',`update_time` bigint(20) DEFAULT '0' COMMENT '更新时间',PRIMARY KEY (`id`),UNIQUE KEY `passport_UNIQUE` (`passport`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='账号表'
CREATE TABLE `role` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(32) NOT NULL COMMENT '角色名称',`description` varchar(128) DEFAULT NULL COMMENT '备注',`authorities` varchar(1024) NOT NULL COMMENT '权限列表',`create_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',`update_time` bigint(20) DEFAULT '0' COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='角色表'
CREATE TABLE `book` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(32) NOT NULL COMMENT '书名',`author` varchar(32) NOT NULL COMMENT '作者',`publish` varchar(32) NOT NULL COMMENT '出版社',`publish_time` bigint(20) DEFAULT '0' COMMENT '出版时间',`language` varchar(16) NOT NULL COMMENT '语言',`price` decimal(2,0) DEFAULT '0' COMMENT '价格',`book_class_id` bigint(20) NOT NULL COMMENT '图书分类',`stock` int(11) NOT NULL DEFAULT '0' COMMENT '库存',`introduction` text COMMENT '简介',`create_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',`update_time` bigint(20) DEFAULT '0' COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='图书表'
CREATE TABLE `book_class` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(32) NOT NULL COMMENT '分类名',`description` varchar(256) DEFAULT NULL COMMENT '备注',`create_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建时间',`update_time` bigint(20) DEFAULT '0' COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='图书分类表'
CREATE TABLE `borrow_record` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`book_id` bigint(20) NOT NULL COMMENT '图书',`passport` varchar(128) NOT NULL COMMENT '账号',`borrow_time` bigint(20) NOT NULL COMMENT '借书时间',`expected_back_time` bigint(20) NOT NULL DEFAULT '0' COMMENT '计划还书时间',`back_time` bigint(20) DEFAULT NULL COMMENT '还书时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COMMENT='借阅信息表'
CREATE TABLE `sys_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`passport` varchar(128) DEFAULT NULL COMMENT '账号',`url` varchar(255) DEFAULT NULL COMMENT '请求URL',`method` varchar(255) DEFAULT NULL COMMENT '请求方法',`params` varchar(2048) DEFAULT NULL COMMENT '请求参数',`ip` varchar(255) DEFAULT NULL COMMENT '请求ip',`cost` bigint(20) DEFAULT NULL COMMENT '请求耗时(单位毫秒)',`create_time` bigint(20) NOT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='系统日志'

2.4 接口设计

整个项目接口采用的目前互联网比较流行的restful风格设计,每个接口、每个参数都有详细的文档说明。因为企业中开发必然是团队协作,必然前后端分离的开发模式,你得先把接口定义出来,然后前端可以和后端同步开发。还有一种就是对外提供接口,比如你们隔壁团队也想调用你这个服务的接口,但是你两排期是同一周,这时候你得先把接口定义出来给人家,然后大家同步开发,开发完了之后再进行联调。

2.4.1 接口定义

2.4.2 接口测试

2.5 权限设计

权限基于security和spring-session实现。权限可以分为认证和授权,认证其实就是登录,用户登录时会进行账号密码的校验,校验成功后会,会把session存入redis中。授权指的是用户是否拥有访问后端资源的权限,每个新用户在创建后都会分配角色,角色其实就是一个权限集合,这里的权限可以理解为访问后端一个个接口(资源)的权限。

这里权限设计的非常灵活,细粒度到按钮级别,比如图书的新增、删除、修改、查询、借阅动作,普通读者可能就只有图书的查询和借阅权限,图书管理员则拥有新增、删除、修改的权限。普通用户访问图书管理模块则只展示查询和借阅按钮,即使通过接口直接访问后端的修改或者删除接口,后端也会返回授权失败错误,因为后端每个需要权限的接口都打了权限标识,只有拥有资源权限用户才能访问。

比如下面的图书修改接口,只有拥有“BOOK_UPDATE”这个权限标识的用户才能访问这个接口,否则返回“未授权”的错误。

@PutMapping("/{id}")
@PreAuthorize("hasAuthority(T(com.senior.book.console.api.security.Authority).BOOK_UPDATE.name())")public Result<Boolean> update(@PathVariable("id") Long id, @Valid @RequestBody BookUpdateVoRequest request) {}

3 运行效果

3.1 系统登录


3.2 图书分类管理

3.3 图书管理

为了让系统更像一个真实的“图书管理系统”,学长写了个脚本,特地从网上爬了10个分类,近600本书,包括书名、作者、简介等信息

这里特地标了“查询、新建、详情、借阅、编辑、删除”几个按钮,因为是admin超级管理员,系统内置的超管权限是拥有所有权限的,实际上这里的每一个按钮都进行权限管理,可以进行自由组合,比如普通读者角色,只需要给读者分配“查询、详细、借阅”三个权限就够了。权限还是非常灵活的。

这里借阅其实也是相对复杂一点的地方,主要是两点:一个是库存小于0的时候不能借阅吧?看下面截图的第四条数据,因为库存是0,所以是不会展示借阅按钮的;另一个是库存只有5本书,但是20个人同时点了借阅,这时候你不能超过库存数吧?也就是你最多只能借出去5本书才对,这里采用的是数据库乐观锁的简单方式实现。

3.4 借阅

借阅必须填写计划归还时间,最多是借阅一个月(参数校验做得还算很细的,这里控件只能选一个月内的时间,另外多说一句,前端页面和后端接口,几乎每个字段都做了参数校验,正常公司里也是这么做的)。同一本书一次只能借阅一本,只有归还后才能继续借阅这本书。

3.5 借阅管理

借阅管理分为三个tab页,“所有借阅”tab页是可以查询到所有历史借阅信息的,“待还借阅”指的是还未归还的借阅记录,“逾期借阅”指的是当前时间大于预计归还时间的借阅记录。这里逾期后系统是没做额外惩罚逻辑处理的,实际上管理员在逾期用户还书的时候可以线下罚款,或者一个季度内超过三次逾期将不能继续借书,或者在逾期前一天给用户发邮件等,思路有很多,这一块个人觉得不是重点,大家有好的点子可以自由发挥~~~

3.6 还书

读者还书时将书籍当面交给图书管理员,图书管理确认后,在借阅记录的待还借阅tab页,通过读者的账号搜索,然后点击还书操作,还书后这本书的借阅记录会从待还借阅tab页移除,同时这本书的库存会加1,到这里其实核心逻辑就走完了。(至于新增图书分类、新增书籍、下架书籍等操作,这都是管理员的活,对应的无法就是新增和编辑、删除按钮)

3.7 日志管理

日志管理默认是开给管理员的,在系统中的所有操作都会被记录,在系统出现异常时也便于管理员进行问题排查。

3.8 用户管理

​默认也是只有管理员拥有用户管理菜单的权限,可以新建/编辑用户、分配用户角色、禁用/启用等操作

3.9 编辑用户信息

3.10 角色管理

默认也是只有管理员拥有角色管理菜单的权限,这里的权限是细粒度到按钮权限的,每个按钮都可以进行权限管理,假如给读者只分配了书籍的“查询”权限,但是这个读者也是个程序员,他想通过接口请求直接访问图书修改接口,这时候后端是会权限校验的,返回“未授权”的错误码,然后前端根据“未授权”错误码会重定向到一个403页面(这也是为什么说只有前端校验是不安全的,后端也必须得校验,这在实际企业里开发也是这样的,还没有实际开发经验的学弟学妹拿个小本本记一记,哈哈哈)

3.11 普通读者登录

系统默认会创建两个角色,一个是超管角色,另一个则是普通读者角色(当然角色大家可以按前面说的自定义)。普通读者登录的菜单以及菜单中的按钮权限都会少很多,截图如下:

3.12 我的借阅

3.13 个人信息修改

4 最后

【毕业设计】基于spring boot的图书管理系统 -java 计算机 软件工程相关推荐

  1. 基于spring boot + MybatisPlus 商城管理系统的Java开源商城系统

    前言 Mall4j项目致力于为中小企业打造一个完整.易于维护的开源的电商系统,采用现阶段流行技术实现.后台管理系统包含商品管理.订单管理.运费模板.规格管理.会员管理.运营管理.内容管理.统计报表.权 ...

  2. 毕业设计-基于spring boot的智慧物业管理系统

    项目描述 这是一个基于spring boot的智慧物业项目,我们的项目实现了用户登录.投诉.保修功能,以及后台物业管理功能.用户可以通过登录界面登录系统,提交投诉或保修请求.管理员可以在后台管理界面查 ...

  3. 毕业设计源码基于Spring Boot的旅游管理系统的实现

    摘  要 社会的发展和科学技术的进步,互联网技术越来越受欢迎.网络计算机的交易方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用.互联网具有便利性,速度快,效率高,成本低等优点. 因此,构建符 ...

  4. 基于 Spring Boot 的停车场管理系统

    大家好,我是老逛! 今天推荐的开源项目是停车场管理系统,具有功能停车收费.物业管理.物联网.自助缴费等功能. 这个项目并不是简单的 Demo 而是可以部署上线的真实项目,该系统目前真实用户 40w 无 ...

  5. 基于SSM实现的图书管理系统-JAVA【数据库设计、源码、开题报告】

    1绪论 1.1项目研究的背景 随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现图书信息的管理势在必行.目前图书管理的借阅工作部分大多数还是手工管理,工作效率很低,并且不能及时了解 ...

  6. [附源码]SSM计算机毕业设计基于web的停车收费管理系统JAVA

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  7. 毕业设计——基于Spring boot框架的 AI智能大数据医疗诊断平台

    首页 主题设置 个人资料 通知 居民医保信息

  8. 基于Spring Boot的宿舍管理系统

    文章目录 项目介绍 主要功能截图: 登录 首页 用户管理 年级管理 机构管理 学生管理 宿舍管理 缺勤管理 保修管理 来访登记 部分代码展示 设计总结 项目获取方式

  9. [教程]HTML5+Bootstrap4+Spring Boot+Mysql 图书管理系统 (附源码)

    这里是一个喜欢编程的小程序员,KSaMar

最新文章

  1. 详解PreparedStatement
  2. Postman:Postman简介、安装、入门使用方法详细攻略
  3. 20135127陶俊杰 实验一
  4. 华为机试——句子逆序
  5. roboware使用过程中出出现找不到功能包的解决办法
  6. Android保存用户名和密码
  7. kafka使用_Kafka生产者的使用和原理
  8. 矩池云上安装ikatago及链接教程
  9. linux vim与less区别,linux中cat、more、less命令区别详解##less 最合适最好用,和vim一样好用...
  10. 【语音判别】基于matlab双门限法判别语音信号【含Matlab源码 1720期】
  11. python编程语言一览_编程语言大汇总(Part Ⅰ)
  12. 深入浅出设计模式(十四):23种设计模式概念总结
  13. 思岚A1激光雷达调试
  14. 问题——nvm use 出现exit status 1:乱码
  15. word编写页码,取消封面编码
  16. 生成树协议(RTP、RSTP、MSTP)
  17. 一本通1375:骑马修栅栏(fence)
  18. C语言计算三角形的面积
  19. python中rjust用法_python中rjust的用法
  20. Qt5 编译错误找不到头文件的解决方法

热门文章

  1. 香农和图灵的边界|网络和计算的本质
  2. 向日葵远程控制引起惠普战笔记本亮度无法调节问题
  3. 树莓派WIFI配置遇到的坑 之 连接不上WIFI
  4. sublime 自定义快捷键、宏录制
  5. 开源的压力测试工具 PyLot
  6. miui系统android os,color os对比miui 一加手机刷Color OS与MIUI系统体验对比评测
  7. 带分页存储管理系统中计算机应用自考,全国2012年4月高等教育自学考试计算机应用技术试题...
  8. Firefox浏览器强制取消自动更新
  9. 2019.9.2选择更新分离版
  10. Vertica—操作汇总