Menu
Coddy logo textTech

מכירת פריט

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 52 מתוך 66.

challenge icon

אתגר

קל

יתקבלו חמישה קלטים. הקלט הראשון הוא שם הפריט למכירה. הקלט השני הוא הכמות למכירה. הקלט השלישי הוא רשימה מופרדת בפסיקים של שמות הפריטים במלאי. הקלט הרביעי הוא רשימה מופרדת בפסיקים של המחירים המתאימים לכל פריט. הקלט החמישי הוא רשימה מופרדת בפסיקים של הכמויות המתאימות לכל פריט. יש ליצור 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 לאחסון המלאי
    // עבדו את נתוני הקלט ובנו את המלאי
    // בדקו אם הפריט קיים וטפלו במכירה
    
}

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

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