Menu
Coddy logo textTech

Affichage du reçu final

Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 37 sur 65.

challenge icon

Défi

Facile

Cré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 :

  1. Utiliser la Map du catalogue de produits existante et la fonctionnalité de panier d'achat de la configuration précédente
  2. 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")
  3. Pour chaque article, vérifier s'il existe dans le catalogue de produits à l'aide de containsKey() et ajouter les articles valides au panier
  4. Calculer le sous-total en additionnant les prix de tous les articles du panier
  5. Lire une entrée de type chaîne de caractères représentant le montant du seuil de remise
  6. Lire une entrée de type chaîne de caractères représentant le pourcentage de remise à appliquer
  7. Appliquer la remise uniquement si le sous-total atteint ou dépasse le montant du seuil
  8. Calculer le montant de la remise et le total final après application de la remise
  9. Lire une entrée de type chaîne de caractères représentant le nom du client
  10. Lire une entrée de type chaîne de caractères représentant l'ID de la transaction
  11. 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