Menu
CoddyTech

Hệ thống mượn sách

Thuộc phần Lập trình hướng đối tượng trong hành trình Java của Coddy. Bài học 79 trên 87.

challenge icon

Thử thách

Dễ

Hãy tiếp tục xây dựng Hệ thống quản lý thư viện bằng cách tạo một hệ thống mượn sách hoàn chỉnh với lớp (class) Library để quản lý bộ sưu tập sách và người dùng. Đây là lúc hệ thống của bạn bắt đầu giống một thư viện thực sự: theo dõi ai đang giữ sách nào và áp dụng các quy tắc mượn sách!

Bạn sẽ sắp xếp code trong bốn tệp:

  • Book.java: Giữ lại lớp Book từ thử thách trước cùng mọi chức năng: isbn, title, author, isAvailable, borrowedBy, getDetails() và các phương thức getter/setter phù hợp.
  • User.java: Giữ lại lớp User với id, name, danh sách borrowedBooks kiểu ArrayList, borrowBook(), returnBook(), getBorrowedCount() và toString().
  • Library.java: Tạo lớp Library trung tâm để quản lý mọi thứ. Thư viện của bạn cần duy trì hai ArrayList: một danh sách chứa các đối tượng Book và một danh sách chứa các đối tượng User. Thêm các phương thức sau:

    addBook(Book book): thêm một quyển sách vào bộ sưu tập của thư viện.

    registerUser(User user): thêm một người dùng vào danh sách người dùng đã đăng ký của thư viện.

    findBookByIsbn(String isbn): tìm trong danh sách sách và trả về quyển Book có ISBN trùng khớp, hoặc trả về null nếu không tìm thấy.

    findUserById(String id): tìm trong danh sách người dùng và trả về người dùng User có ID trùng khớp, hoặc trả về null nếu không tìm thấy.

    borrowBook(String userId, String isbn): tìm người dùng và quyển sách, sau đó, nếu tìm thấy cả hai và sách còn, cho người dùng mượn sách rồi in ra [userName] borrowed [bookTitle]. Nếu sách không còn, in ra Book not available. Nếu không tìm thấy người dùng hoặc sách, in ra Invalid user or book.

    returnBook(String userId, String isbn): tìm người dùng và quyển sách, sau đó cho người dùng trả sách rồi in ra [userName] returned [bookTitle]. Nếu không tìm thấy người dùng hoặc sách, in ra Invalid user or book.

  • Main.java: Kết hợp các phần trong hệ thống thư viện của bạn! Bạn sẽ nhận đầu vào cho hai quyển sách, mỗi quyển gồm ISBN, tiêu đề và tác giả, một người dùng gồm ID và tên, rồi một chuỗi thao tác.

    Tạo một Library, thêm cả hai quyển sách và đăng ký người dùng. Sau đó, xử lý các thao tác: bạn sẽ nhận một chuỗi được phân tách bằng dấu phẩy, trong đó mỗi thao tác có định dạng borrow:userId:isbn hoặc return:userId:isbn.

    Sau khi xử lý mọi thao tác, in bản tóm tắt thể hiện trạng thái của từng quyển sách theo định dạng [isbn]: [Available/Borrowed].

Bạn sẽ nhận đầu vào theo thứ tự sau: ISBN của book1, tiêu đề của book1, tác giả của book1, ISBN của book2, tiêu đề của book2, tác giả của book2, ID người dùng, tên người dùng, cuối cùng là chuỗi thao tác.

Ví dụ, với đầu vào ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice và borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001, đầu ra sẽ là:

Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed

Thử thách này kết hợp tính kết hợp, tính đóng gói và thiết kế phương thức để tạo nên một hệ thống thống nhất. Lớp Library đóng vai trò điều phối, giao phần xử lý việc mượn sách cho các lớp User và Book, đồng thời quản lý toàn bộ bộ sưu tập!

Tự làm thử

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Đọc thông tin sách 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Đọc thông tin sách 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Đọc thông tin người dùng
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Đọc chuỗi thao tác (phân tách bằng dấu phẩy, định dạng: borrow:userId:isbn hoặc return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: Tạo các đối tượng Book cho book1 và book2
        
        // TODO: Tạo một đối tượng User
        
        // TODO: Tạo một Library, thêm cả hai cuốn sách và đăng ký người dùng
        
        // TODO: Tách operationsStr theo "," và xử lý từng thao tác
        //       Với mỗi thao tác, tách theo ":" để lấy action, userId, isbn
        //       Gọi library.borrowBook() hoặc library.returnBook() tương ứng
        
        // TODO: In ra trạng thái của từng cuốn sách theo định dạng "[isbn]: [Available/Borrowed]"
    }
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Java online