Menu
Coddy logo textTech

Riepilogo - Metodi di pagamento

Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 26 di 57.

challenge icon

Sfida

Medio

Progetta i metodi di pagamento attorno a un'interfaccia.

  • PaymentMethod richiede name, fee(amount), pay(amount) (restituisce se il pagamento è stato effettuato) e status(), e fornisce un total(amount) predefinito: l'importo più la commissione.
  • Card (nome card) applica una commissione del 2% (arrotondata per difetto), paga sempre e tiene il conto dei pagamenti: card: 2 payment(s).
  • Wallet(balance) (nome wallet) non applica commissioni e paga solo se il saldo copre il totale, che viene quindi sottratto: wallet: 50 left.
  • GiftCard(balance) (nome gift card) non applica nemmeno commissioni, ma paga solo importi pari o inferiori a 100 e solo se il saldo li copre: gift card: 40 left.

Completa quindi checkout(amount, methods), che prova ogni PaymentMethod nell'ordine e restituisce paid 100 with wallet (total 100) per il primo che paga, oppure declined se nessuno paga.

Il codice fornito legge i metodi come card,wallet:150,gift:120, poi un importo per riga, stampa il risultato di ogni checkout e infine lo status() di ogni metodo.

Il tuo codice va inserito in PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt e Functions.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

fun main() {
    // Código de entrada/salida proporcionado: mantenlo tal como está
    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())
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Playground Kotlin