Menu
Coddy logo textTech

System wypożyczeń

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 79 z 87.

challenge icon

Wyzwanie

Łatwy

Kontynuujmy budowanie systemu zarządzania biblioteką, tworząc odpowiedni system wypożyczeń z klasą Library, która zarządza zbiorami książek i użytkowników. To właśnie tutaj Twój system zaczyna przypominać prawdziwą bibliotekę: śledzi, kto ma którą książkę, i egzekwuje zasady wypożyczania!

Rozmieścisz swój kod w czterech plikach:

  • Book.java: Zachowaj klasę Book z poprzedniego wyzwania wraz z całą jej funkcjonalnością: isbn, title, author, isAvailable, borrowedBy, getDetails() oraz odpowiednimi metodami pobierającymi i ustawiającymi.
  • User.java: Zachowaj klasę User z id, name, tablicą ArrayList borrowedBooks oraz metodami borrowBook(), returnBook(), getBorrowedCount() i toString().
  • Library.java: Utwórz centralną klasę Library, która zarządza wszystkim. Twoja biblioteka powinna przechowywać dwie kolekcje ArrayList: jedną dla obiektów Book i jedną dla obiektów User. Uwzględnij następujące metody:

    addBook(Book book) — dodaje książkę do zbiorów biblioteki.

    registerUser(User user) — dodaje użytkownika do zarejestrowanych użytkowników biblioteki.

    findBookByIsbn(String isbn) — przeszukuje książki i zwraca obiekt Book o pasującym ISBN lub null, jeśli go nie znaleziono.

    findUserById(String id) — przeszukuje użytkowników i zwraca obiekt User o pasującym ID lub null, jeśli go nie znaleziono.

    borrowBook(String userId, String isbn) — znajduje użytkownika i książkę, a następnie, jeśli oboje istnieją i książka jest dostępna, wypożycza ją użytkownikowi i wyświetla [userName] borrowed [bookTitle]. Jeśli książka nie jest dostępna, wyświetl Book not available. Jeśli nie znaleziono użytkownika lub książki, wyświetl Invalid user or book.

    returnBook(String userId, String isbn) — znajduje użytkownika i książkę, a następnie zwraca książkę przez użytkownika i wyświetla [userName] returned [bookTitle]. Jeśli nie znaleziono użytkownika lub książki, wyświetl Invalid user or book.

  • Main.java: Połącz wszystkie elementy systemu bibliotecznego! Otrzymasz dane wejściowe dla dwóch książek (dla każdej: ISBN, tytuł, autor), jednego użytkownika (ID, imię), a następnie serię operacji.

    Utwórz obiekt Library, dodaj obie książki i zarejestruj użytkownika. Następnie przetwórz operacje: otrzymasz ciąg rozdzielony przecinkami, w którym każda operacja ma format borrow:userId:isbn lub return:userId:isbn.

    Po przetworzeniu wszystkich operacji wyświetl podsumowanie pokazujące status każdej książki w formacie [isbn]: [Available/Borrowed].

Dane wejściowe otrzymasz w następującej kolejności: ISBN książki book1, tytuł książki book1, autor książki book1, ISBN książki book2, tytuł książki book2, autor książki book2, ID użytkownika, imię użytkownika, a na końcu ciąg operacji.

Na przykład dla danych wejściowych ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice i borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001 wynikiem byłoby:

Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: Borrowed

To wyzwanie łączy kompozycję, hermetyzację i projektowanie metod, aby stworzyć spójny system. Klasa Library pełni rolę koordynatora, delegując właściwą logikę wypożyczania do klas User i Book, a jednocześnie zarządzając całą kolekcją!

Spróbuj swoich sił

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Wczytaj informacje o książce 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Wczytaj informacje o książce 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Wczytaj informacje o użytkowniku
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Wczytaj ciąg operacji (oddzielonych przecinkami, format: borrow:userId:isbn lub return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: Utwórz obiekty Book dla book1 i book2
        
        // TODO: Utwórz obiekt User
        
        // TODO: Utwórz obiekt Library, dodaj obie książki i zarejestruj użytkownika
        
        // TODO: Podziel operationsStr według "," i przetwórz każdą operację
        //       Dla każdej operacji podziel ją według ":", aby uzyskać action, userId i isbn
        //       Wywołaj odpowiednio library.borrowBook() lub library.returnBook()
        
        // TODO: Wypisz podsumowanie dla każdej książki w formacie "[isbn]: [Available/Borrowed]"
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online