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 PHP của Coddy. Bài học 84 trên 91.

challenge icon

Thử thách

Dễ

Hãy đưa Hệ thống quản lý thư viện vào hoạt động bằng cách tạo lớp Library để điều phối mọi thao tác mượn sách. Bộ phận điều phối trung tâm này sẽ quản lý bộ sưu tập sách và thực thi các quy tắc giúp thư viện hoạt động trơn tru.

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

  • Book.php: Lớp Book từ bài học trước, có các thuộc tính chỉ đọc (isbn, title, author), thuộc tính riêng tư $isAvailable có giá trị ban đầu là true, cùng các phương thức: isAvailable(), markAsBorrowed() và markAsReturned().
  • User.php: Bao gồm tệp Book. Lớp User có các thuộc tính chỉ đọc (id, name), mảng riêng tư $borrowedBooks, hằng số MAX_BOOKS có giá trị 3 và các phương thức: getBorrowedBooks(), canBorrow(), addBook(Book $book) và removeBook(string $isbn).
  • Library.php: Bao gồm tệp User. Tạo lớp Library để quản lý bộ sưu tập sách. Thư viện của bạn cần có:
    • Mảng riêng tư $books để lưu sách, được lập chỉ mục theo ISBN
    • addBook(Book $book): void: thêm sách vào bộ sưu tập
    • findBook(string $isbn): ?Book: trả về sách hoặc null nếu không tìm thấy
    • borrowBook(User $user, string $isbn): string: xác thực và xử lý việc mượn sách, rồi trả về thông báo phù hợp
    • returnBook(User $user, string $isbn): string: xử lý việc trả sách và cập nhật trạng thái của cả sách lẫn người dùng

    Phương thức borrowBook cần kiểm tra lần lượt ba điều kiện và trả về chính xác các thông báo sau:

    • "Book not found": nếu sách không tồn tại
    • "Book is not available": nếu sách đã được mượn
    • "Borrowing limit reached": nếu người dùng đã mượn 3 quyển sách
    • "Successfully borrowed: [title]": nếu thành công

    Phương thức returnBook cần trả về "Book not found" nếu sách không tồn tại, hoặc "Successfully returned: [title]" nếu thành công.

  • main.php: Bao gồm tệp Library. Bạn sẽ nhận hai đầu vào: một ISBN và tên sách.

    Tạo một Library, một User có ID 1 và tên "Alice", cùng một Book có ISBN, tên sách được cung cấp và tác giả "Unknown". Thêm sách vào thư viện, sau đó thực hiện các thao tác sau và in từng kết quả trên một dòng mới:

    1. Mượn sách
    2. Thử mượn lại chính quyển sách đó
    3. Trả sách
    4. Mượn sách thêm một lần nữa

Thử thách này minh họa cách lớp Library tập trung hóa logic nghiệp vụ. Lớp này xác thực các điều kiện, điều phối những thay đổi trạng thái giữa các đối tượng Book và User, đồng thời trả về phản hồi dễ hiểu cho từng thao tác.

Tự làm thử

<?php
require_once 'Library.php';

// Đọc đầu vào
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Tạo một instance của Library

// TODO: Tạo một User có ID 1 và tên "Alice"

// TODO: Tạo một Book với ISBN, tiêu đề đã cho và tác giả "Unknown"

// TODO: Thêm sách vào thư viện

// TODO: Thực hiện các thao tác sau và in mỗi kết quả trên một dòng mới:
// 1. Mượn sách
// 2. Thử mượn lại cuốn sách đó
// 3. Trả sách
// 4. Mượn sách thêm một lần nữa

?>

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 PHP online