Menu
CoddyTech

借阅系统

本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 79 课,共 87 课。

challenge icon

挑战

简单

让我们继续构建图书馆管理系统,创建一个合适的借阅系统,并使用 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 在线编译器