云借阅图书管理系统
作者:mmseoamin日期:2023-12-11

前言

         基于SSM(Spring + Spring MVC + Mybatis)框架开发的一个较为简单的云借阅图书管理系统,虽然比较简单,但是耐心的做完会对 Spring框架 和 Spring MVC框架 以及 Mybatis框架 这三个框架的整合开发有一个较好的理解。下面我就来简单的研究一下代码,全部的代码文件,我会放在结尾。

目录

前言

一、需求分析

二、数据库设计

三、部分功能和全部模块展示

四、核心功能代码(主要展示业务逻辑层的核心代码)

五、文件结构

总结


一、需求分析

云借阅图书管理系统,第1张

二、数据库设计

用户表(user)

云借阅图书管理系统,第2张

图书信息表(book)

云借阅图书管理系统,第3张

借阅记录表(record)

云借阅图书管理系统,第4张

 三、部分功能和全部模块展示

登录模块

云借阅图书管理系统,第5张

新书推荐模块

云借阅图书管理系统,第6张

 图书借阅模块 

云借阅图书管理系统,第7张

当前借阅模块

云借阅图书管理系统,第8张

借阅记录模块

云借阅图书管理系统,第9张

添加图书功能

云借阅图书管理系统,第10张

编辑图书功能

云借阅图书管理系统,第11张

四、核心功能代码(主要展示业务逻辑层的核心代码)

登录功能模块

package com.demo.service.Impl;
import com.demo.domain.User;
import com.demo.mapper.UserMapper;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @BelongsProject: CloudLibraryManagementSystem
 * @BelongsPackage: com.demo.service.Impl
 * @Author: 云边小屋(My.Tears)
 * @CreateTime: 2023-03-21  09:14
 * @Description: TODO
 * @Version: 1.0
 */
@Service
public class UserServiceImpl implements UserService {
    // 注入UserMapper对象
    private UserMapper userMapper;
    @Autowired
    public UserServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
    // 通过User的用户账户和用户密码查询用户信息
    @Override
    public User login(User user) {
        return userMapper.login(user);
    }
}

图书功能模块

package com.demo.service.Impl;
import com.demo.domain.Book;
import com.demo.domain.Record;
import com.demo.domain.User;
import com.demo.entity.PageResult;
import com.demo.mapper.BookMapper;
import com.demo.service.BookService;
import com.demo.service.RecordService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * @BelongsProject: CloudLibraryManagementSystem
 * @BelongsPackage: com.demo.service.Impl
 * @Author: 云边小屋(My.Tears)
 * @CreateTime: 2023-03-21  21:52
 * @Description: TODO
 * @Version: 1.0
 */
