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

  1. Utiliser la Map du catalogue de produits existante et les fonctionnalités du panier de la configuration précédente
  2. 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")
  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 tous les prix des articles du panier
  5. Lire une entrée de type chaîne représentant le montant seuil de remise
  6. Lire une entrée de type chaîne représentant le pourcentage de remise à appliquer
  7. Appliquer la remise uniquement si le sous-total atteint ou dépasse le montant 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 représentant le nom du client
  10. Lire une entrée de type chaîne représentant l’identifiant de la transaction
  11. 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

Entraînez-vous par vous-même : Compilateur Dart en ligne