Estudio de caso basado en SSM Framework-Sistema de gestión de libros de préstamos en la nube

Estudio de caso basado en SSM Framework-Sistema de gestión de libros de préstamos en la nube

1. Introducción al proyecto

Conocimiento del marco SSM (Spring+Spring MVC+MyBatis) para implementar un sistema simple de gestión de libros de préstamos en la nube. Durante el proceso de desarrollo, el sistema de gestión de libros de préstamos en la nube integró tres marcos principales e implementó funciones del sistema basadas en la integración de los marcos. El sistema de gestión de libros en préstamo implementa principalmente dos módulos funcionales principales: módulo de inicio de sesión de usuario y módulo de gestión de libros. El módulo de inicio de sesión de usuario se utiliza principalmente para realizar el inicio de sesión y cierre de sesión del usuario, y el módulo de gestión de libros se utiliza principalmente para gestionar libros, como recomendaciones de libros nuevos. , préstamo de libros, etc.

2. Diagrama de estructura funcional del sistema de préstamos en la nube

Insertar descripción de la imagen aquí

3. Entorno de desarrollo

servidor web: Tomcat 8.5.24

Kit de desarrollo Java: JDK 8.

Herramientas de desarrollo: IntelliJ IDEA 2023.1.

Base de datos: MySQL 8.0.25.

4. Estructura organizativa de los archivos de proyecto del sistema de préstamos en la nube.

Insertar descripción de la imagen aquí

• Capa de objeto persistente (capa de persistencia o capa de persistencia): Esta capa consta de varias clases de persistencia (clases de entidad).

• Capa de acceso a datos (capa DAO): Esta capa consta de varias interfaces DAO y archivos de mapeo MyBatis. El nombre de la interfaz DAO siempre termina en Mapper y el nombre del archivo de mapeo MyBatis debe ser el mismo que el nombre de la interfaz.

• Capa de lógica empresarial (capa de servicio): esta capa consta de varias interfaces de servicio y clases de implementación. La capa lógica se utiliza principalmente para implementar la lógica empresarial del sistema.

• Capa de presentación web: esta capa incluye principalmente la clase Controlador y la página JSP en Spring MVC.

5. Diseño de base de datos

El sistema de gestión de libros de préstamo incluye principalmente dos módulos: inicio de sesión de usuario y gestión de libros: el módulo de inicio de sesión de usuario utilizará la tabla de usuarios y el módulo de gestión de libros utilizará la tabla de información del libro. Además, en el módulo de gestión de libros, una vez completado cada préstamo de libros, el sistema registrará el estado del préstamo de libros, por lo que el módulo de gestión de libros también necesita una tabla de registro de préstamos.

tabla de usuarios

Nombre de la tabla (chino) Nombre de la tabla (inglés)
tabla de usuarios usuario
Nombre del campo tipo longitud ¿Es una clave primaria? ilustrar
ID_usuario En t 32 identificación de usuario
contraseña de usuario varchar 32 No nombre de usuario
contraseña de usuario varchar 32 No contraseña de usuario
correo_usuario varchar 32 No Correo electrónico del usuario (cuenta de usuario)
rol del usuario varchar 32 No Rol de usuario (ADMIN: administrador, USUARIO: usuario normal)
Estatus de usuario varchar 1 No Estado del usuario (0: normal, 1: deshabilitado)

tabla de información del libro

Nombre de la tabla (chino) Nombre de la tabla (inglés)
tabla de información del libro libro
Nombre del campo tipo longitud ¿Es una clave primaria? ilustrar
id_libro En t 32 Número de libro
nombre del libro varchar 32 No Titulo del libro
libro_isbn varchar 32 No Número ISBN estándar del libro
libro_prensa varchar 32 No editorial de libros
autor_libro varchar 32 No autor del libro
paginación_libro En t 32 No Número de páginas del libro
precio_libro doble 32 No precio del libro
libro_uploadtime varchar 32 No Tiempo en el estante del libro
estado_libro varchar 1 No Estado del libro (0: disponible para préstamo, 1: prestado, 2: devuelto, 3: eliminado)
prestatario de libros varchar 32 No prestatario de libros
libro_borrowtime varchar 32 No Tiempo de préstamo de libros
hora_devolucióndellibro varchar 32 No Tiempo estimado de devolución de los libros.

Formulario de registro de endeudamiento

Nombre de la tabla (chino) Nombre de la tabla (inglés)
Formulario de registro de endeudamiento registro
Nombre del campo tipo longitud ¿Es una clave primaria? ilustrar
id_registro varchar 32 ID de registro de préstamo
nombre_libro_registro varchar 32 No El nombre del libro prestado.
record_bookisbn varchar 32 No Número ISBN del libro prestado
prestatario_registro varchar 32 No prestatario de libros
record_borrowtime varchar 32 No Tiempo de préstamo de libros
record_remandtime varchar 32 No Hora de devolución del libro

6. Visualización de algunos códigos fuente principales.

Módulo de inicio de sesión

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;
    }
}

Módulo de gestión de biblioteca

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,"归还确认失败");
        }

    }
}

Módulo de registro de préstamos

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;
    }
}

7. Demostración del producto terminado

Módulo de inicio de sesión

Insertar descripción de la imagen aquí

Nuevo módulo de recomendación de libros.

Insertar descripción de la imagen aquí

Módulo de gestión de personal

Insertar descripción de la imagen aquí

Módulo de préstamo de libros

Insertar descripción de la imagen aquí

Módulo de endeudamiento actual

Insertar descripción de la imagen aquí

Módulo de registro de préstamos

Insertar descripción de la imagen aquí

Software de búsqueda WeChat Xiaohe, sigue la cuenta pública para evitar perderte

Supongo que te gusta

Origin blog.csdn.net/weixin_55897008/article/details/131614831
Recomendado
Clasificación