Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

نظام الاستعارة

جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 84 من 91.

challenge icon

التحدي

سهل

دعنا نبث الحياة في نظام إدارة المكتبة الخاص بنا من خلال إنشاء فئة Library التي تنسق جميع عمليات الاستعارة. سيعمل هذا المنسق المركزي على إدارة مجموعة الكتب وفرض القواعد التي تحافظ على سير عمل مكتبتنا بسلاسة.

ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:

  • Book.php — فئة Book الخاصة بك من الدرس السابق مع خصائص للقراءة فقط (isbn، title، author)، وخاصية $isAvailable خاصة تبدأ بـ true، والأساليب: isAvailable()، و markAsBorrowed()، و markAsReturned().
  • User.php — قم بتضمين ملف Book. فئة User الخاصة بك مع خصائص للقراءة فقط (id، name)، ومصفوفة $borrowedBooks خاصة، وثابت MAX_BOOKS بقيمة 3، والأساليب: getBorrowedBooks()، و canBorrow()، و addBook(Book $book)، و removeBook(string $isbn).
  • Library.php — قم بتضمين ملف User. أنشئ فئة Library تدير مجموعة الكتب. يجب أن تحتوي مكتبتك على:
    • مصفوفة $books خاصة لتخزين الكتب مفهرسة بواسطة ISBN
    • addBook(Book $book): void — يضيف كتاباً إلى المجموعة
    • findBook(string $isbn): ?Book — يعيد الكتاب أو null إذا لم يتم العثور عليه
    • borrowBook(User $user, string $isbn): string — يتحقق من عملية الاستعارة ويعالجها، ويعيد الرسائل المناسبة
    • returnBook(User $user, string $isbn): string — يعالج عمليات الإرجاع ويحدث حالة كل من الكتاب والمستخدم

    يجب أن يتحقق أسلوب borrowBook من ثلاثة شروط بالترتيب ويعيد هذه الرسائل بدقة:

    • "Book not found" — إذا كان الكتاب غير موجود
    • "Book is not available" — إذا كان مستعاراً بالفعل
    • "Borrowing limit reached" — إذا كان لدى المستخدم 3 كتب
    • "Successfully borrowed: [title]" — عند النجاح

    يجب أن يعيد أسلوب returnBook الرسالة "Book not found" إذا كان الكتاب غير موجود، أو "Successfully returned: [title]" عند النجاح.

  • main.php — قم بتضمين ملف Library. ستتلقى مدخلين: ISBN وعنوان الكتاب.

    أنشئ Library، ومستخدماً User بمعرف 1 واسم "Alice"، وكتاباً Book باستخدام ISBN والعنوان المقدمين، والمؤلف "Unknown". أضف الكتاب إلى المكتبة، ثم قم بتنفيذ هذه العمليات واطبع كل نتيجة في سطر جديد:

    1. استعارة الكتاب
    2. محاولة استعارة نفس الكتاب مرة أخرى
    3. إرجاع الكتاب
    4. استعارة الكتاب مرة أخرى

يوضح هذا التحدي كيف تقوم فئة Library بتركيز منطق العمل — فهي تتحقق من الشروط، وتنسق تغييرات الحالة عبر كائنات Book و User، وتعيد ملاحظات ذات معنى لكل عملية.

جرّب بنفسك

<?php
require_once 'Library.php';

// قراءة المدخلات
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: إنشاء نسخة من المكتبة (Library instance)

// TODO: إنشاء مستخدم بالمعرف 1 والاسم "Alice"

// TODO: إنشاء كتاب باستخدام ISBN والعنوان المقدمين والمؤلف "Unknown"

// TODO: إضافة الكتاب إلى المكتبة

// TODO: قم بتنفيذ هذه العمليات واطبع كل نتيجة في سطر جديد:
// 1. استعارة الكتاب
// 2. محاولة استعارة نفس الكتاب مرة أخرى
// 3. إرجاع الكتاب
// 4. استعارة الكتاب مرة أخرى

?>

جميع دروس Object Oriented Programming