Menu
CoddyTech

סיכום – מנהל חשבונות בנק

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C++ של Coddy. שיעור 33 מתוך 104.

challenge icon

אתגר

קל

בואו נבנה מנהל חשבונות בנק מלא, שמשלב את כל המושגים שלמדת בפרק הזה בנוגע למאפייני מחלקות: איברים פרטיים עם פונקציות גישה ועדכון, פונקציות איבר const, איברים mutable, משתנים ומתודות סטטיים ופונקציות friend.

תיצור שני קבצים כדי לארגן את הקוד שלך:

  • BankAccount.h: הגדר מחלקה בשם BankAccount שמנהלת נתוני חשבון תוך שימוש בכימוס מתאים. המחלקה שלך צריכה לכלול:
    • איברים פרטיים: accountNumber (מחרוזת), ownerName (מחרוזת), balance (מספר ממשי), וגם mutable int queryCount כדי לעקוב אחר מספר הפעמים שבהן נבדקה היתרה
    • איבר סטטי פרטי totalAccounts כדי לעקוב אחר מספר החשבונות הקיימים
    • בנאי שמקבל את מספר החשבון, שם הבעלים והיתרה ההתחלתית. עליו לאתחל את queryCount ל-0 ולהגדיל את totalAccounts
    • פונקציות גישה const: getAccountNumber(), getOwnerName() ו-getBalance(): פונקציית הגישה ליתרה צריכה להגדיל את queryCount בכל פעם שהיא נקראת
    • פונקציית גישה const בשם getQueryCount() שמחזירה את מספר הפעמים שבהן נבדקה היתרה
    • מתודה deposit(double amount) שמוסיפה ליתרה רק אם הסכום חיובי
    • מתודה withdraw(double amount) שמחסירה מהיתרה רק אם הסכום חיובי ואינו עולה על היתרה הנוכחית
    • מתודה סטטית getTotalAccounts() שמחזירה את המספר הכולל של החשבונות שנוצרו
    • הכרז על פונקציית friend בשם transfer(BankAccount& from, BankAccount& to, double amount) שמעבירה כסף בין חשבונות. עליה לבצע העברה רק אם הסכום חיובי ובחשבון המקור יש מספיק כסף

    הגדר את האיבר הסטטי ואת פונקציית friend אחרי הגדרת המחלקה.

  • 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().

אל תשכח להוסיף guards לכותרת בקובץ הכותרת שלך ולכלול את <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);
    
    // הגדירו את עיצוב הפלט ל-2 ספרות אחרי הנקודה העשרונית
    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>" עבור החשבון הראשון (שימו לב להזחה של 2 רווחים)
    
    // TODO: הדפיסו "  <name>: $<balance>" עבור החשבון השני (שימו לב להזחה של 2 רווחים)
    
    // TODO: הדפס "Query count for <name>: <count>" עבור החשבון הראשון
    
    return 0;
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C++ אונליין