Menu
Coddy logo textTech

Klasy książki i użytkownika

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

challenge icon

Wyzwanie

Łatwy

Kontynuujmy rozbudowę systemu zarządzania biblioteką, rozszerzając klasy Book i User z poprzedniej lekcji. Teraz dodasz możliwość wypożyczania książek przez użytkowników, tworząc rzeczywiste powiązanie między tymi dwiema encjami.

Rozmieścisz swój kod w trzech plikach:

  • Book.java: Rozbuduj swoją klasę Book z poprzedniego wyzwania. Zachowaj wszystkie istniejące funkcje (isbn, title, author, isAvailable wraz z getterami/setterami oraz getDetails()). Dodaj teraz prywatne pole borrowedBy typu String, które przechowuje ID użytkownika, który wypożyczył książkę (lub null, jeśli książka nie została wypożyczona). Dodaj getter dla borrowedBy oraz setter, który odpowiednio aktualizuje również isAvailable: gdy książka zostanie wypożyczona (borrowedBy otrzyma wartość inną niż null), staje się niedostępna; gdy zostanie zwrócona (wartość zostanie ustawiona na null), ponownie staje się dostępna.
  • User.java: Rozszerz swoją klasę User, aby śledziła wypożyczone książki. Zachowaj istniejące pola id, name, konstruktor, gettery oraz toString(). Dodaj prywatne pole ArrayList<Book> o nazwie borrowedBooks (zainicjalizuj je w konstruktorze). Utwórz metodę borrowBook(Book book), która dodaje książkę do listy użytkownika i ustawia borrowedBy książki na ID tego użytkownika. Utwórz metodę returnBook(Book book), która usuwa książkę z listy i ustawia borrowedBy na null. Dodaj metodę getBorrowedCount(), która zwraca liczbę książek, które użytkownik aktualnie ma.
  • Main.java: Pokaż działanie systemu wypożyczania. Otrzymasz pięć danych wejściowych: ISBN, tytuł i autora książki, a następnie ID użytkownika i jego imię.

    Utwórz obiekt Book i obiekt User na podstawie tych danych wejściowych. Wyświetl szczegóły książki i jej status dostępności. Następnie wypożycz książkę użytkownikowi. Ponownie wyświetl dostępność książki, a potem informację o tym, kto ją wypożyczył, w formacie Borrowed by: [userId]. Wyświetl liczbę książek, które ma użytkownik, w formacie [name] has [count] book(s). Na koniec zwróć książkę i jeszcze raz wyświetl jej dostępność.

Otrzymasz kolejno pięć danych wejściowych: ISBN (String), tytuł (String), autora (String), ID użytkownika (String) i imię użytkownika (String).

Na przykład dla danych wejściowych 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 i Alice wynikiem będzie:

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

To wyzwanie bezpośrednio rozwija Twoją wcześniejszą pracę, dodając kluczową relację między książkami a użytkownikami, dzięki której system biblioteczny działa. Wykorzystasz kompozycję (User „ma” Books) i zobaczysz, jak dobrze zaprojektowane metody pozwalają zmianom jednego obiektu wpływać na inny!

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
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // Wczytaj informacje o użytkowniku
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Utwórz obiekt Book z isbn, title i author
        Book book = new Book(isbn, title, author);
        
        // Utwórz obiekt User z userId i userName
        User user = new User(userId, userName);
        
        // Wypisz szczegóły książki za pomocą getDetails()
        System.out.println(book.getDetails());
        
        // Wypisz, czy książka jest dostępna (format: "Available: true" lub "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // Niech użytkownik wypożyczy książkę
        user.borrowBook(book);
        
        // Ponownie wypisz informację o dostępności książki
        System.out.println("Available: " + book.isAvailable());
        
        // Wypisz, kto ją wypożyczył
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // Wypisz, ile książek ma użytkownik
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // Niech użytkownik zwróci książkę
        user.returnBook(book);
        
        // Jeszcze raz wypisz informację o dostępności książki
        System.out.println("Available: " + book.isAvailable());
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online