מכירת פריט
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 52 מתוך 66.
אתגר
קליתקבלו חמישה קלטים. הקלט הראשון הוא שם הפריט למכירה. הקלט השני הוא הכמות למכירה. הקלט השלישי הוא רשימה מופרדת בפסיקים של שמות הפריטים במלאי. הקלט הרביעי הוא רשימה מופרדת בפסיקים של המחירים המתאימים לכל פריט. הקלט החמישי הוא רשימה מופרדת בפסיקים של הכמויות המתאימות לכל פריט. יש ליצור HashMap לאחסון נתוני המלאי, כאשר המפתח הוא שם הפריט והערך הוא tuple שמכיל את המחיר והכמות (f64, i32). לאחר מכן, יש לנסות למכור את הכמות המבוקשת של הפריט.
דרישות:
- יש לייבא את
HashMapמתוךstd::collections - יש לקרוא את הקלט הראשון (שם הפריט למכירה) ולהסיר רווחים לבנים בתחילתו ובסופו
- יש לקרוא את הקלט השני (הכמות למכירה) ולהסיר רווחים לבנים בתחילתו ובסופו
- יש להמיר את הכמות למכירה ל-
i32 - יש לקרוא את הקלט השלישי (שמות הפריטים המופרדים בפסיקים) ולהסיר רווחים לבנים בתחילתו ובסופו
- יש לקרוא את הקלט הרביעי (המחירים המופרדים בפסיקים) ולהסיר רווחים לבנים בתחילתו ובסופו
- יש לקרוא את הקלט החמישי (הכמויות המופרדות בפסיקים) ולהסיר רווחים לבנים בתחילתו ובסופו
- יש ליצור
HashMap<String, (f64, i32)>שניתן לשינוי עבור המלאי - יש לפצל את שמות הפריטים לפי פסיקים
- יש לפצל את המחירים לפי פסיקים ולהמיר כל אחד מהם ל-
f64 - יש לפצל את הכמויות לפי פסיקים ולהמיר כל אחת מהן ל-
i32 - יש להוסיף כל פריט למלאי עם המחיר והכמות המתאימים לו בתור tuple
- יש להשתמש ב-
.get()כדי לבדוק אם הפריט המבוקש קיים במלאי - יש להשתמש בביטוי
matchכדי לטפל ב-Optionשמוחזר על ידי.get() - בזרוע
Some:- יש לחלץ את המחיר ואת הכמות הנוכחית מתוך ה-tuple
- יש לבדוק אם הכמות הנוכחית גדולה או שווה לכמות למכירה
- אם כן:
- יש לחשב את הכמות החדשה על ידי הפחתת הכמות למכירה מהכמות הנוכחית
- יש לחשב את המחיר הכולל על ידי הכפלת מחיר הפריט בכמות למכירה
- יש להשתמש ב-
.insert()כדי לעדכן את המלאי בכמות החדשה - יש להדפיס:
Sold [quantity_to_sell] [item_name] - יש להדפיס:
Total: $[total_price] - יש להדפיס:
Remaining stock: [new_quantity]
- אם לא (אין מספיק מלאי):
- יש להדפיס:
Insufficient stock for [item_name] - יש להדפיס:
Available: [current_quantity]
- יש להדפיס:
- בזרוע
None, יש להדפיס:[item_name] is not in stock
קלט:
- שורה ראשונה: שם הפריט למכירה (לדוגמה,
Mouse) - שורה שנייה: הכמות למכירה (לדוגמה,
10) - שורה שלישית: שמות פריטים המופרדים בפסיקים (לדוגמה,
Laptop,Mouse,Keyboard) - שורה רביעית: מחירים המופרדים בפסיקים (לדוגמה,
999.99,25.50,75.00) - שורה חמישית: כמויות המופרדות בפסיקים (לדוגמה,
15,50,30)
פלט:
- אם הפריט קיים ויש מספיק מלאי:
- שורה ראשונה:
Sold [quantity_to_sell] [item_name] - שורה שנייה:
Total: $[total_price] - שורה שלישית:
Remaining stock: [new_quantity]
- שורה ראשונה:
- אם הפריט קיים אך אין מספיק מלאי:
- שורה ראשונה:
Insufficient stock for [item_name] - שורה שנייה:
Available: [current_quantity]
- שורה ראשונה:
- אם הפריט אינו קיים:
[item_name] is not in stock
נסו בעצמכם
use std::collections::HashMap;
use std::io;
fn main() {
// קראו את הקלט
let mut item_to_sell = String::new();
io::stdin().read_line(&mut item_to_sell).expect("Failed to read line");
let item_to_sell = item_to_sell.trim();
let mut quantity_to_sell_input = String::new();
io::stdin().read_line(&mut quantity_to_sell_input).expect("Failed to read line");
let quantity_to_sell: i32 = quantity_to_sell_input.trim().parse().expect("Invalid number");
let mut item_names_input = String::new();
io::stdin().read_line(&mut item_names_input).expect("Failed to read line");
let item_names_input = item_names_input.trim();
let mut prices_input = String::new();
io::stdin().read_line(&mut prices_input).expect("Failed to read line");
let prices_input = prices_input.trim();
let mut quantities_input = String::new();
io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
let quantities_input = quantities_input.trim();
// TODO: כתבו את הקוד שלכם למטה
// צרו HashMap לאחסון המלאי
// עבדו את נתוני הקלט ובנו את המלאי
// בדקו אם הפריט קיים וטפלו במכירה
}כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מיליםתרגלו בעצמכם: קומפיילר Rust אונליין