Menu
Coddy logo textTech

Visualizzare lo scontrino finale

Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 37 di 65.

challenge icon

Sfida

Facile

Crea un programma che completi il progetto del calcolatore del carrello della spesa generando una ricevuta finale completa che mostri tutti i dettagli della transazione in un formato professionale. Partendo dal sistema di sconti della lezione precedente, il tuo programma dovrebbe:

  1. Usare la Map del catalogo prodotti esistente e le funzionalità del carrello della spesa della configurazione precedente
  2. Leggere più stringhe di input che rappresentano gli articoli che i clienti vogliono aggiungere al carrello (l'input terminerà quando ricevi "cart_done")
  3. Per ogni articolo, verificare se esiste nel catalogo prodotti usando containsKey() e aggiungere al carrello gli articoli validi
  4. Calcolare il subtotale sommando i prezzi di tutti gli articoli nel carrello
  5. Leggere una stringa di input che rappresenta l'importo minimo per lo sconto
  6. Leggere una stringa di input che rappresenta la percentuale di sconto da applicare
  7. Applicare lo sconto solo se il subtotale raggiunge o supera l'importo minimo
  8. Calcolare l'importo dello sconto e il totale finale dopo aver applicato lo sconto
  9. Leggere una stringa di input che rappresenta il nome del cliente
  10. Leggere una stringa di input che rappresenta l'ID della transazione
  11. Generare e visualizzare una ricevuta completa con tutti i dettagli della transazione nel formato esatto mostrato di seguito

Per esempio, se il negozio ha i prodotti "Apple" a 1.50, "Banana" a 0.80, "Orange" a 2.00, "Milk" a 3.25, i clienti vogliono aggiungere "Apple", "Orange", "Milk", "Apple", l'importo minimo per lo sconto è 5.00, la percentuale di sconto è 10, il nome del cliente è "John Smith" e l'ID della transazione è "TXN001", il tuo programma dovrebbe produrre:

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!
========================================

Se il negozio ha i prodotti "Laptop" a 999.99, "Mouse" a 25.50, "Keyboard" a 75.00, i clienti vogliono aggiungere "Mouse", "Keyboard", l'importo minimo per lo sconto è 150.00, la percentuale di sconto è 15, il nome del cliente è "Sarah Johnson" e l'ID della transazione è "TXN002", il tuo programma dovrebbe produrre:

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!
========================================

Se il negozio ha i prodotti "Novel" a 12.99, "Magazine" a 4.50, "Textbook" a 89.00, i clienti vogliono aggiungere "Novel", "Textbook", "Magazine", "Novel", l'importo minimo per lo sconto è 75.00, la percentuale di sconto è 20, il nome del cliente è "Mike Davis" e l'ID della transazione è "TXN003", il tuo programma dovrebbe produrre:

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!
========================================

Il tuo programma deve formattare la ricevuta finale con un allineamento e una spaziatura adeguati. Usa l'interpolazione di stringhe per visualizzare tutti i dettagli della transazione, comprese le informazioni sul cliente, gli articoli acquistati, i calcoli dei prezzi e le statistiche riepilogative. La ricevuta deve includere valori fissi per la data (2024-01-15), l'ora (14:30:25) e il metodo di pagamento (Cash). Formatta tutti gli importi monetari mostrando esattamente 2 cifre decimali. Calcola il numero di articoli usando la lunghezza del carrello e i prodotti unici convertendo il carrello in un Set. Il formato dell'input sarà: nomi degli articoli da aggiungere al carrello, terminati da "cart_done", seguiti dall'importo minimo per lo sconto, dalla percentuale di sconto, dal nome del cliente e dall'ID della transazione (tutti come stringhe).

Provalo tu

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');
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online