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

منطق السحب

جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 25 من 61.

challenge icon

التحدي

سهل

حسابك البنكي ينمو! الآن دعنا نضيف القدرة على سحب الأموال. على عكس الإيداعات، للسحوبات قيد إضافي—لا يمكنك سحب أموال أكثر مما تملك. تحتاج دالة withdraw الخاصة بك إلى التحقق من الرصيد قبل السماح بالعملية.

بناءً على مشروع حسابك البنكي الحالي، ستقوم بتوسيع الوحدة البرمجية بميزة السحب. هذا هو المكان الذي يتألق فيه التغليف (encapsulation) حقاً—يمكن لدالتك الوصول إلى الرصيد المخفي للتحقق من كفاية الأموال، وهو أمر لا يمكن للكود الخارجي القيام به مباشرة أبداً.

ستعمل على ثلاثة ملفات:

  • account.h: أضف نموذجاً أولياً لدالة جديدة: withdraw. تأخذ هذه الدالة مؤشراً من نوع Account ومبلغاً من نوع double وتُرجع int (1 للنجاح، 0 إذا فشل السحب). احتفظ بجميع التصريحات الحالية لـ create_account و destroy_account و deposit.
  • account.c: قم بتنفيذ دالة withdraw. يجب أن ينجح السحب فقط إذا تم استيفاء شرطين: يجب أن يكون المبلغ موجباً (أكبر من الصفر)، ويجب أن يمتلك الحساب أموالاً كافية (balance >= amount). إذا تحقق الشرطان، اطرح المبلغ من الرصيد وأرجع 1. خلاف ذلك، أرجع 0 دون تعديل الرصيد.
  • main.c: استعرض سير عمل الإيداع والسحب الكامل. أنشئ حساباً، وقم بإجراء إيداع لإنشاء رصيد، ثم اختبر السحوبات—الناجحة منها والفاشلة.

ستتلقى أربعة مدخلات: **معرف الحساب** (عدد صحيح)، و**مبلغ الإيداع** (لإنشاء أموال أولية)، و**مبلغ سحب ناجح** (أقل من أو يساوي المبلغ المودع)، و**مبلغ سحب فاشل** (أكثر من الرصيد المتبقي).

في ملفك الرئيسي، أنشئ حساباً واطبع تأكيداً. قم بإيداع الأموال الأولية واطبع النتيجة. ثم قم بإجراء السحب الناجح واطبع ما إذا كان قد نجح. أخيراً، حاول إجراء السحب الذي يجب أن يفشل (بسبب عدم كفاية الأموال) واطبع تلك النتيجة. قم بتدمير الحساب وتأكيد عملية التنظيف.

اطبع المخرجات بهذا التنسيق:

Account 1001 created
Deposit 500.00: 1
Withdraw 200.00: 1
Withdraw 400.00: 0
Account destroyed

حيث 1001 هو معرف الحساب، و 500.00 هو الإيداع، و 200.00 هو السحب الناجح، و 400.00 هو السحب الفاشل (لأنه يتبقى 300.00 فقط بعد السحب الأول). قم بتنسيق جميع المبالغ بمنزلتين عشريتين باستخدام %.2f.

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

جرّب بنفسك

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double valid_amount;
    scanf("%lf", &valid_amount);
    
    double invalid_amount;
    scanf("%lf", &invalid_amount);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    int result_invalid = deposit(account, invalid_amount);
    printf("Deposit %.2f: %d\n", invalid_amount, result_invalid);
    
    int result_valid = deposit(account, valid_amount);
    printf("Deposit %.2f: %d\n", valid_amount, result_valid);
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

جميع دروس Object Oriented Programming