Exibindo o Recibo Final
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy. Lição 37 de 65.
Desafio
FácilCrie um programa que conclua o projeto do calculador de carrinho de compras gerando um recibo final abrangente que exiba todos os detalhes da transação em um formato profissional. Com base no sistema de descontos da lição anterior, seu programa deve:
- Usar o Map de catálogo de produtos existente e a funcionalidade do carrinho de compras da configuração anterior
- Ler várias entradas de string que representem 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 string que represente o valor limite do desconto
- Ler uma entrada de string que represente 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
- Ler uma entrada de string que represente o nome do cliente
- Ler uma entrada de string que represente o ID da transação
- Gerar e exibir um recibo completo com todos os detalhes da transação 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, a porcentagem de desconto for 10, o nome do cliente for "John Smith" e o ID da transação for "TXN001", 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
========================================
FINAL RECEIPT
========================================
Transaction ID: TXN001
Customer: John Smith
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Apple $1.50
Orange $2.00
Milk $3.25
Apple $1.50
----------------------------------------
Subtotal: $8.25
Discount (10%): -$0.83
----------------------------------------
TOTAL: $7.42
----------------------------------------
Payment Method: Cash
Items Count: 4
Unique Products: 3
Thank you for shopping with us!
========================================Se 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, a porcentagem de desconto for 15, o nome do cliente for "Sarah Johnson" e o ID da transação for "TXN002", 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
========================================
FINAL RECEIPT
========================================
Transaction ID: TXN002
Customer: Sarah Johnson
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Mouse $25.50
Keyboard $75.00
----------------------------------------
Subtotal: $100.50
Discount (15%): $0.00
----------------------------------------
TOTAL: $100.50
----------------------------------------
Payment Method: Cash
Items Count: 2
Unique Products: 2
Thank you for shopping with us!
========================================Se 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, a porcentagem de desconto for 20, o nome do cliente for "Mike Davis" e o ID da transação for "TXN003", 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
========================================
FINAL RECEIPT
========================================
Transaction ID: TXN003
Customer: Mike Davis
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Novel $12.99
Textbook $89.00
Magazine $4.50
Novel $12.99
----------------------------------------
Subtotal: $119.48
Discount (20%): -$23.90
----------------------------------------
TOTAL: $95.58
----------------------------------------
Payment Method: Cash
Items Count: 4
Unique Products: 3
Thank you for shopping with us!
========================================Seu programa deve formatar o recibo final com alinhamento e espaçamento adequados. Use interpolação de strings para exibir todos os detalhes da transação, incluindo as informações do cliente, as compras discriminadas, os cálculos de preços e as estatísticas resumidas. O recibo deve incluir valores fixos para a data (2024-01-15), a hora (14:30:25) e o método de pagamento (Cash). Formate todos os valores monetários para mostrar exatamente 2 casas decimais. Calcule a quantidade de itens usando o comprimento do carrinho e os produtos exclusivos convertendo o carrinho em um Set. O formato da entrada será: nomes dos itens a serem adicionados ao carrinho, terminando com "cart_done", seguidos pelo valor limite do desconto, pela porcentagem de desconto, pelo nome do cliente e pelo ID da transação (todos como strings).
Experimente você mesmo
import 'dart:io';
void main() {
// Product catalog
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
};
List<String> cart = [];
int itemsAdded = 0;
int itemsNotFound = 0;
print('Shopping Cart Operations:');
// Read items until "cart_done"
while (true) {
String? item = stdin.readLineSync();
if (item == 'cart_done') break;
if (products.containsKey(item)) {
cart.add(item!);
print("Adding '$item': Item added to cart successfully");
itemsAdded++;
} else {
print("Adding '$item': Item not found in catalog");
itemsNotFound++;
}
}
print('Cart Contents: $cart');
// Calculate subtotal
print('Cost Calculation:');
double subtotal = 0.0;
for (String item in cart) {
double price = products[item]!;
print('$item: \$${price.toStringAsFixed(2)}');
subtotal += price;
}
print('Subtotal: \$${subtotal.toStringAsFixed(2)}');
// Read discount threshold and percentage
String? thresholdInput = stdin.readLineSync();
String? discountPercentageInput = stdin.readLineSync();
double threshold = double.parse(thresholdInput!);
int discountPercentage = int.parse(discountPercentageInput!);
// Discount analysis
print('Discount Analysis:');
print('Threshold: \$${threshold.toStringAsFixed(2)}');
print('Discount Rate: $discountPercentage%');
double discountAmount = 0.0;
double finalTotal = subtotal;
String discountStatus = 'No discount applied';
if (subtotal >= threshold) {
print('Subtotal (\$${subtotal.toStringAsFixed(2)}) meets threshold requirement');
discountAmount = subtotal * (discountPercentage / 100);
finalTotal = subtotal - discountAmount;
discountStatus = '$discountPercentage% discount applied';
} else {
print('Subtotal (\$${subtotal.toStringAsFixed(2)}) does not meet threshold requirement');
}
print('Discount Applied: \$${discountAmount.toStringAsFixed(2)}');
print('Final Total: \$${finalTotal.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('Discount Status: $discountStatus');
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