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

فئات الكتاب والمستخدم

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 83 من 91.

challenge icon

التحدي

سهل

لنَبْنِ أساس نظام إدارة المكتبة الخاص بنا من خلال إنشاء فئتَي Book وUser. ستعمل كائنات المجال الأساسية هذه معًا لإدارة عمليات المكتبة.

ستنظّم التعليمات البرمجية عبر ثلاثة ملفات:

  • Book.php: أنشئ فئة Book تتتبّع كتب المكتبة. يجب أن يحتوي كتابك على ثلاث خصائص readonly يتم تعيينها عبر ترقية المُنشئ: isbn وtitle وauthor. أدرج خاصية خاصة $isAvailable تبدأ بقيمة true. أضف ثلاث دوال:
    • isAvailable(): bool: تُرجع حالة التوفّر
    • markAsBorrowed(): void: تضبط التوفّر على false
    • markAsReturned(): void: تضبط التوفّر على true
  • User.php: أدرج ملف Book وأنشئ فئة User تمثّل أعضاء المكتبة. يجب أن يحتوي المستخدم على خاصيتين readonly عبر ترقية المُنشئ: id (int) وname (string). أدرج مصفوفة خاصة $borrowedBooks (initially فارغة) وثابتًا MAX_BOOKS مضبوطًا على 3. أضف هذه الدوال:
    • getBorrowedBooks(): array: تُرجع مصفوفة الكتب المستعارة
    • canBorrow(): bool: تُرجع true إذا كان لدى المستخدم كتب مستعارة fewer من MAX_BOOKS
    • addBook(Book $book): void: تضيف كتابًا إلى المصفوفة المستعارة
    • removeBook(string $isbn): void: تزيل كتابًا باستخدام ISBN عبر array_filter
  • main.php: أدرج ملف User واجعل فئاتك تعمل. ستتلقى أربعة inputs: معرّف مستخدم، واسم مستخدم، وISBN الكتاب، وعنوان الكتاب (سيكون المؤلف "Unknown").

    أنشئ كائنَي User وBook باستخدام القيم المقدّمة. اطبع ما إذا كان المستخدم يستطيع الاستعارة initially، ثم اجعل المستخدم يستعير الكتاب (ضع علامة على أنه مستعار وأضفه إلى المستخدم). أخيرًا، اطبع مدى توفّر الكتاب وعدد الكتب المستعارة.

    تنسيق الإخراج:

    Can borrow: [yes/no]
    Book available: [yes/no]
    Books borrowed: [count]

لاحظ كيف تحمي التغليفُ الحالةَ الداخلية: فلا يتغيّر توفّر الكتاب إلا عبر دوال مخصّصة، وتُدار الكتب المستعارة لدى المستخدم من خلال وصول مضبوط. سيدعم هذا الأساس نظام الاستعارة الذي سنبنيه لاحقًا.

جرّب بنفسك

<?php

require_once 'User.php';

// اقرأ المدخلات
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";

// TODO: أنشئ كائن User بالمعرّف id والاسم name المقدمين

// TODO: أنشئ كائن Book بالـ isbn والعنوان title والمؤلف author المقدمين

// TODO: اطبع ما إذا كان المستخدم يستطيع الاستعارة في البداية
// Format: "Can borrow: yes" or "Can borrow: no"

// TODO: اجعل المستخدم يستعير الكتاب:
// - ضع علامة على الكتاب كمستعار
// - أضف الكتاب إلى كتب المستخدم المستعارة

// TODO: اطبع توفّر الكتاب
// Format: "Book available: yes" or "Book available: no"

// TODO: اطبع عدد الكتب المستعارة
// Format: "Books borrowed: [count]"

?>

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت