Menu
Coddy logo textTech

סיכום – אמצעי תשלום

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

challenge icon

אתגר

בינוני

תכננו אמצעי תשלום סביב ממשק.

  • 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())
}

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

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