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

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;

}

Функция enter() сначала находит пустую структуру. Для этого проверяется поле item каждого (по очереди) элемента массива invtry, начиная с первого. Если поле item оказывается пустым, то предполагается, что структура, к которой оно относится, еще ничем не занята. Если не отыщется ни одной свободной структуры при проверке всего массива структур, управляющая переменная цикла i станет равной его размеру. Это говорит о том, что массив полон, и в него уже нельзя ничего добавить. Если же в массиве найдется свободный элемент, будет вызвана функция input() для получения информации о товаре, вводимой пользователем. Если вас интересует, почему код ввода данных о новом товаре не является частью функции enter(), то ответ таков: функция input() используется также и функцией update(), о которой речь впереди.

Поскольку информация о товарах на складе может меняться, программа ведения инвентарной ведомости должна позволять вносить изменения в ее отдельные элементы. Это реализуется путем вызова функции update().

// Модификация существующего элемента.

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

}

Эта функция предлагает пользователю ввести наименование товара, информацию о котором ему нужно изменить. Затем она просматривает весь список существующих элементов, и если указанный товар в нем имеется, то вызывается функция input(), которая обеспечивает прием от пользователя новой информации.

Нам осталось рассмотреть функцию display(). Она выводит на экран инвентарную ведомость в полном объеме. Код функции display() выглядит так.

// Отображение на экране инвентарной ведомости.

void display()

{

 int t;

 for(t=0; t<SIZE; t++ ) {

  if(*invtry[t].item) {

   cout << invtry[t].item << '\n';

   cout << "Стоимость: $" << invtry[t].cost;

   cout << "\nB розницу: $";

   cout << invtry[t].retail << '\n';

   cout << "В наличии: " << invtry[t].on_hand;

   cout << "\nДо пополнения осталось: ";

   cout << invtry[t].lead_time << " дней\n\n";

  }

 }

}

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