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, Constructor, геттеры и toString(). Добавь приватное поле ArrayList<Book> с именем borrowedBooks (Initialize его в Constructor). Create метод borrowBook(Book book), который добавляет книгу в список пользователя и устанавливает для borrowedBy книги ID этого пользователя. Create метод returnBook(Book book), который удаляет книгу из списка и устанавливает borrowedBy в значение null. Добавь метод getBorrowedCount(), который возвращает количество книг, которые пользователь currently имеет.
  • Main.java: Продемонстрируй работу системы заимствования. Ты получишь пять входных данных: ISBN, title и author книги, затем ID и имя пользователя.

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

Ты получишь пять входных данных по порядку: ISBN (String), title (String), author (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 "has" 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, title и author
        Book book = new Book(isbn, title, author);
        
        // Создать объект User с userId и userName
        User user = new User(userId, userName);
        
        // Вывести детали книги с помощью getDetails()
        System.out.println(book.getDetails());
        
        // Print whether the book is available (format: "Available: true" or "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());
    }
}

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

Потренируйтесь самостоятельно: Онлайн-компилятор Java