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 calculadora del carrito de compras generando un recibo final completo que muestre todos los detalles de la transacción en un formato profesional. Basándose en el sistema de descuentos de la lección anterior, tu programa debe:

  1. Usar 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 tipo string que representen los artículos que los clientes quieren añadir a su carrito (la entrada terminará cuando recibas "cart_done")
  3. Para cada artículo, comprobar si existe en el catálogo de productos usando containsKey() y añadir los artículos válidos al carrito
  4. Calcular el subtotal sumando los precios de todos los artículos del carrito
  5. Leer una entrada de tipo string que represente el importe del umbral de descuento
  6. Leer una entrada de tipo string que represente el porcentaje de descuento que se aplicará
  7. Aplicar el descuento solo si el subtotal alcanza o supera el importe del umbral
  8. Calcular el importe del descuento y el total final después de aplicar el descuento
  9. Leer una entrada de tipo string que represente el nombre del cliente
  10. Leer una entrada de tipo string que represente el ID de la transacción
  11. Generar y mostrar un recibo completo con todos los detalles de la transacción exactamente en el formato 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 añadir "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 añadir "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 añadir "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 dar formato al recibo final con la alineación y el espaciado adecuados. Usa la interpolación de strings para mostrar todos los detalles de la transacción, incluida la información del cliente, las compras desglosadas por artículo, 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). Da formato a todos los valores monetarios para mostrar exactamente 2 decimales. Calcula la cantidad 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 que se añadirán al carrito y que terminarán con "cart_done", seguidos del importe del umbral de descuento, el porcentaje de descuento, el nombre del cliente y el ID de la transacción (todos como strings).

FORMATO DE SALIDA REQUERIDO: [Tu contenido traducido aquí]

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

Practica por tu cuenta: Compilador de Dart online