החלת הנחה
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 36 מתוך 65.
אתגר
קלצרו תוכנית שממשיכה את פרויקט מחשבון עגלת הקניות באמצעות מימוש מערכת הנחות שמחילה הנחות באחוזים על הזמנות שעומדות בתנאים. בהמשך לחישוב העלות הכוללת מהשיעור הקודם, התוכנית שלכם צריכה:
- להשתמש ב־Map הקיים של קטלוג המוצרים ובפונקציונליות של עגלת הקניות מההגדרה הקודמת
- לקרוא כמה קלטים מסוג מחרוזת שמייצגים פריטים שלקוחות רוצים להוסיף לעגלה (הקלט יסתיים כשתקבלו
"cart_done") - לבדוק עבור כל פריט אם הוא קיים בקטלוג המוצרים באמצעות
containsKey()ולהוסיף פריטים תקינים לעגלה - לחשב את סכום הביניים על ידי חיבור מחירי כל הפריטים שבעגלה
- לקרוא קלט מסוג מחרוזת שמייצג את סכום הסף להנחה
- לקרוא קלט מסוג מחרוזת שמייצג את אחוז ההנחה להחלה
- להחיל את ההנחה רק אם סכום הביניים שווה לסכום הסף או גדול ממנו
- לחשב את סכום ההנחה ואת הסכום הסופי לאחר החלת ההנחה
- להציג את דוח חישוב ההנחה בדיוק בפורמט שמוצג בהמשך
לדוגמה, אם בחנות יש את המוצרים "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');
}כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1מניפולציות מתקדמות ברשימות
מאפייני רשימה: ראשון ואחרוןמצב הרשימה: isEmpty ו-isNotEmpהיפוך רשימההוספה לרשימה: insertהסרת פריטים מרשימה: removeWhereחיפוש ברשימה: indexOfמיון רשימהערבוב רשימהסיכום – מארגן רשימות4מניפולציה מתקדמת של Map
מעבר על Mapבדיקה אם מפתחות וערכים קיימיםמאפייני Map: מפתחות וערכיםהוספה מותנית: putIfAbsentהסרת רשומות מ־MapMaps מקונניםסיכום – עדכון מלאי2פעולות פונקציונליות על רשימות
טרנספורמציה באמצעות 'map'סינון באמצעות 'where'שימוש ב-'.toList()'בדיקת תנאים באמצעות 'any'תנאים באמצעות 'every'איתור באמצעות 'firstWhere'סיכום – סינון נתונים5פרויקט: חישוב עגלת קניות
הגדרת הפרויקטהוספת פריטים לעגלה3קבוצות
מהי קבוצה?יצירת קבוצההוספה והסרה מקבוצותבדיקת נוכחות של איברים בקבוצההמרת רשימה לקבוצהאיחוד קבוצותחיתוך קבוצותהפרש קבוצותסיכום – רשימת אורחים ייחודית6טיפול בסיסי בשגיאות
מהן חריגות?בלוק ה-try-catchתפיסת חריגות באמצעות onבלוק ה-finallyהשלכת חריגהסיכום – חלוקה בטוחה9טיפוסי מנייה (Enums)
מה הם Enums?הגדרת Enum פשוטשימוש ב-Enums במשתניםEnums במשפטי 'switch'סיכום – רמזורתרגלו בעצמכם: קומפיילר Dart אונליין