基于SSM框架案例-云借阅图书管理系统

基于SSM框架案例-云借阅图书管理系统

一、项目简介

SSM(Spring+Spring MVC+MyBatis)框架知识来实现一个简单的云借阅图书管理系统。云借阅图书管理系统在开发过程中,整合了三大框架,并在框架整合的基础上实现了系统功能。 借阅图书管理系统主要实现了两大功能模块:用户登录模块和图书管理模块,用户登录模块主要用于实现用户的登录与注销;图书管理模块主要用于管理图书,如新书推荐、图书借阅等。

二、云借阅系统功能结构图

在这里插入图片描述

三、开发环境

web服务器:Tomcat 8.5.24

Java开发包:JDK 8。

开发工具:IntelliJ IDEA 2023.1。

数据库:MySQL 8.0.25。

四、云借阅系统项目文件组织结构

在这里插入图片描述

• 持久对象层(持久层或持久化层):该层由若干持久化类(实体类)组成。

• 数据访问层(DAO层):该层由若干DAO接口和MyBatis映射文件组成。DAO接口的名称统一以Mapper结尾,且MyBatis的映射文件名称要与接口的名称相同。

• 业务逻辑层(Service层):该层由若干Service接口和实现类组成。逻辑层主要用于实现系统的业务逻辑。

• Web表现层:该层主要包括Spring MVC中的Controller类和JSP页面。

五、数据库设计

借阅图书管理系统中主要包括用户登录和图书管理两大模块,用户登录模块会用到用户表,图书管理模块会用到图书信息表。除此之外,在图书管理模块中,每次图书借阅完成后,系统会记录图书借阅情况,因此,图书管理模块还需要一个借阅记录表。

用户表

表名(中文) 功表名(英文)
用户表 user
字段名 类型 长度 是否主键 说明
user_id int 32 用户id
user_password varchar 32 用户名称
user_password varchar 32 用户密码
user_email varchar 32 用户邮箱(用户账号)
user_role varchar 32 用户角色(ADMIN:管理员,USER:普通用户)
user_status varchar 1 用户状态(0:正常,1:禁用)

图书信息表

表名(中文) 功表名(英文)
图书信息表 book
字段名 类型 长度 是否主键 说明
book_id int 32 图书编号
book_name varchar 32 图书名称
book_isbn varchar 32 图书标准ISBN编号
book_press varchar 32 图书出版社
book_author varchar 32 图书作者
book_pagination int 32 图书页数
book_price double 32 图书价格
book_uploadtime varchar 32 图书上架时间
book_status varchar 1 图书状态(0:可借阅,1:已借阅,2:归还中,3:已下架)
book_borrower varchar 32 图书借阅人
book_borrowtime varchar 32 图书借阅时间
book_returntime varchar 32 图书预计归还时间

借阅记录表

表名(中文) 功表名(英文)
借阅记录表 record
字段名 类型 长度 是否主键 说明
record_id varchar 32 借阅记录id
record_bookname varchar 32 借阅的图书名称
record_bookisbn varchar 32 借阅的图书的ISBN编号
record_borrower varchar 32 图书借阅人
record_borrowtime varchar 32 图书借阅时间
record_remandtime varchar 32 图书归还时间

六、部分核心源代码展示

登录模块

package com.xiaohe.controller;

import com.xiaohe.entity.PageResult;
import com.xiaohe.entity.Result;
import com.xiaohe.pojo.User;
import com.xiaohe.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * @version v1.0.0
 * @belongsProject: SSMBooks
 * @belongsPackage: com.xiaohe.controller
 * @author: xiaohe
 * @description: UserController
 * @createTime: 2023-06-16 11:31
 */
@Controller
@RequestMapping("/user")
public class UserController {
    // @ResponseBody
    @RequestMapping("toMainPage")
    //提供一个直接跳转主页面的方法
    public String toMainPage(){
        return "main";
    }
    @Autowired
    private UserService userService;
    // @ResponseBody
    @RequestMapping("/login")
    // HttpSession httpSession
    public String login(User user, HttpServletRequest request){
        User dbUser = userService.login(user);
        if (dbUser == null){
            //登录失败:用户名或密码错误
            request.setAttribute("msg","用户名或者密码错误");
            return "login";
        }else {
            //登录成功
            //将用户的信息绑定到叫做USER_SESSION的session上面去
            //获取信息: .getSession().getAttribute()
            request.getSession().setAttribute("USER_SESSION",dbUser);
            if ("ADMIN".equals(dbUser.getRole())){
                return "redirect:/admin/main.jsp";
            }else {
                return "redirect:/admin/index.jsp";
            }

        }

    }
    //注销方法
    // @ResponseBody
    @RequestMapping("/logout")
    public String logout(HttpSession session){
        //如果传入的参数是HttpServletRequest
        //HttpSession session = request.getSession();
        session.invalidate();
        return "login";
    }

