Применение скидки
Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 36 из 65.
Задание
ЛегкоСоздайте программу, которая продолжает проект калькулятора корзины покупок, внедряя систему скидок, применяющую процентные скидки к подходящим заказам. Опираясь на расчет общей стоимости из предыдущего урока, ваша программа должна:
- Использовать существующий объект Map с каталогом товаров и функциональность корзины покупок из предыдущей настройки
- Считывать несколько строковых вводов, представляющих товары, которые покупатели хотят добавить в свою корзину (ввод закончится, когда вы получите
"cart_done") - Для каждого товара проверять его наличие в каталоге товаров с помощью
containsKey()и добавлять допустимые товары в корзину - Рассчитать промежуточный итог (subtotal), суммируя цены всех товаров в корзине
- Считать строковый ввод, представляющий пороговую сумму для получения скидки
- Считать строковый ввод, представляющий процент скидки для применения
- Применять скидку только в том случае, если промежуточный итог равен или превышает пороговую сумму
- Рассчитать сумму скидки и итоговую сумму после применения скидки
- Вывести отчет о расчете скидки в точном формате, показанном ниже
Например, если в магазине есть товары "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');
}Все уроки раздела Логика и управление потоком
1Продвинутая работа со списками
Свойства списка: first и lastСостояние списка: isEmpty и isNotEmptyРазворот спискаДобавление в список: insertУдаление из списка: removeWhereПоиск в списке: indexOfСортировка спискаПеремешивание спискаИтоги — Органайзер списков4Продвинутая работа с Map
Итерация по MapПроверка ключей и значенийСвойства Map: keys и valuesУсловное добавление: putIfAbsentУдаление записей из MapВложенные MapИтоги — Обновление инвентаря2Функциональные операции со списками
Преобразование с помощью 'map'Фильтрация с помощью 'where'Использование '.toList()'Проверка условий с помощью 'any'Условия с 'every'Поиск с помощью 'firstWhere'Повторение — фильтрация данных5Проект: Калькулятор корзины
Настройка проектаДобавление товаров в корзину3Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей