Menu
Coddy logo textTech

Stosowanie rabatu

Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 36 z 65.

challenge icon

Wyzwanie

Łatwy

Utwó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:

  1. Korzystać z istniejącej mapy katalogu produktów i funkcjonalności koszyka zakupowego z poprzedniego etapu
  2. 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")
  3. Dla każdego produktu sprawdzać, czy istnieje w katalogu produktów, za pomocą containsKey(), i dodawać prawidłowe produkty do koszyka
  4. Obliczać sumę częściową, sumując ceny wszystkich produktów w koszyku
  5. Odczytywać dane wejściowe typu string reprezentujące kwotę progu rabatowego
  6. Odczytywać dane wejściowe typu string reprezentujące procent rabatu do zastosowania
  7. Stosować rabat tylko wtedy, gdy suma częściowa osiąga lub przekracza kwotę progu
  8. Obliczać kwotę rabatu i końcową sumę po jego zastosowaniu
  9. 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 checkout

Jeś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 checkout

Jeś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 checkout

Program 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

Poćwicz samodzielnie: Kompilator Dart online