Menu
Coddy logo textTech

Sistema di prestito

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

challenge icon

Sfida

Facile

Continuiamo a costruire il sistema di gestione della biblioteca creando un sistema di prestito adeguato con una classe Library che gestisce la raccolta di libri e utenti. È qui che il tuo sistema comincia a sembrare una vera biblioteca: tiene traccia di chi ha cosa e applica le regole di prestito!

Organizzerai il codice in quattro file:

  • Book.java: Mantieni la tua classe Book della sfida precedente con tutte le sue funzionalità: isbn, title, author, isAvailable, borrowedBy, getDetails() e i getter/setter appropriati.
  • User.java: Mantieni la tua classe User con id, name, l'ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() e toString().
  • Library.java: Crea la classe centrale Library che gestisce tutto. La tua biblioteca dovrebbe mantenere due ArrayList: una per gli oggetti Book e una per gli oggetti User. Includi questi metodi:

    addBook(Book book) - aggiunge un libro alla raccolta della biblioteca.

    registerUser(User user) - aggiunge un utente agli utenti registrati della biblioteca.

    findBookByIsbn(String isbn) - cerca tra i libri e restituisce il Book con l'ISBN corrispondente, oppure null se non viene trovato.

    findUserById(String id) - cerca tra gli utenti e restituisce l'User con l'ID corrispondente, oppure null se non viene trovato.

    borrowBook(String userId, String isbn) - trova l'utente e il libro, poi, se esistono entrambi e il libro è disponibile, fa prendere in prestito il libro all'utente e stampa [userName] borrowed [bookTitle]. Se il libro non è disponibile, stampa Book not available. Se l'utente o il libro non viene trovato, stampa Invalid user or book.

    returnBook(String userId, String isbn) - trova l'utente e il libro, poi fa restituire il libro all'utente e stampa [userName] returned [bookTitle]. Se l'utente o il libro non viene trovato, stampa Invalid user or book.

  • Main.java: Metti insieme il sistema della biblioteca! Riceverai gli input per due libri (ISBN, titolo, autore per ciascuno), un utente (ID, nome) e poi una serie di operazioni.

    Crea una Library, aggiungi entrambi i libri e registra l'utente. Poi elabora le operazioni: riceverai una stringa separata da virgole, in cui ogni operazione è nel formato borrow:userId:isbn oppure return:userId:isbn.

    Dopo aver elaborato tutte le operazioni, stampa un riepilogo che mostri lo stato di ciascun libro nel formato [isbn]: [Available/Borrowed].

Riceverai gli input in questo ordine: ISBN del book1, titolo del book1, autore del book1, ISBN del book2, titolo del book2, autore del book2, ID dell'utente, nome dell'utente e infine la stringa delle operazioni.

Per esempio, con gli input ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice e borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001, il tuo output sarebbe:

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

Questa sfida mette insieme composizione, incapsulamento e progettazione dei metodi per creare un sistema coeso. La classe Library funge da coordinatore, delegando la logica effettiva del prestito alle classi User e Book e gestendo al contempo la raccolta complessiva!

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi le informazioni del libro 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Leggi le informazioni del libro 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Leggi le informazioni dell'utente
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Leggi la stringa delle operazioni (separate da virgole, formato: borrow:userId:isbn o return:userId:isbn)
        String operationsStr = scanner.nextLine();
        
        // TODO: Crea gli oggetti Book per book1 e book2
        
        // TODO: Crea un oggetto User
        
        // TODO: Crea una Library, aggiungi entrambi i libri e registra l'utente
        
        // TODO: Suddividi operationsStr usando "," e gestisci ogni operazione
        //       Per ogni operazione, suddividila usando ":" per ottenere action, userId e isbn
        //       Chiama library.borrowBook() o library.returnBook() a seconda dell'operazione
        
        // TODO: Stampa un riepilogo per ogni libro nel formato "[isbn]: [Available/Borrowed]"
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online