Menu
Coddy logo textTech

Yönetici Arayüzü

Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 86 / 91.

challenge icon

Görev

Kolay

Kütüphane Yönetim Sistemimizi idari yetenekler ekleyerek genişletelim. User sınıfından miras alan ancak kütüphanenin envanterini yönetmek (yeni kitaplar eklemek ve mevcut olanları kaldırmak) için özel yetkilere sahip bir Admin sınıfı oluşturacaksınız.

Kodunuzu beş dosya halinde düzenleyeceksiniz:

  • Book.php — Salt okunur (readonly) özelliklere (isbn, title, author) sahip Book sınıfınız, başlangıçta true olan özel bir $isAvailable özelliği ve şu metotlar: isAvailable(), markAsBorrowed() ve markAsReturned().
  • User.php — Book dosyasını dahil edin. Salt okunur özelliklere (id, name) sahip User sınıfınız, özel bir $borrowedBooks dizisi, 3 değerinde bir MAX_BOOKS sabiti ve şu metotlar: getBorrowedBooks(), canBorrow(), addBook(Book $book) ve removeBook(string $isbn).
  • Library.php — User dosyasını dahil edin. addBook(), findBook(), borrowBook(), returnBook() ve arama metotlarını içeren mevcut işlevselliğe sahip Library sınıfınız. Yeni bir metot ekleyin:
    • removeBook(string $isbn): voidunset() kullanarak koleksiyondan bir kitabı kaldırır
  • Admin.php — Library dosyasını dahil edin. User sınıfını genişleten bir Admin sınıfı oluşturun. Adminler tüm kullanıcı yeteneklerini miras alır ancak iki idari metot kazanırlar:
    • addBookToLibrary(Library $library, Book $book): string — kitabı kütüphaneye ekler ve "Added: [title]" döndürür
    • removeBookFromLibrary(Library $library, string $isbn): string — şu kontrollerle bir kitabı kaldırmaya çalışır:
      • Kitap mevcut değilse, "Book not found" döndürün
      • Kitap şu anda ödünç alınmışsa, "Cannot remove: book is currently borrowed" döndürün
      • Aksi takdirde, kitabı kaldırın ve "Removed: [title]" döndürün
  • main.php — Admin dosyasını dahil edin. İki girdi alacaksınız: bir ISBN ve bir kitap başlığı.

    Bir Library ve ID'si 1, adı "AdminUser" olan bir Admin oluşturun. Ayrıca ID'si 2 ve adı "RegularUser" olan normal bir User oluşturun.

    Sağlanan ISBN, başlık ve "Test Author" yazarı ile bir Book oluşturun. Bu işlemleri gerçekleştirin ve her sonucu yeni bir satıra yazdırın:

    1. Adminin kitabı kütüphaneye eklemesini sağlayın
    2. Normal kullanıcının kitabı ödünç almasını sağlayın
    3. Adminin kitabı kaldırmayı denemesini sağlayın (başarısız olmalı — ödünç alınmış durumda)
    4. Normal kullanıcının kitabı iade etmesini sağlayın
    5. Adminin kitabı kaldırmasını sağlayın (şimdi başarılı olmalı)
    6. Adminin aynı kitabı tekrar kaldırmayı denemesini sağlayın (başarısız olmalı — bulunamadı)

Bu zorluk, kalıtımın nasıl doğal bir hiyerarşi oluşturduğunu gösterir — adminler, ekstra ayrıcalıklara sahip kullanıcılardır. removeBookFromLibrary içindeki güvenlik kontrolleri, hala dolaşımda olan kitapların kaldırılmasını önleyerek veri bütünlüğünü sağlar.

Kendin dene

<?php
require_once 'Admin.php';

// Girdiyi oku
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Bir Kütüphane (Library) oluşturun

// TODO: ID'si 1 ve adı "AdminUser" olan bir Yönetici (Admin) oluşturun

// TODO: ID'si 2 ve adı "RegularUser" olan normal bir Kullanıcı (User) oluşturun

// TODO: Sağlanan ISBN, başlık ve yazar "Test Author" ile bir Kitap (Book) oluşturun

// TODO: Bu işlemleri gerçekleştirin ve her sonucu yeni bir satıra yazdırın:
// 1. Yöneticinin kitabı kütüphaneye eklemesini sağlayın
// 2. Normal kullanıcının kitabı ödünç almasını sağlayın
// 3. Yöneticinin kitabı silmeyi denemesini sağlayın (başarısız olmalı - kitap ödünçte)
// 4. Normal kullanıcının kitabı iade etmesini sağlayın
// 5. Yöneticinin kitabı silmesini sağlayın (şimdi başarılı olmalı)
// 6. Yöneticinin aynı kitabı tekrar silmeyi denemesini sağlayın (başarısız olmalı - bulunamadı)

?>

Nesne Yönelimli Programlama bölümündeki tüm dersler