LibrarySystem图书管理系统(二)

LibrarySystem图书管理系统(二)攻略

一、概述

本文主要针对“LibrarySystem图书管理系统(二)”的学习内容,进行详细的攻略说明,包括系统的整体架构、功能模块及其实现方式等。

二、整体架构

LibrarySystem图书管理系统(二)是一个基于Java Web技术实现的图书管理系统,主要包含以下几个模块:

  1. 图书管理模块
  2. 图书借阅模块
  3. 图书归还模块
  4. 用户管理模块

整个系统采用B/S架构,前端使用了HTML、JavaScript、CSS等技术,后端使用了Java Servlet和JSP等技术,同时使用了MySQL作为数据库。

三、功能模块及实现方式

1. 图书管理模块

图书管理模块是系统的核心模块之一,主要实现了图书的添加、修改和删除等功能。其中,添加图书的过程是通过向MySQL数据库添加一条新的图书记录实现的,修改和删除图书的过程则是通过相应的SQL语句实现的。

示例:添加一本新书到系统中

String bookname = request.getParameter("bookname"); // 获取表单提交的图书名称
String author = request.getParameter("author"); // 获取表单提交的图书作者
String publisher = request.getParameter("publisher"); // 获取表单提交的出版社信息

String sql = "INSERT INTO Books(bookname, author, publisher) VALUES(?, ?, ?)"; // 编写SQL插入语句

Connection conn = null;
PreparedStatement pstmt = null;
try {
    conn = DBUtil.getCon(); // 获取数据库连接
    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, bookname); // 设置第一个参数bookname的值
    pstmt.setString(2, author); // 设置第二个参数author的值
    pstmt.setString(3, publisher); // 设置第三个参数publisher的值
    pstmt.executeUpdate(); // 执行SQL插入语句
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    DBUtil.close(conn, pstmt, null); // 释放资源
}

2. 图书借阅模块

图书借阅模块实现了用户借书的功能,其实现方式为首先查询图书是否可借,如果可借,则将借书记录添加到借书记录表中,并将对应图书的库存数量减1。

示例:借阅一本图书

int bookid = Integer.parseInt(request.getParameter("bookid")); // 获取表单提交的图书ID
String username = request.getParameter("username"); // 获取表单提交的用户名

String sql1 = "SELECT COUNT(*) FROM Borrow WHERE bookid = ?"; // 查询借书记录表中借出此书的数量
String sql2 = "SELECT stock FROM Books WHERE bookid = ?"; // 查询图书库存数量
String sql3 = "INSERT INTO Borrow(bookid, username, borrowdate) VALUES(?, ?, ?)"; // 添加借书记录
String sql4 = "UPDATE Books SET stock = ? WHERE bookid = ?"; // 更新图书库存数量

Connection conn = null;
PreparedStatement pstmt1 = null, pstmt2 = null, pstmt3 = null, pstmt4 = null;
ResultSet rs = null;
try {
    conn = DBUtil.getCon(); // 获取数据库连接

    pstmt1 = conn.prepareStatement(sql1);
    pstmt1.setInt(1, bookid);
    rs = pstmt1.executeQuery();
    int borrowNum = 0;
    while (rs.next()) {
        borrowNum = rs.getInt(1);
    }

    pstmt2 = conn.prepareStatement(sql2);
    pstmt2.setInt(1, bookid);
    rs = pstmt2.executeQuery();
    int stockNum = 0;
    while (rs.next()) {
        stockNum = rs.getInt(1);
    }

    if (borrowNum >= stockNum) { // 判断图书是否可借
        out.print("库存不足,该书暂时无法借出!");
    } else {
        Date borrowDate = new Date(); // 获取当前日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String borrowDateString = sdf.format(borrowDate); // 将日期格式化为字符串
        pstmt3 = conn.prepareStatement(sql3);
        pstmt3.setInt(1, bookid);
        pstmt3.setString(2, username);
        pstmt3.setString(3, borrowDateString);
        pstmt3.executeUpdate(); // 添加借书记录

        int newStockNum = stockNum - 1; // 更新图书库存数量
        pstmt4 = conn.prepareStatement(sql4);
        pstmt4.setInt(1, newStockNum);
        pstmt4.setInt(2, bookid);
        pstmt4.executeUpdate();

        out.print("借书成功!");
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    DBUtil.close(conn, pstmt1, rs);
    DBUtil.close(null, pstmt2, null);
    DBUtil.close(null, pstmt3, null);
    DBUtil.close(null, pstmt4, null);
}

3. 图书归还模块

图书归还模块实现了用户归还图书的功能,其实现方式为首先修改借书记录中的归还日期,然后将对应图书的库存数量加1。

示例:归还一本图书

int borrowid = Integer.parseInt(request.getParameter("borrowid")); // 获取表单提交的借书记录ID
int bookid = 0;
String sql1 = "SELECT bookid FROM Borrow WHERE borrowid = ?"; // 查询图书ID
String sql2 = "UPDATE Borrow SET returndate = ? WHERE borrowid = ?"; // 更新归还日期
String sql3 = "SELECT stock FROM Books WHERE bookid = ?"; // 查询图书库存数量
String sql4 = "UPDATE Books SET stock = ? WHERE bookid = ?"; // 更新图书库存数量

Connection conn = null;
PreparedStatement pstmt1 = null,pstmt2 = null,pstmt3 = null,pstmt4 = null;
ResultSet rs = null;
try {
    conn = DBUtil.getCon(); // 获取数据库连接

    pstmt1 = conn.prepareStatement(sql1);
    pstmt1.setInt(1, borrowid);
    rs = pstmt1.executeQuery();
    while (rs.next()) {
        bookid = rs.getInt(1);
    }

    Date returnDate = new Date(); // 获取当前日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String returnDateString = sdf.format(returnDate); // 将日期格式化为字符串
    pstmt2 = conn.prepareStatement(sql2);
    pstmt2.setString(1, returnDateString);
    pstmt2.setInt(2, borrowid);
    pstmt2.executeUpdate(); // 更新归还日期

    pstmt3 = conn.prepareStatement(sql3);
    pstmt3.setInt(1, bookid);
    rs = pstmt3.executeQuery();
    int stockNum = 0;
    while (rs.next()) {
        stockNum = rs.getInt(1);
    }

    int newStockNum = stockNum + 1; // 更新图书库存数量
    pstmt4 = conn.prepareStatement(sql4);
    pstmt4.setInt(1, newStockNum);
    pstmt4.setInt(2, bookid);
    pstmt4.executeUpdate();

    out.print("还书成功!");
} catch (Exception e) {
    e.printStackTrace();
} finally {
    DBUtil.close(conn, pstmt1, rs);
    DBUtil.close(null, pstmt2, null);
    DBUtil.close(null, pstmt3, null);
    DBUtil.close(null, pstmt4, null);
}

4. 用户管理模块

用户管理模块实现了管理员对用户的管理操作,包括添加用户、删除用户和修改用户信息等功能。其中添加用户和删除用户的实现方式与图书管理模块类似,而修改用户信息是通过相应的SQL语句实现的。

示例:修改用户的密码

String username = session.getAttribute("username").toString(); // 获取当前管理员的用户名
String oldpassword = request.getParameter("oldpassword"); // 获取表单提交的旧密码
String newpassword = request.getParameter("newpassword"); // 获取表单提交的新密码

String sql = "UPDATE Users SET password = ? WHERE username = ? AND password = ?"; // 更新用户密码的SQL语句

Connection conn = null;
PreparedStatement pstmt = null;
try {
    conn = DBUtil.getCon(); // 获取数据库连接
    pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, newpassword); // 设置新密码
    pstmt.setString(2, username); // 设置用户名
    pstmt.setString(3, oldpassword); // 设置旧密码
    int result = pstmt.executeUpdate(); // 执行SQL更新语句
    if (result > 0) {
        out.print("密码修改成功!");
    } else {
        out.print("原密码错误,请重新输入!");
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    DBUtil.close(conn, pstmt, null); // 释放资源
}

四、总结

本文详细介绍了“LibrarySystem图书管理系统(二)”的完整攻略,包括系统的整体架构、各个功能模块的实现方式以及示例说明等内容。通过学习、理解和实践本文所述内容,相信读者已经掌握了该图书管理系统的设计和实现方法,具备了基本的Java Web开发能力。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:LibrarySystem图书管理系统(二) - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • JDBC获取数据库连接由浅入深

    JDBC获取数据库连接由浅入深 前言 Java Database Connectivity (JDBC)是Java语言中访问关系型数据库的标准统一接口,它是Java和数据库之间的一座桥梁,同时也是Java开发中不可或缺的重要组件之一。通过使用JDBC,我们可以在Java中连接和操作各种关系型数据库,如MySQL、Oracle、SQL Server等。在JDB…

    Java 2023年6月16日
    00
  • 基于Java创建一个订单类代码实例

    以下是基于Java创建一个订单类的完整攻略过程: 1. 定义订单类 在创建订单类之前,需要先明确订单类需要存储哪些信息,例如订单编号、订单创建时间、订单金额等等,再根据这些信息定义订单类的属性。同时,还需要定义订单类的基本行为,例如添加商品到订单、计算订单总金额等等,并将这些功能定义为订单类的方法。 public class Order { private …

    Java 2023年5月23日
    00
  • Java实现人脸识别登录、注册等功能(最新完整版)

    首先我们来介绍一下这篇文章。《Java实现人脸识别登录、注册等功能(最新完整版)》是一篇介绍如何使用Java语言实现人脸识别登录、注册等功能的文章。文章详细介绍了如何搭建环境、实现人脸注册、识别、显示等功能。下面将对文章中的内容进行详细讲解。 一、环境搭建 在文章中,作者先介绍了如何搭建Java开发环境,包括JDK、Eclipse、OpenCV等工具的安装和…

    Java 2023年5月19日
    00
  • SpringMVC JSON数据传输参数超详细讲解

    SpringMVC JSON数据传输参数超详细讲解 在 SpringMVC 中,我们可以使用 JSON 格式传输参数。本文将详细讲解 SpringMVC JSON 数据传输参数的使用方法,包括如何配置 SpringMVC、如何使用 @RequestBody 注解、如何使用 @ResponseBody 注解等。 配置 SpringMVC 在使用 SpringM…

    Java 2023年5月18日
    00
  • Java代码审计的一些基础知识你知道吗

    Java代码审计的一些基础知识你知道吗 什么是Java代码审计? Java代码审计是指对Java应用程序中的源代码进行检查、识别和评估安全漏洞的过程。此过程旨在识别开发中可能导致安全漏洞的编程错误或不良实践。它可以帮助开发人员找到这些漏洞并修复它们,提高软件的安全性。 Java代码审计的步骤 阅读和理解代码。 理解应用程序的功能并确定期望行为。 寻找不安全的…

    Java 2023年5月23日
    00
  • BootStrap Table 后台数据绑定、特殊列处理、排序功能

    Bootstrap Table 是一款基于 Bootstrap 样式的表格插件,它提供了丰富的功能如数据绑定、特殊列处理和排序功能等。在后台数据绑定方面,Bootstrap Table 提供了多种方式,包括本地(Local)、远程(Remote)和 URL,可以根据情况选择不同的方式。下面以远程方式为例进行讲解。 远程数据绑定 Bootstrap Table…

    Java 2023年6月15日
    00
  • Spring AOP实现功能权限校验功能的示例代码

    让我来为您介绍一下Spring AOP实现功能权限校验的攻略。 简介 Spring AOP是Spring框架中的一个模块,可以实现面向切面编程(AOP)的功能。通过Spring AOP可以实现功能权限校验的功能,实现对用户的操作进行安全控制并保护业务数据的安全性。 实现步骤 步骤一:定义权限校验的切面 在Spring AOP中,切面是对应用程序中横切关注点的…

    Java 2023年5月20日
    00
  • ssm 使用token校验登录的实现

    让我们来详细讲解一下“SSM 使用 Token 校验登录的实现”。 通过 Token 进行登录认证机制是常见的 Web 应用程序的身份认证机制之一。Token 是在身份验证后服务器返回的字符串,通常用于在客户端和服务器之间共享身份验证状态。以下是实现 SSM 使用 Token 校验登录的攻略: 1.概述 Token 认证机制主要分为以下几个流程: 用户通过表…

    Java 2023年6月16日
    00
合作推广
合作推广
分享本页
返回顶部