怎么用Java代码实现图书管理系统

发布时间:2022-08-30 09:55:58 作者:iii
来源:亿速云 阅读:124

怎么用Java代码实现图书管理系统

目录

  1. 引言
  2. 需求分析
  3. 系统设计
  4. 环境搭建
  5. 代码实现
  6. 测试与调试
  7. 部署与维护
  8. 总结

引言

图书管理系统是图书馆或书店等机构用于管理图书、读者、借阅记录等信息的软件系统。通过Java编程语言实现一个图书管理系统,可以帮助我们更好地理解面向对象编程、数据库操作、用户界面设计等知识。本文将详细介绍如何使用Java代码实现一个简单的图书管理系统。

需求分析

在开始编写代码之前,我们需要明确系统的功能需求。一个基本的图书管理系统通常包括以下功能:

  1. 图书管理:添加、删除、修改、查询图书信息。
  2. 读者管理:添加、删除、修改、查询读者信息。
  3. 借阅管理:记录图书的借阅和归还信息。
  4. 用户权限管理:不同用户(如管理员、普通用户)具有不同的操作权限。
  5. 数据统计:统计图书借阅情况、读者借阅记录等。

系统设计

3.1 系统架构

图书管理系统采用典型的三层架构:

  1. 表现层(UI):负责与用户交互,展示数据和接收用户输入。
  2. 业务逻辑层(Service):处理业务逻辑,如借书、还书等操作。
  3. 数据访问层(DAO):负责与数据库交互,执行增删改查操作。

3.2 数据库设计

系统使用MySQL数据库存储数据。数据库设计如下:

3.3 类设计

根据系统需求,设计以下Java类:

环境搭建

4.1 开发工具

4.2 依赖管理

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>

代码实现

5.1 实体类

Book.java

public class Book {
    private int id;
    private String title;
    private String author;
    private String publisher;
    private String isbn;
    private int quantity;

    // 构造方法、getter和setter省略
}

Reader.java

public class Reader {
    private int id;
    private String name;
    private String phone;
    private String email;

    // 构造方法、getter和setter省略
}

BorrowRecord.java

public class BorrowRecord {
    private int id;
    private int bookId;
    private int readerId;
    private Date borrowDate;
    private Date returnDate;

    // 构造方法、getter和setter省略
}

5.2 数据库连接

DBUtil.java

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);
    }
}

5.3 数据访问层

BookDAO.java

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;
    }

    // 其他方法省略
}

ReaderDAO.java

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;
    }

    // 其他方法省略
}

BorrowRecordDAO.java

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;
    }

    // 其他方法省略
}

5.4 业务逻辑层

BookService.java

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();
    }

    // 其他方法省略
}

ReaderService.java

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();
    }

    // 其他方法省略
}

BorrowRecordService.java

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();
    }

    // 其他方法省略
}

5.5 用户界面

MainUI.java

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类的方法。

BookDAOTest.java

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);
    }
}

ReaderDAOTest.java

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);
    }
}

BorrowRecordDAOTest.java

”`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
推荐阅读:
  1. 如何使用java代码实现图书管理系统
  2. java如何实现图书管理系统

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:vscode使用Eslint+Prettier格式化代码怎么写

下一篇:vue3.0怎么实现移动端电子签名组件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》