Menu
Coddy logo textTech

קבלת היתרה

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

challenge icon

אתגר

קל

חשבון הבנק שלך כמעט מוכן! בנית את היכולת ליצור חשבונות, להפקיד כספים ולמשוך כסף, אבל חסר עוד חלק חשוב אחד. כרגע, לקוד חיצוני אין דרך לראות את היתרה הנוכחית. בואו נפתור את זה באמצעות הוספת פונקציית getter.

getter היא הדרך הנכונה לחשוף נתונים מוסתרים במודול שעבר כימוס. במקום להפוך את שדה היתרה לציבורי (דבר שהיה מפר את הכימוס), מספקים פונקציה לקריאה בלבד שמחזירה את הערך. כך הנתונים נשארים מוגנים, ועדיין מתאפשרת גישה מבוקרת אליהם.

תמשיכו לעבוד עם שלושת הקבצים שלכם:

  • account.h: הוסיפו אבטיפוס של פונקציה חדשה: get_balance. הפונקציה מקבלת const Account * (מכיוון שהיא רק קוראת נתונים ולא משנה אותם) ומחזירה double שמייצג את היתרה הנוכחית. השאירו את כל ההצהרות הקיימות שלכם.
  • account.c: ממשו את הפונקציה get_balance. היא פשוט מחזירה את שדה היתרה המוסתר מהחשבון. שימו לב שהפונקציה יכולה לגשת לנתונים הפנימיים כי היא מוגדרת באותו הקובץ שבו מוגדר ה-struct: קוד חיצוני עדיין לא יכול להציץ פנימה ישירות.
  • main.c: עכשיו סוף סוף תוכלו לראות מה קורה בתוך החשבונות שלכם! צרו חשבון, בצעו כמה פעולות והשתמשו ב-getter החדש שלכם כדי להציג את היתרה בכל שלב.

תקבלו ארבעה קלטים: מזהה החשבון (מספר שלם), סכום הפקדה, סכום משיכה וסכום הפקדה שני.

בקובץ הראשי שלכם, צרו חשבון והדפיסו את היתרה ההתחלתית שלו (אמורה להיות 0.00). הפקידו את הסכום הראשון והדפיסו את היתרה החדשה. משכו את הסכום שצוין והדפיסו שוב את היתרה. לבסוף, בצעו את ההפקדה השנייה והדפיסו את היתרה הסופית. לאחר מכן השמידו את החשבון.

הדפיסו את הפלט בפורמט הזה:

Account 1001 created
Balance: 0.00
Balance: 500.00
Balance: 200.00
Balance: 350.00
Account destroyed

כאשר 1001 הוא מזהה החשבון, והיתרות משקפות: התחלתית (0.00), לאחר הפקדת 500.00, לאחר משיכת 300.00 ולאחר הפקדה נוספת של 150.00. עצבו את כל ערכי היתרה עם שתי ספרות אחרי הנקודה העשרונית באמצעות %.2f.

כעת, עם ה-getter הזה, מודול חשבון הבנק שלכם מספק גישה מלאה ומבוקרת לנתוני החשבון: המשתמשים יכולים לראות את היתרה, אך יכולים לשנות אותה רק באמצעות פונקציות ההפקדה והמשיכה המאומתות שלכם.

נסו בעצמכם

#include <stdio.h>
#include "account.h"

int main() {
    int account_id;
    scanf("%d", &account_id);
    
    double deposit1;
    scanf("%lf", &deposit1);
    
    double withdraw_amount;
    scanf("%lf", &withdraw_amount);
    
    double deposit2;
    scanf("%lf", &deposit2);
    
    Account* account = create_account(account_id);
    printf("Account %d created\n", account_id);
    
    // TODO: הדפס את היתרה ההתחלתית באמצעות get_balance
    
    deposit(account, deposit1);
    // TODO: הדפס את היתרה לאחר ההפקדה הראשונה
    
    withdraw(account, withdraw_amount);
    // TODO: הדפס את היתרה לאחר המשיכה
    
    deposit(account, deposit2);
    // TODO: הדפס את היתרה לאחר ההפקדה השנייה
    
    destroy_account(account);
    printf("Account destroyed\n");
    
    return 0;
}

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

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