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 complète le projet de calculateur de panier d'achat en générant un reçu final complet qui affiche tous les détails de la transaction dans un format professionnel. En vous basant 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 la fonctionnalité de panier d'achat de la configuration précédente
- Lire plusieurs entrées de type chaîne 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 à l'aide de
containsKey()et ajouter les articles valides au panier - Calculer le sous-total en additionnant les prix de tous les articles du panier
- Lire une entrée de type chaîne de caractères représentant le montant du seuil de remise
- Lire une entrée de type 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
- Lire une entrée de type chaîne de caractères représentant le nom du client
- Lire une entrée de type chaîne de caractères représentant l'ID de la transaction
- Générer et afficher un reçu complet avec tous les détails de la transaction 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 5.00, le pourcentage de remise est 10, le nom du client est "John Smith" et l'ID 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, le pourcentage de remise est 15, le nom du client est "Sarah Johnson" et l'ID 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, le pourcentage de remise est 20, le nom du client est "Mike Davis" et l'ID 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, y compris les informations sur le client, les achats détaillés, les calculs de prix et les statistiques récapitulatives. Le reçu doit inclure des 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 pour afficher exactement 2 décimales. Calculez le nombre d'articles à l'aide de la longueur du panier et les produits uniques en convertissant le panier en un Set. 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, du pourcentage de remise, du nom du client et de l'ID de transaction (tous sous forme de chaînes de caractères).
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 uniques