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 : irsyadpurba.fst@uia.ac.id")
}
fun formatRupiah(angka: Int): String {
val formatter = DecimalFormat("#,###")
return formatter.format(angka)
}