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日

相关文章

  • Mybatis-Plus主键生成策略的方法

    关于Mybatis-Plus主键生成策略的方法,我们来一步步讲解。 什么是Mybatis-Plus主键生成策略 首先,让我们了解一下Mybatis-Plus是什么。Mybatis-Plus是一个Mybatis的增强工具,提供了很多强大的功能,包括自动生成代码、通用CRUD操作、分页插件等等。而Mybatis-Plus主键生成策略就是Mybatis-Plus提…

    Java 2023年5月19日
    00
  • SpringBoot整合SpringSecurity实现认证拦截的教程

    首先,我们需要确保具备以下的环境: JDK 1.8+ Maven IntelliJ IDEA(或其他IDE) 接下来,我们可以按照以下步骤进行SpringBoot整合SpringSecurity实现认证拦截: 步骤一:创建SpringBoot工程 我们可以使用SpringBoot官方提供的Spring Initializr来创建工程,也可以使用IDEA的Ne…

    Java 2023年5月20日
    00
  • JSP入门之HelloWorld程序实例

    JSP入门之HelloWorld程序实例 简介 JSP(Java Server Pages)是一种动态网页开发技术,可以将Java代码嵌入到HTML页面中,动态生成HTML页面。 HelloWorld程序是最简单的JSP程序,通常作为起步项目,通过实现它可以快速体验JSP的开发过程。 下面是一个简单的HelloWorld程序实例。 示例1 创建一个名为ind…

    Java 2023年6月15日
    00
  • 大型网站建站要考虑数据库压力和服务器负载

    针对大型网站建站考虑数据库压力和服务器负载,一般需要从以下几个方面进行攻略: 1. 数据库方面 1.1 数据库设计优化 在设计数据库时需要考虑哪些字段需要建立索引,哪些字段可以使用缓存,数据表之间的关联关系等,以降低数据库压力。 1.2 分库分表 将数据分散到多个数据库或数据表中,可以分散压力,提高读写效率。在分库分表过程中还需要考虑数据同步问题。 1.3 …

    Java 2023年5月20日
    00
  • Java中synchronized正确使用方法解析

    Java中synchronized正确使用方法解析 什么是synchronized synchronized是一个对象级别的锁,也称之为内部锁或者特定对象的锁。Java中提供了三种使用synchronized关键字同步代码块的方法。 修饰实例方法,锁的是当前实例对象(this)。 修饰静态方法,锁的是类对象(Class对象)。 修饰代码块,锁的是代码块中的对…

    Java 2023年5月26日
    00
  • Intellij IDEA 旗舰版创建 Spring MVC 项目踩过的坑

    Intellij IDEA 旗舰版创建 Spring MVC 项目踩过的坑 Intellij IDEA 是一款非常流行的 Java 开发工具,它提供了很多方便的功能来帮助我们开发 Spring MVC 项目。但是在创建 Spring MVC 项目时,有时会遇到一些问题和坑。本文将详细讲解如何在 Intellij IDEA 旗舰版中创建 Spring MVC …

    Java 2023年5月18日
    00
  • Java日常练习题,每天进步一点点(11)

    Java日常练习题是一组有关Java语言的练习题,可以帮助练习者巩固Java语言的基础知识,提高编程技巧和解决问题的能力。以下是本文对“Java日常练习题,每天进步一点点(11)”进行详细讲解的攻略。 1.题目描述 “Java日常练习题,每天进步一点点(11)”所涉及的题目包含以下几个方面: 如何计算一个数组的和; 如何计算一个数组的平均值; 如何查找数组中…

    Java 2023年5月26日
    00
  • SpringMVC mybatis整合实例代码详解

    SpringMVC MyBatis整合实例代码详解 SpringMVC和MyBatis是两个非常流行的Java Web框架,它们都有自己的优点和特点。在本文中,我们将详细讲解如何将SpringMVC和MyBatis整合起来,以便更好地开发Web应用程序。 整合步骤 整合SpringMVC和MyBatis需要以下步骤: 添加依赖 配置数据源 配置MyBatis…

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