Menu
Coddy logo textTech

Sistema de Empréstimos

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 84 de 91.

challenge icon

Desafio

Fácil

Vamos dar vida ao nosso Sistema de Gerenciamento de Biblioteca criando a classe Library que orquestra todas as operações de empréstimo. Este coordenador central gerenciará a coleção de livros e aplicará as regras que mantêm nossa biblioteca funcionando perfeitamente.

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

  • Book.php — Sua classe Book da lição anterior com propriedades readonly (isbn, title, author), uma propriedade privada $isAvailable começando como true, e os métodos: isAvailable(), markAsBorrowed() e markAsReturned().
  • User.php — Inclua o arquivo Book. Sua classe User com propriedades readonly (id, name), um array privado $borrowedBooks, uma constante MAX_BOOKS de 3, e os métodos: getBorrowedBooks(), canBorrow(), addBook(Book $book) e removeBook(string $isbn).
  • Library.php — Inclua o arquivo User. Crie uma classe Library que gerencia a coleção de livros. Sua biblioteca deve ter:
    • Um array privado $books para armazenar livros indexados pelo ISBN
    • addBook(Book $book): void — adiciona um livro à coleção
    • findBook(string $isbn): ?Book — retorna o livro ou null se não for encontrado
    • borrowBook(User $user, string $isbn): string — valida e processa o empréstimo, retornando as mensagens apropriadas
    • returnBook(User $user, string $isbn): string — processa devoluções e atualiza o estado tanto do livro quanto do usuário

    O método borrowBook deve verificar três condições em ordem e retornar estas mensagens exatas:

    • "Book not found" — se o livro não existir
    • "Book is not available" — se já estiver emprestado
    • "Borrowing limit reached" — se o usuário tiver 3 livros
    • "Successfully borrowed: [title]" — em caso de sucesso

    O método returnBook deve retornar "Book not found" se o livro não existir, ou "Successfully returned: [title]" em caso de sucesso.

  • main.php — Inclua o arquivo Library. Você receberá duas entradas: um ISBN e um título de livro.

    Crie uma Library, um User com ID 1 e nome "Alice", e um Book com o ISBN fornecido, título e autor "Unknown". Adicione o livro à biblioteca, depois realize estas operações e imprima cada resultado em uma nova linha:

    1. Emprestar o livro
    2. Tentar emprestar o mesmo livro novamente
    3. Devolver o livro
    4. Emprestar o livro mais uma vez

Este desafio demonstra como a classe Library centraliza a lógica de negócio — ela valida condições, coordena mudanças de estado entre os objetos Book e User e retorna um feedback significativo para cada operação.

Experimente você mesmo

<?php
require_once 'Library.php';

// Ler entrada
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Criar uma instância de Library

// TODO: Criar um User com ID 1 e nome "Alice"

// TODO: Criar um Book com o ISBN fornecido, título e autor "Unknown"

// TODO: Adicionar o livro à biblioteca

// TODO: Realizar estas operações e imprimir cada resultado em uma nova linha:
// 1. Emprestar o livro
// 2. Tentar emprestar o mesmo livro novamente
// 3. Devolver o livro
// 4. Emprestar o livro mais uma vez

?>

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