Menu
Coddy logo textTech

Funcionalidade de Busca

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 85 de 91.

challenge icon

Desafio

Fácil

Vamos aprimorar nosso Sistema de Gerenciamento de Biblioteca adicionando funcionalidade de pesquisa. Os usuários precisam encontrar livros facilmente, seja procurando um título específico, pesquisando por autor ou verificando o que está disponível para empréstimo no momento.

Você organizará seu código em quatro arquivos:

  • Book.php: sua classe Book com propriedades somente leitura (isbn, title, author), uma propriedade privada $isAvailable iniciando como true e os métodos: isAvailable(), markAsBorrowed() e markAsReturned().
  • User.php: inclua o arquivo Book. Sua classe User com propriedades somente leitura (id, name), um array privado $borrowedBooks, uma constante MAX_BOOKS com valor 3 e os métodos: getBorrowedBooks(), canBorrow(), addBook(Book $book) e removeBook(string $isbn).
  • Library.php: inclua o arquivo User. Amplie sua classe Library com a funcionalidade existente, além de três novos métodos de pesquisa:
    • searchByTitle(string $keyword): array: retorna todos os livros cujo título contém a palavra-chave (sem distinção entre maiúsculas e minúsculas)
    • searchByAuthor(string $author): array: retorna todos os livros cujo nome do autor contém o termo de pesquisa (sem distinção entre maiúsculas e minúsculas)
    • getAvailableBooks(): array: retorna apenas os livros que estão disponíveis para empréstimo no momento

    Use array_filter com funções de seta e stripos para fazer a correspondência sem distinção entre maiúsculas e minúsculas. Lembre-se de que stripos retorna false quando nenhuma correspondência é encontrada; portanto, verifique se é !== false.

  • main.php: inclua o arquivo Library. Você receberá duas entradas: uma palavra-chave de pesquisa e um nome de autor.

    Crie uma Library e adicione estes quatro livros:

    • ISBN: "978-0", Título: "PHP Basics", Autor: "John Smith"
    • ISBN: "978-1", Título: "Advanced PHP", Autor: "Jane Doe"
    • ISBN: "978-2", Título: "Python Guide", Autor: "John Smith"
    • ISBN: "978-3", Título: "Web Development", Autor: "Alice Brown"

    Empreste o livro com ISBN "978-1" usando um User com ID 1 e nome "TestUser".

    Em seguida, realize estas pesquisas e imprima os resultados:

    1. Pesquise por título usando a primeira entrada e imprima o título de cada livro correspondente em uma nova linha
    2. Pesquise por autor usando a segunda entrada e imprima a quantidade de livros correspondentes
    3. Obtenha os livros disponíveis e imprima a quantidade

    Formato da saída:

    Title matches:
    [title1]
    [title2]
    ...
    Author matches: [count]
    Available: [count]

Este desafio demonstra como array_filter, combinado com stripos, cria uma funcionalidade de pesquisa poderosa e fácil de usar. A correspondência sem distinção entre maiúsculas e minúsculas significa que os usuários não precisam se preocupar com a capitalização exata ao pesquisar.

Experimente você mesmo

<?php

require_once 'Library.php';

// Ler entradas
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));

// TODO: Crie uma instância de Library

// TODO: Adicione os quatro livros à biblioteca:
// ISBN: "978-0", Título: "PHP Basics", Autor: "John Smith"
// ISBN: "978-1", Título: "Advanced PHP", Autor: "Jane Doe"
// ISBN: "978-2", Título: "Python Guide", Autor: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"

// TODO: Crie um User com ID 1 e nome "TestUser", registre-o

// TODO: Empreste o livro com ISBN "978-1"

// TODO: Pesquise por título usando $searchKeyword e imprima os resultados
echo "Title matches:\n";
// Imprima o título de cada livro correspondente em uma nova linha

// TODO: Pesquise por autor usando $authorName e imprima a contagem
echo "Author matches: " . /* contagem aqui */ "\n";

// TODO: Obtenha os livros disponíveis e imprima a contagem
echo "Available: " . /* contagem aqui */ "\n";

?>

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

Pratique por conta própria: Compilador de PHP online