סיכום – אמצעי תשלום
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Kotlin של Coddy. שיעור 26 מתוך 57.
אתגר
בינוניתכננו אמצעי תשלום סביב ממשק.
PaymentMethodדורשname,fee(amount),pay(amount)(מחזירה האם התשלום בוצע) ו־status(), ומספקtotal(amount)כברירת מחדל: הסכום בתוספת העמלה.Card(שםcard) גובה עמלה של 2% (בעיגול כלפי מטה), תמיד מבצע תשלום וסופר את התשלומים שלו:card: 2 payment(s).Wallet(balance)(שםwallet) אינו גובה עמלה ומשלם רק כאשר היתרה מספיקה לכיסוי הסכום הכולל, שאותו הוא מפחית מהיתרה:wallet: 50 left.GiftCard(balance)(שםgift card) גם אינו גובה עמלה, אבל משלם רק סכומים של עד 100, ורק כאשר היתרה מספיקה לכיסויים:gift card: 40 left.
לאחר מכן השלימו את checkout(amount, methods), שמנסה כל PaymentMethod לפי הסדר ומחזירה paid 100 with wallet (total 100) עבור הראשון שמשלם, או declined כשאף אחד מהם אינו משלם.
הקוד שסופק קורא את אמצעי התשלום בתור card,wallet:150,gift:120, ולאחר מכן סכום אחד בכל שורה, מדפיס את התוצאה של כל תשלום, ולבסוף את status() של כל אמצעי תשלום.
כתבו את הקוד שלכם בקבצים PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt ו־Functions.kt. Main.kt מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
fun main() {
// קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
val input = generateSequence(::readLine).toList()
val methods = input[0].split(",").map { spec ->
val p = spec.split(":")
when (p[0]) {
"card" -> Card()
"wallet" -> Wallet(p[1].toInt())
else -> GiftCard(p[1].toInt())
}
}
for (line in input.drop(1)) println(checkout(line.toInt(), methods))
for (m in methods) println(m.status())
}
כל השיעורים ביחידה תכנות מונחה עצמים
1מחלקות ואובייקטים
עבודה עם קבציםהגדרת מחלקותבנאים ראשייםבלוקי init ואימות נתוניםבנאים משנייםסיכום – כרטיס ספרייהתרגלו בעצמכם: Kotlin אונליין