Menu
Coddy logo textTech

Interface de Administrador

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

challenge icon

Desafio

Fácil

Vamos estender nosso Sistema de Gerenciamento de Biblioteca adicionando recursos administrativos. Você criará uma classe Admin que herda de User, mas tem poderes especiais para gerenciar o acervo da biblioteca: adicionar novos livros e remover os existentes.

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

  • Book.php: sua classe Book com propriedades somente leitura (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 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. Sua classe Library com a funcionalidade existente, incluindo addBook(), findBook(), borrowBook(), returnBook() e os métodos de busca. Adicione um novo método:
    • removeBook(string $isbn): void: remove um livro da coleção usando unset()
  • Admin.php: inclua o arquivo Library. Crie uma classe Admin que estende User. Os administradores herdam todos os recursos dos usuários, mas ganham dois métodos administrativos:
    • addBookToLibrary(Library $library, Book $book): string: adiciona o livro à biblioteca e retorna "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string: tenta remover um livro seguindo estas verificações:
      • Se o livro não existir, retorne "Book not found"
      • Se o livro estiver emprestado no momento, retorne "Cannot remove: book is currently borrowed"
      • Caso contrário, remova-o e retorne "Removed: [title]"
  • main.php: inclua o arquivo Admin. Você receberá duas entradas: um ISBN e o título de um livro.

    Crie uma Library e um Admin com ID 1 e nome "AdminUser". Crie também um User comum com ID 2 e nome "RegularUser".

    Crie um Book com o ISBN e o título fornecidos e com o autor "Test Author". Execute estas operações e imprima cada resultado em uma nova linha:

    1. Faça o administrador adicionar o livro à biblioteca
    2. Faça o usuário comum pegar o livro emprestado
    3. Faça o administrador tentar remover o livro (deve falhar: ele está emprestado)
    4. Faça o usuário comum devolver o livro
    5. Faça o administrador remover o livro (agora deve funcionar)
    6. Faça o administrador tentar remover o mesmo livro novamente (deve falhar, pois o livro não foi encontrado)

Este desafio demonstra como a herança cria uma hierarquia natural: administradores são usuários com privilégios adicionais. As verificações de segurança em removeBookFromLibrary garantem a integridade dos dados ao impedir a remoção de livros que ainda estão em circulação.

Experimente você mesmo

<?php
require_once 'Admin.php';

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

// TODO: Criar uma Library

// TODO: Criar um Admin com ID 1 e nome "AdminUser"

// TODO: Criar um User regular com ID 2 e nome "RegularUser"

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

// TODO: Realize estas operações e imprima cada resultado em uma nova linha:
// 1. Faça o admin adicionar o book à library
// 2. Faça o usuário regular emprestar o book
// 3. Faça o admin tentar remover o book (deve falhar - está emprestado)
// 4. Faça o usuário regular devolver o book
// 5. Faça o admin remover o book (deve ter sucesso agora)
// 6. Faça o admin tentar remover o mesmo book novamente (deve falhar - não encontrado)

?>

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

Pratique por conta própria: Compilador de PHP online