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 de la calculadora del carrito de compras implementando un sistema de descuentos que aplique descuentos basados en porcentajes a los pedidos que cumplan los requisitos. Basándote en el cálculo del costo total de la lección anterior, tu programa debe:
- Usar el Map del catálogo de productos existente y la funcionalidad del carrito de compras de la configuración anterior
- Leer varias entradas de tipo string que representen los artículos que los clientes desean añadir a su carrito (la entrada terminará cuando recibas
"cart_done") - 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 - Calcular el subtotal sumando todos los precios de los artículos del carrito
- Leer una entrada de tipo string que represente el importe del umbral de descuento
- Leer una entrada de tipo string que represente el porcentaje de descuento que se aplicará
- Aplicar el descuento solo si el subtotal alcanza o supera el importe del umbral
- Calcular el importe del descuento y el total final después de aplicar el descuento
- Mostrar el informe del cálculo del descuento exactamente en el formato que se muestra a continuación
Por ejemplo, si la tienda tiene productos "Apple" a 1.50, "Banana" a 0.80, "Orange" a 2.00, "Milk" a 3.25, los clientes desean añadir "Apple", "Orange", "Milk", "Apple", el umbral de descuento es 5.00 y el porcentaje de descuento es 10, tu programa debe 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 productos "Laptop" a 999.99, "Mouse" a 25.50, "Keyboard" a 75.00, los clientes desean añadir "Mouse", "Keyboard", el umbral de descuento es 150.00 y el porcentaje de descuento es 15, tu programa debe 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 productos "Novel" a 12.99, "Magazine" a 4.50, "Textbook" a 89.00, los clientes desean añadir "Novel", "Textbook", "Magazine", "Novel", el umbral de descuento es 75.00 y el porcentaje de descuento es 20, tu programa debe 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 y después comprobar si alcanza o supera el umbral de descuento mediante una instrucción condicional if. Si se alcanza el umbral, calcula el importe del descuento multiplicando el subtotal por el porcentaje de descuento dividido entre 100. Resta el importe del descuento del subtotal para obtener el total final. Da formato a todos los valores monetarios para mostrar exactamente 2 posiciones decimales. El formato de entrada será: nombres de artículos que se añadirán al carrito, terminando con "cart_done", seguidos del importe del umbral de descuento y el porcentaje de descuento (ambos como strings que deben convertirse a los tipos numéricos adecuados).
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 únicaPractica por tu cuenta: Compilador de Dart online