Menu
Coddy logo textTech

Interfejs administratora

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

challenge icon

Wyzwanie

Łatwy

Rozbudujmy Twój System Zarządzania Biblioteką o interfejs administratora! Prawdziwa biblioteka potrzebuje możliwości administracyjnych: dodawania nowych książek do zbiorów, usuwania nieaktualnych i rejestrowania nowych członków. Utworzysz interfejs definiujący te operacje administracyjne, a następnie zaimplementujesz je w dedykowanej klasie administratora.

Będziesz kontynuować pracę nad istniejącym kodem w pięciu plikach:

  • Book.java: Zachowaj swoją klasę Book ze wszystkimi dotychczasowymi funkcjonalnościami: isbn, title, author, isAvailable, borrowedBy, getDetails() oraz odpowiednimi metodami pobierającymi i ustawiającymi.
  • User.java: Zachowaj klasę User bez zmian, z polami id, name, tablicą ArrayList borrowedBooks oraz metodami borrowBook(), returnBook(), getBorrowedCount() i toString().
  • Library.java: Zachowaj klasę Library ze wszystkimi dotychczasowymi metodami. Dodaj nową metodę removeBook(String isbn), która wyszukuje książkę w zbiorach po jej numerze ISBN i usuwa ją. Metoda powinna zwracać true, jeśli książka została znaleziona i usunięta, a w przeciwnym razie false. Książkę można usunąć tylko wtedy, gdy jest aktualnie dostępna (nie została wypożyczona).
  • LibraryAdmin.java: Utwórz interfejs o nazwie LibraryAdmin, który definiuje kontrakt dla operacji administracyjnych. Interfejs powinien deklarować trzy metody:
    • addBook(String isbn, String title, String author) - zwraca wartość boolean wskazującą powodzenie operacji
    • removeBook(String isbn) - zwraca wartość boolean wskazującą powodzenie operacji
    • registerUser(String id, String name) - zwraca wartość boolean wskazującą powodzenie operacji

    Następnie utwórz klasę o nazwie AdminService, która implementuje ten interfejs. AdminService powinna przechowywać referencję do obiektu Library (przekazaną przez konstruktor) i implementować wszystkie trzy metody, delegując działania do Library oraz wyświetlając odpowiednie komunikaty. Podczas dodawania książki utwórz nowy obiekt Book i dodaj go do biblioteki. Podczas rejestrowania użytkownika utwórz nowy obiekt User i zarejestruj go.

  • Main.java: Zademonstruj działanie systemu administracyjnego! Otrzymasz serię poleceń administratora w postaci pojedynczego ciągu znaków, w którym polecenia są oddzielone przecinkami. Każde polecenie ma jeden z następujących formatów:
    • ADD_BOOK:isbn:title:author
    • REMOVE_BOOK:isbn
    • REGISTER_USER:id:name
    • BORROW:userId:isbn

    Utwórz obiekt Library i obiekt AdminService. Przetwórz każde polecenie i wyświetl wynik:

    • Dla ADD_BOOK: w przypadku powodzenia wyświetl Added: [title]
    • Dla REMOVE_BOOK: w przypadku powodzenia wyświetl Removed: [isbn], a jeśli książka nie istnieje lub jest wypożyczona, wyświetl Cannot remove: [isbn]
    • Dla REGISTER_USER: wyświetl Registered: [name]
    • Dla BORROW: użyj istniejącej funkcjonalności wypożyczania w bibliotece

    Po przetworzeniu wszystkich poleceń wyświetl Library status:, a następnie szczegóły każdej książki i jej status dostępności w formacie [details] - [Available/Borrowed].

Otrzymasz jedno wejście: ciąg poleceń oddzielonych przecinkami.

Na przykład dla wejścia REGISTER_USER:U001:Alice,ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Design Patterns:Gang of Four,BORROW:U001:ISBN-001,REMOVE_BOOK:ISBN-001,REMOVE_BOOK:ISBN-002 wynikiem będzie:

Registered: Alice
Added: Clean Code
Added: Design Patterns
Alice borrowed Clean Code
Cannot remove: ISBN-001
Removed: ISBN-002
Library status:
[ISBN-001] Clean Code by Robert Martin - Borrowed

Zwróć uwagę, że interfejs administratora zapewnia przejrzysty kontrakt dla operacji administracyjnych, a implementacja AdminService obsługuje właściwą logikę. System prawidłowo uniemożliwia usunięcie wypożyczonej książki, jednocześnie pozwalając usuwać książki dostępne. Taki podział na interfejs i implementację to kluczowa zasada programowania obiektowego (OOP), dzięki której kod jest łatwiejszy w utrzymaniu i testowaniu!

Spróbuj swoich sił

import java.util.Scanner;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Wczytaj polecenia oddzielone przecinkami
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Utwórz Library i AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Przetwórz każde polecenie
        for (String command : commands) {
            String[] parts = command.split(":");
            String operation = parts[0];
            
            if (operation.equals("ADD_BOOK")) {
                String isbn = parts[1];
                String title = parts[2];
                String author = parts[3];
                if (adminService.addBook(isbn, title, author)) {
                    System.out.println("Added: " + title);
                }
            } else if (operation.equals("REMOVE_BOOK")) {
                String isbn = parts[1];
                if (adminService.removeBook(isbn)) {
                    System.out.println("Removed: " + isbn);
                } else {
                    System.out.println("Cannot remove: " + isbn);
                }
            } else if (operation.equals("REGISTER_USER")) {
                String id = parts[1];
                String name = parts[2];
                if (adminService.registerUser(id, name)) {
                    System.out.println("Registered: " + name);
                }
            } else if (operation.equals("BORROW")) {
                String userId = parts[1];
                String isbn = parts[2];
                library.borrowBook(userId, isbn);
            }
        }
        
        // Wyświetl stan biblioteki
        System.out.println("Library status:");
        ArrayList<Book> allBooks = library.getAllBooks();
        for (Book book : allBooks) {
            String status = book.isAvailable() ? "Available" : "Borrowed";
            System.out.println(book.getDetails() + " - " + status);
        }
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online