Menu
Coddy logo textTech

貸出システム

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

challenge icon

チャレンジ

簡単

Library class を作成して、Library Management System に命を吹き込みましょう。この中央コーディネーターがすべての borrowing 操作を統括します。book collection を管理し、library が円滑に運営されるためのルールを適用します。

コードを4つのファイルに分けて整理します。

  • Book.php: 前のレッスンで作成した Book class。readonly プロパティ(isbntitleauthor)、true として開始する private $isAvailable プロパティ、および次のメソッドを含めます:isAvailable()markAsBorrowed()markAsReturned()
  • User.php: Book ファイルを読み込みます。readonly プロパティ(idname)、private $borrowedBooks array、3MAX_BOOKS constant、および次のメソッドを持つ User class を作成します:getBorrowedBooks()canBorrow()addBook(Book $book)removeBook(string $isbn)
  • Library.php: User ファイルを読み込みます。book collection を管理する Library class を作成します。library には次の要素が必要です。
    • ISBN をキーとして book を保存する private $books array
    • addBook(Book $book): void:book を collection に追加する
    • findBook(string $isbn): ?Book:見つかった book を返し、見つからない場合は null を返す
    • borrowBook(User $user, string $isbn): string:borrowing を検証して処理し、適切なメッセージを返す
    • returnBook(User $user, string $isbn): string:返却を処理し、book と user の両方の状態を更新する

    borrowBook method では、3つの conditions を順番に確認し、次の正確なメッセージを返します。

    • "Book not found":book が存在しない場合
    • "Book is not available":すでに借りられている場合
    • "Borrowing limit reached":user が3冊の book を持っている場合
    • "Successfully borrowed: [title]":成功した場合

    returnBook method では、book が存在しない場合は "Book not found" を、成功した場合は "Successfully returned: [title]" を返します。

  • main.php: Library ファイルを読み込みます。ISBN と book title の2つの入力を受け取ります。

    Library、ID が 1 で name が "Alice"User、そして指定された ISBN と title、および author が "Unknown"Book を作成します。book を library に追加し、その後、次の操作を実行して各結果を新しい行に出力します。

    1. book を borrow する
    2. 同じ book をもう一度 borrow しようとする
    3. book を return する
    4. もう一度 book を borrow する

この challenge では、Library class が business logic を centralize する方法を示します。conditions を検証し、BookUser の object 間で state changes を調整し、各操作に対して意味のある feedback を返します。

自分で試してみよう

<?php
require_once 'Library.php';

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

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

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

// TODO: 提供された ISBN、title、著者 "Unknown" の Book を作成する

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

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

?>

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

自分で練習してみよう: PHPオンラインコンパイラ