Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RPZ.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
551.57 Кб
Скачать

Прототипы функций

Для выполнения каждой операции создается отдельная функция. Прототипы функций, которые будут использованы в проекте, приведены ниже.

Функция ListData будет выполнять вывод списка рейсов:

void ListData(Tc a[], int n)

Функция DispData будет выполнять вывод сведений об отдельной записи (отдельном рейсе):

void DispData(Tc a[], int n)

Функция main() – головная

Указанная последовательность работы отражена в головной функции программы. Дополним заготовку программы объявлением переменных:

массив структур - основной объект работы программы

Tc TechCenter[MAXRECS];

Несколько переменных используются для «вырезания» из считанной строки s отдельных частей и копирования данных в соответствующие элементы структуры:

char snumr[4+1], sname[20+1], stech[30+1], skol[6+1];

Стандарт языка C не предусматривает отдельного типа данных «строка символов». Строка рассматривается как массив, элементами которого являются символы. Строка должна заканчиваться нулевым символом.

В связи с этим для наглядности в объявлениях строк snumr, sname и т.д. размер массива указан с добавлением единицы на нулевой символ.

Например, snumr[4+1]означает, что строка numr содержит 5 символов, при этом 5-й символ – нулевой.

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

После этого на экран выводится перечень операций.

do

{

...

} while (choice <5 && choice >0);

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

Считывание данных из файла

В заготовке программы, созданной ранее, после чтения строки из файла добавим формирование полей структуры массива TechCenter.

Считанная из файла строка, сохраняется в переменной s[DL].

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

nRecs=0; i=0;

while (fgets(s, DL, fin)) /* считывание строки s */

{

/* Формирование полей структуры:

...

*/

i++;

nRecs++;

}

printf("%s %d\n",Rus("прочитано записей: "), nRecs);

Операторы в теле цикла зависят от типов полей, в которые будет заноситься информация. При этом используются стандартные функции работы со строками:

strcpy(*dest, *src) – копирование строки src в строку dest;

strncpy(*dest, *src, n) – копирование n символов, начиная с адреса src, в строку dest;

atoi(*src, n) – преобразование строки src в целое число n;

atof(*src, n) – преобразование строки src в вещественное число n.

/* Формирование полей структуры: */

/* номер продукта: копирование первых 4 символов */

strncpy(skol, &s[59], 6); skol[6]='\0';

TechCenter[i].kol=atoi(skol);

strncpy(snumr, s, 4); snumr[4]='\0';

TechCenter[i].numr=atoi(snumr);

strncpy(sname, &s[5], 24);

sname[20]='\0'; strcpy(TechCenter[i].name, sname);

strncpy(stech, &s[29], 30); stech[30]='\0';

strcpy(TechCenter[i].tech, stech);

Функции, входящие в состав программы

Кроме функции main(), наличие которой обязательно в любой программе на языке C, программа содержит несколько функций, каждая из которых выполняет одну операцию. Ниже приведены прототипы функций:

Основные функции:

void ListData(TechCenter a[], int);

выводит на экран список элементов массива

void DispData(TechCenter a[], int);

выводит на экран содержимое одной записи

void SortSelectStr(Tc x[], int n)

выполняет сортировку массива методом последовательных минимумов по наименованию name структур

FindRecName(Tc x[], char *str);

возвращает первую запись в массиве, для которой строковое поле (или его начало) совпадает с заданной строкой.

Кроме указанных, в программе используются вспомогательные функции:

void Swap(Tc *x, Tc *y);

выполняет обмен данными для двух записей (двух структур) - элементов массива.

Tc Assign(Tc x);

выполняет присваивание значений полей структуры-источника полям структуры-приемника.

Общая схема взаимодействия программ приведена в приложении 1.