Visualizzare lo scontrino finale
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 37 di 65.
Sfida
FacileCrea 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:
- Usare la Map del catalogo prodotti esistente e le funzionalità del carrello della spesa della configurazione precedente
- Leggere più stringhe di input che rappresentano gli articoli che i clienti vogliono aggiungere al carrello (l'input terminerà quando ricevi
"cart_done") - Per ogni articolo, verificare se esiste nel catalogo prodotti usando
containsKey()e aggiungere al carrello gli articoli validi - Calcolare il subtotale sommando i prezzi di tutti gli articoli nel carrello
- Leggere una stringa di input che rappresenta l'importo minimo per lo sconto
- Leggere una stringa di input che rappresenta la percentuale di sconto da applicare
- Applicare lo sconto solo se il subtotale raggiunge o supera l'importo minimo
- Calcolare l'importo dello sconto e il totale finale dopo aver applicato lo sconto
- Leggere una stringa di input che rappresenta il nome del cliente
- Leggere una stringa di input che rappresenta l'ID della transazione
- 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
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati5Progetto: Calcolo del carrello
Configurazione del progettoAggiungere articoli al carrello3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online