Menu
Coddy logo textTech

Wyświetlanie końcowego paragonu

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

challenge icon

Wyzwanie

Łatwy

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

  1. Używać istniejącej Mapy katalogu produktów i funkcjonalności koszyka zakupowego z poprzedniej konfiguracji
  2. 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")
  3. Dla każdego produktu sprawdzać, czy istnieje w katalogu produktów, używając containsKey(), i dodawać prawidłowe produkty do koszyka
  4. Obliczać sumę częściową przez zsumowanie cen wszystkich produktów w koszyku
  5. Odczytywać dane wejściowe typu string reprezentujące próg rabatowy
  6. Odczytywać dane wejściowe typu string reprezentujące procent rabatu do zastosowania
  7. Stosować rabat tylko wtedy, gdy suma częściowa jest równa progowi lub go przekracza
  8. Obliczać kwotę rabatu i sumę końcową po jego zastosowaniu
  9. Odczytywać dane wejściowe typu string reprezentujące imię i nazwisko klienta
  10. Odczytywać dane wejściowe typu string reprezentujące identyfikator transakcji
  11. 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

Poćwicz samodzielnie: Kompilator Dart online