مراجعة - تحديث المخزون
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 32 من 65.
التحدي
سهلقم بإنشاء برنامج يدير نظام جرد المستودعات من خلال تتبع مستويات مخزون المنتجات، والتحقق من العناصر الموجودة، وإضافة منتجات جديدة بأمان، وتحديث الكميات. يجب أن يقوم برنامجك بما يلي:
- قراءة مدخل نصي (string) يمثل اسم المستودع
- قراءة أزواج متعددة من المدخلات تمثل أسماء المنتجات وكميات مخزونها الحالية (سينتهي الإدخال عندما تتلقى
"inventory_done") - قراءة مدخل نصي يمثل منتجاً للتحقق من وجوده
- قراءة مدخل نصي يمثل منتجاً جديداً لإضافته بمخزون افتراضي
- قراءة مدخل نصي يمثل منتجاً لإعادة تزويد مخزونه
- قراءة مدخل نصي يمثل الكمية الإضافية المراد إضافتها للمنتج الذي تمت إعادة تزويده
- إنشاء Map لتخزين أسماء المنتجات كمفاتيح (keys) وكميات مخزونها كقيم (values)
- استخدام
containsKey()للتحقق مما إذا كان المنتج المحدد موجوداً في الجرد - استخدام
putIfAbsent()لإضافة المنتج الجديد بمخزون افتراضي قدره 50 وحدة - تحديث كمية المخزون للمنتج المعاد تزويده عن طريق إضافة الكمية الإضافية
- طباعة تقرير إدارة الجرد بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم المستودع هو "Central Warehouse"، والجرد يتضمن "Laptops" بـ 25 وحدة، و "Mice" بـ 150 وحدة، و "Keyboards" بـ 75 وحدة، والمنتج المراد التحقق منه هو "Laptops"، والمنتج الجديد المراد إضافته هو "Monitors"، والمنتج المراد إعادة تزويده هو "Mice"، والكمية الإضافية هي 30، فيجب أن يخرج برنامجك ما يلي:
Warehouse: Central Warehouse
Initial Inventory: {Laptops: 25, Mice: 150, Keyboards: 75}
Inventory Operations:
Checking for 'Laptops': Product found in inventory
Adding 'Monitors': New product added with default stock 50
Restocking 'Mice': Updated quantity from 150 to 180
Final Inventory: {Laptops: 25, Mice: 180, Keyboards: 75, Monitors: 50}
Inventory Summary:
Total products: 4
Total stock units: 330
Low stock items (below 30): 1
Products restocked: 1
Status: Inventory management completedإذا كان اسم المستودع هو "North Storage"، والجرد يتضمن "Tablets" بـ 40 وحدة، و "Headphones" بـ 80 وحدة، والمنتج المراد التحقق منه هو "Smartphones"، والمنتج الجديد المراد إضافته هو "Tablets"، والمنتج المراد إعادة تزويده هو "Headphones"، والكمية الإضافية هي 20، فيجب أن يخرج برنامجك ما يلي:
Warehouse: North Storage
Initial Inventory: {Tablets: 40, Headphones: 80}
Inventory Operations:
Checking for 'Smartphones': Product not found in inventory
Adding 'Tablets': Product already exists, keeping stock 40
Restocking 'Headphones': Updated quantity from 80 to 100
Final Inventory: {Tablets: 40, Headphones: 100}
Inventory Summary:
Total products: 2
Total stock units: 140
Low stock items (below 30): 0
Products restocked: 1
Status: Inventory management completedإذا كان اسم المستودع هو "South Depot"، والجرد يتضمن "Printers" بـ 15 وحدة، و "Scanners" بـ 35 وحدة، و "Cables" بـ 200 وحدة، والمنتج المراد التحقق منه هو "Scanners"، والمنتج الجديد المراد إضافته هو "Webcams"، والمنتج المراد إعادة تزويده هو "Printers"، والكمية الإضافية هي 45، فيجب أن يخرج برنامجك ما يلي:
Warehouse: South Depot
Initial Inventory: {Printers: 15, Scanners: 35, Cables: 200}
Inventory Operations:
Checking for 'Scanners': Product found in inventory
Adding 'Webcams': New product added with default stock 50
Restocking 'Printers': Updated quantity from 15 to 60
Final Inventory: {Printers: 60, Scanners: 35, Cables: 200, Webcams: 50}
Inventory Summary:
Total products: 4
Total stock units: 345
Low stock items (below 30): 0
Products restocked: 1
Status: Inventory management completedيجب أن يستخدم برنامجك containsKey() للتحقق مما إذا كان المنتج موجوداً في الجرد، و putIfAbsent() لإضافة منتجات جديدة بأمان بمخزون افتراضي قدره 50 وحدة، وتحديثات قيم الخريطة (map) المباشرة لزيادة كميات المخزون. قم بعدّ عناصر المخزون المنخفض كعناصر ذات كميات أقل من 30 وحدة. احسب إجمالي وحدات المخزون عن طريق جمع كل الكميات في الجرد النهائي. سيكون تنسيق الإدخال: اسم المستودع، ثم أسماء المنتجات وكميات المخزون بالتناوب (كسلاسل نصية تحتاج إلى تحويلها إلى أعداد صحيحة)، وتنتهي بـ "inventory_done"، متبوعة بالمنتج المراد التحقق منه، والمنتج الجديد المراد إضافته، والمنتج المراد إعادة تزويده، والكمية الإضافية.
جرّب بنفسك
import 'dart:io';
void main() {
// قراءة اسم المستودع
String? warehouseName = stdin.readLineSync();
// قراءة عناصر المخزون حتى "inventory_done"
Map<String, int> inventory = {};
while (true) {
String? input = stdin.readLineSync();
if (input == "inventory_done") break;
String productName = input!;
String? quantityStr = stdin.readLineSync();
int quantity = int.parse(quantityStr!);
inventory[productName] = quantity;
}
// قراءة المنتج للتحقق منه
String? productToCheck = stdin.readLineSync();
// قراءة منتج جديد لإضافته
String? newProduct = stdin.readLineSync();
// قراءة المنتج لإعادة التخزين
String? productToRestock = stdin.readLineSync();
// قراءة الكمية الإضافية
String? additionalQuantityStr = stdin.readLineSync();
int additionalQuantity = int.parse(additionalQuantityStr!);
// TODO: اكتب الكود الخاص بك أدناه
// استخدم containsKey() للتحقق مما إذا كانت المنتجات موجودة
// استخدم putIfAbsent() لإضافة منتجات جديدة بمخزون افتراضي 50
// تحديث كميات المخزون وحساب إحصائيات المخزون
// طباعة تقرير إدارة المخزون
print("Warehouse: $warehouseName");
// أضف بيانات الإخراج الخاصة بك هنا
}جميع دروس Logic & Flow
1التعامل المتقدم مع القوائم
خصائص القائمة: first و lastحالة القائمة: isEmpty و isNotEmptyعكس القائمةالإضافة إلى القائمة: insertالحذف من القائمة: removeWhereالبحث في القائمة: indexOfفرز القائمةخلط القائمةملخص - منظم القوائم4معالجة الـ Map المتقدمة
التكرار عبر الـ Mapالتحقق من المفاتيح والقيمخصائص الـ Map: keys و valuesإضافة مشروطة: putIfAbsentإزالة العناصر من الـ Mapالـ Maps المتداخلةمراجعة - تحديث المخزون2عمليات القوائم الوظيفية
التحويل باستخدام 'map'التصفية باستخدام 'where'استخدام '.toList()'التحقق من الشروط باستخدام 'any'الشروط باستخدام 'every'البحث باستخدام 'firstWhere'مراجعة - تصفية البيانات5مشروع: حاسبة عربة التسوق
إعداد المشروعإضافة العناصر إلى العربة3المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة