Stosowanie rabatu
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 36 z 65.
Wyzwanie
ŁatwyUtwórz program, który rozwija projekt kalkulatora koszyka zakupowego, implementując system rabatów przyznający rabaty procentowe kwalifikującym się zamówieniom. Rozwijając obliczanie całkowitego kosztu z poprzedniej lekcji, program powinien:
- Korzystać z istniejącej mapy katalogu produktów i funkcjonalności koszyka zakupowego z poprzedniego etapu
- Odczytywać wiele danych wejściowych typu string reprezentujących produkty, które klienci chcą dodać do koszyka (wprowadzanie zakończy się po otrzymaniu
"cart_done") - Dla każdego produktu sprawdzać, czy istnieje w katalogu produktów, za pomocą
containsKey(), i dodawać prawidłowe produkty do koszyka - Obliczać sumę częściową, sumując ceny wszystkich produktów w koszyku
- Odczytywać dane wejściowe typu string reprezentujące kwotę progu rabatowego
- Odczytywać dane wejściowe typu string reprezentujące procent rabatu do zastosowania
- Stosować rabat tylko wtedy, gdy suma częściowa osiąga lub przekracza kwotę progu
- Obliczać kwotę rabatu i końcową sumę po jego zastosowaniu
- Wyświetlać raport obliczenia rabatu dokładnie w formacie pokazanym poniżej
Na przykład, jeśli sklep oferuje produkty "Apple" w cenie 1.50, "Banana" w cenie 0.80, "Orange" w cenie 2.00 i "Milk" w cenie 3.25, klienci chcą dodać "Apple", "Orange", "Milk", "Apple", próg rabatowy wynosi 5.00, a procent rabatu wynosi 10, 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
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 0
Discount Status: 10% discount applied
Cart Status: Ready for checkoutJeśli sklep oferuje produkty "Laptop" w cenie 999.99, "Mouse" w cenie 25.50 i "Keyboard" w cenie 75.00, klienci chcą dodać "Mouse", "Keyboard", próg rabatowy wynosi 150.00, a procent rabatu wynosi 15, 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
Cart Summary:
Total items in cart: 2
Unique products in cart: 2
Items successfully added: 2
Items not found: 0
Discount Status: No discount applied
Cart Status: Ready for checkoutJeśli sklep oferuje produkty "Novel" w cenie 12.99, "Magazine" w cenie 4.50 i "Textbook" w cenie 89.00, klienci chcą dodać "Novel", "Textbook", "Magazine", "Novel", próg rabatowy wynosi 75.00, a procent rabatu wynosi 20, 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
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 0
Discount Status: 20% discount applied
Cart Status: Ready for checkoutProgram musi najpierw obliczyć sumę częściową, a następnie sprawdzić za pomocą instrukcji warunkowej if, czy osiąga ona lub przekracza próg rabatowy. Jeśli próg został osiągnięty, oblicz kwotę rabatu, mnożąc sumę częściową przez procent rabatu podzielony przez 100. Odejmij kwotę rabatu od sumy częściowej, aby uzyskać końcową sumę. Formatuj wszystkie wartości pieniężne tak, aby wyświetlały dokładnie 2 miejsca po przecinku. Format danych wejściowych będzie następujący: nazwy produktów dodawanych do koszyka, zakończone przez "cart_done", a następnie kwota progu rabatowego i procent rabatu (oba jako dane typu string, które należy przekonwertować na odpowiednie typy liczbowe).
Spróbuj swoich sił
import 'dart:io';
void main() {
// Product catalog with prices
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
};
// Shopping cart list
List<String> cart = [];
// Counters for summary
int itemsAdded = 0;
int itemsNotFound = 0;
print('Shopping Cart Operations:');
// Read items until "cart_done"
String? item;
while ((item = stdin.readLineSync()) != 'cart_done') {
if (item != null) {
if (products.containsKey(item)) {
cart.add(item);
print("Adding '$item': Item added to cart successfully");
itemsAdded++;
} else {
print("Adding '$item': Item not available in store");
itemsNotFound++;
}
}
}
// Display cart contents
print('Cart Contents: $cart');
// Calculate total cost
print('Cost Calculation:');
double totalCost = 0.0;
for (String cartItem in cart) {
double price = products[cartItem]!;
totalCost += price;
print('$cartItem: \$${price.toStringAsFixed(2)}');
}
print('Total Cost: \$${totalCost.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('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