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日

相关文章

  • 详解Java 类的加载机制

    详解Java 类的加载机制 Java是一种面向对象的编程语言,其面向对象的本质体现在Java类的使用上。在Java中,类是一种由Java源码编写的框架,其封装了需要处理的数据以及需要执行的方法,是Java程序的基本模块。Java类的加载是指将类名转换成Java虚拟机中的一个对象的过程,它是Java中关键的组成部分之一。本篇文章将进行详细讲解Java类的加载机…

    Java 2023年6月15日
    00
  • java 文件和byte互转的实例

    讲解Java文件和Byte数组的互转需要以下步骤: 1. 获取Java文件的字节数组 Java文件的字节数组通常用于网络传输或者是保存到数据库等操作。可以使用Java中的IO流来读取文件,然后将其转换为字节数组。 以下是一个示例,演示如何将Java文件转换为字节数组: import java.io.File; import java.io.FileInput…

    Java 2023年5月20日
    00
  • JSP实现文件上传功能

    下面就是使用JSP实现文件上传功能的攻略。 1. 前置准备 在进行文件上传的操作时,需要使用到Web容器提供的Servlet API和一些第三方的类库,所以在开始实现前,需要进行一些前置准备。 1.1. 导入第三方类库 上传文件过程中,需要用到Apache的常用文件上传组件commons-fileupload,所以需要下载并导入到项目中。在项目中创建一个名叫…

    Java 2023年6月15日
    00
  • Jsp真分页实例—分页

    JSP真分页实现需要使用Java语言和JSP技术。具体实现步骤如下: 步骤一:获取数据并计算总页数 首先,我们需要从数据库或后台获取数据并计算出总页数。我们可以通过以下代码实现: <% // 每页显示10条数据 int pageSize = 10; // 当前页码 int currentPage = Integer.parseInt(request.g…

    Java 2023年6月15日
    00
  • Java中怎样处理空指针异常

    Java 中的空指针异常是程序中常见的异常之一,在使用对象之前必须对其进行 null 检查,以避免空指针异常的发生。 本文将详细讲解 Java 中如何处理空指针异常以及具体的处理方法。 1. 空指针异常的产生原因 空指针异常是因为对一个 null 对象调用方法或访问属性时所产生的异常。这种异常通常会在代码中出现空引用时才引起程序崩溃。 以下是一个简单的示例:…

    Java 2023年5月27日
    00
  • centos7.2.1511安装jdk1.8.0_151及mysql5.6.38的方法

    下面给出详细的攻略: 安装JDK1.8.0_151 下载JDK1.8.0_151安装包 从Oracle官网下载对应版本的JDK1.8.0_151压缩包,下载链接为 [jdk-8u151-linux-x64.tar.gz][1]。 解压JDK1.8.0_151安装包 使用以下命令将JDK1.8.0_151解压到 /usr/local/ 目录下: tar -zx…

    Java 2023年5月20日
    00
  • Java中SpringSecurity密码错误5次锁定用户的实现方法

    Java中Spring Security提供了实现对用户密码错误次数的限制的功能,可以有效地防范暴力破解密码的攻击。下面是实现方法的完整攻略: 1. 添加依赖 为使用Spring Security功能,我们首先需要在工程中添加相关依赖。可以通过Maven或Gradle等工具自动下载所需的库文件并将其添加至工程中。添加依赖库后,我们可以开始配置Security…

    Java 2023年5月20日
    00
  • Java简明解读代码块的应用

    下面是详细讲解“Java简明解读代码块的应用”的完整攻略。 什么是代码块 在Java中,代码块是指用{}括起来的一组代码,是一种组织代码的方式,可以用来限制变量的作用域、初始化变量、进行一次性的逻辑操作等。 Java中分为四种不同类型的代码块: 普通代码块 静态代码块 同步代码块 构造代码块 下面将分别对每种代码块进行详细介绍。 普通代码块 普通代码块是最常…

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