Einen Rabatt anwenden
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 36 von 65.
Aufgabe
EinfachErstellen Sie ein Programm, das das Warenkorb-Kalkulator-Projekt fortsetzt, indem es ein Rabattsystem implementiert, das prozentuale Rabatte auf qualifizierte Bestellungen anwendet. Aufbauend auf der Berechnung der Gesamtkosten aus der vorherigen Lektion sollte Ihr Programm Folgendes tun:
- Verwenden Sie die vorhandene Produktkatalog-Map und die Warenkorb-Funktionalität aus dem vorherigen Setup
- Lesen Sie mehrere String-Eingaben ein, die Artikel darstellen, die Kunden ihrem Warenkorb hinzufügen möchten (die Eingabe endet, wenn Sie
"cart_done"erhalten) - Prüfen Sie für jeden Artikel mit
containsKey(), ob er im Produktkatalog existiert, und fügen Sie gültige Artikel dem Warenkorb hinzu - Berechnen Sie die Zwischensumme, indem Sie alle Artikelpreise im Warenkorb addieren
- Lesen Sie eine String-Eingabe ein, die den Schwellenwert für den Rabatt darstellt
- Lesen Sie eine String-Eingabe ein, die den anzuwendenden Rabattsatz in Prozent darstellt
- Wenden Sie den Rabatt nur an, wenn die Zwischensumme den Schwellenwert erreicht oder überschreitet
- Berechnen Sie den Rabattbetrag und die Endsumme nach Anwendung des Rabatts
- Zeigen Sie den Bericht zur Rabattberechnung in dem unten gezeigten exakten Format an
Wenn der Laden beispielsweise die Produkte "Apple" für 1.50, "Banana" für 0.80, "Orange" für 2.00, "Milk" für 3.25 hat, Kunden "Apple", "Orange", "Milk", "Apple" hinzufügen möchten, der Rabatt-Schwellenwert 5.00 beträgt und der Rabattsatz 10 Prozent ist, sollte Ihr Programm Folgendes ausgeben:
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 checkoutWenn der Laden die Produkte "Laptop" für 999.99, "Mouse" für 25.50, "Keyboard" für 75.00 hat, Kunden "Mouse", "Keyboard" hinzufügen möchten, der Rabatt-Schwellenwert 150.00 beträgt und der Rabattsatz 15 Prozent ist, sollte Ihr Programm Folgendes ausgeben:
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 checkoutWenn der Laden die Produkte "Novel" für 12.99, "Magazine" für 4.50, "Textbook" für 89.00 hat, Kunden "Novel", "Textbook", "Magazine", "Novel" hinzufügen möchten, der Rabatt-Schwellenwert 75.00 beträgt und der Rabattsatz 20 Prozent ist, sollte Ihr Programm Folgendes ausgeben:
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 checkoutIhr Programm muss zuerst die Zwischensumme berechnen und dann mit einer bedingten if-Anweisung prüfen, ob sie den Rabatt-Schwellenwert erreicht oder überschreitet. Wenn der Schwellenwert erreicht ist, berechnen Sie den Rabattbetrag, indem Sie die Zwischensumme mit dem Rabattsatz multiplizieren und durch 100 dividieren. Ziehen Sie den Rabattbetrag von der Zwischensumme ab, um die Endsumme zu erhalten. Formatieren Sie alle Geldwerte so, dass sie genau 2 Dezimalstellen anzeigen. Das Eingabeformat ist: Artikelnamen, die dem Warenkorb hinzugefügt werden sollen, endend mit "cart_done", gefolgt vom Rabatt-Schwellenwert und dem Rabattsatz (beides als Strings, die in entsprechende numerische Typen umgewandelt werden müssen).
Probier es selbst
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');
}Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung5Projekt: Warenkorb-Rechner
Projekt-SetupArtikel zum Warenkorb hinzufügen3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste