SpringBoot+MySQL图书管理系统设计与实现 |
您所在的位置:网站首页 › 图书管理系统设计流程 › SpringBoot+MySQL图书管理系统设计与实现 |
文章目录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 系统概述图书管理作为计算机应用的一个分支,有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,这些优点能够极大地提高图书管理的效率。因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统是非常必要的。 本系统实现了图书管理、借阅管理、用户管理、公告管理、个人中心等功能,界面友好、操作容易、维护简单、能够处理大量数据,同时保持数据的完整性、安全性,符合高校图书管理系统的要求。 ![]() 本系统主要用于高校图书管理,使用人群为系统管理员、普通读者。 系统管理员:管理整个系统的各项功能,如:公告信息、图书信息、用户信息更新维护。普通读者:借阅图书、归还图书、阅览公告信息、查询编辑个人信息等。06 功能分析系统管理员: 首页 名片方式展示系统管理员拥有的权限图书管理 图书列表:显示已上架的图书信息,可对已上架图书进行搜索、修改、删除操作图书上架:录入图书信息,输入图书名称、作者、图书分类,页数,定价等数据进行图书录入借阅管理 借阅图书:根据图书名称、作者名称,图书分类等搜索、查看、借阅图书归还图书:对已经借阅的图书进行归还操作用户管理 用户列表:显示已经注册的用户,可以对已经注册的用户信息进行搜索、修改、删除操作用户添加:录入用户的昵称、用户名、密码、生日、电话、邮箱等信息添加新用户公告管理 公告列表:可以对已经发布的公告进行搜索、修改、删除等操作公告发布:输入公告标题,发布时间,公告内容等要素发布公共个人管理 个人信息详情:查看个人信息个人信息修改:修改个人信息![]() 普通读者: 首页 名片方式展示普通读者拥有的权限借阅管理 借阅图书:根据图书名称、作者名称,图书分类等搜索、查看、借阅图书归还图书:对已经借阅的图书进行归还操作公告管理 公告列表:查看已经发布的公告个人管理 个人信息详情:查看个人信息个人信息修改:修改个人信息![]() users: 存储用户信息 字段名称 类型 是否为null 是否主键 说明 id int 否 是 ID主键 address varchar 是 否 地址 avatar varchar 是 否 头像 birthday datetime 是 否 生日 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 |