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

مراجعة - مدير الحساب البنكي

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

challenge icon

التحدي

سهل

لنبنِ مديرًا كاملًا للحسابات المصرفية يجمع كل مفاهيم خصائص class التي تعلمتها في هذا الفصل: الأعضاء private مع getters وsetters، ودوال الأعضاء const، والأعضاء mutable، والمتغيرات والأساليب static، والدوال friend.

ستُنشئ ملفين لتنظيم الشيفرة:

  • BankAccount.h: عرّف class باسم BankAccount يدير بيانات الحساب مع التغليف المناسب. ينبغي أن يتضمن class ما يلي:
    • أعضاء private: accountNumber (سلسلة نصية)، ownerName (سلسلة نصية)، balance (عدد عشري)، وmutable int queryCount لتتبع عدد مرات التحقق من الرصيد
    • عضو static خاص هو totalAccounts لتتبع عدد الحسابات الموجودة
    • constructor يأخذ رقم الحساب واسم المالك والرصيد الابتدائي. ينبغي أن يهيّئ queryCount إلى 0 ويزيد totalAccounts
    • دوال getters من النوع const: getAccountNumber() وgetOwnerName() وgetBalance(): ينبغي أن يزيد getter الخاص بالرصيد queryCount في كل مرة يتم استدعاؤه فيها
    • دالة getter من النوع const هي getQueryCount() تُعيد عدد مرات التحقق من الرصيد
    • دالة deposit(double amount) تضيف إلى الرصيد فقط إذا كانت القيمة موجبة
    • دالة withdraw(double amount) تطرح من الرصيد فقط إذا كانت القيمة موجبة ولا تتجاوز الرصيد الحالي
    • دالة static هي getTotalAccounts() تُعيد العدد الإجمالي للحسابات التي أُنشئت
    • Declare دالة friend هي transfer(BankAccount& from, BankAccount& to, double amount) تنقل الأموال بين الحسابات. ينبغي ألا تُجري النقل إلا إذا كانت القيمة موجبة وكان لدى المصدر funds كافية

    عرّف العضو static والدالة friend بعد تعريف class.

  • main.cpp: اعرض عمل جميع هذه الميزات معًا. اقرأ اسمَي مالكين ورصيدين ابتدائيين من الإدخال (أربعة أسطر إجمالًا: name1 وbalance1 وname2 وbalance2)، ثم:
    • أنشئ كائنين من BankAccount بأرقامَي الحساب "ACC001" و"ACC002"
    • اطبع "Total accounts: <count>"
    • اطبع "<name>: $<balance>" للحساب الأول
    • اطبع "<name>: $<balance>" للحساب الثاني
    • أودع 500.0 في الحساب الأول
    • اطبع "After deposit - <name>: $<balance>" للحساب الأول
    • حوّل 300.0 من الحساب الأول إلى الحساب الثاني باستخدام الدالة friend
    • اطبع "After transfer:"
    • اطبع " <name>: $<balance>" للحساب الأول
    • اطبع " <name>: $<balance>" للحساب الثاني
    • اطبع "Query count for <name>: <count>" للحساب الأول

نسّق جميع قيم الرصيد باستخدام منزلتين عشريتين عبر std::fixed وstd::setprecision(2) من <iomanip>. حوّل مدخلات الرصيد من سلاسل نصية إلى أعداد عشرية باستخدام std::stod().

لا تنسَ حواجز التضمين في ملف الترويسة، وأن تضمّن <string> و<iostream> حيثما يلزم.

جرّب بنفسك

#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"

int main() {
    // قراءة المدخلات
    std::string name1, name2;
    std::string balance1Str, balance2Str;
    
    std::getline(std::cin, name1);
    std::getline(std::cin, balance1Str);
    std::getline(std::cin, name2);
    std::getline(std::cin, balance2Str);
    
    double balance1 = std::stod(balance1Str);
    double balance2 = std::stod(balance2Str);
    
    // تعيين تنسيق الإخراج لمنزلتين عشريتين
    std::cout << std::fixed << std::setprecision(2);
    
    // TODO: أنشئ كائنين من BankAccount بأرقام الحسابات "ACC001" و "ACC002"
    
    // TODO: Print "Total accounts: <count>"
    
    // TODO: اطبع "<name>: $<balance>" للحساب الأول
    
    // TODO: اطبع "<name>: $<balance>" للحساب الثاني
    
    // TODO: أودع 500.0 في الحساب الأول
    
    // TODO: Print "After deposit - <name>: $<balance>" for the first account
    
    // TODO: حوّل 300.0 من الحساب الأول إلى الثاني باستخدام friend function
    
    // TODO: Print "After transfer:"
    
    // TODO: اطبع "  <name>: $<balance>" للحساب الأول (لاحظ المسافة البادئة بمسافتين)
    
    // TODO: اطبع "  <name>: $<balance>" للحساب الثاني (لاحظ المسافة البادئة بمسافتين)
    
    // TODO: Print "Query count for <name>: <count>" for the first account
    
    return 0;
}

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

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