兜兜零元 发表于 2023-5-8 17:39:44

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

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

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

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

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

[*]BookController图书的控制器类:
@RestController
@RequestMapping("/book")
public class BookController extends BaseController {
    @Resource
    private BookService bookService;

    /**
   * 分页查询所有数据
   *
   * @param page 分页对象
   * @param book 查询实体
   * @return 所有数据
   */
    @GetMapping("/list")
    public R selectAll(Page<Book> page, Book book) {
      return result(this.bookService.page(page, book));
    }

    /**
   * 添加图书
   *
   * @param book 图书
   * @return 是否添加成功
   */
    @PostMapping("/add")
    public R addBook(@RequestBody Book book) {
      return result(bookService.save(book));
    }

    /**
   * 修改图书
   *
   * @param book 图书
   * @return 是否修改成功
   */
    @PostMapping("/update")
    public R updateBook(@RequestBody Book book) {
      return result(bookService.updateById(book));
    }

    /**
   * 根据图书编号批量删除图书
   *
   * @param isbns 图书编号表
   * @return 是否删除成功
   */
    @GetMapping("/delete")
    public R deleteBook(@RequestParam List<String> isbns) {
      return result(bookService.removeByIds(isbns));
    }

    //======================= 读者操作接口 ======================

    /**
   * 借阅图书
   *
   * @param isbn   图书编号
   * @param readerId 读者编号
   * @return 是否借阅成功
   */
    @GetMapping("/lendBook")
    public R lendBook(String isbn, Long readerId) {
      return result(bookService.lendBook(isbn, readerId));
    }

    /**
   * 归还图书
   *
   * @param isbn   图书编号
   * @param readerId 读者编号
   * @return 是否归还成功
   */
    @GetMapping("/returnBook")
    public R returnBook(String isbn, Long readerId) {
      return result(bookService.returnBook(isbn, readerId));
    }
}

[*]图书service的实现类:
@Service("bookService")
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {
    @Resource
    private LendRecordService lendRecordService;

    /**
   * 分页查询图书
   *
   * @param page 分页
   * @param book 查询信息
   * @return 图书列表,图书总计
   */
    @Override
    public Map<String, Object> page(Page<Book> page, Book book) {
      String author = book.getAuthor();
      String bookName = book.getBookName();

      QueryWrapper<Book> wrapper = new QueryWrapper<>();
      wrapper.lambda().like(!StringUtils.isEmpty(author), Book::getAuthor, author)
                .like(!StringUtils.isEmpty(bookName), Book::getBookName, bookName);

      Page<Book> selectPage = this.baseMapper.selectPage(page, wrapper);
      Map<String, Object> map = new HashMap<>();
      map.put("list", selectPage.getRecords());
      map.put("total", selectPage.getTotal());
      return map;
    }

    /**
   * 借阅图书
   * 根据图书的isbn编号借阅图书
   * 如果当前图书未被借阅(status为0),修改status为1,同时新增一条借阅记录
   *
   * @param isbn   图书编号
   * @param readerId 读者编号
   * @return 是否借阅成功
   */
    @Override
    public boolean lendBook(String isbn, Long readerId) {
      Book book = this.baseMapper.selectById(isbn);
      book.setStatus("1");
      int res = this.baseMapper.updateById(book);

      // 新增借阅记录
      LendRecord lendRecord = new LendRecord();
      lendRecord.setIsbn(isbn);
      lendRecord.setReaderId(readerId);
      lendRecord.setLendDate(new Date());
      boolean save = lendRecordService.save(lendRecord);

      return res == 1 && save;
    }

    /**
   * 归还图书
   *
   * @param isbn   图书编号
   * @param readerId 读者编号
   * @return 是否归还成功
   */
    @Override
    public boolean returnBook(String isbn, Long readerId) {
      Book book = this.baseMapper.selectById(isbn);
      book.setStatus("0");
      int res = this.baseMapper.updateById(book);

      // 更新借阅记录状态
      QueryWrapper<LendRecord> wrapper = new QueryWrapper<>();
      wrapper.lambda().eq(LendRecord::getStatus, "0").eq(LendRecord::getIsbn, isbn).eq(LendRecord::getReaderId, readerId);
      LendRecord lendRecord = lendRecordService.getOne(wrapper);
      lendRecord.setReturnDate(new Date());
      lendRecord.setStatus("1");
      boolean update = lendRecordService.update(lendRecord, wrapper);

      return res == 1 && update;

    }
}

