Menu
Coddy logo textTech

מערכת בנקאית

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 108 מתוך 110.

challenge icon

אתגר

קל

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

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

  • transaction.dart: צור מחלקה Transaction שמייצגת רשומה בלתי ניתנת לשינוי של פעולה פיננסית. לכל עסקה יש שדות final עבור type (String - "deposit", "withdrawal", או "transfer"), amount (double) ו-timestamp (DateTime). דרוס את toString() כך שתחזיר [type] $amount.
  • account.dart: צור מחלקה מופשטת Account עם _balance פרטי (double), מספר חשבון final (accountNumber - String), ו-List<Transaction> לאחסון היסטוריית העסקאות. כלול getter עבור היתרה, setter מוגן set balance(double value) כדי שמחלקות יורשות בקבצים אחרים יוכלו לעדכן את היתרה, מתודה מופשטת bool canWithdraw(double amount) שעל המחלקות היורשות לממש, ואת המתודות הממשיות הבאות:
    • deposit(double amount) - מוסיפה ליתרה, רושמת עסקה ומדפיסה Deposited $amount. Balance: $balance
    • withdraw(double amount) - אם canWithdraw() מחזירה true, מפחיתה מהיתרה, רושמת עסקה ומדפיסה Withdrew $amount. Balance: $balance. אחרת מדפיסה Withdrawal denied.
    • getTransactionCount() - מחזירה את מספר העסקאות
  • savings_account.dart: צור SavingsAccount שיורשת מ-Account. לחשבונות חיסכון יש מגבלת משיכה — אי אפשר למשוך יותר מ-$500 בעסקה אחת. ממש את canWithdraw() כדי לאכוף את הכלל הזה (וודא גם שיש יתרה מספקת). הוסף מתודה applyInterest(double rate) שמגדילה את היתרה בשיעור האחוז הנתון באמצעות ה-getter וה-setter של balance, ואז מדפיסה Interest applied. Balance: $balance.
  • checking_account.dart: צור CheckingAccount שיורשת מ-Account. לחשבונות עו"ש יש הגנת משיכת יתר של עד $100 — הם יכולים להיכנס ליתרה שלילית, אך לא לרדת מתחת ל--$100. ממש את canWithdraw() כך שתאפשר משיכות כל עוד היתרה לאחר המשיכה נשארת לפחות -$100.
  • customer.dart: צור מחלקה Customer עם id (String), name (String) ו-List<Account> עבור החשבונות של הלקוח. כלול את המתודות addAccount(Account account) להוספת חשבון, ו-getTotalBalance() שמחזירה את סכום היתרות של כל החשבונות. דרוס את toString() כך שתחזיר Customer: name (X accounts).
  • main.dart: הצג את מערכת הבנקאות שלך. צור לקוח (C001, John Smith). צור SavingsAccount (SAV001, יתרת פתיחה של $1000) ו-CheckingAccount (CHK001, יתרת פתיחה של $500). הוסף את שני החשבונות ללקוח והדפס את הלקוח. לאחר מכן בצע את הפעולות הבאות:
    1. הפקד $200 לחשבון החיסכון
    2. משוך $300 מחשבון החיסכון (אמור להצליח)
    3. נסה למשוך $600 מחשבון החיסכון (אמור להידחות — חורג מהמגבלה)
    4. החל ריבית של 5% על חשבון החיסכון
    5. משוך $550 מחשבון העו"ש (אמור להצליח באמצעות משיכת יתר)
    6. נסה למשוך עוד $100 מחשבון העו"ש (אמור להידחות — יחרוג ממגבלת משיכת היתר)
    לבסוף, הדפס Savings transactions: X ו-Total balance: $Y (בפורמט של 2 ספרות אחרי הנקודה העשרונית).

פלט צפוי:

Customer: John Smith (2 accounts)
Deposited $200.0. Balance: $1200.0
Withdrew $300.0. Balance: $900.0
Withdrawal denied
Interest applied. Balance: $945.0
Withdrew $550.0. Balance: $-50.0
Withdrawal denied
Savings transactions: 3
Total balance: $895.00

נסו בעצמכם

import 'transaction.dart';
import 'account.dart';
import 'savings_account.dart';
import 'checking_account.dart';
import 'customer.dart';

void main() {
  // TODO: צרו לקוח עם id "C001" ושם "John Smith"
  
  // TODO: צרו SavingsAccount עם accountNumber "SAV001" ויתרה התחלתית של $1000
  
  // TODO: צרו CheckingAccount עם accountNumber "CHK001" ויתרה התחלתית של $500
  
  // TODO: הוסיפו את שני החשבונות ללקוח
  
  // TODO: הדפיסו את הלקוח
  
  // TODO: בצעו את הפעולות הבאות:
  // 1. הפקידו $200 בחשבון החיסכון
  // 2. משכו $300 מחשבון החיסכון (הפעולה אמורה להצליח)
  // 3. נסו למשוך $600 מחשבון החיסכון (הפעולה אמורה להידחות - חורגת מהמגבלה)
  // 4. החילו ריבית של 5% על חשבון החיסכון
  // 5. משכו $550 מחשבון העו״ש (הפעולה אמורה להצליח באמצעות משיכת יתר)
  // 6. נסו למשוך עוד $100 מחשבון העו״ש (הפעולה אמורה להידחות - היא תחרוג ממסגרת משיכת היתר)
  
  // TODO: הדפס "Savings transactions: X" כאשר X הוא מספר העסקאות
  
  // TODO: הדפס "Total balance: \$Y" כאשר Y מעוצב עם 2 ספרות אחרי הנקודה העשרונית
}

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

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