    //查询数据
    @RequestMapping(value = "/findById")
    @ResponseBody
    public Result<User> findUserById(Integer id){
        User user = userService.finUserById(id);
        System.out.println(user);
        return new Result<>(true,"",user);
    }
    //添加用户
    @RequestMapping("/addUser")
    @ResponseBody
    public Result addUser(User user){
        Integer num = userService.addUser(user);
        if (num>0){
            //操作成功
            return new  Result(true,"新增成功");
        }else {
            //操作失败
            return new Result(false,"新增失败");
        }
    }
    @RequestMapping("/editUser")
    @ResponseBody
    public Result editUser(User user){
        Integer num = userService.editUser(user);
        if (num>0){
            //操作成功
            return new  Result(true,"修改成功");
        }else {
            //操作失败
            return new Result(false,"修改失败");
        }
    }
    @RequestMapping("/delUser")
    @ResponseBody
    public Result delUser(User user){
        Integer num = userService.delUser(user);
        if (num>0){
            return new  Result(true,"离职成功");
        }else {
            return new Result(false,"修改失败");

        }
    }
    @RequestMapping("/search")
    @ResponseBody
    public ModelAndView searchUsers(User user,Integer pageNum,Integer pageSize,HttpServletRequest request){
        ModelAndView modelAndView = new ModelAndView();
        //前端是否传递pageNum,pageSize的值
        if (pageNum==null){
            pageNum=1;
        }
        if (pageSize==null){
            pageSize=10;
        }
        //查询数据
        PageResult pageResult = userService.searchUsers(user,pageNum,pageSize);
        //数据
        //将查询的数据参数返回到页面,用于回显查询的输入框中
        //查询的参数:name、id这两个参数绑定在user对象
        modelAndView.setViewName("user");
        //user是根据user.jsp页面来的
        modelAndView.addObject("user",user);
        //将查询出的数据放到modelAndView对象中去
        modelAndView.addObject("pageResult",pageResult);
        //将当前页码返回到页面
        modelAndView.addObject("pageNum",pageNum);
        //将分页插件页码变化时的url返回到页面中-->gourl
        modelAndView.addObject("gourl",request.getRequestURI());
        return modelAndView;
    }
}

图书管理模块

package com.xiaohe.controller;

import com.xiaohe.entity.PageResult;
import com.xiaohe.entity.Result;
import com.xiaohe.pojo.Book;
import com.xiaohe.pojo.User;
import com.xiaohe.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * @version v1.0.0
 * @belongsProject: SSMBooks
 * @belongsPackage: com.xiaohe.controller
 * @author: xiaohe
 * @description: BookController
 * @createTime: 2023-06-19 14:35
 */
