Menu
CoddyTech

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

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

challenge icon

التحدي

سهل

لننشئ مدير حسابات مصرفية متكاملًا يجمع كل مفاهيم خصائص الأصناف التي تعلمتها في هذا الفصل: الأعضاء الخاصة مع دوال الوصول والتعيين، ودوال الأعضاء الثابتة، والأعضاء القابلة للتغيير، والمتغيرات والدوال الساكنة، ودوال الصداقة.

ستنشئ ملفين لتنظيم شفرتك:

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

    عرّف العضو الساكن ودالة الصداقة بعد تعريف الصنف.

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

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

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