借阅系统
本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 84 课,共 91 课。
挑战
简单通过创建负责协调所有借阅操作的 Library 类,让图书管理系统真正运转起来。这个中央协调器将管理藏书,并执行相关规则,确保图书馆顺畅运行。
你要将代码分别放在以下四个文件中:
Book.php:上一课中的Book类,包含只读属性(isbn、title、author)、初始值为true的私有属性$isAvailable,以及以下方法:isAvailable()、markAsBorrowed()和markAsReturned()。User.php:引入 Book 文件。创建User类,包含只读属性(id、name)、私有$borrowedBooks数组、值为3的MAX_BOOKS常量,以及以下方法:getBorrowedBooks()、canBorrow()、addBook(Book $book)和removeBook(string $isbn)。Library.php:引入 User 文件。创建用于管理藏书的Library类。你的图书馆应包含:- 一个私有
$books数组,用于按 ISBN 索引存储图书 addBook(Book $book): void:将图书添加到藏书中findBook(string $isbn): ?Book:返回图书;如果未找到,则返回 nullborrowBook(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、一个 ID 为1且名称为"Alice"的User,以及一本使用提供的 ISBN、标题和作者"Unknown"创建的Book。将图书添加到图书馆,然后执行以下操作,并将每个结果打印在新的一行:- 借阅这本书
- 再次尝试借阅同一本书
- 归还这本书
- 再借阅一次这本书
这个挑战展示了 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、title 和作者 "Unknown" 创建一个 Book
// TODO:将这本书添加到库中
// TODO:执行以下操作,并将每个结果打印在新的一行:
// 1. 借阅这本书
// 2. 再次尝试借阅同一本书
// 3. 归还这本书
// 4. 再借阅一次这本书
?>面向对象编程中的所有课
自己练习: PHP 在线编译器