Menu
Coddy logo textTech

Classi Libro e Utente

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

challenge icon

Sfida

Facile

Continuiamo a sviluppare il Library Management System ampliando le classi Book e User della lezione precedente. Ora aggiungerai la possibilità per gli utenti di prendere in prestito libri, creando un vero collegamento tra queste due entità.

Organizzerai il codice in tre file:

  • Book.java: migliora la classe Book della sfida precedente. Mantieni tutte le funzionalità esistenti (isbn, title, author, isAvailable con getter/setter e getDetails()). Aggiungi ora un campo privato borrowedBy di tipo String che memorizza l’ID dell’utente che ha preso in prestito il libro (oppure null se non è stato preso in prestito). Aggiungi un getter per borrowedBy e un setter che aggiorna anche isAvailable di conseguenza: quando un libro viene preso in prestito (borrowedBy viene impostato su un valore non null), non è più disponibile; quando viene restituito (impostato su null), torna disponibile.
  • User.java: amplia la classe User per tenere traccia dei libri presi in prestito. Mantieni id, name, il costruttore, i getter e toString(). Aggiungi un campo privato ArrayList<Book> chiamato borrowedBooks (inizializzalo nel costruttore). Crea un metodo borrowBook(Book book) che aggiunge il libro all’elenco dell’utente e imposta borrowedBy del libro sull’ID di questo utente. Crea un metodo returnBook(Book book) che rimuove il libro dall’elenco e imposta borrowedBy su null. Aggiungi un metodo getBorrowedCount() che restituisce quanti libri ha attualmente l’utente.
  • Main.java: mostra il sistema di prestito in azione. Riceverai cinque input: ISBN, titolo e autore di un libro, quindi ID e nome dell’utente.

    Crea un Book e un User con questi input. Stampa i dettagli e lo stato di disponibilità del libro. Poi fai prendere in prestito il libro all’utente. Stampa di nuovo la disponibilità del libro, seguita da chi lo ha preso in prestito nel formato Borrowed by: [userId]. Stampa quanti libri ha l’utente nel formato [name] has [count] book(s). Infine, fai restituire il libro all’utente e stampa ancora una volta la disponibilità.

Riceverai cinque input nell’ordine seguente: ISBN (String), titolo (String), autore (String), ID utente (String) e nome utente (String).

Per esempio, con gli input 978-0-13-468599-1, Effective Java, Joshua Bloch, U001 e Alice, il tuo output sarà:

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

Questa sfida si basa direttamente sul lavoro precedente e aggiunge la relazione fondamentale tra libri e utenti che rende funzionale un sistema bibliotecario. Userai la composizione (User "has" Books) e vedrai come le modifiche a un oggetto possono influire su un altro grazie a metodi ben progettati!

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi le informazioni sul libro
        String isbn = scanner.nextLine();
        String title = scanner.nextLine();
        String author = scanner.nextLine();
        
        // Leggi le informazioni sull'utente
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Crea un oggetto Book con isbn, title e author
        Book book = new Book(isbn, title, author);
        
        // Crea un oggetto User con userId e userName
        User user = new User(userId, userName);
        
        // Stampa i dettagli del libro usando getDetails()
        System.out.println(book.getDetails());
        
        // Stampa se il libro è disponibile (formato: "Available: true" o "Available: false")
        System.out.println("Available: " + book.isAvailable());
        
        // Fai prendere in prestito il libro all'utente
        user.borrowBook(book);
        
        // Stampa di nuovo la disponibilità del libro
        System.out.println("Available: " + book.isAvailable());
        
        // Stampa chi ha preso il libro in prestito
        System.out.println("Borrowed by: " + book.getBorrowedBy());
        
        // Stampa quanti libri ha l'utente
        System.out.println(user.getName() + " has " + user.getBorrowedCount() + " book(s)");
        
        // Fai restituire il libro all'utente
        user.returnBook(book);
        
        // Stampa ancora una volta la disponibilità
        System.out.println("Available: " + book.isAvailable());
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online