[*]系统登录处理控制器LoginController:
@RestController
public class LoginController extends BaseController {
    @Resource
    private AdminService adminService;
    @Resource
    private ReaderService readerService;

    /**
   * 登录
   *
   * @param loginBody 登录信息
   * @return 随机字符串uuid
   */
    @PostMapping("/login")
    public R login(@RequestBody LoginBody loginBody) {
      String username = loginBody.getUsername();
      String password = loginBody.getPassword();
      String role = loginBody.getRole();
      Object user = null;

      if (!StringUtils.isEmpty(role)) {
            if ("reader".equals(role)) {
                // 读者登录
                QueryWrapper<Reader> wrapper = new QueryWrapper<>();
                wrapper.lambda().eq(Reader::getUsername, username).eq(Reader::getPassword, password);
                user = readerService.getOne(wrapper);
            } else if ("admin".equals(role)) {
                // 管理员登录
                QueryWrapper<Admin> wrapper = new QueryWrapper<>();
                wrapper.lambda().eq(Admin::getUsername, username).eq(Admin::getPassword, password);
                user = adminService.getOne(wrapper);
            }
      }

      if (user != null) { // 登录成功
            String uuid = UUIDUtils.getUUID();
            Long userId = "admin".equals(role) ? ((Admin) user).getId() : ((Reader) user).getReaderId();
            LoginUser.addUser(uuid, role, userId);
            LoginUser.addVisitCount(); // 访问数量加1
            return result(uuid, "登录成功!");
      } else {
            return result(R.ERROR, "登录失败! 账号或密码错误!");
      }
    }

    /**
   * 获取用户信息
   *
   * @param token 令牌
   * @return 用户信息
   */
    @GetMapping("/getInfo")
    public R getInfo(String token) {
      if (!StringUtils.isEmpty(token)) {
            User u = LoginUser.getUserByToken(token);
            if (u != null) {
                // token验证成功
                String role = u.getRole();
                Long userId = u.getUserId();
                Object user = null;

                if ("reader".equals(role)) {
                  // 获取读者信息
                  QueryWrapper<Reader> wrapper = new QueryWrapper<>();
                  wrapper.lambda().eq(Reader::getReaderId, userId);
                  user = readerService.getOne(wrapper);
                } else if ("admin".equals(role)) {
                  // 获取管理员信息
                  QueryWrapper<Admin> wrapper = new QueryWrapper<>();
                  wrapper.lambda().eq(Admin::getId, userId);
                  user = adminService.getOne(wrapper);
                }
                return result(user);
            }
      }
      return result(R.SUCCESS, "暂未登录!");
    }

    /**
   * 获取访问数量
   *
   * @return 访问数量
   */
    @GetMapping("/visitCount")
    public R visitCount() {
      return result(LoginUser.getVisitCount());
    }
}

[*]完整项目获取
浏览器输入 projecthelp.top 部分功能展示

登录页面

管理员和读者可以通过账号密码登录系统中:
https://img-blog.csdnimg.cn/ca6edaa89e6a42a085c02d1219bdc8a0.png
管理员角色

管理员首页

管理员首页展示了所有的借阅次数,总共访问数,总共的图书数量以及总共的读者数量,同时还了图表显示:
https://img-blog.csdnimg.cn/9c9e9f1c533047a58bc7a810ff20bc9f.png
图书管理

管理员可以上架新的图书,可以修改,删除图书:
https://img-blog.csdnimg.cn/f4036b2c31b7435da0b31f4b6faba0bc.png
读者管理

管理员可以看到所有的系统读者,还可以增加读者,修改密码等等:
https://img-blog.csdnimg.cn/2614f0c208fb411aa354df147c70e4c1.png
借阅管理

管理员可以查看所有的系统图书的借阅记录:
https://img-blog.csdnimg.cn/3cede22207824b07a6da7238ee5787f5.png
读者角色

图书查询

读者可以通过图书名称或者图书的作者查询系统的图书列表,对于未借阅的图书,读者可以点击借阅即可借阅图书,然后对于自己已借阅的图书可以进行归还:
https://img-blog.csdnimg.cn/8e9b37a0661a47769fd70ce0c2f28835.png
查看自己的借阅记录

对于读者在系统上面的借阅记录,可以在借阅管理进行查看:
https://img-blog.csdnimg.cn/70dde8a6d0ae486ab90ea1033845b45c.png
个人信息

读者可以在个人中心进行信息修改:
https://img-blog.csdnimg.cn/83d254be1eca4857bf149b4818438aec.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 33基于Java简单实现图书馆借书管理系统设计与实现