借阅系统
本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 79 课,共 87 课。
挑战
简单让我们继续构建图书馆管理系统,创建一个合适的借阅系统,并使用 Library 类管理图书和用户集合。这时,你的系统开始真正像一座图书馆了:它会跟踪每本书由谁借阅,并执行借阅规则!
你将把代码组织到 4 个文件中:
Book.java:保留上一个挑战中的 Book 类及其所有功能:isbn、title、author、isAvailable、borrowedBy、getDetails(),以及相应的 getter 和 setter。User.java:保留 User 类及其 id、name、borrowedBooks ArrayList、borrowBook()、returnBook()、getBorrowedCount() 和 toString()。Library.java:创建负责管理所有内容的核心Library类。你的图书馆应维护两个 ArrayList:一个存放Book对象,另一个存放User对象。添加以下方法:addBook(Book book):将一本书添加到图书馆的藏书中。registerUser(User user):将一个用户添加到图书馆的已注册用户中。findBookByIsbn(String isbn):搜索图书,并返回 ISBN 匹配的 Book;如果找不到,则返回null。findUserById(String id):搜索用户,并返回 ID 匹配的 User;如果找不到,则返回null。borrowBook(String userId, String isbn):查找用户和图书,如果两者都存在且图书可以借阅,就让该用户借阅这本书,并输出[userName] borrowed [bookTitle]。如果图书不可借阅,则输出Book not available。如果找不到用户或图书,则输出Invalid user or book。returnBook(String userId, String isbn):查找用户和图书,然后让该用户归还图书,并输出[userName] returned [bookTitle]。如果找不到用户或图书,则输出Invalid user or book。Main.java:整合你的图书馆系统!你会收到两本书的输入(每本书包含 ISBN、标题和作者)、一个用户的输入(ID 和姓名),然后是一系列操作。创建一个 Library,添加两本书,并注册该用户。然后处理这些操作:你会收到一个逗号分隔的字符串,其中每项操作的格式为
borrow:userId:isbn或return:userId:isbn。处理完所有操作后,输出摘要,显示每本书的状态,格式为
[isbn]: [Available/Borrowed]。
输入将按以下顺序提供:book1 ISBN、book1 标题、book1 作者、book2 ISBN、book2 标题、book2 作者、用户 ID、用户姓名,最后是操作字符串。
例如,输入 ISBN-001、Clean Code、Robert Martin、ISBN-002、Design Patterns、Gang of Four、U001、Alice 和 borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001 时,输出将是:
Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed这个挑战将组合、封装和方法设计结合起来,创建一个协调一致的系统。Library 类充当协调者,将实际的借阅逻辑交给 User 类和 Book 类处理,同时管理整体藏书!
亲手试试
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取第 1 本书的信息
String isbn1 = scanner.nextLine();
String title1 = scanner.nextLine();
String author1 = scanner.nextLine();
// 读取第 2 本书的信息
String isbn2 = scanner.nextLine();
String title2 = scanner.nextLine();
String author2 = scanner.nextLine();
// 读取用户信息
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// 读取操作字符串(用逗号分隔,格式为 borrow:userId:isbn 或 return:userId:isbn)
String operationsStr = scanner.nextLine();
// TODO: 为 book1 和 book2 创建 Book 对象
// TODO: 创建一个 User 对象
// TODO: 创建一个 Library,添加两本书并注册用户
// TODO: 用 "," 分割 operationsStr,处理每项操作
// 对每项操作,用 ":" 分割,得到 action、userId 和 isbn
// 根据操作调用 library.borrowBook() 或 library.returnBook()
// TODO: 按 "[isbn]: [Available/Borrowed]" 格式输出每本书的摘要
}
}面向对象编程中的所有课
自己练习: Java 在线编译器