Menu
Coddy logo textTech

Система выдачи книг

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

challenge icon

Задание

Легко

Продолжим создавать систему управления библиотекой, реализовав полноценную систему выдачи книг с помощью класса Library, который управляет коллекцией книг и пользователей. Именно здесь ваша система начинает походить на настоящую библиотеку: отслеживает, у кого что находится, и обеспечивает соблюдение правил выдачи!

Вы распределите код по четырём файлам:

  • Book.java: сохраните свой class Book из предыдущего задания со всей его функциональностью: isbn, title, author, isAvailable, borrowedBy, getDetails(), а также соответствующими геттерами и сеттерами.
  • User.java: сохраните свой class User с id, name, ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() и toString().
  • Library.java: создайте центральный class Library, который управляет всем. Ваша библиотека должна поддерживать два ArrayLists: один для объектов Book и один для объектов User. Добавьте следующие методы:

    addBook(Book book) — добавляет книгу в коллекцию библиотеки.

    registerUser(User user) — добавляет пользователя в список зарегистрированных пользователей библиотеки.

    findBookByIsbn(String isbn) — выполняет поиск по книгам и возвращает Book с совпадающим ISBN или null, если книга не найдена.

    findUserById(String id) — выполняет поиск среди пользователей и возвращает User с совпадающим ID или 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].

Данные будут поступать в следующем порядке: ISBN book1, название book1, автор book1, ISBN book2, название 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

В этом задании объединяются композиция, инкапсуляция и проектирование методов для создания целостной системы. Class 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: Создать объекты Book для book1 и book2
        
        // TODO: Создать объект User
        
        // TODO: Создать Library, добавить обе книги и зарегистрировать пользователя
        
        // TODO: Разделить operationsStr по "," и обработать каждую операцию
        //       Для каждой операции разделить по ":" чтобы получить action, userId, isbn
        //       Вызвать library.borrowBook() или library.returnBook() соответственно
        
        // TODO: Вывести сводку для каждой книги в формате "[isbn]: [Available/Borrowed]"
    }
}

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

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