java实现简单的图书借阅系统

Java实现简单的图书借阅系统

一、需求分析

在设计图书借阅系统之前,我们需要进行需求分析,了解系统需要实现哪些功能。

  1. 管理员功能

  2. 添加图书:管理员可以添加图书到系统中,包括图书名称、作者、出版社、ISBN码等信息。

  3. 删除图书:管理员可以删除系统中的图书。
  4. 修改图书信息:管理员可以修改系统中的图书信息。
  5. 查询图书:管理员可以查询系统中的图书列表,包括已借出和未借出的图书。

  6. 用户功能

  7. 注册:用户在第一次使用系统时需要注册,提供姓名、联系方式等信息。

  8. 登录/注销:用户可以登录、注销系统。
  9. 借书:用户可以借阅系统中的图书。
  10. 还书:用户可以还归图书。

二、数据库设计

我们需要设计数据库来存储图书及用户信息等数据。在这里,我们可以使用MySQL关系型数据库,设计两张表:图书信息表和用户信息表。

  1. 图书信息表

  2. book_id : 图书序号。

  3. book_name : 图书名称。
  4. author : 图书作者。
  5. publisher : 出版社。
  6. ISBN : ISBN码。
  7. status : 图书状态,1表示已借出,0表示未借出。

下表是我们要建立的图书信息表:

CREATE TABLE `book` (
    `book_id` int(11) NOT NULL auto_increment,
    `book_name` varchar(255) NOT NULL,
    `author` varchar(255) NOT NULL,
    `publisher` varchar(255) NOT NULL,
    `ISBN` varchar(13) NOT NULL,
    `status` tinyint(1) unsigned NOT NULL DEFAULT '0',
    PRIMARY KEY (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 用户信息表

  2. user_id : 用户序号。

  3. username : 用户名。
  4. password : 密码。
  5. phone_number : 联系方式。
  6. borrow_book : 已借阅书单。

下表是我们要建立的用户信息表:

CREATE TABLE `user` (
    `user_id` int(11) NOT NULL auto_increment,
    `username` varchar(255) NOT NULL,
    `password` varchar(255) NOT NULL,
    `phone_number` varchar(11) NOT NULL,
    `borrow_book` varchar(255),
    PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

三、Java代码实现

在设计数据库后,我们需要编写Java代码来实现对数据库的CRUD操作,并实现我们在需求分析中提到的各个功能。下面是Java代码的实现过程。

  1. 添加图书

在管理员添加图书时,需要提供图书名称、作者、ISBN码等信息。在代码中,我们需要编写向图书信息表中添加数据的方法,在添加时需要将图书状态默认设置为未借出。

public class Book {
    private Connection con = null;

    public Book() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    }

    public void addBook(String bookname, String author, String publisher, String ISBN) throws SQLException {
        String sql = "insert into test.book (book_name, author, publisher, ISBN, status) values (?, ?, ?, ?, ?)";
        PreparedStatement statement = con.prepareStatement(sql);
        statement.setString(1, bookname);
        statement.setString(2, author);
        statement.setString(3, publisher);
        statement.setString(4, ISBN);
        statement.setInt(5, 0);
        statement.executeUpdate();
        statement.close();
    }
}
  1. 删除图书

在管理员删除图书时,需要根据图书信息表中的图书序号来进行删除。在代码中,我们需要编写删除图书的方法,并根据输入的图书序号将该图书从图书信息表中删除。

public class Book {
    private Connection con = null;

    public Book() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    }

    public void deleteBook(int book_id) throws SQLException {
        String sql = "delete from test.book where book_id=?";
        PreparedStatement statement = con.prepareStatement(sql);
        statement.setInt(1, book_id);
        statement.executeUpdate();
        statement.close();
    }
}
  1. 修改图书信息

在管理员修改图书信息时,需要提供需要修改的图书序号,并用修改后的信息进行更新。在代码中,我们需要编写更新图书信息的方法,并根据提供的图书序号从图书信息表中找到该图书,然后进行修改。

public class Book {
    private Connection con = null;

    public Book() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    }

    public void updateBook(int book_id, String bookname, String author, String publisher, String ISBN) throws SQLException {
        String sql = "update test.book set book_name=?, author=?, publisher=?, ISBN=? where book_id=? ";
        PreparedStatement statement = con.prepareStatement(sql);
        statement.setString(1, bookname);
        statement.setString(2, author);
        statement.setString(3, publisher);
        statement.setString(4, ISBN);
        statement.setInt(5, book_id);
        statement.executeUpdate();
        statement.close();
    }
}
  1. 查询图书

在管理员查询图书时,需要将图书信息表中的数据列出。在代码中,我们需要编写查询图书的方法,并将图书信息表中的所有数据都查询出来。

public class Book {
    private Connection con = null;

    public Book() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    }

    public ResultSet queryBook() throws SQLException {
        String sql = "select * from test.book";
        PreparedStatement statement = con.prepareStatement(sql);
        ResultSet rs = statement.executeQuery();
        return rs;
    }
}
  1. 用户注册

在用户注册时,用户需要提供用户名、密码和联系方式等信息。在代码中,我们需要编写用户注册的方法,并将用户信息插入到用户信息表中。

public class User {
    private Connection con = null;

    public User() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    }

    public void register(String username, String password, String phone_number) throws SQLException {
        String sql = "insert into test.user (username, password, phone_number) values (?, ?, ?)";
        PreparedStatement statement = con.prepareStatement(sql);
        statement.setString(1, username);
        statement.setString(2, password);
        statement.setString(3, phone_number);
        statement.executeUpdate();
        statement.close();
    }
}
  1. 用户登录/注销

在用户登录/注销时,需要提供用户名和密码。在代码中,我们需要编写用户登录和注销的方法,并根据输入的用户名和密码在用户信息表中进行验证。

public class User {
    private Connection con = null;

    public User() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    }

    public boolean login(String username, String password) throws SQLException {
        String sql = "select * from test.user where username=? and password=?";
        PreparedStatement statement = con.prepareStatement(sql);
        statement.setString(1, username);
        statement.setString(2, password);
        ResultSet rs = statement.executeQuery();
        return rs.next();
    }

    public boolean logout() throws SQLException {
        // 清空用户相关信息,如借阅书单等
        return true;
    }
}
  1. 用户借书

在用户借书时,需要提供需要借阅的图书序号,在代码中,我们需要编写用户借书的方法,并在用户信息表中将该用户的借阅书单更新。

public class User {
    private Connection con = null;

    public User() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    }

    public void borrowBook(int book_id) throws SQLException {
        // 修改图书状态为已借出
        String sql1 = "update test.book set status=1 where book_id=?";
        PreparedStatement statement1 = con.prepareStatement(sql1);
        statement1.setInt(1, book_id);
        statement1.executeUpdate();
        statement1.close();

        // 更新用户借阅书单
        String sql2 = "update test.user set borrow_book=concat(borrow_book, ',') where user_id=?";
        PreparedStatement statement2 = con.prepareStatement(sql2);
        statement2.setInt(1, user_id);
        statement2.executeUpdate();
        statement2.close();
    }
}
  1. 用户还书

在用户还书时,需要提供需要归还的图书序号,在代码中,我们需要编写用户还书的方法,并在用户信息表中将该用户的借阅书单相应删除,并在图书信息表中将该图书状态改为未借出。

public class User {
    private Connection con = null;

    public User() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
    }

    public void returnBook(int book_id) throws SQLException {
        // 修改图书状态为未借出
        String sql1 = "update test.book set status=0 where book_id=?";
        PreparedStatement statement1 = con.prepareStatement(sql1);
        statement1.setInt(1, book_id);
        statement1.executeUpdate();
        statement1.close();

        // 更新用户借阅书单
        String sql2 = "update test.user set borrow_book=replace(borrow_book, ?, '') where borrow_book like ?";
        PreparedStatement statement2 = con.prepareStatement(sql2);
        statement2.setString(1, "," + book_id + ",");
        statement2.setString(2, "%," + book_id + ",%");
        statement2.executeUpdate();
        statement2.close();
    }
}

四、示例说明

以下是两个简单的示例说明:

  • 示例1:管理员新增图书。

java
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Book book = new Book();
book.addBook("Java从入门到精通", "张三", "人民邮电出版社", "1234567890123");
}

  • 示例2:用户借阅图书。

java
public static void main(String[] args) throws ClassNotFoundException, SQLException {
User user = new User();
if (user.login("张三", "pwd123")) {
user.borrowBook(1);
} else {
System.out.println("登录失败");
}
}

五、总结

通过以上步骤,我们成功地实现了一个简单的图书借阅系统。当然,这只是一个基础版的系统,它还可以进行更多的扩展,如增加图书分类、图书评分等功能。

阅读剩余 85%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现简单的图书借阅系统 - Python技术站

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

相关文章

  • Java线程等待用法实例分析

    Java线程等待用法实例分析 在Java编程中,线程等待是掌握多线程知识的重要一环。当在某些情况下需要进行线程同步、控制程序执行顺序时,常常需要使用线程等待。本文将详细讲解Java线程等待的用法,并通过两个实例对其进行示例说明。 等待与通知 在线程中,等待与通知是两个相互关联的概念。等待指的是线程暂停自身的执行,并且进入等待状态,等待系统发出通知,来唤醒其继…

    Java 2023年5月18日
    00
  • 详解java.lang.NumberFormatException错误及解决办法

    详解java.lang.NumberFormatException错误及解决办法 在Java编程中,如果出现数字字符串转换为数字类型时出现错误,就会抛出一个NumberFormatException异常。这种错误通常是由于尝试将一个无效的字符串转换为数字类型引起的。在本文中,我们将详细了解这个常见错误的原因和解决办法,并提供两个示例说明其中的一个常见场景。 …

    Java 2023年5月27日
    00
  • java代码实现银行管理系统

    Java代码实现银行管理系统攻略 银行管理系统是一个较为复杂的系统,包含了许多业务、功能和数据操作,但使用Java语言实现银行管理系统也不是难事。在本文中,我将通过以下步骤详细讲解如何使用Java代码实现银行管理系统。 第一步:分析业务需求 在编写Java代码之前,我们首先需要了解银行管理系统的业务需求。常见的银行管理系统包括账户管理、存取款、贷款管理、利率…

    Java 2023年5月23日
    00
  • springboot集成schedule实现定时任务

    下面是springboot集成schedule实现定时任务的完整攻略: 1. 学习前提 在学习本篇攻略之前,需要掌握以下基础知识: Java基础语法 Spring框架基础知识 SpringBoot框架基础知识 2. Schedule简介 Schedule是Spring框架提供的一种任务调度框架,用于在指定的时间间隔内执行指定的任务。Schedule有以下几种…

    Java 2023年5月15日
    00
  • jsp下显示中文文件名及绝对路径下的图片解决方法

    下面是详细讲解“jsp下显示中文文件名及绝对路径下的图片解决方法”的完整攻略。 问题描述: 在jsp页面中,有时需要显示中文文件名或访问绝对路径下的图片,但这些操作并不是很直接,需要做一些额外的处理。 解决方案: 1. 文件名中文显示 在jsp页面中,如果要显示中文文件名,需要注意两点: 页面编码要设置为UTF-8,否则中文文件名会乱码。 使用URLEnco…

    Java 2023年6月15日
    00
  • Java语言中flush()函数作用及使用方法详解

    Java语言中flush()函数作用及使用方法详解 1. flush()函数的作用 在Java语言中,flush()函数用于清空输出流缓冲区,强制将缓冲区的内容输出到目标位置(比如文件、网络等)。具体来说,flush()函数将输出流中的所有缓冲数据都写入到目标位置,同时清空缓冲区,保证数据能够及时地被输出到目标位置。在输出流关闭之前,我们经常需要调用flus…

    Java 2023年5月26日
    00
  • 强烈推荐-ajax开发者必看的文章第3/3页

    让我为您详细讲解一下“强烈推荐-ajax开发者必看的文章第3/3页”的完整攻略。 强烈推荐-ajax开发者必看的文章第3/3页 1. Ajax简介 Ajax是一种基于现有标准的web开发技术,主要运用JavaScript、XML、CSS、DOM等技术实现异步加载数据和局部刷新的效果。它的优点是可以提高web应用的交互效率,减轻服务器压力,提升用户体验。 2.…

    Java 2023年6月15日
    00
  • 类卸载的触发条件是什么?

    类卸载是指在JVM中,当一个类不再被引用的时候,就会被JVM卸载,释放其占用的内存资源。类卸载的触发条件与垃圾回收机制密切相关。 在JVM中,当一个类不再被引用时,会进入“可卸载状态”,但仅仅处于“可卸载状态”是不够的,还需要满足以下两个条件才能被卸载: 该类的所有实例都已经被回收,不存在任何活动的类实例; 加载该类的ClassLoader已经被回收。 只有…

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