Menu
CoddyTech

Печать отчета об инвентаризации

Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 34 из 56.

challenge icon

Задание

Легко

Завершите систему учёта запасов, реализовав функцию подробного отчёта о запасах. В этом заключительном уроке показано, как перебрать всю карту и представить все сохранённые данные в удобном и упорядоченном виде.

Начните со следующих запасов:

map<string, int> inventory = {
    {"apples", 50},
    {"bananas", 30},
    {"oranges", 25},
    {"grapes", 40},
    {"strawberries", 15}
};

Ваша программа должна:

  1. Сформировать полный отчёт о запасах, в котором будут показаны все товары и их текущие количества
  2. Подсчитать и вывести общее количество разных товаров в запасах
  3. Подсчитать и вывести общее количество всех товаров вместе
  4. Определить и вывести товар с наибольшим количеством
  5. Определить и вывести товар с наименьшим количеством

Используйте следующий точный формат вывода:

Заголовок отчёта о запасах:

===== 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;
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор C++