Wyświetlanie końcowego paragonu
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 37 z 65.
Wyzwanie
ŁatwyUtwórz program, który ukończy projekt kalkulatora koszyka zakupowego, generując kompleksowy paragon końcowy wyświetlający wszystkie szczegóły transakcji w profesjonalnym formacie. Rozbudowując system rabatów z poprzedniej lekcji, Twój program powinien:
- Używać istniejącej Mapy katalogu produktów i funkcjonalności koszyka zakupowego z poprzedniej konfiguracji
- Odczytywać wiele danych wejściowych typu string reprezentujących produkty, które klienci chcą dodać do koszyka (dane wejściowe zakończą się po otrzymaniu
"cart_done") - Dla każdego produktu sprawdzać, czy istnieje w katalogu produktów, używając
containsKey(), i dodawać prawidłowe produkty do koszyka - Obliczać sumę częściową przez zsumowanie cen wszystkich produktów w koszyku
- Odczytywać dane wejściowe typu string reprezentujące próg rabatowy
- Odczytywać dane wejściowe typu string reprezentujące procent rabatu do zastosowania
- Stosować rabat tylko wtedy, gdy suma częściowa jest równa progowi lub go przekracza
- Obliczać kwotę rabatu i sumę końcową po jego zastosowaniu
- Odczytywać dane wejściowe typu string reprezentujące imię i nazwisko klienta
- Odczytywać dane wejściowe typu string reprezentujące identyfikator transakcji
- Generować i wyświetlać kompletny paragon ze wszystkimi szczegółami transakcji w dokładnym formacie przedstawionym poniżej
Na przykład, jeśli sklep ma produkty "Apple" w cenie 1.50, "Banana" w cenie 0.80, "Orange" w cenie 2.00, "Milk" w cenie 3.25, klienci chcą dodać "Apple", "Orange", "Milk", "Apple", próg rabatowy wynosi 5.00, procent rabatu wynosi 10, imię i nazwisko klienta to "John Smith", a identyfikator transakcji to "TXN001", Twój program powinien wyświetlić:
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!
========================================Jeśli sklep ma produkty "Laptop" w cenie 999.99, "Mouse" w cenie 25.50, "Keyboard" w cenie 75.00, klienci chcą dodać "Mouse", "Keyboard", próg rabatowy wynosi 150.00, procent rabatu wynosi 15, imię i nazwisko klienta to "Sarah Johnson", a identyfikator transakcji to "TXN002", Twój program powinien wyświetlić:
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!
========================================Jeśli sklep ma produkty "Novel" w cenie 12.99, "Magazine" w cenie 4.50, "Textbook" w cenie 89.00, klienci chcą dodać "Novel", "Textbook", "Magazine", "Novel", próg rabatowy wynosi 75.00, procent rabatu wynosi 20, imię i nazwisko klienta to "Mike Davis", a identyfikator transakcji to "TXN003", Twój program powinien wyświetlić:
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!
========================================Twój program musi odpowiednio wyrównać i rozmieścić elementy paragonu końcowego. Użyj interpolacji ciągów znaków, aby wyświetlić wszystkie szczegóły transakcji, w tym informacje o kliencie, zestawienie zakupionych produktów, obliczenia cen oraz statystyki podsumowujące. Paragon powinien zawierać stałe wartości daty (2024-01-15), godziny (14:30:25) i metody płatności (Cash). Formatuj wszystkie kwoty tak, aby zawierały dokładnie 2 miejsca po przecinku. Oblicz liczbę produktów na podstawie długości koszyka, a liczbę unikalnych produktów — przez konwersję koszyka na Set. Format danych wejściowych będzie następujący: nazwy produktów do dodania do koszyka, zakończone przez "cart_done", a następnie próg rabatowy, procent rabatu, imię i nazwisko klienta oraz identyfikator transakcji (wszystkie jako ciągi znaków).
Spróbuj swoich sił
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');
}Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online