Menu
CoddyTech

Ulasan: Metode Pembayaran

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 26 dari 57.

challenge icon

Tantangan

Sedang

Rancang payment method dengan antarmuka.

  • PaymentMethod mewajibkan name, fee(amount), pay(amount) (mengembalikan apakah pembayaran berhasil) dan status(), serta memberikan total(amount) default: jumlah ditambah biaya.
  • Card (name card) mengenakan biaya 2% (dibulatkan ke bawah), selalu membayar dan menghitung jumlah pembayarannya: card: 2 payment(s).
  • Wallet(balance) (name wallet) tidak mengenakan biaya dan hanya membayar jika saldo mencukupi total, yang kemudian dikurangkan dari saldo: wallet: 50 left.
  • GiftCard(balance) (name gift card) juga tidak mengenakan biaya, tetapi hanya membayar jumlah paling banyak 100, dan hanya jika saldo mencukupi: gift card: 40 left.

Lalu lengkapi checkout(amount, methods), yang mencoba setiap PaymentMethod secara berurutan dan mengembalikan paid 100 with wallet (total 100) untuk metode pertama yang berhasil membayar, atau declined jika tidak ada yang berhasil.

Kode yang disediakan membaca metode seperti card,wallet:150,gift:120, lalu membaca satu jumlah pada setiap baris, mencetak hasil setiap checkout, dan terakhir mencetak status() setiap metode.

Tulis kodemu di PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt dan Functions.kt. Main.kt berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

fun main() {
    // Kode input/output yang disediakan: biarkan apa adanya
    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())
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Kotlin