خاتمة المشروع: الحلقة الرئيسية
جزء من قسم Object Oriented Programming في رحلة C على Coddy — الدرس 27 من 61.
التحدي
سهلتهانينا—لقد قمت ببناء مكتبة حساب بنكي كاملة! الآن حان الوقت لتبديل الأدوار. بدلاً من أن تكون منشئ المكتبة، ستصبح مستخدم المكتبة. مهمتك هي كتابة برنامج رئيسي يختبر وحدة Account الخاصة بك.
فكر في الأمر كعميل يدخل إلى بنك ويقوم بسلسلة من المعاملات. ستقوم بإنشاء حساب، وإجراء عمليات إيداع وسحب، والتحقق من الرصيد طوال العملية، وأخيراً إغلاق الحساب عند الانتهاء.
ستعمل مع ثلاثة ملفات:
account.h: ملف الترويسة الكامل الخاص بك مع نوعAccountغير الشفاف وجميع النماذج الأولية للدوال:create_account، وdestroy_account، وdeposit، وwithdraw، وget_balance.account.c: التنفيذ الكامل الخاص بك مع الهيكل المخفي الذي يحتوي علىidوbalance، بالإضافة إلى جميع تنفيذات الدوال التي قمت ببنائها طوال هذا المشروع.main.c: هذا هو المكان الذي ستتألق فيه! اكتب برنامجاً يوضح دورة الحياة الكاملة لحساب بنكي من خلال تسلسل واقعي للمعاملات.
ستتلقى خمسة مدخلات: معرف الحساب (عدد صحيح)، و إيداع أول، و سحب، و إيداع ثانٍ، و محاولة سحب زائد (عملية سحب يجب أن تفشل بسبب عدم كفاية الأموال).
يجب أن يحكي برنامجك الرئيسي قصة حياة هذا الحساب:
- إنشاء الحساب والإعلان عن ذلك
- إظهار رصيد البداية
- إجراء الإيداع الأول وإظهار الرصيد الجديد
- سحب بعض الأموال وإظهار الرصيد المحدث
- إجراء إيداع آخر وإظهار الرصيد
- محاولة سحب تتجاوز الرصيد—يجب أن تفشل هذه العملية
- إظهار الرصيد النهائي (دون تغيير بعد السحب الفاشل)
- إغلاق الحساب
اطبع المخرجات بهذا التنسيق:
Account 2001 created
Balance: 0.00
Deposited 1000.00
Balance: 1000.00
Withdrew 250.00
Balance: 750.00
Deposited 500.00
Balance: 1250.00
Withdrawal failed: insufficient funds
Balance: 1250.00
Account 2001 closedحيث 2001 هو معرف الحساب، والمبالغ تعكس مدخلاتك. قم بتنسيق جميع القيم النقدية بمنزلتين عشريتين باستخدام %.2f. يجب طباعة رسالة فشل السحب عندما تعيد الدالة withdraw القيمة 0.
يوضح هذا الختام كل ما تعلمته عن التغليف (encapsulation)—يتفاعل برنامجك الرئيسي مع Account حصرياً من خلال واجهته العامة، دون لمس البيانات الداخلية المخفية مباشرةً.
جرّب بنفسك
#include <stdio.h>
#include "account.h"
int main() {
// TODO: اقرأ account_id و deposit1 و withdraw_amount و deposit2 و overdraft من المدخلات
// TODO: أنشئ الحساب واطبع "Account <id> created"
// TODO: اطبع رصيد البداية
// TODO: قم بالإيداع الأول، واطبع "Deposited <amount>" والرصيد الجديد
// TODO: اسحب الأموال، واطبع "Withdrew <amount>" والرصيد المحدث
// TODO: قم بالإيداع الثاني، واطبع "Deposited <amount>" والرصيد الجديد
// TODO: حاول إجراء سحب على المكشوف؛ إذا فشل، اطبع "Withdrawal failed: insufficient funds"
// TODO: اطبع الرصيد النهائي
// TODO: اطبع "Account <id> closed" وقم بتدمير الحساب
return 0;
}
جميع دروس Object Oriented Programming
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مشروع: رسّام الأشكال
نظرة عامة على المشروعتنفيذ الدائرة