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

الحصول على الرصيد

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

challenge icon

التحدي

سهل

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

تُعد دالة getter الطريقة الصحيحة لإتاحة الوصول إلى البيانات المخفية في وحدة مغلّفة. بدلًا من جعل حقل balance عامًا (مما سيكسر التغليف)، فإنك توفر دالة للقراءة فقط تُرجع القيمة. ويحافظ ذلك على حماية البيانات، مع السماح بالوصول المنضبط إليها.

ستواصل العمل باستخدام ملفاتك الثلاثة:

  • account.h: أضف تصريح دالة جديدًا: get_balance. تأخذ هذه الدالة const Account * (لأنها تقرأ البيانات فقط ولا تعدّلها مطلقًا) وتُرجع قيمة من النوع double تمثل الرصيد الحالي. احتفظ بجميع تصريحاتك الحالية.
  • account.c: نفّذ دالة get_balance. فهي تُرجع ببساطة حقل balance المخفي من account. لاحظ كيف يمكن لهذه الدالة الوصول إلى البيانات الداخلية لأنها معرّفة في الملف نفسه الذي يحتوي على struct: لا يزال بإمكان التعليمات البرمجية الخارجية عدم الاطلاع عليها مباشرة.
  • main.c: يمكنك الآن أخيرًا رؤية ما يحدث داخل حساباتك! أنشئ account، ونفّذ بعض المعاملات، واستخدم getter الجديد لعرض الرصيد في كل خطوة.

ستتلقى أربع قيم إدخال: معرّف account (عدد صحيح)، ومبلغ الإيداع، ومبلغ السحب، ومبلغ الإيداع الثاني.

في ملفك الرئيسي، أنشئ account واطبع رصيده الأولي (يجب أن يكون 0.00). أودع المبلغ الأول واطبع الرصيد الجديد. اسحب المبلغ المحدد واطبع الرصيد مرة أخرى. وأخيرًا، نفّذ الإيداع الثاني واطبع الرصيد النهائي. ثم دمّر account.

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

Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyed

حيث إن 1001 هو معرّف account، وتعكس الأرصدة ما يلي: الرصيد الأولي (0.00)، بعد إيداع 500.00، بعد سحب 300.00، وبعد إيداع 150.00 إضافية. نسّق جميع قيم الرصيد باستخدام منزلتين عشريتين بواسطة %.2f.

بعد إضافة getter، توفر وحدة حسابك المصرفي الآن وصولًا كاملًا ومنضبطًا إلى بيانات account: يمكن للمستخدمين رؤية الرصيد، لكن لا يمكنهم تعديله إلا من خلال دالتي deposit وwithdraw اللتين تتحققان من صحة العمليات.

جرّب بنفسك

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

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double deposit1;
    scanf("%lf", &deposit1);
    
    double withdraw_amount;
    scanf("%lf", &withdraw_amount);
    
    double deposit2;
    scanf("%lf", &deposit2);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    // TODO: اطبع الرصيد الأولي باستخدام get_balance
    
    deposit(account, deposit1);
    // TODO: اطبع الرصيد بعد الإيداع الأول
    
    withdraw(account, withdraw_amount);
    // TODO: اطبع الرصيد بعد السحب
    
    deposit(account, deposit2);
    // TODO: اطبع الرصيد بعد الإيداع الثاني
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

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

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