Menu
Coddy logo textTech

Ödünç Alma Sistemi

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

challenge icon

Görev

Kolay

Tüm ödünç alma işlemlerini yöneten Library sınıfını oluşturarak Kütüphane Yönetim Sistemimizi hayata geçirelim. Bu merkezi koordinatör, kitap koleksiyonunu yönetecek ve kütüphanemizin sorunsuz çalışmasını sağlayan kuralları uygulayacaktır.

Kodunuzu dört dosya halinde düzenleyeceksiniz:

  • Book.php — Önceki dersteki salt okunur (readonly) özelliklere (isbn, title, author) sahip Book sınıfınız; başlangıçta true olan özel (private) 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. Kitap koleksiyonunu yöneten bir Library sınıfı oluşturun. Kütüphaneniz şunlara sahip olmalıdır:
    • Kitapları ISBN'e göre indekslenmiş şekilde saklamak için özel bir $books dizisi
    • addBook(Book $book): void — koleksiyona bir kitap ekler
    • findBook(string $isbn): ?Book — kitabı döndürür veya bulunamazsa null döndürür
    • borrowBook(User $user, string $isbn): string — ödünç alma işlemini doğrular ve işler, uygun mesajları döndürür
    • returnBook(User $user, string $isbn): string — iade işlemlerini gerçekleştirir ve hem kitap hem de kullanıcı durumunu günceller

    borrowBook metodu şu üç koşulu sırasıyla kontrol etmeli ve tam olarak şu mesajları döndürmelidir:

    • "Book not found" — kitap mevcut değilse
    • "Book is not available" — kitap zaten ödünç alınmışsa
    • "Borrowing limit reached" — kullanıcının 3 kitabı varsa
    • "Successfully borrowed: [title]" — başarı durumunda

    returnBook metodu, kitap mevcut değilse "Book not found", başarı durumunda ise "Successfully returned: [title]" döndürmelidir.

  • main.php — Library dosyasını dahil edin. İki girdi alacaksınız: bir ISBN ve bir kitap başlığı.

    Bir Library, ID'si 1 ve adı "Alice" olan bir User ve verilen ISBN, başlık ve "Unknown" yazarına sahip bir Book oluşturun. Kitabı kütüphaneye ekleyin, ardından şu işlemleri gerçekleştirin ve her sonucu yeni bir satıra yazdırın:

    1. Kitabı ödünç alın
    2. Aynı kitabı tekrar ödünç almayı deneyin
    3. Kitabı iade edin
    4. Kitabı bir kez daha ödünç alın

Bu zorluk, Library sınıfının iş mantığını nasıl merkezileştirdiğini gösterir; koşulları doğrular, Book ve User nesneleri arasındaki durum değişikliklerini koordine eder ve her işlem için anlamlı geri bildirimler döndürür.

Kendin dene

<?php
require_once 'Library.php';

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

// TODO: Bir Library örneği oluşturun

// TODO: ID'si 1 ve adı "Alice" olan bir User oluşturun

// TODO: Sağlanan ISBN, başlık ve "Unknown" yazarı ile bir Book oluşturun

// TODO: Kitabı kütüphaneye ekleyin

// TODO: Bu işlemleri gerçekleştirin ve her sonucu yeni bir satıra yazdırın:
// 1. Kitabı ödünç alın
// 2. Aynı kitabı tekrar ödünç almayı deneyin
// 3. Kitabı iade edin
// 4. Kitabı bir kez daha ödünç alın

?>

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