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

تجميع كل الأجزاء

جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 53 من 66.

challenge icon

التحدي

سهل

ستتلقى ستة مدخلات. المدخل الأول هو أمر يمكن أن يكون إما add أو check أو sell. المدخل الثاني هو اسم العنصر. المدخل الثالث هو رقم يمثل إما الكمية المراد بيعها (لأمر sell) أو السعر الأولي (لأمر add). المدخل الرابع هو قائمة بأسماء العناصر في المخزون مفصولة بفاصلة. المدخل الخامس هو قائمة بالأسعار المقابلة لكل عنصر مفصولة بفاصلة. المدخل السادس هو قائمة بالكميات المقابلة لكل عنصر مفصولة بفاصلة.

قم ببناء نظام كامل لإدارة المخزون يتعامل مع العمليات الثلاث: إضافة العناصر، والتحقق من المخزون، وبيع العناصر. استخدم HashMap لتخزين بيانات المخزون حيث يكون المفتاح هو اسم العنصر والقيمة هي "tuple" تحتوي على السعر والكمية (f64, i32).

المتطلبات:

  • استورد HashMap من std::collections
  • اقرأ المدخل الأول (الأمر) وقم بإزالة المسافات البيضاء (trim)
  • اقرأ المدخل الثاني (اسم العنصر) وقم بإزالة المسافات البيضاء
  • اقرأ المدخل الثالث (قيمة الكمية/السعر) وقم بإزالة المسافات البيضاء
  • قم بتحويل المدخل الثالث إلى f64
  • اقرأ المدخل الرابع (أسماء العناصر المفصولة بفاصلة) وقم بإزالة المسافات البيضاء
  • اقرأ المدخل الخامس (الأسعار المفصولة بفاصلة) وقم بإزالة المسافات البيضاء
  • اقرأ المدخل السادس (الكميات المفصولة بفاصلة) وقم بإزالة المسافات البيضاء
  • أنشئ HashMap<String, (f64, i32)> قابلة للتعديل (mutable) للمخزون
  • قم بتقسيم أسماء العناصر بواسطة الفواصل
  • قم بتقسيم الأسعار بواسطة الفواصل وتحويل كل منها إلى f64
  • قم بتقسيم الكميات بواسطة الفواصل وتحويل كل منها إلى i32
  • أدخل كل عنصر في المخزون مع السعر والكمية المقابلين له كـ "tuple"
  • استخدم تعبير match على الأمر لتحديد العملية التي سيتم تنفيذها
  • لأمر add:
    • استخدم .entry() و .or_insert() لإضافة العنصر إذا لم يكن موجوداً، باستخدام المدخل الثالث كالسعر و 0 ككمية أولية
    • اطبع: Added [item_name] to inventory
    • اطبع: Price: $[price]
    • اطبع: Quantity: 0
  • لأمر check:
    • استخدم .get() للتحقق مما إذا كان العنصر موجوداً
    • استخدم تعبير match للتعامل مع Option
    • إذا كان Some، اطبع:
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • إذا كان None، اطبع: [item_name] is not in stock
  • لأمر sell:
    • قم بتحويل المدخل الثالث إلى i32 ككمية مراد بيعها
    • استخدم .get() للتحقق مما إذا كان العنصر موجوداً
    • استخدم تعبير match للتعامل مع Option
    • إذا كان Some:
      • تحقق مما إذا كانت الكمية الحالية كافية
      • إذا كانت نعم، قم بتحديث المخزون بالكمية الجديدة واطبع:
        • 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
  • لأي أمر آخر، اطبع: Invalid command

المدخلات:

  • السطر الأول: الأمر (add، check، أو sell)
  • السطر الثاني: اسم العنصر (مثلاً، Tablet)
  • السطر الثالث: رقم (السعر لأمر add، الكمية لأمر sell، ويتم تجاهله لأمر check)
  • السطر الرابع: أسماء العناصر مفصولة بفاصلة (مثلاً، Laptop,Mouse,Keyboard)
  • السطر الخامس: الأسعار مفصولة بفاصلة (مثلاً، 999.99,25.50,75.00)
  • السطر السادس: الكميات مفصولة بفاصلة (مثلاً، 15,50,30)

المخرجات:

  • لأمر add:
    • Added [item_name] to inventory
    • Price: $[price]
    • Quantity: 0
  • لأمر check (العنصر موجود):
    • [item_name] is in stock
    • Price: $[price]
    • Quantity: [quantity]
  • لأمر check (العنصر غير موجود): [item_name] is not in stock
  • لأمر sell (مخزون كافٍ):
    • Sold [quantity_to_sell] [item_name]
    • Total: $[total_price]
    • Remaining stock: [new_quantity]
  • لأمر sell (مخزون غير كافٍ):
    • Insufficient stock for [item_name]
    • Available: [current_quantity]
  • لأمر sell (العنصر غير موجود): [item_name] is not in stock
  • لأمر غير صالح: Invalid command

جرّب بنفسك

use std::collections::HashMap;
use std::io;

fn main() {
    // قراءة المدخلات
    let mut command = String::new();
    io::stdin().read_line(&mut command).expect("Failed to read line");
    let command = command.trim();
    
    let mut item_name = String::new();
    io::stdin().read_line(&mut item_name).expect("Failed to read line");
    let item_name = item_name.trim();
    
    let mut value_input = String::new();
    io::stdin().read_line(&mut value_input).expect("Failed to read line");
    let value_input = value_input.trim();
    
    let mut items_input = String::new();
    io::stdin().read_line(&mut items_input).expect("Failed to read line");
    let items_input = items_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();
    
    // إنشاء HashMap للمخزون
    let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
    
    // TODO: اكتب الكود الخاص بك أدناه
    // قم بتحليل المدخلات المفصولة بفاصلة وتعبئة المخزون
    // استخدم تعبير match على command للتعامل مع عمليات الإضافة (add)، والتحقق (check)، والبيع (sell)
    // تذكر إخراج الرسائل المناسبة بناءً على الأمر
    
}

جميع دروس Logic & Flow