Affichage du reçu final
Fait partie de la section Logique & Flux du Journey Dart de Coddy. Leçon 37 sur 65.
Défi
FacileCréez un programme qui achève le projet de calculateur de panier en générant un reçu final complet affichant tous les détails de la transaction dans un format professionnel. En vous appuyant sur le système de remise de la leçon précédente, votre programme doit :
- Utiliser la Map du catalogue de produits existante et les fonctionnalités du panier de la configuration précédente
- Lire plusieurs entrées de type chaîne 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 à l’aide de
containsKey()et ajouter les articles valides au panier - Calculer le sous-total en additionnant tous les prix des articles du panier
- Lire une entrée de type chaîne représentant le montant seuil de remise
- Lire une entrée de type chaîne représentant le pourcentage de remise à appliquer
- Appliquer la remise uniquement si le sous-total atteint ou dépasse le montant seuil
- Calculer le montant de la remise et le total final après application de la remise
- Lire une entrée de type chaîne représentant le nom du client
- Lire une entrée de type chaîne représentant l’identifiant de la transaction
- Générer et afficher un reçu complet contenant tous les détails de la transaction dans le format exact présenté 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 5.00, que le pourcentage de remise est 10, que le nom du client est "John Smith" et que l’identifiant de transaction est "TXN001", 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
========================================
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 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 150.00, que le pourcentage de remise est 15, que le nom du client est "Sarah Johnson" et que l’identifiant de transaction est "TXN002", 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
========================================
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 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 75.00, que le pourcentage de remise est 20, que le nom du client est "Mike Davis" et que l’identifiant de transaction est "TXN003", 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
========================================
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!
========================================Votre programme doit formater le reçu final avec un alignement et un espacement appropriés. Utilisez l’interpolation de chaînes pour afficher tous les détails de la transaction, notamment les informations du client, les achats détaillés, les calculs de prix et les statistiques récapitulatives. Le reçu doit inclure les valeurs fixes pour la date (2024-01-15), l’heure (14:30:25) et le mode de paiement (Cash). Formatez toutes les valeurs monétaires afin d’afficher exactement 2 décimales. Calculez le nombre d’articles à l’aide de la longueur du panier et le nombre de produits uniques en convertissant le panier en Set. Le format d’entrée sera le suivant : les noms des articles à ajouter au panier, suivis de "cart_done", puis le montant seuil de remise, le pourcentage de remise, le nom du client et l’identifiant de transaction (tous sous forme de chaînes).
Essayez vous-même
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');
}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 uniquesEntraînez-vous par vous-même : Compilateur Dart en ligne