Menu
Coddy logo textTech

Aplicando um Desconto

Parte da seção Lógica & Fluxo do Journey de Dart da Coddy. Lição 36 de 65.

challenge icon

Desafio

Fácil

Crie 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:

  1. Usar o Map de catálogo de produtos existente e a funcionalidade de carrinho de compras da configuração anterior
  2. Ler várias entradas de texto representando os itens que os clientes desejam adicionar ao carrinho (a entrada terminará quando você receber "cart_done")
  3. Para cada item, verificar se ele existe no catálogo de produtos usando containsKey() e adicionar os itens válidos ao carrinho
  4. Calcular o subtotal somando todos os preços dos itens no carrinho
  5. Ler uma entrada de texto representando o valor limite do desconto
  6. Ler uma entrada de texto representando a porcentagem de desconto a ser aplicada
  7. Aplicar o desconto somente se o subtotal atingir ou exceder o valor limite
  8. Calcular o valor do desconto e o total final após aplicar o desconto
  9. 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 checkout

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 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 checkout

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 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 checkout

Seu 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

Pratique por conta própria: Compilador de Dart online