Menerapkan Diskon
Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 36 dari 65.
Tantangan
MudahBuat program yang melanjutkan proyek kalkulator keranjang belanja dengan menerapkan sistem diskon yang memberikan diskon berdasarkan persentase untuk pesanan yang memenuhi syarat. Berdasarkan perhitungan biaya total dari pelajaran sebelumnya, programmu harus:
- Menggunakan Map katalog produk dan fungsi keranjang belanja yang sudah ada dari pengaturan sebelumnya
- Membaca beberapa input string yang mewakili barang yang ingin ditambahkan pelanggan ke keranjang mereka (input akan berakhir saat kamu menerima
"cart_done") - Untuk setiap barang, memeriksa apakah barang tersebut ada di katalog produk menggunakan
containsKey()dan menambahkan barang yang valid ke keranjang - Menghitung subtotal dengan menjumlahkan harga semua barang di keranjang
- Membaca input string yang mewakili jumlah ambang batas diskon
- Membaca input string yang mewakili persentase diskon yang akan diterapkan
- Menerapkan diskon hanya jika subtotal memenuhi atau melebihi jumlah ambang batas
- Menghitung jumlah diskon dan total akhir setelah diskon diterapkan
- Menampilkan laporan perhitungan diskon dengan format persis seperti yang ditunjukkan di bawah
Contohnya, jika toko memiliki produk "Apple" seharga 1.50, "Banana" seharga 0.80, "Orange" seharga 2.00, "Milk" seharga 3.25, pelanggan ingin menambahkan "Apple", "Orange", "Milk", "Apple", ambang batas diskonnya adalah 5.00, dan persentase diskonnya adalah 10, programmu harus menampilkan:
Shopping Cart Operations:
Adding 'Apple': Item added to cart successfully
Adding 'Orange': Item added to cart successfully
Adding 'Milk': Item added to cart successfully
Adding 'Apple': Item added to cart successfully
Cart Contents: [Apple, Orange, Milk, Apple]
Cost Calculation:
Apple: $1.50
Orange: $2.00
Milk: $3.25
Apple: $1.50
Subtotal: $8.25
Discount Analysis:
Threshold: $5.00
Discount Rate: 10%
Subtotal ($8.25) meets threshold requirement
Discount Applied: $0.83
Final Total: $7.42
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 0
Discount Status: 10% discount applied
Cart Status: Ready for checkoutJika toko memiliki produk "Laptop" seharga 999.99, "Mouse" seharga 25.50, "Keyboard" seharga 75.00, pelanggan ingin menambahkan "Mouse", "Keyboard", ambang batas diskonnya adalah 150.00, dan persentase diskonnya adalah 15, programmu harus menampilkan:
Shopping Cart Operations:
Adding 'Mouse': Item added to cart successfully
Adding 'Keyboard': Item added to cart successfully
Cart Contents: [Mouse, Keyboard]
Cost Calculation:
Mouse: $25.50
Keyboard: $75.00
Subtotal: $100.50
Discount Analysis:
Threshold: $150.00
Discount Rate: 15%
Subtotal ($100.50) does not meet threshold requirement
Discount Applied: $0.00
Final Total: $100.50
Cart Summary:
Total items in cart: 2
Unique products in cart: 2
Items successfully added: 2
Items not found: 0
Discount Status: No discount applied
Cart Status: Ready for checkoutJika toko memiliki produk "Novel" seharga 12.99, "Magazine" seharga 4.50, "Textbook" seharga 89.00, pelanggan ingin menambahkan "Novel", "Textbook", "Magazine", "Novel", ambang batas diskonnya adalah 75.00, dan persentase diskonnya adalah 20, programmu harus menampilkan:
Shopping Cart Operations:
Adding 'Novel': Item added to cart successfully
Adding 'Textbook': Item added to cart successfully
Adding 'Magazine': Item added to cart successfully
Adding 'Novel': Item added to cart successfully
Cart Contents: [Novel, Textbook, Magazine, Novel]
Cost Calculation:
Novel: $12.99
Textbook: $89.00
Magazine: $4.50
Novel: $12.99
Subtotal: $119.48
Discount Analysis:
Threshold: $75.00
Discount Rate: 20%
Subtotal ($119.48) meets threshold requirement
Discount Applied: $23.90
Final Total: $95.58
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 0
Discount Status: 20% discount applied
Cart Status: Ready for checkoutProgrammu harus menghitung subtotal terlebih dahulu, lalu memeriksa apakah subtotal memenuhi atau melebihi ambang batas diskon menggunakan pernyataan percabangan if. Jika ambang batas terpenuhi, hitung jumlah diskon dengan mengalikan subtotal dengan persentase diskon dibagi 100. Kurangi subtotal dengan jumlah diskon untuk mendapatkan total akhir. Format semua nilai uang agar menampilkan tepat 2 angka di belakang koma. Format inputnya adalah: nama barang yang akan ditambahkan ke keranjang, diakhiri dengan "cart_done", lalu jumlah ambang batas diskon dan persentase diskon (keduanya berupa string yang perlu diubah menjadi tipe numerik yang sesuai).
Coba sendiri
import 'dart:io';
void main() {
// Product catalog with prices
Map<String, double> products = {
'Apple': 1.50,
'Banana': 0.80,
'Orange': 2.00,
'Milk': 3.25,
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00,
'Novel': 12.99,
'Magazine': 4.50,
'Textbook': 89.00
};
// Shopping cart list
List<String> cart = [];
// Counters for summary
int itemsAdded = 0;
int itemsNotFound = 0;
print('Shopping Cart Operations:');
// Read items until "cart_done"
String? item;
while ((item = stdin.readLineSync()) != 'cart_done') {
if (item != null) {
if (products.containsKey(item)) {
cart.add(item);
print("Adding '$item': Item added to cart successfully");
itemsAdded++;
} else {
print("Adding '$item': Item not available in store");
itemsNotFound++;
}
}
}
// Display cart contents
print('Cart Contents: $cart');
// Calculate total cost
print('Cost Calculation:');
double totalCost = 0.0;
for (String cartItem in cart) {
double price = products[cartItem]!;
totalCost += price;
print('$cartItem: \$${price.toStringAsFixed(2)}');
}
print('Total Cost: \$${totalCost.toStringAsFixed(2)}');
// Cart summary
Set<String> uniqueProducts = cart.toSet();
print('Cart Summary:');
print('Total items in cart: ${cart.length}');
print('Unique products in cart: ${uniqueProducts.length}');
print('Items successfully added: $itemsAdded');
print('Items not found: $itemsNotFound');
print('Cart Status: Ready for checkout');
}Semua pelajaran di Logika dan Alur
1Manipulasi list Tingkat Lanjut
Properti list: first dan lastStatus list: isEmpty dan isNotEmpMembalikkan listMenambahkan ke list: insertMenghapus dari list: removeWhereMencari dalam list: indexOfMengurutkan listMengacak listRekap: Pengatur list4Manipulasi Map Lanjutan
Melakukan perulangan pada MapMemeriksa kunci dan nilaiProperti Map: kunci dan nilaiPenambahan Bersyarat: putIfAbsentMenghapus Entri dari MapMap BersarangRingkasan: Pembaruan Inventaris2Operasi Fungsional pada list
Mengubah dengan 'map'Menyaring dengan 'where'Menggunakan '.toList()'Memeriksa Kondisi dengan 'any'Kondisi dengan 'every'Menemukan dengan 'firstWhere'Ulasan: Penyaringan Data5Proyek: Perhitungan Keranjang Belanja
Menyiapkan ProyekMenambahkan Barang ke Keranjang3set
Apa itu set?Membuat setMenambahkan dan menghapus elemen dari setMemeriksa elemen dalam setMengubah list menjadi setGabungan setIrisan setSelisih setRangkuman: Daftar tamu unikLatihan sendiri: Compiler Dart online