Menu
Coddy logo textTech

Классы Book и User

Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 78 из 87.

challenge icon

Задание

Легко

Давайте продолжим создание системы управления библиотекой, расширив классы Book и User из предыдущего урока. Теперь вы добавите пользователям возможность брать книги, создавая реальную связь между этими двумя сущностями.

Вы организуете свой код в трех файлах:

  • Book.java: Улучшите свой класс Book из предыдущего задания. Сохраните всю существующую функциональность (isbn, title, author, isAvailable с геттерами/сеттерами и getDetails()). Теперь добавьте приватное поле borrowedBy типа String, которое хранит ID пользователя, взявшего книгу (или null, если книга не выдана). Добавьте геттер для borrowedBy и сеттер, который также соответствующим образом обновляет isAvailable — когда книга выдана (для borrowedBy установлено значение, отличное от null), она становится недоступной; при возврате (установлено значение null) она снова становится доступной.
  • User.java: Расширьте свой класс User для отслеживания взятых книг. Сохраните существующие id, name, конструктор, геттеры и toString(). Добавьте приватное поле ArrayList<Book> с именем borrowedBooks (инициализируйте его в конструкторе). Создайте метод borrowBook(Book book), который добавляет книгу в список пользователя и устанавливает borrowedBy книги в значение ID этого пользователя. Создайте метод returnBook(Book book), который удаляет книгу из списка и устанавливает borrowedBy в null. Добавьте метод getBorrowedCount(), который возвращает количество книг, имеющихся у пользователя в данный момент.
  • Main.java: Продемонстрируйте работу системы выдачи книг. Вы получите пять входных данных: ISBN, название, автор книги, затем ID пользователя и имя.

    Создайте Book и User на основе этих входных данных. Выведите сведения о книге и статус ее доступности. Затем пусть пользователь возьмет книгу. Снова выведите доступность книги, а затем информацию о том, кто ее взял, в формате Borrowed by: [userId]. Выведите количество книг у пользователя в формате [name] has [count] book(s). Наконец, пусть пользователь вернет книгу, и выведите доступность еще раз.

Вы получите пять входных данных по порядку: ISBN (String), название (String), автор (String), ID пользователя (String) и имя пользователя (String).

Например, при входных данных 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 и Alice, ваш вывод будет следующим:

[978-0-13-468599-1] Effective Java by Joshua Bloch
Available: true
Available: false
Borrowed by: U001
Alice has 1 book(s)
Available: true

Эта задача основывается непосредственно на вашей предыдущей работе, добавляя важнейшую связь между книгами и пользователями, которая делает библиотечную систему функциональной. Вы будете использовать композицию (у User "есть" Books) и увидите, как изменения в одном объекте могут влиять на другой через хорошо спроектированные методы!

Попробуйте сами

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Чтение информации о книге
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // Чтение информации о пользователе
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Создание объекта Book с isbn, названием и автором
        Book book = new Book(isbn, title, author);
        
        // Создание объекта User с userId и userName
        User user = new User(userId, userName);
        
        // Вывод сведений о книге с помощью getDetails()
        System.out.println(book.getDetails());
        
        // Вывод доступности книги (формат: "Available: true" или "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // Пользователь берет книгу
        user.borrowBook(book);
        
        // Повторный вывод доступности книги
        System.out.println("Available: " + book.isAvailable());
        
        // Вывод информации о том, кто взял книгу
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // Вывод количества книг у пользователя
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // Пользователь возвращает книгу
        user.returnBook(book);
        
        // Вывод доступности еще раз
        System.out.println("Available: " + book.isAvailable());
    }
}

Все уроки раздела Объектно-ориентированное программирование