تطبيق خصم
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 36 من 65.
التحدي
سهلقم بإنشاء برنامج يواصل مشروع حاسبة عربة التسوق من خلال تنفيذ نظام خصم يطبق خصومات بنسبة مئوية على الطلبات المؤهلة. بناءً على حساب التكلفة الإجمالية في الدرس السابق، يجب على برنامجك القيام بما يلي:
- استخدام خريطة (Map) كتالوج المنتجات الحالية ووظيفة عربة التسوق من الإعداد السابق
- قراءة مدخلات نصية متعددة تمثل العناصر التي يريد العملاء إضافتها إلى عربة التسوق الخاصة بهم (سينتهي الإدخال عندما تتلقى
"cart_done") - لكل عنصر، تحقق مما إذا كان موجوداً في كتالوج المنتجات باستخدام
containsKey()وأضف العناصر الصالحة إلى العربة - حساب المجموع الفرعي (subtotal) عن طريق جمع أسعار جميع العناصر في العربة
- قراءة مدخل نصي يمثل قيمة حد الخصم (discount threshold)
- قراءة مدخل نصي يمثل النسبة المئوية للخصم المراد تطبيقها
- تطبيق الخصم فقط إذا كان المجموع الفرعي يساوي أو يتجاوز قيمة الحد الأدنى
- حساب مبلغ الخصم والإجمالي النهائي بعد تطبيق الخصم
- عرض تقرير حساب الخصم بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان المتجر يحتوي على منتجات "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
1التعامل المتقدم مع القوائم
خصائص القائمة: first و lastحالة القائمة: isEmpty و isNotEmptyعكس القائمةالإضافة إلى القائمة: insertالحذف من القائمة: removeWhereالبحث في القائمة: indexOfفرز القائمةخلط القائمةملخص - منظم القوائم4معالجة الـ Map المتقدمة
التكرار عبر الـ Mapالتحقق من المفاتيح والقيمخصائص الـ Map: keys و valuesإضافة مشروطة: putIfAbsentإزالة العناصر من الـ Mapالـ Maps المتداخلةمراجعة - تحديث المخزون2عمليات القوائم الوظيفية
التحويل باستخدام 'map'التصفية باستخدام 'where'استخدام '.toList()'التحقق من الشروط باستخدام 'any'الشروط باستخدام 'every'البحث باستخدام 'firstWhere'مراجعة - تصفية البيانات5مشروع: حاسبة عربة التسوق
إعداد المشروعإضافة العناصر إلى العربة3المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة