Menu
Coddy logo textTech

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

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

challenge icon

Задание

Легко

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

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

  • Book.php: ваш класс Book из предыдущего урока с readonly-свойствами (isbn, title, author), приватным свойством $isAvailable, начальное значение которого равно true, и методами: isAvailable(), markAsBorrowed() и markAsReturned().
  • User.php: подключите файл Book. Ваш класс User с readonly-свойствами (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, title и автором "Unknown"

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

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

?>

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

Потренируйтесь самостоятельно: Онлайн-компилятор PHP