منطق الإيداع
جزء من قسم البرمجة كائنية التوجه في رحلة C على Coddy. الدرس 24 من 61.
التحدي
سهلحان وقت إضافة أول عملية مصرفية حقيقية إلى وحدة Account لديك: إمكانية إيداع الأموال! تحتاج دالة deposit إلى أن تكون ذكية: يجب أن تقبل المبالغ الموجبة فقط، مما يحمي account من المعاملات غير الصالحة.
استنادًا إلى مشروع Bank Account الحالي لديك، ستوسّع الوحدة بإضافة وظيفة الإيداع. يجب أن تتحقق دالة deposit من الإدخال قبل تعديل الرصيد المخفي. هذا هو مبدأ التغليف وهو يعمل على حماية سلامة بياناتك.
ستعمل على ثلاثة ملفات:
account.h: وسّع الترويسة الحالية بإضافة نموذج أولي لدالة جديدة:deposit. يجب أن تأخذ هذه الدالة مؤشرًا إلى Account ومبلغًا من النوعdouble، وأن تُرجع قيمة من النوعint(1 عند النجاح، و0 إذا كان المبلغ غير صالح). احتفظ بتعريفاتك الحالية للدالتينcreate_accountوdestroy_account.account.c: نفّذ دالةdepositإلى جانب الباني ومُدمّر الكائن الحاليين. يجب أن تنجح عملية الإيداع فقط إذا كان المبلغ موجبًا (أكبر من الصفر). إذا كان صالحًا، أضف المبلغ إلى الرصيد المخفي وأرجع 1. وإذا كان المبلغ صفرًا أو سالبًا، فارفضه بإرجاع 0 من دون تغيير الرصيد.main.c: اعرض وظيفة الإيداع من خلال إنشاء حساب وتنفيذ عمليات إيداع متعددة، بعضها صالح وبعضها غير صالح، لإظهار أن عملية التحقق تعمل بشكل صحيح.
ستتلقى ثلاثة مدخلات: معرّف account (عدد صحيح)، ومبلغ إيداع صالح (رقم موجب)، ومبلغ إيداع غير صالح (صفر أو رقم سالب).
في ملفك الرئيسي، أنشئ حسابًا باستخدام المعرّف المُعطى واطبع رسالة تأكيد. ثم حاول إيداع المبلغ غير الصالح أولًا: اطبع ما إذا كانت العملية قد نجحت، ولاحظ أن الرصيد يجب أن يبقى دون تغيير. بعد ذلك، أودِع المبلغ الصالح: اطبع نتيجة النجاح. وأخيرًا، دمّر الحساب وأكّد إتمام التنظيف.
اطبع الناتج بهذا التنسيق:
Account 1001 created
Deposit -50.00: 0
Deposit 200.00: 1
Account destroyedحيث إن 1001 هو معرّف account، و-50.00 هو المبلغ غير الصالح، و200.00 هو المبلغ الصالح. نسّق جميع المبالغ باستخدام منزلتين عشريتين عبر %.2f.
تعمل دالة deposit كحارس بوابة. فهي تضمن أن المعاملات الصالحة فقط يمكنها تعديل الرصيد المخفي للحساب. وعلى الرغم من أنك لا تستطيع رؤية الرصيد بعد (سنضيف دالة getter في درس لاحق)، يمكنك الوثوق بأن عمليات الإيداع غير الصالحة تُرفض بشكل صحيح.
جرّب بنفسك
#include <stdio.h>
#include "account.h"
int main() {
int account_id;
scanf("%d", &account_id);
Account* account = create_account(account_id);
printf("Account %d created\n", account_id);
destroy_account(account);
printf("Account destroyed\n");
return 0;
}
جميع دروس البرمجة كائنية التوجه
1أساسيات البرمجة التركيبية
ملفات الترويسةحواجز التضمينملفات المصدرالدوال الساكنةمراجعة: آلة حاسبة تركيبية4التغليف (Encapsulation)
مفهوم الـ Opaque Pointersتعريف الـ Opaque Structsالـ Getters والـ Settersالتحقق من البيانات في الـ Settersملخص: الصندوق السري2الكائنات والأساليب
الـ Structs ككائناتمؤشر 'Self'صحة استخدام Constالمؤشر مقابل القيمةالأساليب المساعدةملخص: Point Manager5مشروع: حساب بنكي بسيط
إعداد المشروعتنفيذ الحساب3دورة حياة الكائن
نمط المنشئ (Constructor Pattern)نمط الهادم (Destructor Pattern)تهيئة الـ Stackالنسخ العميق (Deep Copy)مراجعة: String Wrapper6الوراثة عبر التركيب
تضمين الـ Structقاعدة العضو الأولالوصول إلى أعضاء الأبعملية الـ Upcastingمراجعة: هرمية الأشكال9مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرةتنفيذ المستطيلاستخدام تعدد الأشكالحاوية الأشكالتدرّب بنفسك: مترجم C عبر الإنترنت