Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تطبيق خصم

جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 36 من 65.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يواصل مشروع حاسبة عربة التسوق من خلال تنفيذ نظام خصم يطبق خصومات بنسبة مئوية على الطلبات المؤهلة. بناءً على حساب التكلفة الإجمالية في الدرس السابق، يجب على برنامجك القيام بما يلي:

  1. استخدام خريطة (Map) كتالوج المنتجات الحالية ووظيفة عربة التسوق من الإعداد السابق
  2. قراءة مدخلات نصية متعددة تمثل العناصر التي يريد العملاء إضافتها إلى عربة التسوق الخاصة بهم (سينتهي الإدخال عندما تتلقى "cart_done")
  3. لكل عنصر، تحقق مما إذا كان موجوداً في كتالوج المنتجات باستخدام containsKey() وأضف العناصر الصالحة إلى العربة
  4. حساب المجموع الفرعي (subtotal) عن طريق جمع أسعار جميع العناصر في العربة
  5. قراءة مدخل نصي يمثل قيمة حد الخصم (discount threshold)
  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. اطرح مبلغ الخصم من المجموع الفرعي للحصول على الإجمالي النهائي. قم بتنسيق جميع القيم النقدية لتظهر منزلتين عشريتين بالضبط. سيكون تنسيق الإدخال كالتالي: أسماء العناصر المراد إضافتها إلى العربة تنتهي بـ "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');
}

جميع دروس Logic & Flow