SpringBoot+MySQL图书管理系统设计与实现

您所在的位置:网站首页 图书管理系统设计流程 SpringBoot+MySQL图书管理系统设计与实现

SpringBoot+MySQL图书管理系统设计与实现

2024-07-17 15:22| 来源: 网络整理| 查看: 265

文章目录01 完整源码下载02 系统概述03 开发工具及技术选型04 运行环境05 用户分析06 功能分析07 数据库设计08 项目工程结构及说明09 部分功能展示及源码9.1 首页9.2 图书管理9.3 借阅管理9.4 用户管理9.5 公告管理9.6 个人中心10 运行教程01 完整源码下载

温馨提示:图书管理系统(booksManageBoot)完整源码下载地址附在文章末尾

02 系统概述

图书管理作为计算机应用的一个分支,有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,这些优点能够极大地提高图书管理的效率。因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统是非常必要的。

本系统实现了图书管理、借阅管理、用户管理、公告管理、个人中心等功能,界面友好、操作容易、维护简单、能够处理大量数据,同时保持数据的完整性、安全性,符合高校图书管理系统的要求。

03 开发工具及技术选型数据表现层:Html+JavaScript+CSS+JavaEx+JQuery业务逻辑层:Java+Spring+SpringMVC数据持久层:MySQL+MyBatis开发工具:IDEA / Eclipse04 运行环境代码语言:javascript复制JDK1.8 + Maven3 + MySQL5.705 用户分析

本系统主要用于高校图书管理,使用人群为系统管理员、普通读者。

系统管理员:管理整个系统的各项功能,如:公告信息、图书信息、用户信息更新维护。普通读者:借阅图书、归还图书、阅览公告信息、查询编辑个人信息等。06 功能分析

系统管理员:

首页 名片方式展示系统管理员拥有的权限图书管理 图书列表:显示已上架的图书信息,可对已上架图书进行搜索、修改、删除操作图书上架:录入图书信息,输入图书名称、作者、图书分类,页数,定价等数据进行图书录入借阅管理 借阅图书:根据图书名称、作者名称,图书分类等搜索、查看、借阅图书归还图书:对已经借阅的图书进行归还操作用户管理 用户列表:显示已经注册的用户,可以对已经注册的用户信息进行搜索、修改、删除操作用户添加:录入用户的昵称、用户名、密码、生日、电话、邮箱等信息添加新用户公告管理 公告列表:可以对已经发布的公告进行搜索、修改、删除等操作公告发布:输入公告标题,发布时间,公告内容等要素发布公共个人管理 个人信息详情:查看个人信息个人信息修改:修改个人信息

普通读者:

首页 名片方式展示普通读者拥有的权限借阅管理 借阅图书:根据图书名称、作者名称,图书分类等搜索、查看、借阅图书归还图书:对已经借阅的图书进行归还操作公告管理 公告列表:查看已经发布的公告个人管理 个人信息详情:查看个人信息个人信息修改:修改个人信息07 数据库设计

users: 存储用户信息

字段名称

类型

是否为null

是否主键

说明

id

int

ID主键

address

varchar

地址

avatar

varchar

头像

birthday

datetime

生日

email

varchar

邮箱

is_admin

int

是否为管理员(0 管理员 1 普通用户)

nickname

varchar

昵称

password

varchar

密码

size

int

可借数量

tel

varchar

电话

username

varchar

用户名

book: 存储图书信息

字段名称

类型

是否为null

是否主键

说明

id

int

ID主键

author

varchar

图书作者

isbn

varchar

图书ISBN编码

name

varchar

图书名称

pages

int

图书页数

price

double

单价

publish

varchar

出版社

publish_time

datetime

出版时间

size

int

库存

translate

varchar

翻译

type

varchar

分类

borrow: 存储借阅信息

字段名称

类型

是否为null

是否主键

说明

id

int

ID主键

book_id

int

图书ID

create_time

datetime

借阅时间

update_time

datetime

实际归还时间

user_id

int

用户ID

end_time

datetime

归还时间

ret

int

是否归还(0 已归还 1 未归还)

notice: 存储公告信息

字段名称

类型

是否为null

是否主键

说明

id

int

ID主键

title

varchar

标题

date

datetime

发布时间

content

text

内容

