您好,登录后才能下订单哦!
图书管理系统是图书馆或书店等机构用于管理图书、读者、借阅记录等信息的软件系统。通过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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。