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

تحويل الأموال

جزء من قسم Object Oriented Programming في رحلة Lua على Coddy — الدرس 24 من 70.

challenge icon

التحدي

سهل

أصبح بنكك الرقمي مكتملاً تقريبًا! الميزة الرئيسية الأخيرة هي القدرة على تحويل الأموال بين الحسابات. هذا هو المكان الذي يتألق فيه تصميمك الموجه للكائنات (object-oriented design) حقًا — حيث يمكن لكائن حساب واحد التفاعل مباشرة مع كائن حساب آخر.

ستقوم بإضافة تابع :transfer(targetAccount, amount) يقوم بنقل الأموال من حساب إلى آخر. فكر في ما تنطوي عليه هذه العملية حقًا: إنها عملية سحب من الحساب المصدر تليها عملية إيداع في الحساب المستهدف. الجمال في الأمر هو أنه يمكنك إعادة استخدام التوابع التي قمت ببنائها بالفعل!

استمر في البناء على ملفاتك الحالية:

  • Account.lua: أضف تابع :transfer(targetAccount, amount) إلى فئة Account الخاصة بك. يجب أن يحاول هذا التابع سحب المبلغ من self، وإذا نجح، يقوم بإيداع هذا المبلغ في targetAccount. إذا فشلت عملية السحب (بسبب عدم كفاية الأموال)، يجب ألا يتم التحويل. احتفظ بجميع وظائفك الحالية (المنشئ مع المعرف ID، و deposit، و withdraw، و getBalance، و __tostring).
  • main.lua: قم بإنشاء حسابات متعددة واستعرض عمليات التحويل بينها، موضحًا كيف تتغير الأرصدة عبر كائنات الحساب المختلفة.

ستتلقى خمسة مدخلات:

  1. معرف الحساب الأول
  2. معرف الحساب الثاني
  3. الإيداع الأولي في الحساب الأول
  4. مبلغ التحويل الأول (من الحساب 1 إلى الحساب 2)
  5. مبلغ التحويل الثاني (من الحساب 1 إلى الحساب 2)

في ملفك الرئيسي، قم بإنشاء حسابين بالمعرفات المعطاة (كلاهما يبدأ برصيد 0)، وأودع المبلغ الأولي في الحساب الأول، ثم حاول إجراء عمليتي التحويل من الحساب الأول إلى الثاني. بعد كل محاولة تحويل، اطبع كلا الحسابين (سيعرض __tostring حالتهما الحالية).

على سبيل المثال، إذا كانت المدخلات هي 101، 102، 500، 200، و 400، يجب أن يكون المخرج:

Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200

يبدأ الحساب الأول بمبلغ 500 بعد الإيداع. ينجح التحويل الأول بقيمة 200، مما يترك الحساب 101 برصيد 300 والحساب 102 برصيد 200. يفشل التحويل الثاني بقيمة 400 لأن الحساب 101 لديه 300 فقط — لذا يظل كلا الرصيدين دون تغيير.

جرّب بنفسك

-- استدعاء وحدة الحساب (Account)
local Account = require('Account')

-- قراءة المدخلات الخمسة
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())

-- إنشاء حسابين باستخدام المعرفات
local account1 = Account:new(id1)
local account2 = Account:new(id2)

-- إيداع المبلغ الأولي في الحساب الأول
account1:deposit(initialDeposit)

-- TODO: محاولة إجراء التحويل الأول من account1 إلى account2

-- TODO: طباعة كلا الحسابين بعد التحويل الأول

-- TODO: محاولة إجراء التحويل الثاني من account1 إلى account2

-- TODO: طباعة كلا الحسابين بعد التحويل الثاني

جميع دروس Object Oriented Programming