طباعة تقرير المخزون
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 34 من 56.
التحدي
سهلأكمل نظام تتبع المخزون الخاص بك من خلال تنفيذ ميزة تقرير المخزون الشاملة. يوضح هذا الدرس الأخير كيفية التكرار عبر الخريطة (map) بالكامل وتقديم جميع البيانات المخزنة بتنسيق نظيف ومنظم.
ابدأ بالمخزون التالي:
map<string, int> inventory = {
{"apples", 50},
{"bananas", 30},
{"oranges", 25},
{"grapes", 40},
{"strawberries", 15}
};يجب أن يقوم برنامجك بما يلي:
- إنشاء تقرير مخزون كامل يعرض جميع العناصر وكمياتها الحالية
- حساب وعرض العدد الإجمالي للعناصر المختلفة في المخزون
- حساب وعرض الكمية الإجمالية لجميع العناصر مجتمعة
- تحديد وعرض العنصر الذي يحتوي على أعلى كمية
- تحديد وعرض العنصر الذي يحتوي على أقل كمية
استخدم تنسيق المخرجات الدقيق التالي:
رأس تقرير المخزون:
===== INVENTORY REPORT =====جميع العناصر (بالترتيب الأبجدي):
apples: 50
bananas: 30
grapes: 40
oranges: 25
strawberries: 15إحصائيات الملخص:
===== SUMMARY =====
Total items: 5
Total quantity: 160
Highest stock: apples (50)
Lowest stock: strawberries (15)استخدم حلقة for القائمة على النطاق (range-based for loop) للتكرار عبر خريطة المخزون بالكامل. لكل زوج من المفتاح والقيمة، قم بالوصول إلى اسم العنصر باستخدام pair.first والكمية باستخدام pair.second. تحافظ الخريطة تلقائياً على الترتيب الأبجدي عند التكرار، لذا لا يلزم إجراء فرز إضافي.
للعثور على العنصر ذو الكمية الأقل، قم بتهيئة متغير lowestQuantity الخاص بك إلى INT_MAX (أكبر قيمة صحيحة ممكنة، متاحة بعد تضمين <climits> أو <iostream>). يضمن ذلك أن كمية العنصر الأول ستكون دائماً أقل من القيمة الابتدائية، بحيث تعمل المقارنة بشكل صحيح بغض النظر عن الكميات الفعلية في المخزون.
جرّب بنفسك
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Initialize inventory with existing items
map<string, int> inventory;
inventory["apples"] = 50;
inventory["bananas"] = 30;
inventory["oranges"] = 25;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string itemName;
int quantity;
cin >> itemName >> quantity;
if (inventory.count(itemName) == 0) {
cout << "Error: " << itemName << " not found in inventory" << endl;
} else if (inventory[itemName] < quantity) {
cout << "Error: Cannot remove " << quantity << " " << itemName << ". Only " << inventory[itemName] << " in stock" << endl;
} else {
inventory[itemName] -= quantity;
cout << "Removed " << quantity << " " << itemName << ". New total: " << inventory[itemName] << endl;
}
}
cout << "Final Inventory:" << endl;
for (auto& item : inventory) {
cout << item.first << ": " << item.second << endl;
}
return 0;
}جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector5مشروع: أداة المخزون
إعداد المشروعإضافة وتحديث العناصر