33基于Java简单实现图书馆借书管理系统设计与实现

打印 上一主题 下一主题

主题 544|帖子 544|积分 1632

本章节给大家介绍一个基于Java简单实现图书馆借书管理系统的设计与实现
项目概述

项目总体分为俩种角色,分别是管理员和阅读者,管理员可以登录系统中,进行图书管理,上架下架图书,对用户进行管理、对读者进行管理、查看借阅记录管理等,读者角色可以登录系统查询图书信息、借阅和归还图书、查看个人借阅记录、编辑个人信息等。
项目功能简单,数据库也只有4张表,分别为管理员表,读者表,图书表和借阅记录表,但基本实现了图书馆对图书借书的管理功能,大家可以在这个基础上面灵活增加功能。

项目架构和内容获取

采用B/S的架构实现,整体遵循MVC的设计思想,采用的是前后端分离的技术。
  1. > 开发系统:Windows
  2. > 架构模式:MVC/前后端分离
  3. J> >DK版本:Java JDK1.8
  4. > 开发工具:idea或者eclipse
  5. > 数据库版本: mysql
  6. > 数据库可视化工具: navicat
  7. > 后端:java,spring,springmvc,springboot,mybatis,tomcat等
  8. > 前端:html,css,javascript,vue等
  9. > 更多详细内容可点击查看:http://projecthelp.top
复制代码
项目实现

所有的代码文件都有详细的注释,不用担心看不懂代码的。

  • BookController图书的控制器类:
  1. @RestController
  2. @RequestMapping("/book")
  3. public class BookController extends BaseController {
  4.     @Resource
  5.     private BookService bookService;
  6.     /**
  7.      * 分页查询所有数据
  8.      *
  9.      * @param page 分页对象
  10.      * @param book 查询实体
  11.      * @return 所有数据
  12.      */
  13.     @GetMapping("/list")
  14.     public R selectAll(Page<Book> page, Book book) {
  15.         return result(this.bookService.page(page, book));
  16.     }
  17.     /**
  18.      * 添加图书
  19.      *
  20.      * @param book 图书
  21.      * @return 是否添加成功
  22.      */
  23.     @PostMapping("/add")
  24.     public R addBook(@RequestBody Book book) {
  25.         return result(bookService.save(book));
  26.     }
  27.     /**
  28.      * 修改图书
  29.      *
  30.      * @param book 图书
  31.      * @return 是否修改成功
  32.      */
  33.     @PostMapping("/update")
  34.     public R updateBook(@RequestBody Book book) {
  35.         return result(bookService.updateById(book));
  36.     }
  37.     /**
  38.      * 根据图书编号批量删除图书
  39.      *
  40.      * @param isbns 图书编号表
  41.      * @return 是否删除成功
  42.      */
  43.     @GetMapping("/delete")
  44.     public R deleteBook(@RequestParam List<String> isbns) {
  45.         return result(bookService.removeByIds(isbns));
  46.     }
  47.     //======================= 读者操作接口 ======================
  48.     /**
  49.      * 借阅图书
  50.      *
  51.      * @param isbn     图书编号
  52.      * @param readerId 读者编号
  53.      * @return 是否借阅成功
  54.      */
  55.     @GetMapping("/lendBook")
  56.     public R lendBook(String isbn, Long readerId) {
  57.         return result(bookService.lendBook(isbn, readerId));
  58.     }
  59.     /**
  60.      * 归还图书
  61.      *
  62.      * @param isbn     图书编号
  63.      * @param readerId 读者编号
  64.      * @return 是否归还成功
  65.      */
  66.     @GetMapping("/returnBook")
  67.     public R returnBook(String isbn, Long readerId) {
  68.         return result(bookService.returnBook(isbn, readerId));
  69.     }
  70. }
复制代码

  • 图书service的实现类:
  1. @Service("bookService")
  2. public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {
  3.     @Resource
  4.     private LendRecordService lendRecordService;
  5.     /**
  6.      * 分页查询图书
  7.      *
  8.      * @param page 分页
  9.      * @param book 查询信息
  10.      * @return 图书列表,图书总计
  11.      */
  12.     @Override
  13.     public Map<String, Object> page(Page<Book> page, Book book) {
  14.         String author = book.getAuthor();
  15.         String bookName = book.getBookName();
  16.         QueryWrapper<Book> wrapper = new QueryWrapper<>();
  17.         wrapper.lambda().like(!StringUtils.isEmpty(author), Book::getAuthor, author)
  18.                 .like(!StringUtils.isEmpty(bookName), Book::getBookName, bookName);
  19.         Page<Book> selectPage = this.baseMapper.selectPage(page, wrapper);
  20.         Map<String, Object> map = new HashMap<>();
  21.         map.put("list", selectPage.getRecords());
  22.         map.put("total", selectPage.getTotal());
  23.         return map;
  24.     }
  25.     /**
  26.      * 借阅图书
  27.      * 根据图书的isbn编号借阅图书
  28.      * 如果当前图书未被借阅(status为0),修改status为1,同时新增一条借阅记录
  29.      *
  30.      * @param isbn     图书编号
  31.      * @param readerId 读者编号
  32.      * @return 是否借阅成功
  33.      */
  34.     @Override
  35.     public boolean lendBook(String isbn, Long readerId) {
  36.         Book book = this.baseMapper.selectById(isbn);
  37.         book.setStatus("1");
  38.         int res = this.baseMapper.updateById(book);
  39.         // 新增借阅记录
  40.         LendRecord lendRecord = new LendRecord();
  41.         lendRecord.setIsbn(isbn);
  42.         lendRecord.setReaderId(readerId);
  43.         lendRecord.setLendDate(new Date());
  44.         boolean save = lendRecordService.save(lendRecord);
  45.         return res == 1 && save;
  46.     }
  47.     /**
  48.      * 归还图书
  49.      *
  50.      * @param isbn     图书编号
  51.      * @param readerId 读者编号
  52.      * @return 是否归还成功
  53.      */
  54.     @Override
  55.     public boolean returnBook(String isbn, Long readerId) {
  56.         Book book = this.baseMapper.selectById(isbn);
  57.         book.setStatus("0");
  58.         int res = this.baseMapper.updateById(book);
  59.         // 更新借阅记录状态
  60.         QueryWrapper<LendRecord> wrapper = new QueryWrapper<>();
  61.         wrapper.lambda().eq(LendRecord::getStatus, "0").eq(LendRecord::getIsbn, isbn).eq(LendRecord::getReaderId, readerId);
  62.         LendRecord lendRecord = lendRecordService.getOne(wrapper);
  63.         lendRecord.setReturnDate(new Date());
  64.         lendRecord.setStatus("1");
  65.         boolean update = lendRecordService.update(lendRecord, wrapper);
  66.         return res == 1 && update;
  67.     }
  68. }
复制代码

  • 系统登录处理控制器LoginController:
  1. @RestController
  2. public class LoginController extends BaseController {
  3.     @Resource
  4.     private AdminService adminService;
  5.     @Resource
  6.     private ReaderService readerService;
  7.     /**
  8.      * 登录
  9.      *
  10.      * @param loginBody 登录信息
  11.      * @return 随机字符串uuid
  12.      */
  13.     @PostMapping("/login")
  14.     public R login(@RequestBody LoginBody loginBody) {
  15.         String username = loginBody.getUsername();
  16.         String password = loginBody.getPassword();
  17.         String role = loginBody.getRole();
  18.         Object user = null;
  19.         if (!StringUtils.isEmpty(role)) {
  20.             if ("reader".equals(role)) {
  21.                 // 读者登录
  22.                 QueryWrapper<Reader> wrapper = new QueryWrapper<>();
  23.                 wrapper.lambda().eq(Reader::getUsername, username).eq(Reader::getPassword, password);
  24.                 user = readerService.getOne(wrapper);
  25.             } else if ("admin".equals(role)) {
  26.                 // 管理员登录
  27.                 QueryWrapper<Admin> wrapper = new QueryWrapper<>();
  28.                 wrapper.lambda().eq(Admin::getUsername, username).eq(Admin::getPassword, password);
  29.                 user = adminService.getOne(wrapper);
  30.             }
  31.         }
  32.         if (user != null) { // 登录成功
  33.             String uuid = UUIDUtils.getUUID();
  34.             Long userId = "admin".equals(role) ? ((Admin) user).getId() : ((Reader) user).getReaderId();
  35.             LoginUser.addUser(uuid, role, userId);
  36.             LoginUser.addVisitCount(); // 访问数量加1
  37.             return result(uuid, "登录成功!");
  38.         } else {
  39.             return result(R.ERROR, "登录失败! 账号或密码错误!");
  40.         }
  41.     }
  42.     /**
  43.      * 获取用户信息
  44.      *
  45.      * @param token 令牌
  46.      * @return 用户信息
  47.      */
  48.     @GetMapping("/getInfo")
  49.     public R getInfo(String token) {
  50.         if (!StringUtils.isEmpty(token)) {
  51.             User u = LoginUser.getUserByToken(token);
  52.             if (u != null) {
  53.                 // token验证成功
  54.                 String role = u.getRole();
  55.                 Long userId = u.getUserId();
  56.                 Object user = null;
  57.                 if ("reader".equals(role)) {
  58.                     // 获取读者信息
  59.                     QueryWrapper<Reader> wrapper = new QueryWrapper<>();
  60.                     wrapper.lambda().eq(Reader::getReaderId, userId);
  61.                     user = readerService.getOne(wrapper);
  62.                 } else if ("admin".equals(role)) {
  63.                     // 获取管理员信息
  64.                     QueryWrapper<Admin> wrapper = new QueryWrapper<>();
  65.                     wrapper.lambda().eq(Admin::getId, userId);
  66.                     user = adminService.getOne(wrapper);
  67.                 }
  68.                 return result(user);
  69.             }
  70.         }
  71.         return result(R.SUCCESS, "暂未登录!");
  72.     }
  73.     /**
  74.      * 获取访问数量
  75.      *
  76.      * @return 访问数量
  77.      */
  78.     @GetMapping("/visitCount")
  79.     public R visitCount() {
  80.         return result(LoginUser.getVisitCount());
  81.     }
  82. }
复制代码

  • 完整项目获取
  1. 浏览器输入 projecthelp.top
复制代码
部分功能展示

登录页面

管理员和读者可以通过账号密码登录系统中:

管理员角色

管理员首页

管理员首页展示了所有的借阅次数,总共访问数,总共的图书数量以及总共的读者数量,同时还了图表显示:

图书管理

管理员可以上架新的图书,可以修改,删除图书:

读者管理

管理员可以看到所有的系统读者,还可以增加读者,修改密码等等:

借阅管理

管理员可以查看所有的系统图书的借阅记录:

读者角色

图书查询

读者可以通过图书名称或者图书的作者查询系统的图书列表,对于未借阅的图书,读者可以点击借阅即可借阅图书,然后对于自己已借阅的图书可以进行归还:

查看自己的借阅记录

对于读者在系统上面的借阅记录,可以在借阅管理进行查看:

个人信息

读者可以在个人中心进行信息修改:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表