Menu
Coddy logo textTech

Funzionalità di ricerca

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

challenge icon

Sfida

Facile

Miglioriamo il tuo sistema di gestione della biblioteca con potenti funzionalità di ricerca! Una biblioteca non è molto utile se gli utenti non riescono a trovare i libri che cercano. Aggiungerai metodi per cercare per titolo e autore, rendendo la tua biblioteca davvero funzionale.

Continuerai a sviluppare il codice esistente in quattro file:

  • Book.java: Mantieni la tua classe Book con tutte le funzionalità esistenti: isbn, title, author, isAvailable, borrowedBy, getDetails() e i getter/setter appropriati. Assicurati di avere i metodi getter per title e author, se non li hai già aggiunti.
  • User.java: Mantieni invariata la tua classe User con id, name, l'ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() e toString().
  • Library.java: Estendi la tua classe Library con le funzionalità di ricerca. Mantieni tutti i metodi esistenti (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) e aggiungi questi nuovi metodi di ricerca:

    searchByTitle(String keyword) - restituisce un ArrayList<Book> contenente tutti i libri il cui titolo contiene la parola chiave (senza distinzione tra maiuscole e minuscole). Usa toLowerCase() sia sul titolo sia sulla parola chiave per il confronto.

    searchByAuthor(String keyword) - restituisce un ArrayList<Book> contenente tutti i libri il cui autore contiene la parola chiave (senza distinzione tra maiuscole e minuscole).

    getAvailableBooks() - restituisce un ArrayList<Book> contenente solo i libri attualmente disponibili per il prestito.

  • Main.java: Mostra il funzionamento del sistema di ricerca! Riceverai i dati di tre libri (ISBN, titolo e autore per ciascuno), poi quelli di un utente (ID, nome), seguiti da un'operazione di prestito e da due query di ricerca.

    Crea una Library, aggiungi tutti e tre i libri e registra l'utente. Elabora l'operazione di prestito (nel formato userId:isbn). Poi esegui le due ricerche: il primo input è una parola chiave del titolo, il secondo è una parola chiave dell'autore.

    Stampa i risultati in questo ordine:

    • Dopo il prestito, stampa la conferma del prestito
    • Stampa Title search '[keyword]': seguito dai dettagli di ciascun libro corrispondente, su righe separate (usando getDetails()). Se non ci sono corrispondenze, stampa No books found
    • Stampa Author search '[keyword]': seguito dai dettagli di ciascun libro corrispondente. Se non ci sono corrispondenze, stampa No books found
    • Stampa Available books: seguito dai dettagli di ciascun libro disponibile

Riceverai gli input in questo ordine: ISBN di book1, titolo di book1, autore di book1, ISBN di book2, titolo di book2, autore di book2, ISBN di book3, titolo di book3, autore di book3, ID utente, nome utente, operazione di prestito, parola chiave per la ricerca del titolo, parola chiave per la ricerca dell'autore.

Ad esempio, con gli input ISBN-001, Clean Code, Robert Martin, ISBN-002, The Clean Coder, Robert Martin, ISBN-003, Design Patterns, Gang of Four, U001, Alice, U001:ISBN-001, clean, martin, il tuo output sarebbe:

Alice borrowed Clean Code
Title search 'clean':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Author search 'martin':
[ISBN-001] Clean Code by Robert Martin
[ISBN-002] The Clean Coder by Robert Martin
Available books:
[ISBN-002] The Clean Coder by Robert Martin
[ISBN-003] Design Patterns by Gang of Four

Nota come i metodi di ricerca effettuano corrispondenze senza distinzione tra maiuscole e minuscole: cercando "clean" si trovano sia "Clean Code" sia "The Clean Coder". L'elenco dei libri disponibili esclude correttamente il libro preso in prestito. Queste funzionalità di ricerca trasformano la tua biblioteca da una semplice raccolta in un sistema davvero utilizzabile!

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 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 del libro 3
        String isbn3 = scanner.nextLine();
        String title3 = scanner.nextLine();
        String author3 = scanner.nextLine();
        
        // Leggi le informazioni dell'utente
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Leggi l'operazione di prestito
        String borrowOp = scanner.nextLine();
        
        // Leggi le parole chiave di ricerca
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // Crea gli oggetti Book
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // Crea l'oggetto User
        User user = new User(userId, userName);
        
        // Crea Library e aggiungi i libri e l'utente
        Library library = new Library();
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.registerUser(user);
        
        // Elabora l'operazione di prestito
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO: Ricerca per titolo
        // Stampa "Title search '[titleKeyword]':"
        // Usa library.searchByTitle(titleKeyword)
        // Stampa getDetails() per ogni libro, oppure "No books found" se non ci sono risultati
        
        // TODO: Ricerca per autore
        // Stampa "Author search '[authorKeyword]':"
        // Usa library.searchByAuthor(authorKeyword)
        // Stampa getDetails() per ogni libro, oppure "No books found" se non ci sono risultati
        
        // TODO: Libri disponibili
        // Stampa "Available books:"
        // Usa library.getAvailableBooks()
        // Stampa getDetails() per ogni libro
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online