Выбрать главу

 char item[40]; // наименование товара

 double cost; // стоимость

 double retail; // розничная цена

 int on_hand; // имеющееся в наличии количество

 int lead_time; // число дней до пополнения запасов

} invtry[SIZE];

Размер массива выбран произвольно. При желании его можно легко изменить. Обратите внимание на то, что размерность массива задана с использованием const-переменной. А поскольку размер массива во всей программе используется несколько раз, применение const-переменной для этой цели весьма оправданно. Чтобы изменить размер массива, достаточно изменить значение константной переменной SIZE, а затем перекомпилировать программу. Использование const-переменной для определения "магического числа", которое часто употребляется в программе, — обычная практика в профессиональном С++-коде.

Разрабатываемая программа должна обеспечить выполнение следующих действий:

■ ввод информации о товарах, хранимых на складе;

■ отображение инвентарной ведомости;

■ модификация заданного элемента.

Прежде всего напишем функцию main(), которая должна иметь примерно такой вид.

int main()

{

 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;

  }

 }

}

Функция main() начинается с вызова функции init_list(), которая инициализирует массив структур. Затем организован цикл, который отображает меню и обрабатывает команду, выбранную пользователем. Приведем код функции init_list().

// Инициализация массива структур.

void init_list()

{

 int t;

 // Имя нулевой длины означает пустое имя.

 for(t=0; t<SIZE; t++) *invtry[t].item = '\0';

}

Функция init_list() подготавливает массив структур для использования, помещая в первый байт поля item нулевой символ. Предполагается, что если поле item пустое, то структура, в которой оно содержится, попросту не используется.

Функция menu_select() отображает команды меню и принимает вариант, выбранный пользователем.

// Получение команды меню, выбранной пользователем.

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);

}

Пользователь выбирает из предложенного меню команду, вводя нужную букву. Например, чтобы отобразить всю инвентарную ведомость, нажмите букву "D".

Функция menu() вызывает библиотечную функцию C++ strchr(), которая имеет такой прототип.

char *strchr(const char *str, int ch);

Эта функция просматривает строку, адресуемую указателем str, на предмет вхождения в нее символа, который хранится в младшем байте переменной ch. Если такой символ обнаружится, функция возвратит указатель на него. И в этом случае значение, возвращаемое функцией, по определению будет истинным. Но если совпадения символов не произойдет, функция возвратит нулевой указатель, который по определению представляет собой значение ЛОЖЬ. Так здесь организована проверка того, являются ли значения, вводимые пользователем, допустимыми командами меню.

Функция enter() предваряет вызов функции input(), которая "подсказывает" пользователю порядок ввода данных и принимает их. Рассмотрим код обеих функций.

// Ввод элементов в инвентарную ведомость.