Menu
Coddy logo textTech

貸出システム

CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 84/91。

challenge icon

チャレンジ

簡単

すべての貸出操作をオーケストレートする Library クラスを作成して、図書館管理システムを完成させましょう。この中心となるコーディネーターは、蔵書を管理し、図書館を円滑に運営するためのルールを適用します。

コードは以下の4つのファイルに分けて構成します:

  • Book.php — 前回のレッスンで作成した Book クラスです。読み取り専用プロパティ(isbntitleauthor)、初期値が true のプライベートな $isAvailable プロパティ、およびメソッド:isAvailable()markAsBorrowed()markAsReturned() を持ちます。
  • User.php — Book ファイルをインクルードします。読み取り専用プロパティ(idname)、プライベートな $borrowedBooks 配列、値が 3MAX_BOOKS 定数、およびメソッド:getBorrowedBooks()canBorrow()addBook(Book $book)removeBook(string $isbn) を持つ User クラスです。
  • Library.php — User ファイルをインクルードします。蔵書を管理する Library クラスを作成します。このライブラリには以下を含める必要があります:
    • ISBNをキーとして本を格納するプライベートな $books 配列
    • addBook(Book $book): void — 蔵書に本を追加します
    • findBook(string $isbn): ?Book — 本を返すか、見つからない場合は null を返します
    • borrowBook(User $user, string $isbn): string — 貸出を検証・処理し、適切なメッセージを返します
    • returnBook(User $user, string $isbn): string — 返却を処理し、本とユーザーの両方の状態を更新します

    borrowBook メソッドは、以下の3つの条件を順番にチェックし、これらの正確なメッセージを返す必要があります:

    • "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と本のタイトルの2つの入力を受け取ります。

    Library インスタンス、IDが 1 で名前が "Alice"User、および提供されたISBN、タイトル、著者名 "Unknown" を持つ Book を作成します。本をライブラリに追加し、次の操作を実行して各結果を新しい行に出力してください:

    1. 本を借りる
    2. 同じ本をもう一度借りようとする
    3. 本を返却する
    4. もう一度本を借りる

このチャレンジでは、Library クラスがどのようにビジネスロジックを一元化するかを示します。条件を検証し、Book オブジェクトと User オブジェクト間の状態変化を調整し、各操作に対して意味のあるフィードバックを返します。

自分で試してみよう

<?php
require_once 'Library.php';

// 入力を読み込む
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Library インスタンスを作成する

// TODO: ID 1、名前 "Alice" の User を作成する

// TODO: 提供された ISBN、タイトル、著者 "Unknown" で Book を作成する

// TODO: 本をライブラリに追加する

// TODO: 以下の操作を実行し、各結果を新しい行に出力する:
// 1. 本を借りる
// 2. 同じ本をもう一度借りてみる
// 3. 本を返却する
// 4. もう一度本を借りる

?>

オブジェクト指向プログラミングのすべてのレッスン