Java课程设计——图书管理系统

news2025/1/25 9:02:30

文章目录

  • 一、需求分析
  • 二、技术介绍
    • 2.1相关技术
    • 2.2开发环境
  • 三、功能实现
    • 1、登录
    • 2、图书管理
      • 2.1图书列表
      • 2.2添加图书
      • 2.3修改图书信息
      • 2.4查询图书信息
    • 3、用户管理
      • 3.1借阅图书
      • 3.2修改借阅信息
      • 3.3归还图书
    • 4、退出系统
  • 四、部分代码实现
  • 获取源码

文章最下方获取源码!!!
文章最下方获取源码!!!
文章最下方获取源码!!!

一、需求分析

1、实现登录基本逻辑
2、实现登录后对图书的管理,包括增、删、改、查
3、实现登录后对用户的管理,包括增、删、改、查
4、用户可以借阅处于空闲状态的图书,被借阅后的图书不能再被其他用户借阅,用户可以归还图书,归还后的图书可以再次被借阅

二、技术介绍

2.1相关技术

  • Spring + SpringMVC + MyBatis(SSM)
  • Jsp + JQuery
  • Mysql

2.2开发环境

idea + tomcat

三、功能实现

1、登录

在这里插入图片描述

2、图书管理

2.1图书列表

在这里插入图片描述

2.2添加图书

在这里插入图片描述

2.3修改图书信息

在这里插入图片描述

2.4查询图书信息

在这里插入图片描述

3、用户管理

3.1借阅图书

在这里插入图片描述

3.2修改借阅信息

在这里插入图片描述

3.3归还图书

在这里插入图片描述

4、退出系统

在这里插入图片描述

四、部分代码实现

BookMapper.java

package com.codejams.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.codejams.domain.Book;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;


public interface BookMapper{

    List<Book> findAllBook();

    Book findBookById(int id);

    void update(Book book);

    void save(Book book);

    void delete(int id);

    List<Book> findBookByCondition(String condition);

    void changeStatusToLeisure(String name);

    void changeStatusToNotLeisure(String name);

}

BorrowerController.java

package com.codejams.controller;

import com.codejams.domain.Book;
import com.codejams.domain.Borrower;
import com.codejams.service.BookService;
import com.codejams.service.BorrowerService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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 java.util.List;

@Controller
@RequestMapping("/borrower")
public class BorrowerController {

    private BorrowerService borrowerService = new BorrowerService();
    private BookService bookService = new BookService();


    @RequestMapping("/findAllBorrower")
    public ModelAndView findAllBorrower(){

        ModelAndView modelAndView = new ModelAndView();

        List<Borrower> borrowerList = borrowerService.findAllBorrower();
        List<Book> bookList = bookService.findAllBook();

        //设置视图
        modelAndView.setViewName("/workbench/activity/borrower-list.jsp");
        modelAndView.addObject("borrowerList",borrowerList);
        modelAndView.addObject("bookList",bookList);

        return modelAndView;
    }

    @RequestMapping("/findBorrowerByCondition")
    public ModelAndView findBookByCondition(String condition){

        ModelAndView modelAndView = new ModelAndView();

        System.out.println(condition);
        List<Borrower> borrowerList = borrowerService.findBorrowerByCondition(condition);
        List<Book> bookList = bookService.findAllBook();
        for (Borrower borrower : borrowerList) {
            System.out.println(borrower);
        }


        //设置视图
        modelAndView.setViewName("/workbench/activity/borrower-list.jsp");
        modelAndView.addObject("borrowerList",borrowerList);
        modelAndView.addObject("bookList",bookList);

        return modelAndView;
    }

    @RequestMapping("/save")
    public String save(Borrower borrower){
        System.out.println(borrower);
        borrowerService.save(borrower);

        //保存后将改书的状态改为已借出
        bookService.changeStatusToNotLeisure(borrower.getBook());

        return "redirect:findAllBorrower";
    }

    @RequestMapping("/delete")
    public String delete(int id){
        Borrower borrower = borrowerService.findBorrowerById(id);
        //将对应的书修改为空闲状态
        bookService.changeStatusToLeisure(borrower.getBook());
        borrowerService.delete(id);

        return "redirect:findAllBorrower";
    }