@Service
// 开启事务注解 在操作多个数据库的时候要么同时成功 要么同时失败
@Transactional
public class BookServiceImpl implements BookService {
    // 注入BookMapper对象
    private BookMapper bookMapper;
    // 注入RecordService对象
    private RecordService recordService;
    @Autowired
    public BookServiceImpl(BookMapper bookMapper, RecordService recordService) {
        this.bookMapper = bookMapper;
        this.recordService = recordService;
    }
    /**
     * 根据当前页码和每页需要展示的数据条数 查询最新上架的图书信息 (规定每页只存在几条图书信息)
     *
     * @param pageNum  当前页码
     * @param pageSize 每页显示的数量
     * @return
     */
    @Override
    public PageResult selectNewBooks(Integer pageNum, Integer pageSize) {
        // 设置分页查询的参数 开始分页
        PageHelper.startPage(pageNum, pageSize);
        // 将查询到的结果集 给Page
        Page page = bookMapper.selectNewBooks();
        // 创建PageResult对象 将总和 和 查询到的结果集封装起来
        return new PageResult(page.getTotal(), page.getResult());
    }
    /**
     * 通过id查询图书信息
     *
     * @param id id
     * @return {@link Book}
     */
    @Override
    public Book findBookById(String id) {
        return bookMapper.findBookById(id);
    }
    /**
     * 借阅图书
     *
     * @param book 书
     * @return {@link Integer}
     */
    @Override
    public Integer borrowBook(Book book) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        // 设置当天为借阅时间
        book.setBorrowTime(dateFormat.format(new Date()));
        // 设置所借阅的图书状态为借阅中
        book.setStatus("1");
        // 更新图书信息
        return bookMapper.editBook(book);
    }
    /**
     * 查询图书
     *
     * @param book     书
     * @param pageNum  当前页面
     * @param pageSize 页面的长度
     * @return {@link PageResult}
     */
    @Override
    public PageResult search(Book book, Integer pageNum, Integer pageSize) {
        // 设置分页查询
        PageHelper.startPage(pageNum, pageSize);
        // 封装结果集
        Page books = bookMapper.searchBooks(book);
        // 返回结果集给分页插件
        return new PageResult(books.getTotal(), books.getResult());
    }
    /**
     * 添加图书
     *
     * @param book 书
     * @return {@link Integer}
     */
    @Override
    public Integer addBook(Book book) {
        // 设置上架时间
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String uploadTime = format.format(new Date());
        book.setUploadTime(uploadTime);
        return bookMapper.addBook(book);
    }
    /**
     * 编辑图书
     *
     * @param book 书
     * @return {@link Integer}
     */
    @Override
    public Integer editBook(Book book) {
        return bookMapper.editBook(book);
    }
    /**
     * 查询图书
     *
     * @param book     封装图书
     * @param user     判断用户是否为管理员
     * @param pageNum  页面的码页
     * @param pageSize 页面的长度
     * @return {@link PageResult}
     */
    @Override
    public PageResult searchBorrowed(Book book, User user, Integer pageNum, Integer pageSize) {
        // 设置分页查询的参数
        PageHelper.startPage(pageNum, pageSize);
        // 将当前登录的用户获取
        book.setBorrower(user.getName());
        Page page = null;
        // 判断是否为管理员
        if ("ADMIN".equals(user.getRole())) {
            // 管理员 --> 可以查询当前的借阅图书以及所有的归还中的图书
            page = bookMapper.selectBorrowed(book);
        } else {
            // 普通人 --> 可以查询当前的借阅图书以及当前的归还中的图书和未归还的图书
            page = bookMapper.selectMyBorrowed(book);
        }
        // 返回封装的结果集 后面交给前端处理
        return new PageResult(page.getTotal(), page.getResult());
    }
    /**
     * 归还图书
     *
     * @param id   归还图书的id
     * @param user 归还的人员
     * @return {@link Boolean}
     */
    @Override
    public Boolean returnBook(String id, User user) {
        // 根据图书id查询图书的完整信息
        Book bookById = this.findBookById(id);
        // 检查当前登录人员和图书借阅者是否为同一个人
        boolean flag = bookById.getBorrower().equals(user.getName());
        // 判断是否为空同一个人
        if (flag) {
            // 等于true 就说明是同一个人 修改图书的状态 改成归还中 等待管理员确认
            bookById.setStatus("2");
            bookMapper.editBook(bookById);
        }
        return flag;
    }
    /**
     * 确认归还
     *
     * @param id 待归还的图书id
     * @return {@link Integer}
     */
    @Override
    public Integer returnConfirm(String id) {
        // 根据图书的id查询图书的完整信息
        Book bookById = this.findBookById(id);
        // 获取归还图书的借阅信息
        String borrower = bookById.getBorrower();
        String borrowTime = bookById.getBorrowTime();
        // 将图书的借阅状态修改成可借阅
        bookById.setStatus("0");
        // 清除当前图书的借阅人信息
        bookById.setBorrower("");
        // 清除当前图书的借阅时间信息
        bookById.setBorrowTime("");
        // 清除当前图书的预计归还时间信息
        bookById.setReturnTime("");
        Integer book = bookMapper.editBook(bookById);
        if (book > 0) {
            // 当管理员确认无误归还图书 就将图书记录添加到Record中
            Record record = new Record();
            // 设置借阅时间
            record.setId(bookById.getId());
            record.setBookIsbn(bookById.getIsbn());
            record.setBookName(bookById.getName());
            record.setBorrowTime(borrowTime);
            record.setBookBorrower(borrower);
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String returnTime = format.format(new Date());
            record.setRemandTime(returnTime);
            recordService.addRecord(record);
        }
        return book;
    }
}

借阅记录功能模块

package com.demo.service.Impl;
import com.demo.domain.Record;
import com.demo.domain.User;
import com.demo.entity.PageResult;
import com.demo.mapper.RecordMapper;
import com.demo.service.RecordService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @BelongsProject: CloudLibraryManagementSystem
 * @BelongsPackage: com.demo.service.Impl
 * @Author: 云边小屋(My.Tears)
 * @CreateTime: 2023-03-24  15:19
 * @Description: TODO
 * @Version: 1.0
 */
@Service
public class RecordServiceImpl implements RecordService {
    // 注入RecordMapper对象
    private RecordMapper recordMapper;
    @Autowired
    public RecordServiceImpl(RecordMapper recordMapper) {
        this.recordMapper = recordMapper;
    }
    /**
     * 添加借阅记录
     *
     * @param record 记录
     * @return {@link Integer}
     */
    @Override
    public Integer addRecord(Record record) {
        return recordMapper.addRecord(record);
    }
    /**
     * 查询借阅记录
     *
     * @param record   当前记录的查询条件
     * @param user     当前的登录用户
     * @param pageNum  页面码
     * @param pageSize 页面长度
     * @return {@link PageResult}
     */
    @Override
    public PageResult searchRecords(Record record, User user, Integer pageNum, Integer pageSize) {
        // 设置分页查询
        PageHelper.startPage(pageNum,pageSize);
        // 判断是否为管理员
        if (!"ADMIN".equals(user.getRole())){
            /**
             * 如果不是管理员 就将查询条件中的 借阅人设置为当前登录用户
             * 如果是管理员 那么就不会运行该if 反之 若为普通用户则运行该if
             * 将条件中的借阅人设置为当前登录人
             */
            record.setBookBorrower(user.getName());
        }
        Page page = recordMapper.searchRecords(record);
        return new PageResult(page.getTotal(),page.getResult());
    }
}

五、文件结构

云借阅图书管理系统,第12张


 

总结

云借阅图书管理系统的全部核心代码文件:

链接:百度网盘 请输入提取码 

提取码: 1234