Menu
CoddyTech

Giao diện quản trị

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 86 trên 91.

challenge icon

Thử thách

Dễ

Hãy mở rộng Hệ thống quản lý thư viện bằng cách bổ sung các quyền quản trị. Bạn sẽ tạo một lớp Admin kế thừa từ User, nhưng có quyền đặc biệt để quản lý kho sách của thư viện: thêm sách mới và xóa sách hiện có.

Bạn sẽ sắp xếp code trong năm tệp:

  • Book.php: Lớp Book có các thuộc tính chỉ đọc (isbn, title, author), một thuộc tính $isAvailable riêng tư 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ột mảng $borrowedBooks riêng tư, hằng số MAX_BOOKS có giá trị 3, cùng các phương thức: getBorrowedBooks(), canBorrow(), addBook(Book $book) và removeBook(string $isbn).
  • Library.php: Bao gồm tệp User. Lớp Library có các chức năng hiện có, bao gồm addBook(), findBook(), borrowBook(), returnBook() và các phương thức tìm kiếm. Thêm một phương thức mới:
    • removeBook(string $isbn): void: xóa sách khỏi bộ sưu tập bằng unset()
  • Admin.php: Bao gồm tệp Library. Tạo lớp Admin kế thừa từ User. Admin kế thừa mọi khả năng của user và có thêm hai phương thức quản trị:
    • addBookToLibrary(Library $library, Book $book): string: thêm sách vào thư viện và trả về "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string: thử xóa sách và thực hiện các bước kiểm tra sau:
      • Nếu sách không tồn tại, trả về "Book not found"
      • Nếu sách đang được mượn, trả về "Cannot remove: book is currently borrowed"
      • Nếu không, xóa sách và trả về "Removed: [title]"
  • main.php: Bao gồm tệp Admin. Bạn sẽ nhận hai đầu vào: ISBN và tên sách.

    Tạo một Library và một Admin có ID 1 và tên "AdminUser". Đồng thời, tạo một User thông thường có ID 2 và tên "RegularUser".

    Tạo một Book với ISBN, tên sách được cung cấp và tác giả "Test Author". Thực hiện các thao tác sau và in kết quả của từng thao tác trên một dòng mới:

    1. Cho admin thêm sách vào thư viện
    2. Cho user thông thường mượn sách
    3. Cho admin thử xóa sách, thao tác này sẽ thất bại vì sách đang được mượn
    4. Cho user thông thường trả sách
    5. Cho admin xóa sách, lần này thao tác sẽ thành công
    6. Cho admin thử xóa lại chính cuốn sách đó, thao tác này sẽ thất bại vì không tìm thấy sách

Thử thách này cho thấy kế thừa tạo nên một hệ thống phân cấp tự nhiên: admin là user có thêm quyền. Các bước kiểm tra trong removeBookFromLibrary đảm bảo tính toàn vẹn của dữ liệu bằng cách ngăn việc xóa những cuốn sách vẫn đang được lưu hành.

Tự làm thử

<?php
require_once 'Admin.php';

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

// TODO: Tạo một Library

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

// TODO: Tạo một User thông thường có ID 2 và tên "RegularUser"

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

// 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. Cho admin thêm sách vào thư viện
// 2. Cho người dùng thông thường mượn sách
// 3. Cho admin thử xóa sách (thao tác sẽ thất bại vì sách đang được mượn)
// 4. Cho người dùng thông thường trả sách
// 5. Cho admin xóa sách (lúc này thao tác sẽ thành công)
// 6. Cho admin thử xóa lại cuốn sách đó (thao tác sẽ thất bại vì không tìm thấy sách)

?>

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