Menu
Coddy logo textTech

Система выдачи книг

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy — урок 84 из 91.

challenge icon

Задание

Легко

Давайте воплотим нашу систему управления библиотекой в жизнь, создав класс Library, который координирует все операции по выдаче книг. Этот центральный координатор будет управлять коллекцией книг и обеспечивать соблюдение правил, которые поддерживают бесперебойную работу нашей библиотеки.

Вы организуете свой код в четырех файлах:

  • Book.php — Ваш класс Book из предыдущего урока со свойствами только для чтения (isbn, title, author), приватным свойством $isAvailable, изначально имеющим значение true, и методами: isAvailable(), markAsBorrowed() и markAsReturned().
  • User.php — Подключите файл Book. Ваш класс User со свойствами только для чтения (id, name), приватным массивом $borrowedBooks, константой MAX_BOOKS со значением 3 и методами: getBorrowedBooks(), canBorrow(), addBook(Book $book) и removeBook(string $isbn).
  • Library.php — Подключите файл User. Создайте класс Library, который управляет коллекцией книг. Ваша библиотека должна иметь:
    • Приватный массив $books для хранения книг, индексированных по ISBN
    • addBook(Book $book): void — добавляет книгу в коллекцию
    • findBook(string $isbn): ?Book — возвращает книгу или null, если она не найдена
    • borrowBook(User $user, string $isbn): string — проверяет и обрабатывает выдачу книги, возвращая соответствующие сообщения
    • returnBook(User $user, string $isbn): string — обрабатывает возврат и обновляет состояние как книги, так и пользователя

    Метод borrowBook должен последовательно проверять три условия и возвращать именно эти сообщения:

    • "Book not found" — если книга не существует
    • "Book is not available" — если книга уже выдана
    • "Borrowing limit reached" — если у пользователя уже 3 книги
    • "Successfully borrowed: [title]" — при успешной выдаче

    Метод returnBook должен возвращать "Book not found", если книга не существует, или "Successfully returned: [title]" при успешном возврате.

  • main.php — Подключите файл Library. Вы получите два входных значения: ISBN и название книги.

    Создайте Library, User с ID 1 и именем "Alice", и Book с предоставленным ISBN, названием и автором "Unknown". Добавьте книгу в библиотеку, затем выполните следующие операции и выведите каждый результат на новой строке:

    1. Возьмите книгу в библиотеке
    2. Попробуйте взять ту же самую книгу еще раз
    3. Верните книгу
    4. Возьмите книгу еще раз

Эта задача демонстрирует, как класс Library централизует бизнес-логику — он проверяет условия, координирует изменения состояния объектов Book и User и возвращает содержательную обратную связь для каждой операции.

Попробуйте сами

<?php
require_once 'Library.php';

// Чтение входных данных
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Создать экземпляр Library

// TODO: Создать пользователя (User) с ID 1 и именем "Alice"

// TODO: Создать книгу (Book) с предоставленным ISBN, названием и автором "Unknown"

// TODO: Добавить книгу в библиотеку

// TODO: Выполнить эти операции и вывести каждый результат на новой строке:
// 1. Взять книгу
// 2. Попробовать взять ту же книгу снова
// 3. Вернуть книгу
// 4. Взять книгу еще раз

?>

Все уроки раздела Объектно-ориентированное программирование