一、项目背景与目标
在数字化时代,图书馆管理系统对于高效管理图书资源、服务读者至关重要。本项目旨在开发一个基于 Java 的图书馆管理系统,实现图书的借阅、归还、查询以及读者信息管理等功能,提高图书馆的管理效率和服务质量。
二、项目架构设计
(一)分层架构
采用经典的三层架构:表现层、业务逻辑层和数据访问层。表现层负责与用户交互,接收请求并展示结果;业务逻辑层处理具体业务规则;数据访问层负责与数据库交互。
(二)数据库设计
使用 MySQL 数据库,设计以下主要表:
- 图书表(books):包含图书 ID、书名、作者、出版社、库存数量等字段。
- 读者表(readers):包含读者 ID、姓名、联系方式、借阅状态等字段。
- 借阅记录表(borrow_records):包含记录 ID、图书 ID、读者 ID、借阅日期、归还日期等字段。
三、环境搭建
(一)开发工具
使用 IntelliJ IDEA 作为开发工具,JDK 1.8 以上版本进行 Java 开发。
(二)依赖管理
使用 Maven 管理项目依赖,添加 MySQL 驱动、JDBC 等相关依赖。以下是 pom.xml
部分依赖示例:
xml
<dependencies>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
四、核心功能代码实现
(一)图书类和读者类定义
java
// 图书类
class Book {
private int id;
private String title;
private String author;
private String publisher;
private int stock;
// 构造函数
public Book(int id, String title, String author, String publisher, int stock) {
this.id = id;
this.title = title;
this.author = author;
this.publisher = publisher;
this.stock = stock;
}
// Getter 和 Setter 方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
}
// 读者类
class Reader {
private int id;
private String name;
private String contact;
private boolean isBorrowing;
// 构造函数
public Reader(int id, String name, String contact, boolean isBorrowing) {
this.id = id;
this.name = name;
this.contact = contact;
this.isBorrowing = isBorrowing;
}
// Getter 和 Setter 方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
public boolean isBorrowing() {
return isBorrowing;
}
public void setBorrowing(boolean borrowing) {
isBorrowing = borrowing;
}
}
(二)数据访问层
java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
// 图书数据访问类
class BookDAO {
private static final String DB_URL = "jdbc:mysql://localhost:3306/library";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "password";
// 获取所有图书信息
public List<Book> getAllBooks() {
List<Book> books = new ArrayList<>();
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM books");
ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("id");
String title = rs.getString("title");
String author = rs.getString("author");
String publisher = rs.getString("publisher");
int stock = rs.getInt("stock");
books.add(new Book(id, title, author, publisher, stock));
}
} catch (SQLException e) {
e.printStackTrace();
}
return books;
}
// 根据 ID 获取图书信息
public Book getBookById(int id) {
Book book = null;
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM books WHERE id = ?")) {
stmt.setInt(1, id);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
String title = rs.getString("title");
String author = rs.getString("author");
String publisher = rs.getString("publisher");
int stock = rs.getInt("stock");
book = new Book(id, title, author, publisher, stock);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return book;
}
// 更新图书库存
public void updateBookStock(int id, int newStock) {
try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement stmt = conn.prepareStatement("UPDATE books SET stock = ? WHERE id = ?")) {
stmt.setInt(1, newStock);
stmt.setInt(2, id);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// 读者数据访问类
class ReaderDAO {
private static final String