- •Курсовой проект
- •«Учёт запасных частей к сельскохозяйственной технике»
- •Содержание
- •Введение и постановка задачи
- •Описание входных и выходных даннях Описание структуры данных
- •Описание алгоритмов программы Общая схема работы программы
- •Прототипы функций
- •Функция main() – головная
- •Считывание данных из файла
- •Описание основных функций
- •Как было уже сказано, для выполнения операций с массивом структур головная программа main() вызывает ряд функций. Ниже приводится краткое описание этих функций.
- •Функция ListData – вывод массива данных
- •Функция DispData – вывод одной записи
- •Функция Assign – присвоение значения элементу массива
- •Функция Swap – обмен содержимым двух записей
- •Функции сортировки массивов
- •Сортировка методом последовательных минимумов
- •Функции сортировки массивов
- •Тестовый пример
- •Порядок работы с программой
- •Выводы и предложения
- •Список источников информации:
- •Приложения Исходный текст заголовочного файла
Описание основных функций
Схема описания: прототип, описание параметров, алгоритм, определение, пример вызова.
Как было уже сказано, для выполнения операций с массивом структур головная программа main() вызывает ряд функций. Ниже приводится краткое описание этих функций.
Для всех функций принят следующий порядок описания:
прототип функции;
пример вызова функции и описание параметров;
код (определение) функции.
Функция ListData – вывод массива данных
Прототип функции:
void ListData(Uchet a[], int);
Вызов функции:
void ListData(Tc a[], int n);
Параметры функции: имя массива и фактическое количество записей в массиве.
Определение функции:
void ListData(Tc a[], int n)
{
int i;
printf(Rus("СПИСОК ДЕТАЛЕЙ\n"));
for(i=0;i<n;i++)
{
printf("%4d %24s ", a[i].numr, Rus(a[i].name));
printf("%s %4i\n", Rus(a[i].tech), a[i].kol);
}
Функция выводит в цикле каждую запись массива.
Функция DispData – вывод одной записи
Выводит запись с задаваемым номером продукта. В данной программе функция DispData фактически выполняет поиск в массиве записи с указанным номером техники элементы массива последовательно просматриваются до тех пор, пока не будет найдена соответствующая запись или пока не будет достигнут конец массива. Если запись не найдена, выводится сообщение.
Прототип функции:
void DispData(Tc a[], int n);
Вызов функции:
void DispData(Tc a[], int n)
{
int i=0;
while (a[i].numr!=n && i<nRecs) i++;
if (i<nRecs)
{
printf("%4d %24s ", a[i].numr, Rus(a[i].name));
printf("%s %4i\n", Rus(a[i].tech), a[i].kol);
}
Else
printf("%s",Rus("номер отсутствует в списке"));
}
Функция FindRecProduct – поиск в массиве по наименованию продукта
Прототип функции:
Tc FindRecName(Tc x[], char *str);
Функция возвращает первую запись в массиве, для которой строковое поле (или его начало) совпадает с заданной строкой.
Вызов функции:
FindRecName(Tc x[], char *str);
Параметр s – строка символов, которая ищется в поле nazn.
Определение функции:
Tc FindRecName(Tc x[], char *str) /* поиск */
{
int i=0, res=0;
for (i=0; i<nRecs; i++)
{
if (strstr(Rus(x[i].tech), str)!=NULL)
{
res=1;
printf("%4d %24s ", x[i].numr, Rus(x[i].name));
printf("%s %4i\n", Rus(x[i].tech),x[i].kol);
}
}
if (res==0)
printf("\n%s",Rus("Название отсутствует в списке"));
}
Функция выполняет последовательный просмотр элементов массива и сравнивает содержимое поля nazn с заданной строкой. Если в поле nazn имеется подстрока, совпадающая с заданной, то запись выводится на экран.
Функция Assign – присвоение значения элементу массива
Так как элементами массива airport являются структуры, содержащие строковые поля, то использовать оператор присвоения типа a[i]=a[j] нельзя. Поэтому в программе создана вспомогательная функция, которая выполняет присваивание с использованием для строковых полей функции strcpy.
Прототип функции:
Tc Assign(Tc x)
Вызов функции:
tmp=Assign(x[i]);
Определение функции:
Tc Assign(Tc x)
{
Tc z;
z.numr=x.numr; strcpy(z.name, x.name);
strcpy(z.tech, x.tech); z.kol=x.kol;
return z;
}
Функция Swap – обмен содержимым двух записей
При сортировке массивов требуется выполнять обмен содержимым двух элементов массива. Так как в нашем случае элементами массива являются структуры, содержащие числовые поля, то необходимо создание отдельной функции.
Прототип функции:
void Swap(Tc *x, Tc *y);
Пример вызова функции:
Swap(&x[j],&x[j+1]);
Функция выполняет обмен с использованием промежуточной переменной tmp.
Функцию можно определить несколькими способами. Для присваивания элементам массива новых значений можно использовать функцию Assign. В этом случае функции Assign передаются указатели на элементы массива. Однако можно выполнить обмен и напрямую.
Ниже приводится определение функции:
void Swap(Tc *x, Tc *y)
{
Tc tmp;
tmp=Assign(*x); *x=Assign(*y); *y=Assign(tmp);
x->numr=y->numr; strcpy(x->name, y->name);
strcpy(x->tech, y->tech); x->kol=y->kol;
y->numr=tmp.numr; strcpy(y->name, tmp.name);
strcpy(y->tech, tmp.tech); y->kol=tmp.kol;
}
