Drukowanie raportu magazynowego
Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 34 z 56.
Wyzwanie
ŁatwyUzupełnij system śledzenia zapasów, implementując kompleksową funkcję raportowania zapasów. Ta ostatnia lekcja pokazuje, jak iterować przez całą mapę i przedstawiać wszystkie zapisane dane w przejrzystym, uporządkowanym formacie.
Zacznij od następujących zapasów:
map<string, int> inventory = {
{"apples", 50},
{"bananas", 30},
{"oranges", 25},
{"grapes", 40},
{"strawberries", 15}
};Twój program powinien:
- Wygenerować kompletny raport zapasów, wyświetlający wszystkie produkty i ich aktualne ilości
- Obliczyć i wyświetlić łączną liczbę różnych produktów w zapasach
- Obliczyć i wyświetlić łączną ilość wszystkich produktów
- Określić i wyświetlić produkt o największej ilości
- Określić i wyświetlić produkt o najmniejszej ilości
Użyj dokładnie następującego formatu wyjściowego:
Nagłówek raportu zapasów:
===== INVENTORY REPORT =====Wszystkie produkty (w kolejności alfabetycznej):
apples: 50
bananas: 30
grapes: 40
oranges: 25
strawberries: 15Statystyki podsumowujące:
===== SUMMARY =====
Total items: 5
Total quantity: 160
Highest stock: apples (50)
Lowest stock: strawberries (15)Użyj pętli for opartej na zakresie, aby iterować przez całą mapę zapasów. Dla każdej pary klucz-wartość pobierz nazwę produktu za pomocą pair.first, a ilość za pomocą pair.second. Podczas iteracji mapa automatycznie zachowuje kolejność alfabetyczną, więc dodatkowe sortowanie nie jest potrzebne.
Aby znaleźć produkt o najmniejszej ilości, zainicjalizuj zmienną lowestQuantity wartością INT_MAX (największą możliwą wartością typu całkowitego, dostępną po dołączeniu <climits>). Dzięki temu ilość pierwszego produktu zawsze będzie mniejsza od wartości początkowej, więc porównanie zadziała poprawnie niezależnie od rzeczywistych ilości produktów w zapasach.
Spróbuj swoich sił
#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;
}Wszystkie lekcje w sekcji Logika i przepływ programu
1Wskaźniki i pamięć
Czym jest wskaźnik?Operator pobrania adresuOperator dereferencjiWskaźniki zeroweWskaźniki i tabliceDynamiczne zarządzanie pamięcią za pomocą „new”Zwalnianie pamięci za pomocą „delete”Podsumowanie — ćwiczenia ze wskaźnikami2Wektory (tablice dynamiczne)
Wprowadzenie do std::vectorTworzenie wektoraDodawanie elementówDostęp do elementówRozmiar wektoraIterowanie za pomocą pętli forPętla for oparta na zakresieUsuwanie elementówPodsumowanie — operacje na wektorach5Projekt: Narzędzie do zarządzania zapasami
Konfiguracja projektuDodawanie i aktualizowanie produktów3Projekt: narzędzie do listy zadań
Przegląd projektuDodawanie zadaniaPoćwicz samodzielnie: Kompilator C++ online