Menu
Coddy logo textTech

העברת כספים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Lua של Coddy. שיעור 24 מתוך 70.

challenge icon

אתגר

קל

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

תוסיף מתודת :transfer(targetAccount, amount) שמעבירה כסף מחשבון אחד לאחר. חשוב מה הפעולה הזאת כוללת בפועל: משיכת כסף מחשבון המקור ולאחריה הפקדה בחשבון היעד. היתרון הוא שאפשר להשתמש מחדש במתודות שכבר יצרת!

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

  • Account.lua: הוסף מתודת :transfer(targetAccount, amount) למחלקה Account שלך. המתודה צריכה לנסות למשוך את הסכום מ-self, ואם המשיכה מצליחה, להפקיד את הסכום הזה ב-targetAccount. אם המשיכה נכשלת (אין מספיק כסף), ההעברה לא אמורה להתבצע. שמור על כל הפונקציונליות הקיימת שלך (בנאי עם מזהה, הפקדה, משיכה, getBalance ו-__tostring).
  • main.lua: צור כמה חשבונות והדגם העברות ביניהם, תוך הצגת השינויים ביתרות של אובייקטים שונים של חשבונות.

תקבל חמישה קלטים:

  1. המזהה של החשבון הראשון
  2. המזהה של החשבון השני
  3. ההפקדה הראשונית לחשבון הראשון
  4. סכום ההעברה הראשונה (מחשבון 1 לחשבון 2)
  5. סכום ההעברה השנייה (מחשבון 1 לחשבון 2)

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

לדוגמה, אם הקלטים הם 101, 102, 500, 200 ו-400, הפלט אמור להיות:

Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200

בחשבון הראשון יש 500 אחרי ההפקדה. ההעברה הראשונה של 200 מצליחה, ומשאירה בחשבון 101 יתרה של 300 ובחשבון 102 יתרה של 200. ההעברה השנייה של 400 נכשלת כי בחשבון 101 יש רק 300, ולכן שתי היתרות נשארות ללא שינוי.

נסו בעצמכם

-- טען את המודול Account באמצעות require
local Account = require('Account')

-- קרא את חמשת ערכי הקלט
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())

-- צור שני חשבונות עם מזהים
local account1 = Account:new(id1)
local account2 = Account:new(id2)

-- הפקד את הסכום ההתחלתי בחשבון הראשון
account1:deposit(initialDeposit)

-- TODO: נסה לבצע העברה ראשונה מ־account1 ל־account2

-- TODO: הדפס את שני החשבונות לאחר ההעברה הראשונה

-- TODO: נסה לבצע העברה שנייה מ־account1 ל־account2

-- TODO: הדפס את שני החשבונות לאחר ההעברה השנייה

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

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