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