Application d'une remise
Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 36 sur 65.
Défi
FacileCréez un programme qui poursuit le projet de calculateur de panier d'achat en implémentant un système de remise qui applique des remises basées sur un pourcentage aux commandes éligibles. En vous appuyant sur le calcul du coût total de la leçon précédente, votre programme doit :
- Utiliser la Map du catalogue de produits existante et la fonctionnalité de panier d'achat de la configuration précédente
- Lire plusieurs entrées de chaînes de caractères représentant les articles que les clients souhaitent ajouter à leur panier (l'entrée se terminera lorsque vous recevrez
"cart_done") - Pour chaque article, vérifier s'il existe dans le catalogue de produits en utilisant
containsKey()et ajouter les articles valides au panier - Calculer le sous-total en additionnant tous les prix des articles dans le panier
- Lire une entrée de chaîne de caractères représentant le montant du seuil de remise
- Lire une entrée de chaîne de caractères représentant le pourcentage de remise à appliquer
- Appliquer la remise uniquement si le sous-total atteint ou dépasse le montant du seuil
- Calculer le montant de la remise et le total final après application de la remise
- Afficher le rapport de calcul de la remise dans le format exact indiqué ci-dessous
Par exemple, si le magasin propose les produits "Apple" à 1.50, "Banana" à 0.80, "Orange" à 2.00, "Milk" à 3.25, que les clients souhaitent ajouter "Apple", "Orange", "Milk", "Apple", que le seuil de remise est de 5.00 et que le pourcentage de remise est de 10, votre programme doit afficher :
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 le magasin propose les produits "Laptop" à 999.99, "Mouse" à 25.50, "Keyboard" à 75.00, que les clients souhaitent ajouter "Mouse", "Keyboard", que le seuil de remise est de 150.00 et que le pourcentage de remise est de 15, votre programme doit afficher :
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 le magasin propose les produits "Novel" à 12.99, "Magazine" à 4.50, "Textbook" à 89.00, que les clients souhaitent ajouter "Novel", "Textbook", "Magazine", "Novel", que le seuil de remise est de 75.00 et que le pourcentage de remise est de 20, votre programme doit afficher :
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 checkoutVotre programme doit d'abord calculer le sous-total, puis vérifier s'il atteint ou dépasse le seuil de remise à l'aide d'une instruction conditionnelle if. Si le seuil est atteint, calculez le montant de la remise en multipliant le sous-total par le pourcentage de remise divisé par 100. Soustrayez le montant de la remise du sous-total pour obtenir le total final. Formatez toutes les valeurs monétaires pour afficher exactement 2 décimales. Le format d'entrée sera : les noms des articles à ajouter au panier se terminant par "cart_done", suivis du montant du seuil de remise et du pourcentage de remise (tous deux sous forme de chaînes de caractères devant être converties en types numériques appropriés).
Essayez vous-même
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');
}Toutes les leçons de Logique & Flux
1Manipulation avancée des listes
Propriétés de liste : first & lastÉtat de la liste : isEmpty & isNotEmptyInverser une listeAjouter à une liste : insertSuppression dans une liste : removeWhereRechercher dans une liste : indexOfTrier une listeMélanger une listeRécapitulatif - Organisateur de liste4Manipulation avancée des Maps
Itérer sur une MapVérifier les clés et les valeursPropriétés de Map : keys & valuesAjout conditionnel : putIfAbsentSupprimer des entrées d'une MapMaps imbriquéesRécapitulatif - Mise à jour de l'inventaire2Opérations fonctionnelles sur les listes
Transformer avec 'map'Filtrer avec 'where'Utiliser '.toList()'Vérifier des conditions avec 'any'Conditions avec 'every'Trouver avec 'firstWhere'Récapitulatif - Filtrage de données5Projet : Calcul du panier
Configuration du projetAjout d'articles au panier3Les Ensembles
Qu'est-ce qu'un ensemble ?Créer un ensembleAjouter et supprimer des éléments d'un ensembleVérifier la présence d'éléments dans un ensembleConvertir une liste en ensembleUnion d'ensemblesIntersection d'ensemblesDifférence d'ensemblesRécapitulatif - Liste d'invités uniques