Menu
Coddy logo textTech

Rückblick – Zahlungsmethoden

Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 26 von 57.

challenge icon

Aufgabe

Mittel

Entwirf Zahlungsmethoden rund um ein Interface.

  • PaymentMethod erfordert name, fee(amount), pay(amount) (gibt zurück, ob die Zahlung erfolgreich war) und status() und stellt ein Standard-total(amount) bereit: den Betrag plus die Gebühr.
  • Card (Name card) berechnet eine Gebühr von 2 % (abgerundet), zahlt immer und zählt seine Zahlungen: card: 2 payment(s).
  • Wallet(balance) (Name wallet) hat keine Gebühr und zahlt nur, wenn das Guthaben den Gesamtbetrag abdeckt, den es anschließend abzieht: wallet: 50 left.
  • GiftCard(balance) (Name gift card) hat ebenfalls keine Gebühr, zahlt aber nur Beträge von höchstens 100 und nur, wenn das Guthaben diese abdeckt: gift card: 40 left.

Vervollständige anschließend checkout(amount, methods). Die Funktion probiert jedes PaymentMethod der Reihe nach aus und gibt für das erste, das zahlt, paid 100 with wallet (total 100) zurück oder declined, wenn keines zahlt.

Der bereitgestellte Code liest die Methoden als card,wallet:150,gift:120 ein, anschließend einen Betrag pro Zeile, gibt das Ergebnis jedes Zahlungsvorgangs aus und schließlich den status() jeder Methode.

Dein Code gehört in PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt und Functions.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

fun main() {
    // Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
    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())
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Kotlin-Playground