Menu
Coddy logo textTech

Récapitulatif - Méthodes de paiement

Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 26 sur 57.

challenge icon

Défi

Moyen

Conçois les méthodes de paiement autour d'une interface.

  • PaymentMethod exige name, fee(amount), pay(amount) (indique si le paiement a été effectué) et status(), et fournit un total(amount) par défaut : le montant augmenté des frais.
  • Card (nom card) facture des frais de 2 % (arrondis à l'entier inférieur), paie toujours et compte ses paiements : card: 2 payment(s).
  • Wallet(balance) (nom wallet) n'a aucuns frais et paie uniquement lorsque le solde couvre le total, qu'il soustrait ensuite : wallet: 50 left.
  • GiftCard(balance) (nom gift card) n'a pas non plus de frais, mais ne paie que les montants inférieurs ou égaux à 100, et uniquement lorsque le solde les couvre : gift card: 40 left.

Complète ensuite checkout(amount, methods), qui essaie chaque PaymentMethod dans l'ordre et renvoie paid 100 with wallet (total 100) pour le premier qui paie, ou declined lorsqu'aucun ne paie.

Le code fourni lit les méthodes sous la forme card,wallet:150,gift:120, puis un montant par ligne, affiche le résultat de chaque paiement et enfin le status() de chaque méthode.

Ton code doit se trouver dans PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt et Functions.kt. Main.kt contient le code fourni pour les entrées et sorties et ne peut pas être modifié.

Essayez vous-même

fun main() {
    // Code d'entrée/sortie fourni : le laisser tel quel
    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())
}

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Playground Kotlin