Структуры.Информация о товарах

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
b0006
Сообщения: 3
Зарегистрирован: 17 дек 2013, 16:35

Тут, конечно, код Си++,но мне надо перевести на Си(хотя не мне это не так важно). Мне важно, чтобы эту программу доделать под это:
Продукты питания: наименование, вес, цена, срок годности. Дополнить вывод информацией о товарах, которые следует уценить (срок годности которых истекает через 2 дня или ранее).

Код: Выделить всё

#include <stdafx.h>
#include <iostream>
#include <cctype>
#include <cstring>
#include <cstdlib>
#include <windows.h>
using namespace std;
 
const int SIZE = 150;
 
struct inv_type
{
    char item [40]; // наименование товара.
    double cost;    // стоимость. 
    double retail;  // розничная цена.
    int on_hand;    // имеющееся в наличии количество.
    int lead_time;  // число дней до пополнения запасов.
} invtry [SIZE];
 
void enter ();
void init_list ();
void display ();
void update ();
void input (int i);
int menu ();
 
int main ()
{
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
 
    char choice;
 
    init_list ();
 
    for(; ;) 
    {
        choice = menu ();
 
        switch (choice)
        {
        case 'e': 
            enter ();
            break;
 
        case 'd': 
            display ();
            break;
 
        case 'u': 
            update ();
            break;
 
        case 'q': 
            return 0;
        }
    }
}
 
// Инициализация массива структур.
void init_list ()
{
    int t;
 
    // Имя нулевой длины означает пустое имя.
    for (t = 0; t < SIZE; t++) 
        *invtry[t].item = '\0';
}
 
// Получение команды меню, выбранной пользователем.
int menu ()
{
    char ch;
 
    cout << '\n';
 
    do 
    {
        cout << "(E)nter\n";   //Ввести новый элемент.
        cout << "(D)isplay\n"; // Отобразить всю ведомость.
        cout << "(U)pdate\n";  // Изменить элемент.
        cout << "(Q)uit\n\n";  // Выйти из программы.
        cout << "Выберите команду: ";
        cin >> ch;
    } while (!strchr ( "eduq", tolower (ch) ) );
    return tolower (ch);
}
 
// Ввод элементов в инвентарную ведомость.
void enter ()
{
    int i;
 
    // находим первую свободную структуру.
    for(i = 0; i < SIZE; i++)
        if(!*invtry[i].item) break;
 
    // Если массив полон, значение i будет равно SIZE.
    if(i == SIZE)
    {
        cout << "Список полон.\n";
        return;
    }
 
    input(i);
}
 
// Ввод информации.
void input (int i)
{
    cout << "Товар: ";
    cin >> invtry[i].item;
 
    cout << "Стоимость: ";
    cin >> invtry[i].cost;
 
    cout << "Розничная цена: ";
    cin >> invtry[i].retail;
 
    cout << "В наличии: ";
    cin >> invtry[i].on_hand;
 
    cout << "Время до пополнения запасов (в днях): ";
    cin >> invtry[i].lead_time;
}
 
// Модификация существующего элемента.
void update ()
{
    int i;
    char name [80];
 
    cout << "введите наименование товара: ";
    cin >> name;
 
    for(i = 0; i < SIZE; i++)
        if(!strcmp (name, invtry[i].item) ) break;
 
    if(i == SIZE)
    {
        cout << "Товар не найден.\n";
        return;
    }
    cout << "Введите новую информацию:\n";
    input(i);
}
 
// Отображаем на экране инвентарной ведомости.
void display ()
{
    int t;
 
    for(t = 0; t < SIZE; t++)
    {
        if(*invtry[t].item)
        {
            cout << invtry[t].item << '\n';
            cout << "Стоимость: $" << invtry[t].cost;
            cout << "\nВ розницу: $";
            cout << invtry[t].retail << '\n';
            cout << "В наличии: " << invtry[t].on_hand;
            cout << "\nДо пополнения осталось: ";
            cout << invtry[t].lead_time << " дней\n\n";
        }
    }
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Срок годности не фигурирует как поле структуры? Как его предполагается вычислять? Связан ли как-то срок годности с неочевидным полем lead_time?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
b0006
Сообщения: 3
Зарегистрирован: 17 дек 2013, 16:35

Romeo писал(а):Срок годности не фигурирует, как поле структуры? Как его предполагается вычислять? Связан ли как-то срок годности с не очевидным полем lead_time?

Срок годности,как и вес здесь не присутствует) и lead_time не связан со срок годностью)
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

А как тогда он тогда должен вычисляться?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
b0006
Сообщения: 3
Зарегистрирован: 17 дек 2013, 16:35

Romeo писал(а):А как тогда он тогда должен вычисляться?

Вот поэтому я и прошу допилить прогу под данное условие. В этом коде просто принцип схожим должен быть)
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Прошу прощения, я не заметил, что в условии указано, что срок годности должен входить в продукт. К сожалению, я не вижу в условии, что у продукта должна быть указана ещё и дата производства, так что не совсем понятно каким образом определять когда истёк срок годности.

Могу предположить, что в таком случае срок годности должен определяться количеством дней, через которые продукт испортится, что существенно упростит задачу (не нужно будет брать текущую дату и сравнивать с датой происводства и сроком годности в обычном понимании этого слова). Прошу подтвердить это предположение. Если это так, то исправление кода вообще элементарное:

1. Добавить новое поле в структуру.
2. Добавить считываение поля при создании нового продукта.
3. Добавить новый пункт меню и новую функцию для этого пункта.
4. Новая функция должна пробежать по всем продуктам и вывести имена тех, у которых новое поле меньше либо равно 2.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить