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. Esse coordenador central gerenciará a coleção de livros e aplicará as regras que mantêm nossa biblioteca funcionando sem problemas.

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 iniciada 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 com valor 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 gerencie 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 mensagens apropriadas
    • returnBook(User $user, string $isbn): string: processa devoluções e atualiza o estado do livro e 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 o título de um livro.

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

    1. Empreste o livro
    2. Tente emprestar o mesmo livro novamente
    3. Devolva o livro
    4. Empreste o livro mais uma vez

Este desafio demonstra como a classe Library centraliza a lógica de negócios. Ela valida condições, coordena alterações 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: Crie uma instância de Library

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

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

// TODO: Adicione o livro à biblioteca

// TODO: Execute estas operações e imprima cada resultado em uma nova linha:
// 1. Empreste o livro
// 2. Tente emprestar o mesmo livro novamente
// 3. Devolva o livro
// 4. Empreste o livro mais uma vez

?>

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

Pratique por conta própria: Compilador de PHP online