Estudo de caso baseado no sistema de gerenciamento de livros de empréstimo SSM Framework-Cloud

Estudo de caso baseado no sistema de gerenciamento de livros de empréstimo SSM Framework-Cloud

1. Introdução ao Projeto

Conhecimento da estrutura SSM (Spring+Spring MVC+MyBatis) para implementar um sistema simples de gerenciamento de livros de empréstimos na nuvem. Durante o processo de desenvolvimento, o sistema de gerenciamento de livros de empréstimos em nuvem integrou três estruturas principais e implementou funções do sistema com base na integração das estruturas. O sistema de gerenciamento de livros de empréstimo implementa principalmente dois módulos funcionais: módulo de login do usuário e módulo de gerenciamento de livros. O módulo de login do usuário é usado principalmente para realizar login e logout do usuário; o módulo de gerenciamento de livros é usado principalmente para gerenciar livros, como recomendações de novos livros, empréstimo de livros, etc.

2. Diagrama da estrutura funcional do sistema de empréstimo em nuvem

Insira a descrição da imagem aqui

3. Ambiente de desenvolvimento

servidor web: Tomcat 8.5.24

Kit de desenvolvimento Java: JDK 8.

Ferramentas de desenvolvimento: IntelliJ IDEA 2023.1.

Banco de dados: MySQL 8.0.25.

4. Estrutura organizacional dos arquivos de projeto do sistema de empréstimo em nuvem

Insira a descrição da imagem aqui

• Camada de objeto persistente (camada de persistência ou camada de persistência): Esta camada consiste em diversas classes de persistência (classes de entidade).

• Camada de acesso a dados (camada DAO): Esta camada consiste em diversas interfaces DAO e arquivos de mapeamento MyBatis. O nome da interface DAO sempre termina com Mapper, e o nome do arquivo de mapeamento MyBatis deve ser igual ao nome da interface.

• Camada lógica de negócios (camada de serviço): Esta camada consiste em diversas interfaces de serviço e classes de implementação. A camada lógica é usada principalmente para implementar a lógica de negócios do sistema.

• Camada de apresentação Web: Esta camada inclui principalmente a classe Controller e a página JSP no Spring MVC.

5. Projeto de banco de dados

O sistema de gerenciamento de livros de empréstimos inclui principalmente dois módulos: login do usuário e gerenciamento de livros.O módulo de login do usuário usará a tabela do usuário e o módulo de gerenciamento de livros usará a tabela de informações do livro. Além disso, no módulo de gerenciamento de livros, após a conclusão de cada empréstimo de livros, o sistema registrará a situação do empréstimo de livros, portanto, o módulo de gerenciamento de livros também precisa de uma tabela de registro de empréstimos.

tabela de usuário

Nome da tabela (chinês) Nome da tabela (inglês)
tabela de usuário do utilizador
Nome do campo tipo comprimento É uma chave primária? ilustrar
ID do usuário interno 32 sim ID do usuário
senha do usuário varchar 32 não nome de usuário
senha do usuário varchar 32 não senha do usuário
email_do_usuário varchar 32 não E-mail do usuário (conta de usuário)
papel do usuário varchar 32 não Função de usuário (ADMIN: administrador, USUÁRIO: usuário comum)
status do usuário varchar 1 não Status do usuário (0: normal, 1: desabilitado)

Tabela de informações do livro

Nome da tabela (chinês) Nome da tabela (inglês)
Tabela de informações do livro livro
Nome do campo tipo comprimento É uma chave primária? ilustrar
livro_id interno 32 sim Número do livro
nome_livro varchar 32 não título do livro
livro_isbn varchar 32 não Número ISBN padrão do livro
livro_press varchar 32 não editora de livros
autor_livro varchar 32 não autor do livro
paginação_livro interno 32 não Número de páginas do livro
preço_livro dobro 32 não preço do livro
livro_uploadtime varchar 32 não Tempo de estante de livros
status_do_livro varchar 1 não Status do livro (0: disponível para empréstimo, 1: emprestado, 2: retornando, 3: removido)
livro_emprestado varchar 32 não mutuário de livros
livro_borrowtime varchar 32 não Reservar tempo de empréstimo
livro_returntime varchar 32 não Tempo estimado de devolução dos livros

Formulário de registro de empréstimo

Nome da tabela (chinês) Nome da tabela (inglês)
Formulário de registro de empréstimo registro
Nome do campo tipo comprimento É uma chave primária? ilustrar
id_registro varchar 32 sim Empréstimo de ID de registro
nome_do_livro_registro varchar 32 não O nome do livro emprestado
record_bookisbn varchar 32 não Número ISBN do livro emprestado
record_borrower varchar 32 não mutuário de livros
record_borrowtime varchar 32 não Reservar tempo de empréstimo
record_remandtime varchar 32 não Horário de devolução do livro

6. Exibição de alguns códigos-fonte principais

Módulo de login

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 gerenciamento 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 empréstimo

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. Demonstração do produto acabado

Módulo de login

Insira a descrição da imagem aqui

Novo módulo de recomendação de livros

Insira a descrição da imagem aqui

Módulo de gestão de pessoal

Insira a descrição da imagem aqui

Módulo de empréstimo de livros

Insira a descrição da imagem aqui

Módulo de empréstimo atual

Insira a descrição da imagem aqui

Módulo de registro de empréstimo

Insira a descrição da imagem aqui

Software de pesquisa WeChat Xiaohe, siga a conta pública para evitar se perder

Acho que você gosta

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