Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_1_10 / Лекция 10.pptx
Скачиваний:
54
Добавлен:
21.05.2015
Размер:
294.21 Кб
Скачать

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

Структуры могут быть элементами массивов.

Чтобы объявить массив структур, необходимо сначала определить структуру, а затем объявить массив элементов этого структурного типа.

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

inv_type invtry[100];

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

const int SIZE = 100; struct inv_type

{

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

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

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

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

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

запасов

} invtry[SIZE];

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

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

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

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

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;

}}

}

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

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

}

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

Эта функция просматривает строку, адресуемую указателем str, на предмет вхождения в нее символа, который хранится в младшем байте переменной 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);

}

Соседние файлы в папке lekcii_1_10