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 recursos avançados de pesquisa! Uma biblioteca não é muito útil se os usuários não conseguem encontrar os livros que procuram. Você adicionará métodos para pesquisar por título e autor, tornando sua biblioteca realmente funcional.

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

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

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

    searchByAuthor(String keyword) - retorna um ArrayList<Book> contendo todos os livros cujo nome do autor contém a palavra-chave (sem distinção entre maiúsculas e minúsculas).

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

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

    Crie uma Library, adicione 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 pesquisas: a primeira entrada é uma palavra-chave de título, e 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: ISBN de book1, título de book1, autor de book1, ISBN de book2, título de book2, autor de book2, ISBN de book3, título de book3, autor de book3, ID do usuário, nome do usuário, operação de empréstimo, palavra-chave de pesquisa de título, palavra-chave de pesquisa de 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 pesquisa usam correspondência sem distinção entre maiúsculas e minúsculas: pesquisar por "clean" encontra tanto "Clean Code" quanto "The Clean Coder". A lista de livros disponíveis exclui corretamente o livro emprestado. Esses recursos de pesquisa transformam sua biblioteca de uma simples coleção em um sistema realmente útil!

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
        // Print "Title search '[titleKeyword]':"
        // Usar library.searchByTitle(titleKeyword)
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Author search
        // Print "Author search '[authorKeyword]':"
        // Usar library.searchByAuthor(authorKeyword)
        // Print each book's getDetails(), or "No books found" if empty
        
        // TODO: Available books
        // Print "Available books:"
        // Use library.getAvailableBooks()
        // Imprimir getDetails() de cada livro
    }
}

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

Pratique por conta própria: Compilador de Java online