Menu
Coddy logo textTech

Применение скидки

Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 36 из 65.

challenge icon

Задание

Легко

Создайте программу, которая продолжает проект калькулятора корзины покупок, внедряя систему скидок, применяющую процентные скидки к подходящим заказам. Опираясь на расчет общей стоимости из предыдущего урока, ваша программа должна:

  1. Использовать существующий объект Map с каталогом товаров и функциональность корзины покупок из предыдущей настройки
  2. Считывать несколько строковых вводов, представляющих товары, которые покупатели хотят добавить в свою корзину (ввод закончится, когда вы получите "cart_done")
  3. Для каждого товара проверять его наличие в каталоге товаров с помощью containsKey() и добавлять допустимые товары в корзину
  4. Рассчитать промежуточный итог (subtotal), суммируя цены всех товаров в корзине
  5. Считать строковый ввод, представляющий пороговую сумму для получения скидки
  6. Считать строковый ввод, представляющий процент скидки для применения
  7. Применять скидку только в том случае, если промежуточный итог равен или превышает пороговую сумму
  8. Рассчитать сумму скидки и итоговую сумму после применения скидки
  9. Вывести отчет о расчете скидки в точном формате, показанном ниже

Например, если в магазине есть товары "Apple" по цене 1.50, "Banana" по цене 0.80, "Orange" по цене 2.00, "Milk" по цене 3.25, покупатели хотят добавить "Apple", "Orange", "Milk", "Apple", порог скидки составляет 5.00, а процент скидки — 10, ваша программа должна вывести:

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

Если в магазине есть товары "Laptop" по цене 999.99, "Mouse" по цене 25.50, "Keyboard" по цене 75.00, покупатели хотят добавить "Mouse", "Keyboard", порог скидки составляет 150.00, а процент скидки — 15, ваша программа должна вывести:

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

Если в магазине есть товары "Novel" по цене 12.99, "Magazine" по цене 4.50, "Textbook" по цене 89.00, покупатели хотят добавить "Novel", "Textbook", "Magazine", "Novel", порог скидки составляет 75.00, а процент скидки — 20, ваша программа должна вывести:

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

Ваша программа должна сначала рассчитать промежуточный итог, а затем проверить, соответствует ли он порогу скидки или превышает его, используя условный оператор if. Если порог достигнут, рассчитайте сумму скидки, умножив промежуточный итог на процент скидки, деленный на 100. Вычтите сумму скидки из промежуточного итога, чтобы получить окончательную сумму. Отформатируйте все денежные значения так, чтобы они отображали ровно 2 знака после запятой. Формат ввода будет следующим: названия товаров для добавления в корзину, заканчивающиеся строкой "cart_done", за которыми следуют пороговая сумма скидки и процент скидки (оба значения в виде строк, которые необходимо преобразовать в соответствующие числовые типы).

Попробуйте сами

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

Все уроки раздела Логика и управление потоком