Menu
CoddyTech

Menampilkan Struk Akhir

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 37 dari 65.

challenge icon

Tantangan

Mudah

Buat program yang menyelesaikan proyek kalkulator keranjang belanja dengan menghasilkan struk akhir lengkap yang menampilkan semua detail transaksi dalam format profesional. Dengan mengembangkan sistem diskon dari pelajaran sebelumnya, programmu harus:

  1. Menggunakan Map katalog produk dan fungsionalitas keranjang belanja yang sudah ada dari pengaturan sebelumnya
  2. Membaca beberapa input string yang mewakili barang yang ingin ditambahkan pelanggan ke keranjang mereka (input akan berakhir saat kamu menerima "cart_done")
  3. Untuk setiap barang, memeriksa apakah barang tersebut ada di katalog produk menggunakan containsKey() dan menambahkan barang yang valid ke keranjang
  4. Menghitung subtotal dengan menjumlahkan harga semua barang di keranjang
  5. Membaca input string yang mewakili jumlah ambang diskon
  6. Membaca input string yang mewakili persentase diskon yang akan diterapkan
  7. Menerapkan diskon hanya jika subtotal memenuhi atau melebihi jumlah ambang
  8. Menghitung jumlah diskon dan total akhir setelah diskon diterapkan
  9. Membaca input string yang mewakili nama pelanggan
  10. Membaca input string yang mewakili ID transaksi
  11. Menghasilkan dan menampilkan struk lengkap dengan semua detail transaksi dalam format persis seperti yang ditunjukkan di bawah

Misalnya, 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 diskon adalah 5.00, persentase diskon adalah 10, nama pelanggan adalah "John Smith", dan ID transaksi adalah "TXN001", programmu harus menghasilkan:

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
========================================
           FINAL RECEIPT
========================================
Transaction ID: TXN001
Customer: John Smith
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Apple                           $1.50
Orange                          $2.00
Milk                            $3.25
Apple                           $1.50
----------------------------------------
Subtotal:                       $8.25
Discount (10%):                -$0.83
----------------------------------------
TOTAL:                          $7.42
----------------------------------------
Payment Method: Cash
Items Count: 4
Unique Products: 3
Thank you for shopping with us!
========================================

Jika toko memiliki produk "Laptop" seharga 999.99, "Mouse" seharga 25.50, "Keyboard" seharga 75.00, pelanggan ingin menambahkan "Mouse", "Keyboard", ambang diskon adalah 150.00, persentase diskon adalah 15, nama pelanggan adalah "Sarah Johnson", dan ID transaksi adalah "TXN002", programmu harus menghasilkan:

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
========================================
           FINAL RECEIPT
========================================
Transaction ID: TXN002
Customer: Sarah Johnson
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Mouse                          $25.50
Keyboard                       $75.00
----------------------------------------
Subtotal:                     $100.50
Discount (15%):                $0.00
----------------------------------------
TOTAL:                        $100.50
----------------------------------------
Payment Method: Cash
Items Count: 2
Unique Products: 2
Thank you for shopping with us!
========================================

Jika toko memiliki produk "Novel" seharga 12.99, "Magazine" seharga 4.50, "Textbook" seharga 89.00, pelanggan ingin menambahkan "Novel", "Textbook", "Magazine", "Novel", ambang diskon adalah 75.00, persentase diskon adalah 20, nama pelanggan adalah "Mike Davis", dan ID transaksi adalah "TXN003", programmu harus menghasilkan:

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
========================================
           FINAL RECEIPT
========================================
Transaction ID: TXN003
Customer: Mike Davis
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Novel                          $12.99
Textbook                       $89.00
Magazine                        $4.50
Novel                          $12.99
----------------------------------------
Subtotal:                     $119.48
Discount (20%):               -$23.90
----------------------------------------
TOTAL:                         $95.58
----------------------------------------
Payment Method: Cash
Items Count: 4
Unique Products: 3
Thank you for shopping with us!
========================================

Programmu harus memformat struk akhir dengan perataan dan spasi yang tepat. Gunakan interpolasi string untuk menampilkan semua detail transaksi, termasuk informasi pelanggan, rincian pembelian, perhitungan harga, dan statistik ringkasan. Struk harus mencakup nilai tetap untuk tanggal (2024-01-15), waktu (14:30:25), dan metode pembayaran (Cash). Format semua nilai uang agar menampilkan tepat 2 angka di belakang koma. Hitung jumlah barang menggunakan panjang cart dan produk unik dengan mengonversi cart menjadi Set. Format inputnya adalah: nama barang yang akan ditambahkan ke keranjang hingga diakhiri dengan "cart_done", lalu jumlah ambang diskon, persentase diskon, nama pelanggan, dan ID transaksi (semuanya berupa string).

Coba sendiri

import 'dart:io';

void main() {
  // Product catalog
  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
  };
  
  List<String> cart = [];
  int itemsAdded = 0;
  int itemsNotFound = 0;
  
  print('Shopping Cart Operations:');
  
  // Read items until "cart_done"
  while (true) {
    String? item = stdin.readLineSync();
    if (item == 'cart_done') break;
    
    if (products.containsKey(item)) {
      cart.add(item!);
      print("Adding '$item': Item added to cart successfully");
      itemsAdded++;
    } else {
      print("Adding '$item': Item not found in catalog");
      itemsNotFound++;
    }
  }
  
  print('Cart Contents: $cart');
  
  // Calculate subtotal
  print('Cost Calculation:');
  double subtotal = 0.0;
  for (String item in cart) {
    double price = products[item]!;
    print('$item: \$${price.toStringAsFixed(2)}');
    subtotal += price;
  }
  print('Subtotal: \$${subtotal.toStringAsFixed(2)}');
  
  // Read discount threshold and percentage
  String? thresholdInput = stdin.readLineSync();
  String? discountPercentageInput = stdin.readLineSync();
  
  double threshold = double.parse(thresholdInput!);
  int discountPercentage = int.parse(discountPercentageInput!);
  
  // Discount analysis
  print('Discount Analysis:');
  print('Threshold: \$${threshold.toStringAsFixed(2)}');
  print('Discount Rate: $discountPercentage%');
  
  double discountAmount = 0.0;
  double finalTotal = subtotal;
  String discountStatus = 'No discount applied';
  
  if (subtotal >= threshold) {
    print('Subtotal (\$${subtotal.toStringAsFixed(2)}) meets threshold requirement');
    discountAmount = subtotal * (discountPercentage / 100);
    finalTotal = subtotal - discountAmount;
    discountStatus = '$discountPercentage% discount applied';
  } else {
    print('Subtotal (\$${subtotal.toStringAsFixed(2)}) does not meet threshold requirement');
  }
  
  print('Discount Applied: \$${discountAmount.toStringAsFixed(2)}');
  print('Final Total: \$${finalTotal.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('Discount Status: $discountStatus');
  print('Cart Status: Ready for checkout');
}

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online