    @RequestMapping("/update")
    public String update(Borrower borrower){
        System.out.println(borrower);
        //修改前先将书的状态改为空闲
        int id = borrower.getId();
        Borrower bor = borrowerService.findBorrowerById(id);
        bookService.changeStatusToLeisure(bor.getBook());

        borrowerService.update(borrower);
        bookService.changeStatusToNotLeisure(borrower.getBook());


        return "redirect:findAllBorrower";
    }

    @RequestMapping(value = "/findBorrower", produces = "application/json;charset=UTF-8")
    @ResponseBody
    public String findBorrower(String id){
        int bid = Integer.parseInt(id);
        System.out.println(bid);

        Borrower borrower = borrowerService.findBorrowerById(bid);
        System.out.println(borrower);

        ObjectMapper objectMapper = new ObjectMapper();

        String json = null;
        try {
            json = objectMapper.writeValueAsString(borrower);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        return json;
    }

}

获取源码

  • 我的微信
  • 欢迎添加微信互相交流学习哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Retinex theory】【图像增强】-笔记

1 前言 retinex 是常见的图像增强的方法&#xff0c;retinex 是由两个单词合成的&#xff1a;retina conrtex &#xff0c;即视网膜皮层。 2 建立的基础 Land 的 retinex theory 建立在三个假设之下&#xff1a; 真实世界是无色的&#xff0c;我们所谓的颜色是光和物质相互…

VARMA模型的原理与实现

文章目录 1.多变量模型的基本思想2.VAR模型与VARMA模型3.VARMA模型的实现 1.多变量模型的基本思想 ​ 在现实和竞赛中&#xff0c;时序数据往往是多变量时间序列&#xff0c;我们往往需要借助除了时间之外的变量的帮助来完成预测。比如&#xff0c;如果我们需要预测居民消费支…

数据结构与算法--其他算法

数据结构与算法--其他算法 1 汉诺塔问题 2 字符串的全部子序列 3 字符串的全排列 4 纸牌问题 5 逆序栈问题 6 数字和字符串转换问题 7 背包问题 8 N皇后问题 暴力递归就是尝试 1&#xff0c;把问题转化为规模缩小了的同类问题的子问题 2&#xff0c;有明确的不需要继续…

yolov5+车辆重识别【附代码】

本篇文章主要是实现的yolov5和reid结合的车辆重识别项目。是在我之前实现的yolov5_reid行人重识别的代码上修改实现的baseline模型。 目录 相关参考资料 数据集说明 环境说明 项目使用说明 vehicle reid训练 yolov5车辆重识别 从视频中获取想要检测的车(待检测车辆) 车…

Attention Is All You Need原理与代码详细解读

文章目录 前言一、Transformer结构的原理1、Transform结构2、位置编码公式3、transformer公式4、FFN结构 二、Encode模块代码解读1、编码数据2、文本Embedding编码3、位置position编码4、Attention编码5、FFN编码 三、Decode模块代码解读1、编码数据2、文本Embedding与位置编码…

centos6/7 SOCKS5 堆溢出漏洞修复(RPM方式)curl 8.4 CVE-2023-38545 CVE-2023-38546

引用 https://darkdark.top/update-curl.html centos6 rpm 升级包下载&#xff1a;https://download.csdn.net/download/sinat_24092079/88425840 yum update libcurl-8.4.0-1.el6.1.x86_64.rpm curl-8.4.0-1.el6.1.x86_64.rpmcentos7 rpm 升级包下载&#xff1a;https://down…

ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?

目录 疑问 编译、链接和装载&#xff1a;拆解程序执行 ELF 格式和链接&#xff1a;理解链接过程 小结 疑问 既然我们的程序最终都被变成了一条条机器码去执行&#xff0c;那为什么同一个程序&#xff0c;在同一台计算机上&#xff0c;在 Linux 下可以运行&#xff0c;而在…

Linux | 关于入门Linux你有必要了解的指令

目录 前言 1、ls指令 2、pwd指令 3、cd指令 4、touch指令 5、stat指令 6、mkdir指令 7、rmdir 与 rm指令 8、man指令 9、cp指令 10、mv指令 11、cat指令 &#xff08;1&#xff09;输入重定向 &#xff08;2&#xff09;输出重定向与追加重定向 12、less指令 1…

多模态模型文本预处理方式

句子级别 句子级别的表征编码一整个句子到一个特征中。如果一个句子有多个短语&#xff0c;提取这些短语丢弃其他的单词。 缺点&#xff1a;这种方式会丢失句子中细粒度的信息。 单词级别 将句子中的类别提取出来&#xff0c;结合成一个句子。 缺点&#xff1a;会在类别之…

【数据结构】线性表的抽象数据类型

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 线性表抽象数据类型(LinearListAbstractDataType&#xff0c;简称 ADT)是一种非常重要的抽象数据类型&#xff0c;它是一种使用抽象的方式表示和实现一组数据元素的集合以及与…

宝塔面板服务器内存使用率高的三招解决方法

卸载多余PHP版本。假若安装了多个PHP版本&#xff0c;甚至把 php 5.3、5.4、7.0、7.3 全都安装上了&#xff0c;就会严重增加系统负载和内存使用率。 安装memcached 缓存组件&#xff0c;建议在宝塔面板后台直接安装。 卸载不常用软件。如&#xff1a;宝塔运维、宝塔一键安装…

php如何查找地图距离

要在PHP中使用高德地图、百度地图或腾讯地图获取位置信息&#xff0c;您可以使用它们的相应API服务。以下是获取位置信息的一般步骤&#xff1a; 思路: 获取API密钥&#xff1a;首先&#xff0c;您需要注册并获取相应地图服务提供商的API密钥。这将允许您访问他们的API以获取位…

CSS的美化(文字、背景) Day02

一、文字控制属性 分为&#xff1a;字体样式属性 、文本样式属性 1.1 CSS字体样式属性 1.color定义元素内文字颜色2.font-size 字号大小3 font-family 字体4 font-weight 字体粗细5.font-style 字体风格6.font 字体综合属性 1.1.1 > 文字颜色 color 属性名: color color …

Yakit工具篇:简介和安装使用

简介(来自官方文档) 基于安全融合的理念&#xff0c;Yaklang.io 团队研发出了安全领域垂直语言Yaklang&#xff0c;对于一些无法原生集成在Yak平台中的产品/工具&#xff0c;利用Yaklang可以重新编写 他们的“高质量替代”。对于一些生态完整且认可度较高的产品&#xff0c;Y…

C# CodeFormer 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {p…

高校教务系统登录页面JS分析——南京邮电大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍南京邮电大学教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一…

C++标准模板(STL)- 类型支持 (数值极限,min_exponent10,max_exponent,max_exponent10)

数值极限 std::numeric_limits 定义于头文件 <limits> 定义于头文件 <limits> template< class T > class numeric_limits; numeric_limits 类模板提供查询各种算术类型属性的标准化方式&#xff08;例如 int 类型的最大可能值是 std::numeric_limits&l…

多个Python包懒得import,那就一包搞定!

使用Python时&#xff0c;有的代码需要依赖多个框架或库者来完成&#xff0c;代码开头需要import多次&#xff0c;比如&#xff0c; import pandas as pd from pyspark import SparkContext from openpyxl import load_workbook import matplotlib.pyplot as plt import seabo…

Java Day2(Java基础语法)

Java基础 Java基础语法1. 注释、关键字、标识符1.1 Java中的注释1.2 关键字1.3 标识符 2. 数据类型&#xff08;1&#xff09;基本类型&#xff08;primitive type&#xff09;a.字节b.进制c. 浮点数拓展d. 字符拓展 &#xff08;2&#xff09; 引用类型(Reference type ) 3. 类…

【软件测试】总结

文章目录 一. 测试用例1. 常见设计测试用例(1)非软件题型(2)软件题型(3)代码型题(4)关于个人项目设计测试用例 2. 万能公式和具体的方法如何理解(1)万能公式(2)Fiddler实现弱网模式(3)针对公交卡设计测试用例 3. 进阶设计测试用例 二. 自动化1. 什么是自动化以及为什么要做自动…