Quick actions

cmd+k|ctrl+k

Navigation

Languages

Tugas 3.1

Snippet info

Language

Kotlin

Visibility

public

Author

adindapuut

Created

2025-03-15T07:33:41.75152Z

Updated

2025-03-15T07:33:41.75152Z

import java.text.DecimalFormat

fun main(args: Array<String>) {
    judul()
    infoketentuan()
    infokatalog()

    var nama: String
    var jumlahBeli: Int
    var kodeBarang: MutableList<Int> = mutableListOf()

    // Memastikan input nama pembeli valid
    print("Nama Pembeli: ")
    nama = readLine() ?: ""

    // Memastikan nama tidak kosong
    while (nama.isEmpty()) {
        println("Nama tidak boleh kosong. Silakan coba lagi.")
        print("Nama Pembeli: ")
        nama = readLine() ?: ""
    }

    // Menginput barang yang dibeli
    var continueShopping = true

    while (continueShopping) {
        print("Jumlah Beli: ")
        val jumlahBeliInput = readLine()

        try {
            val jumlahBeli = jumlahBeliInput?.toInt() ?: throw NumberFormatException()
            if (jumlahBeli > 0) {
                // Memasukkan kode barang ke dalam daftar
                for (i in 0 until jumlahBeli) {
                    while (true) {
                        print("Data Ke-${i + 1} - Pilih Kode [1/2/3]: ")
                        val kodeInput = readLine()?.toIntOrNull()
                        if (kodeInput != null && kodeInput in 1..3) {
                            kodeBarang.add(kodeInput) // Menambah kode barang ke daftar
                            break
                        } else {
                            println("Kode tidak valid, ulangi input!")
                        }
                    }
                }
            } else {
                println("Jumlah beli harus lebih dari 0.")
            }
        } catch (e: NumberFormatException) {
            println("Input jumlah beli tidak valid. Silakan coba lagi.")
        }

        // Tanya apakah user ingin melanjutkan belanja
        print("Apakah Anda ingin menambah barang lagi? (y/n): ")
        val input = readLine()
        if (input?.toLowerCase() != "y") {
            continueShopping = false
        }
    }

    garis(50)
    tampilkanStruk(nama, kodeBarang)
}

// Function Not Return Value (Without Parameter)
fun judul() {
    println("===================================")
    println("           Tugas Kotlin 3.1        ")
    println("===================================")
}

// Function Not Return Value (Without Parameter)
fun infoketentuan() {
    println("Ketentuan:")
    println("1. Harus terdapat Range")
    println("2. Harus terdapat Struktur IF dan When")
    println("3. Harus terdapat Looping While, Do While, For")
    println("4. Harus terdapat Function Not Return Value (With Parameter)")
    println("5. Harus terdapat Function Not Return Value (Without Parameter)")
    println("6. Harus terdapat Function Return Value (With Parameter)")
    println("7. Harus terdapat Function Return Value (Without Parameter)")
    println("8. Harus terdapat Function untuk Format Ribuan")
    garis(50)
}

// Function Not Return Value (Without Parameter)
fun infokatalog() {
    println("| ASICS Official Shop               |")
    println("-------------------------------------")
    println("| Kode | Tipe                        | Harga      |")
    println("-------------------------------------")
    println("| 1    | ASICS Swift FF Standard     | Rp 1.750.000 |")
    println("| 2    | ASICS GEL-GAME 9            | Rp 1.200.000 |")
    println("| 3    | ASICS Upcourt 5 Standard    | Rp 850.000   |")
    garis(50)
}

// Function Not Return Value (With Parameter)
fun garis(panjang: Int) {
    repeat(panjang) { print("-") }
    println()
}

// Function Return Value (With Parameter)
fun getHarga(kode: Int): Int {
    return when (kode) {  // Struktur When
        1 -> 1750000
        2 -> 1200000
        3 -> 850000
        else -> 0
    }
}

// Function Return Value (With Parameter)
fun getNamaBarang(kode: Int): String {
    return when (kode) {  // Struktur When
        1 -> "ASICS Swift FF Standard"
        2 -> "ASICS GEL-GAME 9"
        3 -> "ASICS Upcourt 5 Standard"
        else -> "Tidak Diketahui"
    }
}

// Function Not Return Value (With Parameter)
fun tampilkanStruk(nama: String, kodeBarang: MutableList<Int>) {
    println("Terima kasih $nama telah berbelanja di ASICS Official Shop")
    println("Berikut data belanjaan Anda:")
    garis(50)

    println("| No | Tipe                      | Harga      |")
    println("------------------------------------------------")

    var totalBayar = 0

    // Looping For (Menggunakan "withIndex()")
    for ((index, kode) in kodeBarang.withIndex()) {
        val namaBarang = getNamaBarang(kode) // Function Return Value (With Parameter)
        val harga = getHarga(kode)          // Function Return Value (With Parameter)
        totalBayar += harga
        println("| ${index + 1}  | $namaBarang | Rp ${formatRupiah(harga)} |") // Function untuk Format Ribuan
    }

    garis(50)
    println("Total Bayar: Rp ${formatRupiah(totalBayar)}") // Function untuk Format Ribuan
    println()
    println("Nama  : $nama")
    println("Email : [email protected]")
}

fun formatRupiah(angka: Int): String {
    val formatter = DecimalFormat("#,###")
    return formatter.format(angka)
}
INFO