Menu
Coddy logo textTech

החלת הנחה

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 36 מתוך 65.

challenge icon

אתגר

קל

צרו תוכנית שממשיכה את פרויקט מחשבון עגלת הקניות באמצעות מימוש מערכת הנחות שמחילה הנחות באחוזים על הזמנות שעומדות בתנאים. בהמשך לחישוב העלות הכוללת מהשיעור הקודם, התוכנית שלכם צריכה:

  1. להשתמש ב־Map הקיים של קטלוג המוצרים ובפונקציונליות של עגלת הקניות מההגדרה הקודמת
  2. לקרוא כמה קלטים מסוג מחרוזת שמייצגים פריטים שלקוחות רוצים להוסיף לעגלה (הקלט יסתיים כשתקבלו "cart_done")
  3. לבדוק עבור כל פריט אם הוא קיים בקטלוג המוצרים באמצעות containsKey() ולהוסיף פריטים תקינים לעגלה
  4. לחשב את סכום הביניים על ידי חיבור מחירי כל הפריטים שבעגלה
  5. לקרוא קלט מסוג מחרוזת שמייצג את סכום הסף להנחה
  6. לקרוא קלט מסוג מחרוזת שמייצג את אחוז ההנחה להחלה
  7. להחיל את ההנחה רק אם סכום הביניים שווה לסכום הסף או גדול ממנו
  8. לחשב את סכום ההנחה ואת הסכום הסופי לאחר החלת ההנחה
  9. להציג את דוח חישוב ההנחה בדיוק בפורמט שמוצג בהמשך

לדוגמה, אם בחנות יש את המוצרים "Apple" במחיר 1.50, "Banana" במחיר 0.80, "Orange" במחיר 2.00, "Milk" במחיר 3.25, הלקוחות רוצים להוסיף "Apple", "Orange", "Milk", "Apple", סף ההנחה הוא 5.00, ואחוז ההנחה הוא 10, התוכנית שלכם צריכה להפיק:

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

אם בחנות יש את המוצרים "Laptop" במחיר 999.99, "Mouse" במחיר 25.50, "Keyboard" במחיר 75.00, הלקוחות רוצים להוסיף "Mouse", "Keyboard", סף ההנחה הוא 150.00, ואחוז ההנחה הוא 15, התוכנית שלכם צריכה להפיק:

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

אם בחנות יש את המוצרים "Novel" במחיר 12.99, "Magazine" במחיר 4.50, "Textbook" במחיר 89.00, הלקוחות רוצים להוסיף "Novel", "Textbook", "Magazine", "Novel", סף ההנחה הוא 75.00, ואחוז ההנחה הוא 20, התוכנית שלכם צריכה להפיק:

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

על התוכנית שלכם לחשב תחילה את סכום הביניים, ואז לבדוק באמצעות משפט תנאי if אם הוא שווה לסף ההנחה או גדול ממנו. אם הסף הושג, חשבו את סכום ההנחה על ידי הכפלת סכום הביניים באחוז ההנחה חלקי 100. הפחיתו את סכום ההנחה מסכום הביניים כדי לקבל את הסכום הסופי. עצבו את כל הסכומים הכספיים כך שיוצגו בדיוק עם 2 ספרות אחרי הנקודה העשרונית. פורמט הקלט יהיה: שמות הפריטים להוספה לעגלה, המסתיימים ב־"cart_done", ואחריהם סכום הסף להנחה ואחוז ההנחה (שניהם כמחרוזות שצריך להמיר לסוגים מספריים מתאימים).

נסו בעצמכם

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');
}

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Dart אונליין