Menu
Coddy logo textTech

Mostrar el recibo final

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 37 de 65.

challenge icon

Desafío

Fácil

Crea un programa que complete el proyecto de la calculadora del carrito de compras generando un recibo final detallado que muestre todos los detalles de la transacción en un formato profesional. Basándote en el sistema de descuentos de la lección anterior, tu programa debe:

  1. Utilizar el Map del catálogo de productos existente y la funcionalidad del carrito de compras de la configuración anterior
  2. Leer múltiples entradas de cadenas que representan los artículos que los clientes desean agregar a su carrito (la entrada terminará cuando recibas "cart_done")
  3. Para cada artículo, verificar si existe en el catálogo de productos usando containsKey() y agregar los artículos válidos al carrito
  4. Calcular el subtotal sumando todos los precios de los artículos en el carrito
  5. Leer una entrada de cadena que represente el monto del umbral de descuento
  6. Leer una entrada de cadena que represente el porcentaje de descuento a aplicar
  7. Aplicar el descuento solo si el subtotal alcanza o supera el monto del umbral
  8. Calcular el monto del descuento y el total final después de aplicar el descuento
  9. Leer una entrada de cadena que represente el nombre del cliente
  10. Leer una entrada de cadena que represente el ID de la transacción
  11. Generar y mostrar un recibo completo con todos los detalles de la transacción en el formato exacto que se muestra a continuación

Por ejemplo, si la tienda tiene los productos "Apple" a 1.50, "Banana" a 0.80, "Orange" a 2.00, "Milk" a 3.25, los clientes quieren agregar "Apple", "Orange", "Milk", "Apple", el umbral de descuento es 5.00, el porcentaje de descuento es 10, el nombre del cliente es "John Smith", y el ID de la transacción es "TXN001", tu programa debería mostrar:

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!
========================================

Si la tienda tiene los productos "Laptop" a 999.99, "Mouse" a 25.50, "Keyboard" a 75.00, los clientes quieren agregar "Mouse", "Keyboard", el umbral de descuento es 150.00, el porcentaje de descuento es 15, el nombre del cliente es "Sarah Johnson", y el ID de la transacción es "TXN002", tu programa debería mostrar:

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!
========================================

Si la tienda tiene los productos "Novel" a 12.99, "Magazine" a 4.50, "Textbook" a 89.00, los clientes quieren agregar "Novel", "Textbook", "Magazine", "Novel", el umbral de descuento es 75.00, el porcentaje de descuento es 20, el nombre del cliente es "Mike Davis", y el ID de la transacción es "TXN003", tu programa debería mostrar:

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!
========================================

Tu programa debe formatear el recibo final con la alineación y el espaciado adecuados. Utiliza la interpolación de cadenas para mostrar todos los detalles de la transacción, incluida la información del cliente, las compras detalladas, los cálculos de precios y las estadísticas resumidas. El recibo debe incluir valores fijos para la fecha (2024-01-15), la hora (14:30:25) y el método de pago (Cash). Formatea todos los valores monetarios para mostrar exactamente 2 decimales. Calcula el recuento de artículos usando la longitud del carrito y los productos únicos convirtiendo el carrito en un Set. El formato de entrada será: nombres de artículos para agregar al carrito terminando con "cart_done", seguidos por el monto del umbral de descuento, el porcentaje de descuento, el nombre del cliente y el ID de la transacción (todos como cadenas).

Pruébalo tú mismo

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 las lecciones de Lógica y Flujo