Если вам нужно получить доступ к отдельным элементам массива inv_var.item, используйте индексацию. Например, с помощью этого кода можно посимвольно вывести на экран содержимое массива inv_var.item.

int t;

for(t=0; inv_var.itern[t]; t++)

 cout << inv_var.item[t];

Массивы структур

Структуры могут быть элементами массивов. И в самом деле, массивы структур используются довольно часто. Чтобы объявить массив структур, необходимо сначала определить структуру, а затем объявить массив элементов этого структурного типа. Например, чтобы объявить 100-элементный массив структур типа inv_type (который определен выше), достаточно записать следующее.

inv_type invtry[100];

Чтобы получить доступ к конкретной структуре в массиве структур, необходимо индексировать имя структуры. Например, чтобы отобразить на экране содержимое члена on_hand третьей структуры, используйте такую инструкцию.

cout << invtry[2].on_hand;

Подобно всем переменным массивов, у массивов структур индексирование начинается с нуля.

Простой пример инвентаризации склада

Чтобы продемонстрировать применение структур, разработаем простую программу управления складом, в которой для хранения информации о товарах, размещенных на складе компании, используется массив структур типа inv_type. Различные функции, определенные в этой программе, взаимодействуют со структурой и ее элементами по-разному.

Инвентарная ведомость будет храниться в структурах типа inv_type, организованных в массиве invtry.

const int SIZE = 100;

struct inv_type {

 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

}

Функция 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);

}

Перейти на страницу:

Все книги серии Изучайте C++ с профессионалами

Похожие книги