Есть файл, в нем содержаться данные о наличии товара и его количестве на складе. Как определить какого типа товары содержаться в количестве более 20 штук? Как узнать насколько товара одного типа больше, чем другого?
Как сделать это с использованием класса?
Здравствуйте, Diger, Вы писали:
D>Есть файл, в нем содержаться данные о наличии товара и его количестве на складе. Как определить какого типа товары содержаться в количестве более 20 штук? Как узнать насколько товара одного типа больше, чем другого?
Прочитать файл.
Построить таблицу: название -> количество.
Сделать над ней все интересующие тебя действия.
Или же выполнять все действия прямо по ходу чтения файла.
D>Как сделать это с использованием класса?
Откуда взялось волшебное слово "класс"? Препод сказал "сделать с использованием класса!"? Было бы очень неплохо пойти к нему и вытрясти, что он имеет в виду. Полезно для обоих.
Видимо, имеется в виду, что программу (сиречь, структуры и алгоритмы) нужно инкапсулировать в одном классе.
Который умеет делать всю базовую работу.
Представляется, что у программы могут быть два дизайна.
Первый: объект "база данных", который
— читает из файла во внутреннее представление (в таблицу)
и затем
— отвечает на запросы известного вида
Второй:
— парсер файла, который читает построчно записи из файла и выдаёт их в структурированном виде
— фильтры, которые читают структурированные записи и передают дальше только те, которые удовлетворяют каким-то критериям
— приёмники, совершающие окончательную обработку отфильтрованных записей (вывод, сравнение)
и надо всем этим — конфигуратор, собирающий конвеер из парсера, фильтров и приёмника в зависимости от запроса.
Думаю, что сделать первый вариант — проще. И в большей степени отвечает
интуитивно понятному тех.заданию "сделать с использованием класса".
Чтение из файла может быть совершенно дубовым: std::cin >> name >> amount; (при условии, что имя товара не содержит пробелов).
Далее — запись в std::map<string,int>; заодно проверишь, находится ли БД в 1НФ, т.е. нет ли там повторений — а если есть, то либо надо суммировать количество, либо ругаться.
boost::multi_index не предлагаю — по первости его сложно будет осилить, хотя именно на нём задача фильтрации по второму полю делается легко и просто (а на map придётся бегать по всем записям).
... << RSDN@Home 1.2.0 alpha rev. 655>>