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日

相关文章

  • Jsp+Servlet实现简单登录注册查询

    下面是详细的“Jsp+Servlet实现简单登录注册查询”的攻略: 一、前提要求:开发环境安装与配置 1. JDK和Tomcat环境安装 在开始之前,需要在电脑上安装JDK和Tomcat两个环境。 JDK下载安装地址:https://www.oracle.com/java/technologies/javase-downloads.html Tomcat下载…

    Java 2023年6月15日
    00
  • 关于Java跨域Json字符转类对象的方法示例

    下面我就针对“关于Java跨域Json字符转类对象的方法示例”的完整攻略,进行详细讲解,希望能够帮助到你。 1. 什么是跨域? 首先,我们需要明白什么是跨域。跨域是指在同一个浏览器中,一个网站的JavaScript代码试图去访问另一个网站的代码。 在Web安全领域中,浏览器出于安全考虑,禁止页面中的JavaScript代码访问其它域下的资源,包括Cookie…

    Java 2023年5月26日
    00
  • idea注解参数换行时间日期格式设置方法

    下面是关于如何在IDEA中设置注解参数换行时间日期格式的完整攻略: 1. 在注解中设置时间日期格式 在使用注解时,可以通过设置参数pattern来定义时间日期格式。例如,使用@JsonFormat注解将Java对象转换为JSON格式时,可以通过设置pattern参数来指定时间日期的输出格式。 @JsonFormat(pattern = "yyyy-…

    Java 2023年5月20日
    00
  • Java Web开发之图形验证码的生成与使用方法

    Java Web开发之图形验证码的生成与使用方法 在Java Web开发中,图形验证码是常用的用户验证工具。通过在表单中添加验证码,可以有效防止自动化机器人等非人类恶意行为的攻击。本文将详细介绍Java Web开发中,如何生成和使用图形验证码。 生成图形验证码 生成图形验证码需要使用Java提供的Graphics2D类。其中,需要注意以下几个关键点: 随机生…

    Java 2023年6月15日
    00
  • .htaccess文件使用教程总结

    下面是“.htaccess文件使用教程总结”的详细攻略: 什么是.htaccess文件 .htaccess文件是一种在Apache Web服务器上配置Web服务器的文件,可以让您定义许多方面的服务器行为和规则。 创建.htaccess文件 在创建.htaccess文件之前,您需要确保您的服务器上启用了.htaccess文件。在Apache服务器中,默认情况下…

    Java 2023年6月15日
    00
  • Java自定义一个变长数组的思路与代码

    首先我们来讲一下如何自定义一个变长数组。 思路 实现一个变长数组需要将数据存储在连续的内存空间中,并能够对数组的大小进行动态调整。具体实现中,我们需要考虑以下几点: 数组的存储:数组需要存储在内存空间中,可以使用Java中的数组或对象来存储。 数组的大小:数组大小的动态调整可以通过重新分配内存空间实现。 数组的操作:支持向数组中插入、删除、修改元素,以及获取…

    Java 2023年5月26日
    00
  • java连接mysql数据库乱码的解决方法

    以下是讲解“java连接mysql数据库乱码的解决方法”的完整攻略。 问题描述 在使用Java连接MySQL数据库时,有时会出现中文乱码的问题。如何解决这个问题呢?下面将会给出详细的解决方法。 解决方法 步骤一:指定编码方式 在连接MySQL数据库之前,需要指定编码方式。可以在连接数据库的URL中添加以下参数: jdbc:mysql://localhost/…

    Java 2023年5月19日
    00
  • java自旋锁和JVM对锁的优化详解

    Java自旋锁和JVM对锁的优化详解 在多线程并发编程中,锁的使用尤为重要。Java中的锁主要包括synchronized关键字和ReentrantLock类,这些锁在实现上都涉及到了自旋锁和JVM对锁的优化。 什么是自旋锁 自旋锁是指当一个线程获得锁后,发现其他线程正在使用该锁,则该线程不会立即阻塞,而是一直循环等待直到其他线程释放该锁。 在Java中,s…

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