Menu
Coddy logo textTech

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

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

challenge icon

אתגר

קל

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

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

  • BankAccount.h: הגדירו מחלקה BankAccount שמנהלת נתוני חשבון באמצעות כימוס מתאים. המחלקה שלכם צריכה לכלול:
    • איברים פרטיים: accountNumber (מחרוזת), ownerName (מחרוזת), balance (מספר double), ו-mutable int queryCount כדי לעקוב אחר מספר הפעמים שבהן נבדקה היתרה
    • איבר סטטי פרטי totalAccounts כדי לעקוב אחר מספר החשבונות הקיימים
    • בנאי שמקבל את מספר החשבון, את שם הבעלים ואת היתרה ההתחלתית. עליו לאתחל את queryCount ל-0 ולהגדיל את totalAccounts
    • פונקציות getter מסוג const: getAccountNumber(), getOwnerName() ו-getBalance(): פונקציית ה-getter של היתרה צריכה להגדיל את queryCount בכל פעם שקוראים לה
    • פונקציית getter מסוג 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>. המירו את קלטי היתרה ממחרוזות למספרי double באמצעות 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++ אונליין