Aplicar un descuento
Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 36 de 65.
Desafío
FácilCrea un programa que continúe el proyecto del calculador de carrito de compras implementando un sistema de descuentos que aplique descuentos basados en porcentajes a los pedidos que califiquen. Basándote en el cálculo del costo total de la lección anterior, tu programa debe:
- Utilizar el Map del catálogo de productos existente y la funcionalidad del carrito de compras de la configuración anterior
- 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") - Para cada artículo, verificar si existe en el catálogo de productos usando
containsKey()y agregar los artículos válidos al carrito - Calcular el subtotal sumando todos los precios de los artículos en el carrito
- Leer una entrada de cadena que represente el monto del umbral de descuento
- Leer una entrada de cadena que represente el porcentaje de descuento a aplicar
- Aplicar el descuento solo si el subtotal alcanza o supera el monto del umbral
- Calcular el monto del descuento y el total final después de aplicar el descuento
- Mostrar el informe de cálculo de descuento 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, y el porcentaje de descuento es 10, 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
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 checkoutSi 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, y el porcentaje de descuento es 15, 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
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 checkoutSi 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, y el porcentaje de descuento es 20, 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
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 checkoutTu programa debe calcular primero el subtotal, luego verificar si alcanza o supera el umbral de descuento utilizando una sentencia condicional if. Si se alcanza el umbral, calcula el monto del descuento multiplicando el subtotal por el porcentaje de descuento dividido por 100. Resta el monto del descuento al subtotal para obtener el total final. Formatea todos los valores monetarios para mostrar exactamente 2 decimales. 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 y el porcentaje de descuento (ambos como cadenas que deben convertirse a los tipos numéricos apropiados).
Pruébalo tú mismo
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 las lecciones de Lógica y Flujo
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única