Добавил:
yermolenkoigor9
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:First_magistr / First_course_magistr / Module_structurs / funcs
.c#include "precompiler.h"
#include "funcs.h"
void print_train(Ttrain *arr, int N)//распечатывает данные структуры
{
for(int i=0; i < N ; i++)
{
putchar('\n');
printf("%s\n", arr[i].NAZN);
printf("%d\n", arr[i].NUMR);
printf("%s\n", arr[i].TIME);
}
}
void file_train(Ttrain *arr, int N)//считывание из файла текстового
{
int i;
FILE *fp;
fp = fopen("structures.txt", "r");
for(i = 0; i < N; i++)
{
fscanf(fp, "%s", &arr[i].NAZN);
fscanf(fp, "%s", &arr[i].TIME);
fscanf(fp, "%d", &arr[i].NUMR);
}
fclose(fp);
}
void input_train(Ttrain *arr, int N)//ввод с клавиатуры
{
int i;
for(i = 0; i < N; i++)
{
printf("Введите название пункта назначения \n");
scanf("%s", &arr[i].NAZN);
printf("Введите время отправления \n");
scanf("%s", &arr[i].TIME);
printf("Введите номер поезда \n");
scanf("%d", &arr[i].NUMR);
}
}
void preordering(Ttrain *arr, int N)//упорядочивание по алфавиту
{
int i, j, tmp;
char *box2;
char *box1;
box1 = (char*)malloc(sizeof(char)*S + 10);//коробки для перекладывания пузырьком
box2 = (char*)malloc(sizeof(char)*5 + 10);
FILE *fp;
fp = fopen("structuries.bin", "wb");//бинарный файл открыли на запись
printf("\n До сортировки \n");
for(i = 0; i < N; i++)
printf("%d %s\n", i+1, arr[i].NAZN);
for (i = 1; i < N; i++)
for (j = 0; j < N - i; j++)
if (stricmp(arr[j].NAZN, arr[j + 1].NAZN) > 0)//сравнивает элементы строки возратит 1 если 1е>2го
{
tmp = arr[j].NUMR;
strcpy(box1 , arr[j].NAZN);
strcpy(box2 , arr[j].TIME);
arr[j].NUMR = arr[j + 1].NUMR;
strcpy(arr[j].NAZN, arr[j + 1].NAZN);
strcpy(arr[j].TIME, arr[j + 1].TIME);
arr[j + 1].NUMR = tmp;
strcpy(arr[j + 1].NAZN, box1);
strcpy(arr[j + 1].TIME, box2);
}
printf("\n После сортировки \n");
print_train(arr,N);
for(int i=0; i < N ; i++)
{
fwrite(&arr[i].NAZN, 50*sizeof(char), 1, fp);//запись в бинарный файл
fwrite(&arr[i].NUMR, sizeof(int), 1, fp);
fwrite(&arr[i].TIME, 5*sizeof(int), 1, fp);
}
//fwrite(&arr, sizeof(arr), 1, fp);//запись всего массива структур
fclose(fp);//закрываем файл
free(box1);//освобождаем коробки
free(box2);
}
void search_train(Ttrain *arr, int N)//ищет поезд по времени
{
int i, sw = 1;
char s[5];
printf("Введите время отправления для поиска \n");
scanf("%s", &s);
for(i = 0; i < N; i++)
if(strcmp(arr[i].TIME, s) > 0)//возращает 1 исли строки совпадут
{
putchar('\n');
printf("№ %d\n", arr[i].NUMR);
printf("%s \n", arr[i].NAZN);
printf("%s \n", arr[i].TIME);
sw = 0;
}
if(sw) printf("\nДанные отсутствуют\n");
}
void exit_prog(Ttrain *arr, int N)
{
printf("\nВыход из программы ...\n");
exit(0);
}
void bin_train(Ttrain *arr, int N)//считывание из бинарного файла
{
int i,k;
char s[50],t[5];
FILE *fp;
fp = fopen("structuries.bin", "rb");
for(i=0; i < N ; i++)
{
putchar('\n');
fread(&s, 50*sizeof(char), 1, fp);
printf("%s\n", s);
fread(&k, sizeof(int), 1, fp);
printf("%d\n", k);
fread(&t, 5*sizeof(int), 1, fp);
printf("%s\n", t);
}
fclose(fp);
}
void bin_search_num(Ttrain *arr, int N)//поиск в бинарном файле по номеру поезда
{
int i,k, num;
char s[50], t[5];
FILE *fp;
fp = fopen("structuries.bin", "rb");//открываем бинарник на чтение
printf("Введите номер поезда для поиска \n");
scanf("%d", &num);
for(i=0; i < N ; i++)
{
fread(&s, 50*sizeof(char), 1, fp);
fread(&k, sizeof(int), 1, fp);
fread(&t, 5*sizeof(int), 1, fp);
if(k == num)
break;
}
if(k != num)
printf("No information in database");
else
printf("%s №%d %s\n", arr[i].NAZN, arr[i].NUMR, arr[i].TIME);
fclose(fp);
}
void bin_search(Ttrain *arr, int N)//считывание из бинарного файла по номеру записи
{
int k, num, ssize;
char s[50], t[5];
FILE *fp;
fp = fopen("structuries.bin", "rb");
printf("Введите номер записи для поиска \n");
scanf("%d", &num);
ssize = (num - 1) * (50*sizeof(char)+sizeof(int)+5*sizeof(int));
if(num <= N)
{
fseek(fp,ssize,SEEK_SET);//смещает указатель от начала файла на ssize байт
putchar('\n');
fread(&s, 50*sizeof(char), 1, fp);
printf("%s\n", s);
fread(&k, sizeof(int), 1, fp);
printf("%d\n", k);
fread(&t, 5*sizeof(int), 1, fp);
printf("%s\n", t);
}
else
printf("Error! Out of file limit");
fclose(fp);
}
int menu(int max_menu) {
int i_menu;
printf("\n\nВведите номер действия 1-%-2d\n", max_menu);
do
{
printf("1 - Выход\n");
printf("2 - Ввод элементов массива с клавиатуры\n");
printf("3 - Показать расписание \n");
printf("4 - Составление расписания (сортировка)\n");
printf("5 - Считывание информации о поездах из файла\n");
printf("6 - Проверка содержимого бинарного файла\n");
printf("7 - Вывод информации о поездах по заданному времени\n");
printf("8 - Поиск данных по номеру поезда\n");
printf("9 - Поиск данных по номеру записи в бин.файле\n");
printf("\n");
scanf("%d", &i_menu);
}
while( (i_menu < 0) || (i_menu > max_menu));
return i_menu;
}