بيع عنصر
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 52 من 66.
التحدي
سهلستتلقى خمسة مدخلات. المدخل الأول هو اسم العنصر المراد بيعه. المدخل الثاني هو الكمية المراد بيعها. المدخل الثالث هو قائمة بأسماء العناصر في المخزون مفصولة بفاصلة. المدخل الرابع هو قائمة بالأسعار المقابلة لكل عنصر مفصولة بفاصلة. المدخل الخامس هو قائمة بالكميات المقابلة لكل عنصر مفصولة بفاصلة. قم ببناء HashMap لتخزين بيانات المخزون حيث يكون المفتاح هو اسم العنصر والقيمة هي "tuple" تحتوي على السعر والكمية (f64, i32). ثم حاول بيع الكمية المطلوبة من العنصر.
المتطلبات:
- استيراد
HashMapمنstd::collections - قراءة المدخل الأول (اسم العنصر المراد بيعه) وإزالة المسافات البيضاء
- قراءة المدخل الثاني (الكمية المراد بيعها) وإزالة المسافات البيضاء
- تحويل الكمية المراد بيعها إلى
i32 - قراءة المدخل الثالث (أسماء العناصر المفصولة بفاصلة) وإزالة المسافات البيضاء
- قراءة المدخل الرابع (الأسعار المفصولة بفاصلة) وإزالة المسافات البيضاء
- قراءة المدخل الخامس (الكميات المفصولة بفاصلة) وإزالة المسافات البيضاء
- إنشاء
HashMap<String, (f64, i32)>قابل للتعديل (mutable) للمخزون - تقسيم أسماء العناصر بواسطة الفواصل
- تقسيم الأسعار بواسطة الفواصل وتحويل كل منها إلى
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 لتخزين المخزون
// معالجة المدخلات وبناء المخزون
// التحقق مما إذا كان العنصر موجوداً ومعالجة عملية البيع
}جميع دروس Logic & Flow
1تدفق التحكم المتقدم
تعبير 'match'مطابقة قيم متعددةمطابقة النطاقاتتعبير 'if let'الحلقات التكرارية كتعبيراتمراجعة - محلل أوامر بسيط4تجميع البيانات باستخدام Structs
ما هو الـ Struct؟نظرة عامة على الـ Structsالوصول إلى حقول الـ Structالـ Structs القابلة للتعديلالـ Structs كمعاملات للدوالالـ Tuple Structsمراجعة - إنشاء Book Struct7معالجة الأخطاء باستخدام 'Result'
ما هو 'Result'؟استخدام 'match' مع 'Result'is_ok() و is_err()اختصارات: unwrap و expectعامل علامة الاستفهام '?'تحويل السلاسل النصية إلى أرقامملخص - دالة القسمة الآمنة10الـ Closures والدوال المجهولة
ما هو الـ Closure؟تعريف Closure بسيطالـ Closures مع المعاملاتالتقاط البيئة المحيطةملخص - Closure الجامع البسيط2مقدمة في الـ Vectors
ما هو الـ Vector؟إنشاء Vectorإضافة عناصر باستخدام pushالوصول إلى عناصر الـ Vectorالتكرار عبر الـ Vectorالتكرار القابل للتعديل (Mutable Iteration)إزالة العناصرمراجعة - متتبع نقاط بسيط5أزواج (المفتاح والقيمة) مع Hash Maps
ما هو Hash Map؟إنشاء Hash Mapإدراج أزواج (المفتاح والقيمة)الوصول إلى القيمالتكرار عبر Hash Mapتحديث قيمةإزالة زوجملخص - عداد الكلمات6التعامل مع غياب القيم باستخدام 'Option'
ما هو الـ 'Option'؟استخدام 'match' مع 'Option''is_some()' و 'is_none()'فك تغليف الـ 'Option'الدالة 'expect'توفير قيمة افتراضية: 'unwrap_or'مراجعة - البحث عن عنصر9شرائح الـ String والمزيد
String مقابل &strإنشاء شرائح الـ Stringالشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى