Java实现简单的图书借阅系统
一、需求分析
在设计图书借阅系统之前,我们需要进行需求分析,了解系统需要实现哪些功能。
-
管理员功能
-
添加图书:管理员可以添加图书到系统中,包括图书名称、作者、出版社、ISBN码等信息。
- 删除图书:管理员可以删除系统中的图书。
- 修改图书信息:管理员可以修改系统中的图书信息。
-
查询图书:管理员可以查询系统中的图书列表,包括已借出和未借出的图书。
-
用户功能
-
注册:用户在第一次使用系统时需要注册,提供姓名、联系方式等信息。
- 登录/注销:用户可以登录、注销系统。
- 借书:用户可以借阅系统中的图书。
- 还书:用户可以还归图书。
二、数据库设计
我们需要设计数据库来存储图书及用户信息等数据。在这里,我们可以使用MySQL关系型数据库,设计两张表:图书信息表和用户信息表。
-
图书信息表
-
book_id : 图书序号。
- book_name : 图书名称。
- author : 图书作者。
- publisher : 出版社。
- ISBN : ISBN码。
- 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;
-
用户信息表
-
user_id : 用户序号。
- username : 用户名。
- password : 密码。
- phone_number : 联系方式。
- 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代码的实现过程。
- 添加图书
在管理员添加图书时,需要提供图书名称、作者、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();
}
}
- 删除图书
在管理员删除图书时,需要根据图书信息表中的图书序号来进行删除。在代码中,我们需要编写删除图书的方法,并根据输入的图书序号将该图书从图书信息表中删除。
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();
}
}
- 修改图书信息
在管理员修改图书信息时,需要提供需要修改的图书序号,并用修改后的信息进行更新。在代码中,我们需要编写更新图书信息的方法,并根据提供的图书序号从图书信息表中找到该图书,然后进行修改。
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();
}
}
- 查询图书
在管理员查询图书时,需要将图书信息表中的数据列出。在代码中,我们需要编写查询图书的方法,并将图书信息表中的所有数据都查询出来。
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;
}
}
- 用户注册
在用户注册时,用户需要提供用户名、密码和联系方式等信息。在代码中,我们需要编写用户注册的方法,并将用户信息插入到用户信息表中。
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();
}
}
- 用户登录/注销
在用户登录/注销时,需要提供用户名和密码。在代码中,我们需要编写用户登录和注销的方法,并根据输入的用户名和密码在用户信息表中进行验证。
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;
}
}
- 用户借书
在用户借书时,需要提供需要借阅的图书序号,在代码中,我们需要编写用户借书的方法,并在用户信息表中将该用户的借阅书单更新。
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();
}
}
- 用户还书
在用户还书时,需要提供需要归还的图书序号,在代码中,我们需要编写用户还书的方法,并在用户信息表中将该用户的借阅书单相应删除,并在图书信息表中将该图书状态改为未借出。
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("登录失败");
}
}
五、总结
通过以上步骤,我们成功地实现了一个简单的图书借阅系统。当然,这只是一个基础版的系统,它还可以进行更多的扩展,如增加图书分类、图书评分等功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现简单的图书借阅系统 - Python技术站