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

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

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

challenge icon

التحدي

سهل

مصرفك الرقمي أوشك على الاكتمال! الميزة الرئيسية الأخيرة هي القدرة على تحويل money بين الحسابات. هنا يتألق تصميمك الكائني حقًا: يمكن لكائن account أن يتفاعل مباشرةً مع كائن account آخر.

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

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

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

ستتلقى خمسة inputs:

  1. معرّف account الأول
  2. معرّف account الثاني
  3. الإيداع initial في account الأول
  4. مقدار التحويل الأول (من account 1 إلى account 2)
  5. مقدار التحويل الثاني (من account 1 إلى account 2)

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

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

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

يبدأ account الأول بمبلغ 500 بعد الإيداع. ينجح التحويل الأول البالغ 200، فيترك account 101 برصيد 300 وaccount 102 برصيد 200. يفشل التحويل الثاني البالغ 400 لأن account 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: طباعة كلا الحسابين بعد التحويل الثاني

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

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