您好,登录后才能下订单哦!
图书管理系统是图书馆或书店等机构用于管理图书、读者、借阅记录等信息的软件系统。通过Java编程语言实现一个图书管理系统,可以帮助我们更好地理解面向对象编程、数据库操作、用户界面设计等知识。本文将详细介绍如何使用Java代码实现一个简单的图书管理系统。
在开始编写代码之前,我们需要明确系统的功能需求。一个基本的图书管理系统通常包括以下功能:
图书管理系统采用典型的三层架构:
系统使用MySQL数据库存储数据。数据库设计如下:
图书表(Book):
id
:图书ID(主键)title
:图书标题author
:作者publisher
:出版社isbn
:ISBN号quantity
:库存数量读者表(Reader):
id
:读者ID(主键)name
:读者姓名phone
:联系电话email
:电子邮件借阅记录表(BorrowRecord):
id
:记录ID(主键)book_id
:图书ID(外键)reader_id
:读者ID(外键)borrow_date
:借阅日期return_date
:归还日期根据系统需求,设计以下Java类:
在pom.xml
中添加以下依赖:
<dependencies>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!-- JUnit测试框架 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
public class Book {
private int id;
private String title;
private String author;
private String publisher;
private String isbn;
private int quantity;
// 构造方法、getter和setter省略
}
public class Reader {
private int id;
private String name;
private String phone;
private String email;
// 构造方法、getter和setter省略
}
public class BorrowRecord {
private int id;
private int bookId;
private int readerId;
private Date borrowDate;
private Date returnDate;
// 构造方法、getter和setter省略
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/library";
private static final String USER = "root";
private static final String PASSWORD = "password";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BookDAO {
public void addBook(Book book) throws SQLException {
String sql = "INSERT INTO Book (title, author, publisher, isbn, quantity) VALUES (?, ?, ?, ?, ?)";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, book.getTitle());
pstmt.setString(2, book.getAuthor());
pstmt.setString(3, book.getPublisher());
pstmt.setString(4, book.getIsbn());
pstmt.setInt(5, book.getQuantity());
pstmt.executeUpdate();
}
}
public List<Book> getAllBooks() throws SQLException {
List<Book> books = new ArrayList<>();
String sql = "SELECT * FROM Book";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
Book book = new Book();
book.setId(rs.getInt("id"));
book.setTitle(rs.getString("title"));
book.setAuthor(rs.getString("author"));
book.setPublisher(rs.getString("publisher"));
book.setIsbn(rs.getString("isbn"));
book.setQuantity(rs.getInt("quantity"));
books.add(book);
}
}
return books;
}
// 其他方法省略
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class ReaderDAO {
public void addReader(Reader reader) throws SQLException {
String sql = "INSERT INTO Reader (name, phone, email) VALUES (?, ?, ?)";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, reader.getName());
pstmt.setString(2, reader.getPhone());
pstmt.setString(3, reader.getEmail());
pstmt.executeUpdate();
}
}
public List<Reader> getAllReaders() throws SQLException {
List<Reader> readers = new ArrayList<>();
String sql = "SELECT * FROM Reader";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
Reader reader = new Reader();
reader.setId(rs.getInt("id"));
reader.setName(rs.getString("name"));
reader.setPhone(rs.getString("phone"));
reader.setEmail(rs.getString("email"));
readers.add(reader);
}
}
return readers;
}
// 其他方法省略
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BorrowRecordDAO {
public void addBorrowRecord(BorrowRecord record) throws SQLException {
String sql = "INSERT INTO BorrowRecord (book_id, reader_id, borrow_date, return_date) VALUES (?, ?, ?, ?)";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, record.getBookId());
pstmt.setInt(2, record.getReaderId());
pstmt.setDate(3, new java.sql.Date(record.getBorrowDate().getTime()));
pstmt.setDate(4, new java.sql.Date(record.getReturnDate().getTime()));
pstmt.executeUpdate();
}
}
public List<BorrowRecord> getAllBorrowRecords() throws SQLException {
List<BorrowRecord> records = new ArrayList<>();
String sql = "SELECT * FROM BorrowRecord";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
BorrowRecord record = new BorrowRecord();
record.setId(rs.getInt("id"));
record.setBookId(rs.getInt("book_id"));
record.setReaderId(rs.getInt("reader_id"));
record.setBorrowDate(rs.getDate("borrow_date"));
record.setReturnDate(rs.getDate("return_date"));
records.add(record);
}
}
return records;
}
// 其他方法省略
}
import java.sql.SQLException;
import java.util.List;
public class BookService {
private BookDAO bookDAO = new BookDAO();
public void addBook(Book book) throws SQLException {
bookDAO.addBook(book);
}
public List<Book> getAllBooks() throws SQLException {
return bookDAO.getAllBooks();
}
// 其他方法省略
}
import java.sql.SQLException;
import java.util.List;
public class ReaderService {
private ReaderDAO readerDAO = new ReaderDAO();
public void addReader(Reader reader) throws SQLException {
readerDAO.addReader(reader);
}
public List<Reader> getAllReaders() throws SQLException {
return readerDAO.getAllReaders();
}
// 其他方法省略
}
import java.sql.SQLException;
import java.util.List;
public class BorrowRecordService {
private BorrowRecordDAO borrowRecordDAO = new BorrowRecordDAO();
public void addBorrowRecord(BorrowRecord record) throws SQLException {
borrowRecordDAO.addBorrowRecord(record);
}
public List<BorrowRecord> getAllBorrowRecords() throws SQLException {
return borrowRecordDAO.getAllBorrowRecords();
}
// 其他方法省略
}
import java.sql.SQLException;
import java.util.List;
import java.util.Scanner;
public class MainUI {
private BookService bookService = new BookService();
private ReaderService readerService = new ReaderService();
private BorrowRecordService borrowRecordService = new BorrowRecordService();
private Scanner scanner = new Scanner(System.in);
public void showMenu() {
System.out.println("1. 添加图书");
System.out.println("2. 查看所有图书");
System.out.println("3. 添加读者");
System.out.println("4. 查看所有读者");
System.out.println("5. 借阅图书");
System.out.println("6. 查看所有借阅记录");
System.out.println("0. 退出");
}
public void run() {
while (true) {
showMenu();
System.out.print("请选择操作:");
int choice = scanner.nextInt();
scanner.nextLine(); // 清除缓冲区
try {
switch (choice) {
case 1:
addBook();
break;
case 2:
showAllBooks();
break;
case 3:
addReader();
break;
case 4:
showAllReaders();
break;
case 5:
borrowBook();
break;
case 6:
showAllBorrowRecords();
break;
case 0:
System.out.println("退出系统");
return;
default:
System.out.println("无效选择,请重新输入");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private void addBook() throws SQLException {
System.out.print("请输入图书标题:");
String title = scanner.nextLine();
System.out.print("请输入作者:");
String author = scanner.nextLine();
System.out.print("请输入出版社:");
String publisher = scanner.nextLine();
System.out.print("请输入ISBN号:");
String isbn = scanner.nextLine();
System.out.print("请输入库存数量:");
int quantity = scanner.nextInt();
scanner.nextLine(); // 清除缓冲区
Book book = new Book();
book.setTitle(title);
book.setAuthor(author);
book.setPublisher(publisher);
book.setIsbn(isbn);
book.setQuantity(quantity);
bookService.addBook(book);
System.out.println("图书添加成功");
}
private void showAllBooks() throws SQLException {
List<Book> books = bookService.getAllBooks();
for (Book book : books) {
System.out.println(book);
}
}
private void addReader() throws SQLException {
System.out.print("请输入读者姓名:");
String name = scanner.nextLine();
System.out.print("请输入联系电话:");
String phone = scanner.nextLine();
System.out.print("请输入电子邮件:");
String email = scanner.nextLine();
Reader reader = new Reader();
reader.setName(name);
reader.setPhone(phone);
reader.setEmail(email);
readerService.addReader(reader);
System.out.println("读者添加成功");
}
private void showAllReaders() throws SQLException {
List<Reader> readers = readerService.getAllReaders();
for (Reader reader : readers) {
System.out.println(reader);
}
}
private void borrowBook() throws SQLException {
System.out.print("请输入图书ID:");
int bookId = scanner.nextInt();
System.out.print("请输入读者ID:");
int readerId = scanner.nextInt();
scanner.nextLine(); // 清除缓冲区
BorrowRecord record = new BorrowRecord();
record.setBookId(bookId);
record.setReaderId(readerId);
record.setBorrowDate(new java.util.Date());
record.setReturnDate(new java.util.Date()); // 假设归还日期为当前日期
borrowRecordService.addBorrowRecord(record);
System.out.println("借阅记录添加成功");
}
private void showAllBorrowRecords() throws SQLException {
List<BorrowRecord> records = borrowRecordService.getAllBorrowRecords();
for (BorrowRecord record : records) {
System.out.println(record);
}
}
public static void main(String[] args) {
MainUI ui = new MainUI();
ui.run();
}
}
在完成代码编写后,我们需要对系统进行测试,确保各个功能模块能够正常工作。可以使用JUnit编写单元测试,测试各个DAO和Service类的方法。
import org.junit.Before;
import org.junit.Test;
import java.sql.SQLException;
import static org.junit.Assert.*;
public class BookDAOTest {
private BookDAO bookDAO;
@Before
public void setUp() {
bookDAO = new BookDAO();
}
@Test
public void testAddBook() throws SQLException {
Book book = new Book();
book.setTitle("Java编程思想");
book.setAuthor("Bruce Eckel");
book.setPublisher("机械工业出版社");
book.setIsbn("9787111213826");
book.setQuantity(10);
bookDAO.addBook(book);
assertTrue(true); // 简单断言,确保没有抛出异常
}
@Test
public void testGetAllBooks() throws SQLException {
List<Book> books = bookDAO.getAllBooks();
assertNotNull(books);
}
}
import org.junit.Before;
import org.junit.Test;
import java.sql.SQLException;
import static org.junit.Assert.*;
public class ReaderDAOTest {
private ReaderDAO readerDAO;
@Before
public void setUp() {
readerDAO = new ReaderDAO();
}
@Test
public void testAddReader() throws SQLException {
Reader reader = new Reader();
reader.setName("张三");
reader.setPhone("13800138000");
reader.setEmail("zhangsan@example.com");
readerDAO.addReader(reader);
assertTrue(true); // 简单断言,确保没有抛出异常
}
@Test
public void testGetAllReaders() throws SQLException {
List<Reader> readers = readerDAO.getAllReaders();
assertNotNull(readers);
}
}
”`java import org.junit.Before; import org.junit.Test; import java.sql.SQLException; import java.util.Date; import static org.junit.Assert.*;
public class BorrowRecordDAOTest { private BorrowRecordDAO borrowRecordDAO;
@Before
public void setUp() {
borrowRecordDAO = new BorrowRecordDAO();
}
@Test
public void test
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。