طباعة تقرير المخزون
جزء من قسم المنطق وتدفق التنفيذ في رحلة C++ على Coddy. الدرس 34 من 56.
التحدي
سهلأكمل نظام تتبّع المخزون بتنفيذ ميزة شاملة لإعداد تقرير المخزون. يوضّح هذا الدرس الأخير كيفية التكرار عبر خريطة كاملة وعرض جميع البيانات المخزّنة بتنسيق واضح ومنظّم.
ابدأ بالمخزون التالي:
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 مبنية على النطاق للتكرار عبر خريطة المخزون بالكامل. لكل زوج من مفتاح وقيمة، استخدم pair.first للوصول إلى اسم العنصر وpair.second للوصول إلى الكمية. تحافظ الخريطة تلقائيًا على الترتيب الأبجدي أثناء التكرار، لذا لا حاجة إلى أي فرز إضافي.
للعثور على العنصر ذي الكمية الأقل، ابدأ بتهيئة المتغير lowestQuantity بالقيمة INT_MAX (أكبر قيمة صحيحة ممكنة، ومتاحة بعد تضمين <climits>). يضمن ذلك أن كمية العنصر الأول ستكون دائمًا أقل من القيمة الابتدائية، وبالتالي ستعمل المقارنة بشكل صحيح بصرف النظر عن الكميات الفعلية في المخزون.
جرّب بنفسك
#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;
}جميع دروس المنطق وتدفق التنفيذ
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector5مشروع: أداة المخزون
إعداد المشروعإضافة وتحديث العناصرتدرّب بنفسك: مترجم C++ عبر الإنترنت