Aplicando um Desconto
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 36 de 65.
Desafio
FácilCrie um programa que continue o projeto da calculadora de carrinho de compras, implementando um sistema de desconto que aplica descontos baseados em porcentagem a pedidos qualificados. Com base no cálculo do custo total da lição anterior, seu programa deve:
- Usar o
Mapdo catálogo de produtos existente e a funcionalidade do carrinho de compras da configuração anterior - Ler várias entradas de string representando itens que os clientes desejam adicionar ao carrinho (a entrada terminará quando você receber
"cart_done") - Para cada item, verifique se ele existe no catálogo de produtos usando
containsKey()e adicione itens válidos ao carrinho - Calcular o subtotal somando todos os preços dos itens no carrinho
- Ler uma entrada de string representando o valor do limite de desconto
- Ler uma entrada de string representando a porcentagem de desconto a ser aplicada
- Aplicar o desconto apenas se o subtotal atingir ou exceder o valor do limite
- Calcular o valor do desconto e o total final após a aplicação do desconto
- Exibir o relatório de cálculo de desconto no formato exato mostrado abaixo
Por exemplo, se a loja tem os produtos "Apple" a 1.50, "Banana" a 0.80, "Orange" a 2.00, "Milk" a 3.25, os clientes desejam adicionar "Apple", "Orange", "Milk", "Apple", o limite de desconto é 5.00 e a porcentagem de desconto é 10, seu programa deve exibir:
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 checkoutSe a loja tem os produtos "Laptop" a 999.99, "Mouse" a 25.50, "Keyboard" a 75.00, os clientes desejam adicionar "Mouse", "Keyboard", o limite de desconto é 150.00 e a porcentagem de desconto é 15, seu programa deve exibir:
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 checkoutSe a loja tem os produtos "Novel" a 12.99, "Magazine" a 4.50, "Textbook" a 89.00, os clientes desejam adicionar "Novel", "Textbook", "Magazine", "Novel", o limite de desconto é 75.00 e a porcentagem de desconto é 20, seu programa deve exibir:
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 checkoutSeu programa deve calcular o subtotal primeiro e, em seguida, verificar se ele atinge ou excede o limite de desconto usando uma instrução condicional if. Se o limite for atingido, calcule o valor do desconto multiplicando o subtotal pela porcentagem de desconto dividida por 100. Subtraia o valor do desconto do subtotal para obter o total final. Formate todos os valores monetários para exibir exatamente 2 casas decimais. O formato de entrada será: nomes de itens para adicionar ao carrinho terminando com "cart_done", seguidos pelo valor do limite de desconto e pela porcentagem de desconto (ambos como strings que precisam ser convertidas para os tipos numéricos apropriados).
Experimente você mesmo
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');
}Todas as lições de Lógica & Fluxo
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos