Печать отчета об инвентаризации
Часть раздела Логика и управление потоком путешествия по 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) для итерации по всей карте inventory. Для каждой пары ключ-значение обращайтесь к названию товара через 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;
}Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров