
- •Курсовой проект
- •«Учёт запасных частей к сельскохозяйственной технике»
- •Содержание
- •Введение и постановка задачи
- •Описание входных и выходных даннях Описание структуры данных
- •Описание алгоритмов программы Общая схема работы программы
- •Прототипы функций
- •Функция main() – головная
- •Считывание данных из файла
- •Описание основных функций
- •Как было уже сказано, для выполнения операций с массивом структур головная программа main() вызывает ряд функций. Ниже приводится краткое описание этих функций.
- •Функция ListData – вывод массива данных
- •Функция DispData – вывод одной записи
- •Функция Assign – присвоение значения элементу массива
- •Функция Swap – обмен содержимым двух записей
- •Функции сортировки массивов
- •Сортировка методом последовательных минимумов
- •Функции сортировки массивов
- •Тестовый пример
- •Порядок работы с программой
- •Выводы и предложения
- •Список источников информации:
- •Приложения Исходный текст заголовочного файла
Прототипы функций
Для выполнения каждой операции создается отдельная функция. Прототипы функций, которые будут использованы в проекте, приведены ниже.
Функция 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.