Menu
Coddy logo textTech

Powtórzenie – metody płatności

Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 26 z 57.

challenge icon

Wyzwanie

Średni

Projektuj metody płatności w oparciu o interfejs.

  • PaymentMethod wymaga name, fee(amount), pay(amount) (zwraca informację, czy płatność się powiodła) i status(), a także udostępnia domyślną metodę total(amount): kwotę powiększoną o opłatę.
  • Card (nazwa card) pobiera opłatę w wysokości 2% (zaokrągloną w dół), zawsze przyjmuje płatność i zlicza płatności: card: 2 payment(s).
  • Wallet(balance) (nazwa wallet) nie pobiera opłaty i przyjmuje płatność tylko wtedy, gdy saldo pokrywa całą kwotę wraz z opłatą; następnie ją odejmuje: wallet: 50 left.
  • GiftCard(balance) (nazwa gift card) również nie pobiera opłaty, ale przyjmuje płatność tylko w przypadku kwot nieprzekraczających 100 i tylko wtedy, gdy saldo je pokrywa: gift card: 40 left.

Następnie uzupełnij checkout(amount, methods), która próbuje użyć kolejno każdej metody PaymentMethod i zwraca paid 100 with wallet (total 100) dla pierwszej metody, która przyjmie płatność, lub declined, jeśli żadna jej nie przyjmie.

Dostarczony kod odczytuje metody w postaci card,wallet:150,gift:120, a następnie jedną kwotę w każdym wierszu, wyświetla wynik każdej płatności i na końcu status status() każdej metody.

Twój kod umieść w plikach PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt i Functions.kt. Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

fun main() {
    // Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
    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())
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Edytor online Kotlin