Menu
Coddy logo textTech

Test e integrazione

Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 83 di 87.

challenge icon

Sfida

Facile

Congratulazioni per aver creato il tuo sistema di gestione bibliotecaria! È ora di mettere tutto insieme e verificare che tutti i componenti funzionino correttamente come sistema integrato. Creerai uno scenario di test completo che metterà alla prova tutte le funzionalità sviluppate nel corso di questo progetto.

Lavorerai con tutti e sette i file del sistema completato:

  • Book.java: la tua classe Book con isbn, title, author, isAvailable, borrowedBy e tutti i metodi associati, incluso getDetails().
  • User.java: la tua classe User con id, name, la lista borrowedBooks e i metodi per prendere in prestito e restituire libri.
  • LibraryException.java: la tua classe base per le eccezioni personalizzate.
  • BookNotAvailableException.java: la tua eccezione per i libri non disponibili.
  • LibraryAdmin.java: la tua interfaccia amministrativa e l'implementazione di AdminService.
  • Library.java: la tua classe Library completa con tutti i metodi: aggiunta e rimozione di libri, registrazione degli utenti, prestito e restituzione, ricerca e gestione delle eccezioni.
  • Main.java: il tuo test di integrazione, che dimostrerà il funzionamento dell'intero sistema.

Nella tua classe Main, elaborerai una serie di comandi che testano tutte le funzionalità principali del sistema bibliotecario. I comandi sono forniti come un'unica stringa separata da virgole, nei seguenti formati:

  • ADD_BOOK:isbn:title:author - Aggiungi un libro tramite AdminService
  • REGISTER_USER:id:name - Registra un utente tramite AdminService
  • BORROW:userId:isbn - Prendi in prestito un libro (con gestione delle eccezioni)
  • RETURN:userId:isbn - Restituisci un libro
  • SEARCH_TITLE:keyword - Cerca libri per titolo
  • SEARCH_AUTHOR:keyword - Cerca libri per autore
  • REMOVE_BOOK:isbn - Rimuovi un libro tramite AdminService

Elabora ogni comando e stampa l'output appropriato:

  • ADD_BOOK: Added: [title]
  • REGISTER_USER: Registered: [name]
  • BORROW: stampa il messaggio di successo oppure Error: [exception message]
  • RETURN: [userName] returned [bookTitle]
  • SEARCH_TITLE: stampa Search '[keyword]': seguito dai dettagli di ogni libro corrispondente, oppure No results
  • SEARCH_AUTHOR: stesso formato della ricerca per titolo
  • REMOVE_BOOK: Removed: [isbn] oppure Cannot remove: [isbn]

Dopo tutti i comandi, stampa un riepilogo finale:

  • --- Final Status ---
  • Books: [count]
  • Users: [count]
  • Per ogni utente, stampa [name]: [borrowedCount] book(s)

Riceverai un input: la stringa di comandi separati da virgole.

Ad esempio, con l'input ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Effective Java:Joshua Bloch,REGISTER_USER:U001:Alice,REGISTER_USER:U002:Bob,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001,SEARCH_TITLE:java,RETURN:U001:ISBN-001,REMOVE_BOOK:ISBN-001, l'output sarà:

Added: Clean Code
Added: Effective Java
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Search 'java':
[ISBN-002] Effective Java by Joshua Bloch
Alice returned Clean Code
Removed: ISBN-001
--- Final Status ---
Books: 1
Users: 2
Alice: 0 book(s)
Bob: 0 book(s)

Questa sfida finale verifica che tutti i componenti, le classi, le interfacce, le eccezioni e la logica della biblioteca funzionino insieme senza problemi. Hai creato un sistema di gestione bibliotecaria completo e robusto!

Provalo tu

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi i comandi separati da virgole
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Crea Library e AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Elabora ogni comando
        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];
                try {
                    String result = library.borrowBook(userId, isbn);
                    System.out.println(result);
                } catch (LibraryException e) {
                    System.out.println("Error: " + e.getMessage());
                }
            }
            // TODO: Aggiungi la gestione del comando RETURN
            // TODO: Aggiungi la gestione del comando SEARCH_TITLE
            // TODO: Aggiungi la gestione del comando SEARCH_AUTHOR
        }
        
        // TODO: Stampa lo stato finale
        // --- Final Status ---
        // Libri: [count]
        // Utenti: [count]
        // Per ogni utente: [name]: [borrowedCount] libro/i
        System.out.println("Operations completed");
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online