Menu
Coddy logo textTech

Funcionalidade de Busca

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 80 de 87.

challenge icon

Desafio

Fácil

Vamos aprimorar seu Sistema de Gerenciamento de Biblioteca com poderosos recursos de busca! Uma biblioteca não é muito útil se os usuários não conseguirem encontrar os livros que procuram. Você adicionará métodos para buscar por título e autor, tornando sua biblioteca verdadeiramente funcional.

Você continuará construindo sobre seu código existente em quatro arquivos:

  • Book.java: Mantenha sua classe Book com toda a funcionalidade existente—isbn, title, author, isAvailable, borrowedBy, getDetails() e os getters/setters apropriados. Certifique-se de ter métodos getter para title e author se ainda não os adicionou.
  • User.java: Mantenha sua classe User inalterada com id, name, o ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount() e toString().
  • Library.java: Expanda sua classe Library com funcionalidade de busca. Mantenha todos os métodos existentes (addBook, registerUser, findBookByIsbn, findUserById, borrowBook, returnBook) e adicione estes novos métodos de busca:

    searchByTitle(String keyword) - retorna um ArrayList<Book> contendo todos os livros cujo título contém a palavra-chave (insensível a maiúsculas e minúsculas). Use toLowerCase() tanto no título quanto na palavra-chave para comparação.

    searchByAuthor(String keyword) - retorna um ArrayList<Book> contendo todos os livros cujo nome do autor contém a palavra-chave (insensível a maiúsculas e minúsculas).

    getAvailableBooks() - retorna um ArrayList<Book> contendo apenas os livros que estão atualmente disponíveis para empréstimo.

  • Main.java: Demonstre seu sistema de busca! Você receberá entradas para três livros (ISBN, título, autor para cada um), depois um usuário (ID, nome), seguido por uma operação de empréstimo e duas consultas de busca.

    Crie uma Library, adicione todos os três livros e registre o usuário. Processe a operação de empréstimo (formatada como userId:isbn). Em seguida, realize as duas buscas—a primeira entrada é uma palavra-chave de título, a segunda é uma palavra-chave de autor.

    Imprima os resultados nesta ordem:

    • Após o empréstimo, imprima a confirmação do empréstimo
    • Imprima Title search '[keyword]': seguido pelos detalhes de cada livro correspondente em linhas separadas (usando getDetails()). Se não houver correspondências, imprima No books found
    • Imprima Author search '[keyword]': seguido pelos detalhes de cada livro correspondente. Se não houver correspondências, imprima No books found
    • Imprima Available books: seguido pelos detalhes de cada livro disponível

Você receberá as entradas nesta ordem: book1 ISBN, book1 title, book1 author, book2 ISBN, book2 title, book2 author, book3 ISBN, book3 title, book3 author, user ID, user name, operação de empréstimo, palavra-chave de busca por título, palavra-chave de busca por autor.

Por exemplo, com as 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, sua saída seria:

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

Observe como os métodos de busca usam correspondência insensível a maiúsculas e minúsculas—buscar por "clean" encontra tanto "Clean Code" quanto "The Clean Coder". A lista de livros disponíveis exclui corretamente o livro emprestado. Esses recursos de busca transformam sua biblioteca de uma simples coleção em um sistema verdadeiramente utilizável!

Experimente você mesmo

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler informações do livro 1
        String isbn1 = scanner.nextLine();
        String title1 = scanner.nextLine();
        String author1 = scanner.nextLine();
        
        // Ler informações do livro 2
        String isbn2 = scanner.nextLine();
        String title2 = scanner.nextLine();
        String author2 = scanner.nextLine();
        
        // Ler informações do livro 3
        String isbn3 = scanner.nextLine();
        String title3 = scanner.nextLine();
        String author3 = scanner.nextLine();
        
        // Ler informações do usuário
        String userId = scanner.nextLine();
        String userName = scanner.nextLine();
        
        // Ler operação de empréstimo
        String borrowOp = scanner.nextLine();
        
        // Ler palavras-chave de busca
        String titleKeyword = scanner.nextLine();
        String authorKeyword = scanner.nextLine();
        
        // Criar objetos Book
        Book book1 = new Book(isbn1, title1, author1);
        Book book2 = new Book(isbn2, title2, author2);
        Book book3 = new Book(isbn3, title3, author3);
        
        // Criar objeto User
        User user = new User(userId, userName);
        
        // Criar Library e adicionar livros e usuário
        Library library = new Library();
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.registerUser(user);
        
        // Processar operação de empréstimo
        String[] parts = borrowOp.split(":");
        String opUserId = parts[0];
        String opIsbn = parts[1];
        library.borrowBook(opUserId, opIsbn);
        
        // TODO: Busca por título
        // Imprimir "Title search '[titleKeyword]':"
        // Usar library.searchByTitle(titleKeyword)
        // Imprimir o getDetails() de cada livro, ou "No books found" se estiver vazio
        
        // TODO: Busca por autor
        // Imprimir "Author search '[authorKeyword]':"
        // Usar library.searchByAuthor(authorKeyword)
        // Imprimir o getDetails() de cada livro, ou "No books found" se estiver vazio
        
        // TODO: Livros disponíveis
        // Imprimir "Available books:"
        // Usar library.getAvailableBooks()
        // Imprimir o getDetails() de cada livro
    }
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Java online