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

طريقة السحب

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

challenge icon

التحدي

سهل

بنكك الرقمي ينمو! يمكن للحسابات الآن استقبال الإيداعات، ولكن البنك الحقيقي يحتاج أيضاً للسماح للعملاء بسحب الأموال. دعنا نضيف طريقة :withdraw(amount)—ولكن مع فحص أمان مهم.

على عكس الإيداعات، يمكن أن تفشل عمليات السحب. إذا حاول العميل سحب أموال أكثر مما يملك، فلا ينبغي للبنك السماح بذلك. تحتاج طريقة السحب الخاصة بك إلى التحقق مما إذا كانت هناك أموال كافية قبل خصم المبلغ.

ستستمر في العمل على ملفيك:

  • Account.lua: أضف طريقة :withdraw(amount) إلى فئة Account الموجودة لديك. إذا كان الحساب يحتوي على رصيد كافٍ، فقم بطرح المبلغ وإرجاع true. إذا لم تكن هناك أموال كافية، فقم بطباعة Insufficient funds وإرجاع false دون تغيير الرصيد.
  • main.lua: قم بإنشاء حساب، وقم بإجراء إيداع لمنحه بعض الأموال، ثم حاول إجراء عدة عمليات سحب لرؤية كل من المعاملات الناجحة والفاشلة.

ستتلقى أربعة مدخلات:

  1. مبلغ الإيداع الأولي
  2. مبلغ السحب الأول
  3. مبلغ السحب الثاني
  4. مبلغ السحب الثالث

في ملفك الرئيسي، قم بإنشاء حساب، وأودع المبلغ الأولي، ثم حاول إجراء كل عملية سحب بالترتيب. بعد كل محاولة سحب، اطبع الرصيد الحالي في سطر جديد. تذكر أن عمليات السحب الفاشلة ستطبع أيضاً Insufficient funds قبل طباعة الرصيد.

على سبيل المثال، إذا كانت المدخلات هي 100 و 30 و 50 و 40، فيجب أن يكون المخرج:

70
20
Insufficient funds
20

يبدأ الحساب بـ 100 بعد الإيداع. تنجح عملية السحب الأولى بقيمة 30 (الرصيد: 70)، وتنجح عملية السحب الثانية بقيمة 50 (الرصيد: 20)، ولكن عملية السحب الثالثة بقيمة 40 تفشل لأنه لم يتبق سوى 20—لذا يظل الرصيد عند 20.

جرّب بنفسك

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

-- قراءة المدخلات الأربعة
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())

-- إنشاء حساب واحد
local account = Account:new()

-- إيداع المبلغ الأولي
account:deposit(initialDeposit)

-- محاولة السحب الأول وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal1) هنا
print(account.balance)

-- محاولة السحب الثاني وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal2) هنا
print(account.balance)

-- محاولة السحب الثالث وطباعة الرصيد
-- TODO: استدعاء account:withdraw(withdrawal3) هنا
print(account.balance)

جميع دروس Object Oriented Programming