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 dê continuidade ao projeto de calculadora de carrinho de compras, implementando um sistema de descontos que aplique descontos percentuais a pedidos qualificados. Com base no cálculo do custo total da lição anterior, seu programa deve:
- Usar o Map de catálogo de produtos existente e a funcionalidade de carrinho de compras da configuração anterior
- Ler várias entradas de texto representando os itens que os clientes desejam adicionar ao carrinho (a entrada terminará quando você receber
"cart_done") - Para cada item, verificar se ele existe no catálogo de produtos usando
containsKey()e adicionar os itens válidos ao carrinho - Calcular o subtotal somando todos os preços dos itens no carrinho
- Ler uma entrada de texto representando o valor limite do desconto
- Ler uma entrada de texto representando a porcentagem de desconto a ser aplicada
- Aplicar o desconto somente se o subtotal atingir ou exceder o valor limite
- Calcular o valor do desconto e o total final após aplicar o desconto
- Exibir o relatório do cálculo do desconto no formato exato mostrado abaixo
Por exemplo, se a loja tiver os produtos "Apple" por 1.50, "Banana" por 0.80, "Orange" por 2.00, "Milk" por 3.25, os clientes quiserem adicionar "Apple", "Orange", "Milk", "Apple", o limite do desconto for 5.00 e a porcentagem de desconto for 10, seu programa deverá produzir:
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 tiver os produtos "Laptop" por 999.99, "Mouse" por 25.50, "Keyboard" por 75.00, os clientes quiserem adicionar "Mouse", "Keyboard", o limite do desconto for 150.00 e a porcentagem de desconto for 15, seu programa deverá produzir:
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 tiver os produtos "Novel" por 12.99, "Magazine" por 4.50, "Textbook" por 89.00, os clientes quiserem adicionar "Novel", "Textbook", "Magazine", "Novel", o limite do desconto for 75.00 e a porcentagem de desconto for 20, seu programa deverá produzir:
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 primeiro o subtotal e, em seguida, verificar se ele atinge ou excede o limite do 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 da entrada será: nomes dos itens a serem adicionados ao carrinho, terminando com "cart_done", seguidos pelo valor limite do desconto e pela porcentagem de desconto (ambos como textos que precisam ser convertidos 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 ÚnicosPratique por conta própria: Compilador de Dart online