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

مراجعة - مدير الحساب البنكي

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

challenge icon

التحدي

سهل

لنُنشئ نظامًا كاملًا لإدارة الحسابات المصرفية يجمع كل مفاهيم خصائص class التي تعلمتها في هذا الفصل. ستنشئ class باسم BankAccount يقوم بتغليف بيانات account بشكل صحيح، مع تتبّع الإحصاءات على مستوى البنك.

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

  • BankAccount.php: Define class باسم BankAccount يدير الحسابات الفردية ويتتبّع إحصاءات البنك الإجمالية. يجب أن تتضمن class ما يلي:
    • constant باسم MINIMUM_BALANCE مضبوطة على 100
    • public readonly property باسم string $accountId لا يمكن تغييرها بعد الإنشاء
    • public property باسم $holderName لاسم صاحب account
    • private property باسم $balance لحماية رصيد account
    • private static property باسم $totalAccounts تبدأ بقيمة 0
    • private static property باسم $totalDeposits تبدأ بقيمة 0
    يجب أن يقبل constructor معرّف account واسم صاحب account وinitial balance. ويجب أن يضبط جميع خصائص instance ويزيد count الخاص بإجمالي الحسابات. أدرج هذه الأساليب:
    • getBalance(): يعيد الرصيد الحالي
    • deposit($amount): يضيف إلى الرصيد ويحدّث متعقّب إجمالي الإيداعات، ثم يعيد الرصيد الجديد
    • withdraw($amount): يطرح من الرصيد فقط إذا ظل الرصيد المتبقي مساويًا لـ minimum balance أو أعلى منه، ثم يعيد الرصيد الجديد (أو الرصيد غير المتغيّر إذا لم يكن السحب مسموحًا)
    • static method باسم getTotalAccounts(): يعيد العدد الإجمالي للحسابات التي أُنشئت
    • static method باسم getTotalDeposits(): يعيد مجموع جميع الإيداعات التي تمت عبر جميع الحسابات
  • main.php: أدرج ملف class الخاص بـ BankAccount. ستتلقى أربعة inputs: معرّف account الأول، واسم صاحب account الأول، ومعرّف account الثاني، واسم صاحب account الثاني. أنشئ حسابين، وكلاهما initial balance له هو 500. بالنسبة إلى account الأول: أجرِ إيداعًا بقيمة 200، ثم اسحب 100. اطبع معرّف account واسم صاحب account والرصيد في سطر واحد بالتنسيق: "[accountId]: [holderName] - $[balance]" بالنسبة إلى account الثاني: أجرِ إيداعًا بقيمة 300، ثم attempt سحب 800 (يجب أن يفشل بسبب minimum balance). اطبع التنسيق نفسه لهذا account. وأخيرًا، اطبع إجمالي الحسابات وإجمالي الإيداعات في سطرين منفصلين:
    • "Total Accounts: [count]"
    • "Total Deposits: $[amount]"

يجمع هذا التحدي بين readonly properties للمعرّفات غير القابلة للتغيير، وprivate properties مع getter methods للبيانات المحمية، وconstants للقواعد الثابتة، وstatic properties مع static methods للإحصاءات على مستوى البنك.

جرّب بنفسك

<?php

require_once 'BankAccount.php';

// اقرأ المدخلات
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));

// TODO: أنشئ الحساب الأول برصيد أولي قدره 500

// TODO: أنشئ الحساب الثاني برصيد أولي قدره 500

// TODO: الحساب الأول: أودع 200، ثم اسحب 100

// TODO: اطبع معلومات الحساب الأول: "[accountId]: [holderName] - $[balance]"

// TODO: الحساب الثاني: أودع 300، ثم حاول سحب 800

// TODO: اطبع معلومات الحساب الثاني: "[accountId]: [holderName] - $[balance]"

// TODO: Print "Total Accounts: [count]"

// TODO: Print "Total Deposits: $[amount]"

?>

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

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