@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookService bookService;

    @RequestMapping("/selectNewbooks")
    public ModelAndView selectNewBooks(){
        ModelAndView modelAndView = new ModelAndView();
        int pageNum=1;
        int pageSize=6;
        PageResult pageResult = bookService.selectNewBooks(pageNum,pageSize);
        modelAndView.addObject("pageResult",pageResult);
        //modelAndView
        modelAndView.setViewName("books_new");
        return modelAndView;
    }
    @ResponseBody//将java对象转化为json数据格式
    @RequestMapping (value= "/findById")
    public Result<Book> findBookById(Integer id){
        Book book = bookService.findBookById(id);
        return new Result<>(true,"",book);
    }
    /**
     * @param book
     * @param session
     * @return
     * HttpSession
     */
    @ResponseBody
    @RequestMapping("/borrowBook")
    public Result borrowBook(Book book, HttpSession session){
        User user = (User) session.getAttribute("USER_SESSION");
        String name = user.getName();
        book.setBorrower(name);
        Integer num = bookService.borrowBook(book);
        if (num>0){
            //借阅成功
            return new Result(true,"借阅成功");
        }else {
            //借阅失败
            return new Result(false,"借阅失败");
        }
    }
    //根据条件分页查询图书信息
    @ResponseBody
    @RequestMapping("/search")
    public ModelAndView searchBooks(Book book, Integer pageNum, Integer pageSize, HttpServletRequest request){
        ModelAndView modelAndView = new ModelAndView();
        if (pageNum==null){
            pageNum=1;
        }
        if (pageSize==null){
            pageSize=10;
        }
        //查询出的数据
        PageResult pageResult = bookService.search(book,pageNum,pageSize);
        //页面
        modelAndView.setViewName("books");
        //数据
        //将查询的数据参数返回到页面,用于回显查询的输入框中
        //查询的参数:name、author、press这三个参数绑定在book对象
        //search是根据book.jsp页面来的
        modelAndView.addObject("search",book);
        //将查询出的数据放到modelAndView对象中去
        modelAndView.addObject("pageResult",pageResult);
        //将当前页码返回到页面
        modelAndView.addObject("pageNum",pageNum);
        //将分页插件页码变化时的url返回到页面中-->gourl
        modelAndView.addObject("gourl",request.getRequestURI());
        return modelAndView;
    }
    //新增书籍
    // @ResponseBody
    @RequestMapping("/addBook")
    // @RequiresPermission("admin.dashboard")
    public Result addBook(Book book){
        Integer num =  bookService.addBook(book);
        if (num>0){
            //操作成功
            return new  Result(true,"新增成功");
        }else {
            //操作失败
            return new Result(false,"新增失败");
        }
    }
    // @ResponseBody
    @RequestMapping("/editBook")
    public Result editBook(Book book){
        Integer num = bookService.editBook(book);
        if (num>0){
            //编辑成功
            return new Result(true,"编辑成功");
        }else {
            //编辑失败
            return new Result(false,"编辑失败");
        }
    }
    @ResponseBody
    @RequestMapping("/searchBorrowed")
    public ModelAndView searchBorrowed(Book book,Integer pageNum,Integer pageSize,HttpServletRequest request){
        ModelAndView modelAndView = new ModelAndView();
        if (pageNum==null){
            pageNum =1;
        }
        if (pageSize==null){
            pageSize=10;
        }
        User user = (User) request.getSession().getAttribute("USER_SESSION");
        modelAndView.setViewName("book_borrowed");
        PageResult pageResult = bookService.searchBorrowed(book,user,pageNum,pageSize);
        modelAndView.addObject("search",book);
        modelAndView.addObject("pageResult",pageResult);
        modelAndView.addObject("pageNum",pageNum);
        modelAndView.addObject("gourl",request.getRequestURI());
        return modelAndView;
    }

    //归还图书信息
    @ResponseBody
    @RequestMapping("/returnBook")
    public Result returnBook(Integer id,HttpSession session){
        //获取当前用户的信息
        User user = (User)session.getAttribute("USER_SESSION");
        // HttpServletRequest request;
        // request.getSession().getAttribute("USER_SESSION");
        //调用service层的方法
        boolean flag = bookService.returnBook(id,user);
        if (flag){
            //归还成功
            return new Result(true,"还书确认中,请到图书馆还书");

        }else {
            return new Result(false,"还书失败");
        }
    }
    //确认归还
    @ResponseBody
    @RequestMapping("/returnConfirm")
    public Result returnConfirm(Integer id){
        boolean flag = bookService.returnConfirm(id);
        if (flag){
            return new Result(true,"归还确认成功");
        }else {
            return new Result(false,"归还确认失败");
        }

    }
}

借阅记录模块

package com.xiaohe.controller;

import com.github.pagehelper.Page;
import com.xiaohe.entity.PageResult;
import com.xiaohe.pojo.Record;
import com.xiaohe.pojo.User;
import com.xiaohe.service.RecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

/**
 * @version v1.0.0
 * @belongsProject: SSMBooks
 * @belongsPackage: com.xiaohe.controller
 * @author: xiaohe
 * @description: RecordController
 * @createTime: 2023-06-27 09:11
 */
@Controller
@RequestMapping("/record")
public class RecordController {
    @Autowired
    private RecordService recordService;
    @RequestMapping("/searchRecords")
    public ModelAndView searchRecords(Record record, Integer pageNum, Integer pageSize, HttpServletRequest request){
        ModelAndView modelAndView = new ModelAndView();
        if (pageNum==null){
            pageNum=1;
        }
        if (pageSize==null){
            pageSize=10;
        }
        User user = (User) request.getSession().getAttribute("USER_SESSION");
        modelAndView.setViewName("record");
        modelAndView.addObject("search",record);
        PageResult pageResult = recordService.searchRecord(record,pageNum,pageSize,user);
        modelAndView.addObject("pageResult",pageResult);
        modelAndView.addObject("pageNum",pageNum);
        modelAndView.addObject("gourl",request.getRequestURI());
        return modelAndView;
    }
}

七、成品演示

登录模块

在这里插入图片描述

新书推荐模块

在这里插入图片描述

人员管理模块

在这里插入图片描述

图书借阅模块

在这里插入图片描述

当前借阅模块

在这里插入图片描述

借阅记录模块

在这里插入图片描述

微信搜索软件小贺,关注公众号不迷路

猜你喜欢

转载自blog.csdn.net/weixin_55897008/article/details/131614831