08 项目工程结构及说明

下载本项目源码并导入到开发工具后(下图为导入到IDEA中的目录结构),项目的目录结构如下图所示:

包名

说明

com.cya.config

存放基础配置类,如:拦截器配置类、管理后台Swagger配置类、Spring Security安全配置类等

com.cya.controller

用于存放接收请求的Controller类,前后端交互的“桥梁”

com.cya.service

存放业务逻辑层代码

com.cya.dao

存放数据持久层代码

com.cya.entity

存放实体类

com.cya.util

存放工具类

com.cya.interceptor

登录拦截器

resources/mapper

mybatis mapper文件

resources/staitc

存放静态文件,如:JavaScript、CSS、img

resources/templates

存放html文件

application.yml

SpringBoot框架配置文件,如:项目启动端口、项目路径、数据库配置等

ManagerApplication.java

项目启动类

09 部分功能展示及源码9.1 首页

部分代码:

代码语言:javascript复制 图书管理系统-首页 图书管理系统 欢迎您, 退出当前账号 首页 图书管理 图书列表 图书上架 借阅管理 借阅图书 归还图书 用户管理 用户列表 用户添加 公告管理 公告列表 公告发布 个人中心 个人信息详情 个人信息修改 首页 借阅管理 借阅图书 归还图书 公告管理 公告列表 个人中心 个人信息详情 个人信息修改 公众号【IT学长】 var hightUrl = "xxxx"; javaex.menu({ id : "menu", isAutoSelected : true, key : "", url : hightUrl }); $(function() { // 设置左侧菜单高度 setMenuHeight(); }); /** * 设置左侧菜单高度 */ function setMenuHeight() { var height = document.documentElement.clientHeight - $("#admin-toc").offset().top; height = height - 10; $("#admin-toc").css("height", height+"px"); } // 控制页面载入 function page(url) { $("#page").attr("src", url); } $(document).ready(function(){ // 页面一加载, 读取登录用户信息 $.get("user/currUser", function(data){ var user = data.data; var userId = user.id; console.log("user",user); if (userId >0) { $("#login_user").text(user.username+"["+user.ident+"]"); $("#index_role").val(user.isAdmin); if(user.isAdmin==0){ $("#adminMenu").css("display",'block'); $("#userMenu").css("display",'none'); } else{ $("#adminMenu").css("display",'none'); $("#userMenu").css("display",'block'); } }else { // 找不到用户, 不可进行借阅操作 javaex.message({ content : "登录信息已失效, 请登录后借阅", type : "error" }); } }); }); 9.2 图书管理

图书上架:

图书修改:

部分源码:

代码语言:javascript复制package com.book.manager.controller; import com.book.manager.entity.Book; import com.book.manager.service.BookService; import com.book.manager.service.BorrowService; import com.book.manager.util.R; import com.book.manager.util.http.CodeEnum; import com.book.manager.util.ro.PageIn; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; /** * @Description 用户管理 * @Date 2022/9/4 16:35 * @Author by 公众号【IT学长】 */ @Api(tags = "图书管理") @RestController @RequestMapping("/book") public class BookController { @Autowired private BookService bookService; @Autowired private BorrowService borrowService; @ApiOperation("图书搜索列表") @PostMapping("/list") public R getBookList(@RequestBody PageIn pageIn) { if (pageIn == null) { return R.fail(CodeEnum.PARAM_ERROR); } return R.success(CodeEnum.SUCCESS,bookService.getBookList(pageIn)); } @ApiOperation("添加图书") @PostMapping("/add") public R addBook(@RequestBody Book book) { return R.success(CodeEnum.SUCCESS,bookService.addBook(book)); } @ApiOperation("编辑图书") @PostMapping("/update") public R modifyBook(@RequestBody Book book) { return R.success(CodeEnum.SUCCESS,bookService.updateBook(book)); } @ApiOperation("图书详情") @GetMapping("/detail") public R bookDetail(Integer id) { return R.success(CodeEnum.SUCCESS,bookService.findBookById(id)); } @ApiOperation("图书详情 根据ISBN获取") @GetMapping("/detailByIsbn") public R bookDetailByIsbn(String isbn) { return R.success(CodeEnum.SUCCESS,bookService.findBookByIsbn(isbn)); } @ApiOperation("删除图书") @GetMapping("/delete") public R delBook(Integer id) { bookService.deleteBook(id); borrowService.deleteBorrowByBookId(id); return R.success(CodeEnum.SUCCESS); } }9.3 借阅管理

借阅图书:

归还图书:

部分源码:

代码语言:javascript复制package com.book.manager.service; import cn.hutool.core.bean.BeanUtil; import com.book.manager.dao.BookMapper; import com.book.manager.dao.BorrowMapper; import com.book.manager.dao.UsersMapper; import com.book.manager.entity.Book; import com.book.manager.entity.Borrow; import com.book.manager.entity.Users; import com.book.manager.repos.BookRepository; import com.book.manager.repos.BorrowRepository; import com.book.manager.util.consts.Constants; import com.book.manager.util.vo.BookOut; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Optional; /** * @Description 借阅管理 * @Date 2022/9/4 16:35 * @Author by 公众号【IT学长】 */ @Service public class BorrowService { @Autowired private BorrowRepository borrowRepository; @Autowired private BorrowMapper borrowMapper; @Autowired private BookService bookService; @Autowired private UserService userService; /** * 添加 */ @Transactional public Integer addBorrow(Borrow borrow) { Book book = bookService.findBook(borrow.getBookId()); Users users = userService.findUserById(borrow.getUserId()); // 查询是否已经借阅过该图书 Borrow bor = findBorrowByUserIdAndBookId(users.getId(),book.getId()); if (bor!=null) { Integer ret = bor.getRet(); if (ret!=null) { // 已借阅, 未归还 不可再借 if (ret == Constants.NO) { return Constants.BOOK_BORROWED; } } } // 库存数量减一 int size = book.getSize(); if (size>0) { size--; book.setSize(size); bookService.updateBook(book); }else { return Constants.BOOK_SIZE_NOT_ENOUGH; } // 用户可借数量减一 int userSize = users.getSize(); if (userSize>0) { userSize --; users.setSize(userSize); userService.updateUser(users); }else { return Constants.USER_SIZE_NOT_ENOUGH; } // 添加借阅信息, 借阅默认为未归还状态 borrow.setRet(Constants.NO); borrowRepository.saveAndFlush(borrow); // 一切正常 return Constants.OK; } /** * user id查询所有借阅信息 */ public List findAllBorrowByUserId(Integer userId) { return borrowRepository.findBorrowByUserId(userId); } /** * user id查询所有 已借阅信息 */ public List findBorrowsByUserIdAndRet(Integer userId, Integer ret) { return borrowRepository.findBorrowsByUserIdAndRet(userId,ret); } /** * 详情 */ public Borrow findById(Integer id) { Optional optional = borrowRepository.findById(id); if (optional.isPresent()) { return optional.get(); } return null; } /** * 编辑 */ public boolean updateBorrow(Borrow borrow) { return borrowMapper.updateBorrow(borrow)>0; } /** * 编辑 */ public Borrow updateBorrowByRepo(Borrow borrow) { return borrowRepository.saveAndFlush(borrow); } /** * 根据ID删除 */ public void deleteBorrow(Integer id) { borrowRepository.deleteById(id); } /** * 根据book_id删除 */ public void deleteBorrowByBookId(Integer bookId) { borrowMapper.deleteBorrowByBookId(bookId); } /** * 查询用户某一条借阅信息 * @param userId 用户id * @param bookId 图书id */ public Borrow findBorrowByUserIdAndBookId(int userId,int bookId) { return borrowMapper.findBorrowByUserIdAndBookId(userId,bookId); } /** * 归还书籍, * @param userId 用户Id * @param bookId 书籍id */ @Transactional(rollbackFor = Exception.class) public void retBook(int userId,int bookId) { // 用户可借数量加1 Users user = userService.findUserById(userId); Integer size = user.getSize(); size++; user.setSize(size); userService.updateUser(user); // 书籍库存加1 Book book = bookService.findBook(bookId); Integer bookSize = book.getSize(); bookSize++; book.setSize(bookSize); bookService.updateBook(book); // 借阅记录改为已归还,删除记录 Borrow borrow = this.findBorrowByUserIdAndBookId(userId, bookId); this.deleteBorrow(borrow.getId()); } }9.4 用户管理

用户列表:

用户添加:

部分源码:

代码语言:javascript复制 select * from users and `username` like CONCAT('%',#{_parameter},'%') or `nickname` like CONCAT('%',#{_parameter},'%') update users avatar = #{avatar}, nickname = #{nickname}, username = #{username}, password = #{password}, birthday = #{birthday}, is_admin = #{isAdmin}, tel = #{tel}, email = #{email}, address = #{address}, `size` = #{size}, where id = #{id} 9.5 公告管理

公告列表:

公告详情:

部分源码:

代码语言:javascript复制package com.book.manager.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.book.manager.entity.Notice; import com.book.manager.entity.Users; import com.book.manager.service.NoticeService; import com.book.manager.util.R; import com.book.manager.util.consts.Constants; import com.book.manager.util.consts.ConvertUtil; import com.book.manager.util.http.CodeEnum; import com.book.manager.util.vo.NoticeOut; import com.book.manager.util.vo.PageOut; import com.book.manager.util.vo.UserOut; import com.book.manager.util.ro.PageIn; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @Description 公告管理 * @Date 2022/9/4 16:35 * @Author by 公众号【IT学长】 */ @Api(tags = "公告管理") @RestController @RequestMapping("/notice") public class NoticeController { @Autowired private NoticeService noticeService; @ApiOperation("公告列表") @PostMapping("/list") public R getNotices(@RequestBody PageIn pageIn) { if (pageIn == null) { return R.fail(CodeEnum.PARAM_ERROR); } // 封装分页出参对象 PageInfo noticeList = noticeService.getNoticeList(pageIn); PageOut pageOut = new PageOut(); pageOut.setCurrPage(noticeList.getPageNum()); pageOut.setPageSize(noticeList.getPageSize()); pageOut.setTotal((int) noticeList.getTotal()); List outs = new ArrayList(); for (Notice notice : noticeList.getList()) { NoticeOut out = new NoticeOut(); BeanUtils.copyProperties(notice,out); out.setDate1(DateUtil.format(notice.getDate(),Constants.DATE_FORMAT)); outs.add(out); } pageOut.setList(outs); return R.success(CodeEnum.SUCCESS,pageOut); } @ApiOperation("添加公告") @PostMapping("/addNoticer") public R addNoticer(@RequestBody Notice notice) { if (notice == null) { return R.fail(CodeEnum.PARAM_ERROR); } return R.success(CodeEnum.SUCCESS,noticeService.addNotice(notice)); } @ApiOperation("编辑公告") @PostMapping("/update") public R modifyNotice(@RequestBody Notice notice) { return R.success(CodeEnum.SUCCESS,noticeService.updateNotice(notice)); } @ApiOperation("公告详情") @GetMapping("/detail") public R noticeDetail(Integer id) { Notice notice = noticeService.findNoticeById(id); if (notice!=null) { NoticeOut out = new NoticeOut(); BeanUtils.copyProperties(notice,out); out.setDate1(DateUtil.format(notice.getDate(),Constants.DATE_FORMAT)); return R.success(CodeEnum.SUCCESS,out); } return R.fail(CodeEnum.NOT_FOUND); } @ApiOperation("删除公告") @GetMapping("/delete") public R delNotice(Integer id) { noticeService.deleteNotice(id); return R.success(CodeEnum.SUCCESS); } }9.6 个人中心

个人信息详情:

部分源码:

代码语言:javascript复制 图书管理系统-查询个人信息

个人信息

*

昵称

*

用户名

*

密码

生日

电话

身份

邮箱

地址

可借数量

javaex.select({ id : "select", isSearch : false }); // 页面加载执行 $(document).ready(function() { // get读取参数 $.get("../user/currUser", function(data) { var user = data.data; $("#nickname").val(user.nickname); $("#username").val(user.username); $("#password").val(user.password); $("#birthday").val(user.birth); $("#tel").val(user.tel); $("#email").val(user.email); $("#address").val(user.address); $("#size").val(user.size); $("#ident").val(user.ident); return false; }); }); 10 运行教程

详细运行步骤及常见问题解答请看“图书管理系统设计与实现(SpringBoot+Mysql+JavaEx)”源码包中 README.md 文件。

通过第10章节下载源码包并解压后如下图所示:



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3