Menu
CoddyTech

Áp dụng giảm giá

Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 36 trên 65.

challenge icon

Thử thách

Dễ

Tạo một chương trình tiếp tục dự án tính tiền giỏ hàng bằng cách triển khai hệ thống giảm giá áp dụng mức giảm theo phần trăm cho các đơn hàng đủ điều kiện. Dựa trên phần tính tổng chi phí ở bài học trước, chương trình của bạn cần:

  1. Sử dụng Map danh mục sản phẩm và chức năng giỏ hàng hiện có từ phần thiết lập trước
  2. Đọc nhiều đầu vào dạng chuỗi, biểu thị các mặt hàng khách muốn thêm vào giỏ hàng (đầu vào sẽ kết thúc khi bạn nhận được "cart_done")
  3. Với mỗi mặt hàng, kiểm tra xem mặt hàng đó có trong danh mục sản phẩm hay không bằng cách dùng containsKey(), rồi thêm các mặt hàng hợp lệ vào giỏ hàng
  4. Tính tổng phụ bằng cách cộng giá của tất cả mặt hàng trong giỏ hàng
  5. Đọc một đầu vào dạng chuỗi, biểu thị mức tiền tối thiểu để được giảm giá
  6. Đọc một đầu vào dạng chuỗi, biểu thị phần trăm giảm giá cần áp dụng
  7. Chỉ áp dụng giảm giá nếu tổng phụ bằng hoặc vượt mức tiền tối thiểu
  8. Tính số tiền được giảm và tổng tiền cuối cùng sau khi áp dụng giảm giá
  9. Hiển thị báo cáo tính giảm giá theo đúng định dạng bên dưới

Ví dụ, nếu cửa hàng có các sản phẩm "Apple" giá 1.50, "Banana" giá 0.80, "Orange" giá 2.00, "Milk" giá 3.25, khách muốn thêm "Apple", "Orange", "Milk", "Apple", mức tiền tối thiểu để được giảm giá là 5.00 và phần trăm giảm giá là 10, chương trình của bạn cần in ra:

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 checkout

Nếu cửa hàng có các sản phẩm "Laptop" giá 999.99, "Mouse" giá 25.50, "Keyboard" giá 75.00, khách muốn thêm "Mouse", "Keyboard", mức tiền tối thiểu để được giảm giá là 150.00 và phần trăm giảm giá là 15, chương trình của bạn cần in ra:

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 checkout

Nếu cửa hàng có các sản phẩm "Novel" giá 12.99, "Magazine" giá 4.50, "Textbook" giá 89.00, khách muốn thêm "Novel", "Textbook", "Magazine", "Novel", mức tiền tối thiểu để được giảm giá là 75.00 và phần trăm giảm giá là 20, chương trình của bạn cần in ra:

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 checkout

Chương trình của bạn cần tính tổng phụ trước, sau đó kiểm tra xem tổng phụ có bằng hoặc vượt mức tiền tối thiểu để được giảm giá hay không bằng câu lệnh điều kiện if. Nếu đạt mức tối thiểu, hãy tính số tiền được giảm bằng cách nhân tổng phụ với phần trăm giảm giá chia cho 100. Lấy tổng phụ trừ đi số tiền được giảm để có tổng tiền cuối cùng. Định dạng tất cả giá trị tiền tệ để hiển thị chính xác 2 chữ số thập phân. Định dạng đầu vào như sau: tên các mặt hàng cần thêm vào giỏ hàng, kết thúc bằng "cart_done", tiếp theo là mức tiền tối thiểu để được giảm giá và phần trăm giảm giá (cả hai đều là chuỗi cần được chuyển đổi sang kiểu số thích hợp).

Tự làm thử

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');
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Dart online