Menu
Coddy logo textTech

Funcionalidad de búsqueda

Parte de la sección Programación Orientada a Objetos del Journey de Java de Coddy — lección 80 de 87.

challenge icon

Desafío

Fácil

¡Vamos a mejorar tu Sistema de Gestión de Biblioteca con potentes capacidades de búsqueda! Una biblioteca no es muy útil si los usuarios no pueden encontrar los libros que buscan. Agregarás métodos para buscar por título y autor, haciendo que tu biblioteca sea verdaderamente funcional.

Continuarás construyendo sobre tu código existente en cuatro archivos:

  • Book.java: Mantén tu clase Book con toda la funcionalidad existente: isbn, title, author, isAvailable, borrowedBy, getDetails() y los getters/setters apropiados. Asegúrate de tener métodos getter para title y author si aún no los has agregado.
  • User.java: Mantén tu clase User sin cambios con id, name, el ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() y toString().
  • Library.java: Amplía tu clase Library con funcionalidad de búsqueda. Mantén todos los métodos existentes (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) y agrega estos nuevos métodos de búsqueda:

    searchByTitle(String keyword) - devuelve un ArrayList<Book> que contiene todos los libros cuyo título contiene la palabra clave (sin distinguir entre mayúsculas y minúsculas). Usa toLowerCase() tanto en el título como en la palabra clave para la comparación.

    searchByAuthor(String keyword) - devuelve un ArrayList<Book> que contiene todos los libros cuyo nombre de autor contiene la palabra clave (sin distinguir entre mayúsculas y minúsculas).

    getAvailableBooks() - devuelve un ArrayList<Book> que contiene solo los libros que están actualmente disponibles para préstamo.

  • Main.java: ¡Demuestra tu sistema de búsqueda! Recibirás entradas para tres libros (ISBN, título, autor para cada uno), luego un usuario (ID, nombre), seguido de una operación de préstamo y dos consultas de búsqueda.

    Crea una Library, agrega los tres libros y registra al usuario. Procesa la operación de préstamo (con formato userId:isbn). Luego realiza las dos búsquedas: la primera entrada es una palabra clave de título, la segunda es una palabra clave de autor.

    Imprime los resultados en este orden:

    • Después de prestar, imprime la confirmación del préstamo
    • Imprime Title search '[keyword]': seguido de los detalles de cada libro coincidente en líneas separadas (usando getDetails()). Si no hay coincidencias, imprime No books found
    • Imprime Author search '[keyword]': seguido de los detalles de cada libro coincidente. Si no hay coincidencias, imprime No books found
    • Imprime Available books: seguido de los detalles de cada libro disponible

Recibirás las entradas en este orden: book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, book3 ISBN, book3 title, book3 author, user ID, user name, operación de préstamo, palabra clave de búsqueda de título, palabra clave de búsqueda de autor.

Por ejemplo, con las entradas 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, tu salida sería:

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

Observa cómo los métodos de búsqueda utilizan la coincidencia sin distinguir entre mayúsculas y minúsculas: buscar "clean" encuentra tanto "Clean Code" como "The Clean Coder". La lista de libros disponibles excluye correctamente el libro prestado. ¡Estas capacidades de búsqueda transforman tu biblioteca de una simple colección en un sistema verdaderamente utilizable!

Pruébalo tú mismo

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leer información del libro 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Leer información del libro 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Leer información del libro 3
        String isbn3 = scanner.nextLine();
        String title3 = scanner.nextLine();
        String author3 = scanner.nextLine();
        
        // Leer información del usuario
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Leer operación de préstamo
        String borrowOp = scanner.nextLine();
        
        // Leer palabras clave de búsqueda
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // Crear objetos Book
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // Crear objeto User
        User user = new User(userId, userName);
        
        // Crear Library y añadir libros y usuario
        Library library = new Library();
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.registerUser(user);
        
        // Procesar operación de préstamo
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO: Búsqueda por título
        // Imprimir "Title search '[titleKeyword]':"
        // Usar library.searchByTitle(titleKeyword)
        // Imprimir getDetails() de cada libro, o "No books found" si está vacío
        
        // TODO: Búsqueda por autor
        // Imprimir "Author search '[authorKeyword]':"
        // Usar library.searchByAuthor(authorKeyword)
        // Imprimir getDetails() de cada libro, o "No books found" si está vacío
        
        // TODO: Libros disponibles
        // Imprimir "Available books:"
        // Usar library.getAvailableBooks()
        // Imprimir getDetails() de cada libro
    }
}

Todas las lecciones de Programación Orientada a Objetos