Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
6
Добавлен:
18.08.2019
Размер:
5.66 Кб
Скачать
#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;
}


Соседние файлы в папке Module_structurs
  • #
    18.08.20195.66 Кб6funcs.c
  • #
    18.08.2019461 б5funcs.h
  • #
    18.08.2019852 б5modulemain.c
  • #
    18.08.20191.48 Кб5Module_structurs.cbp
  • #
    18.08.20191.06 Кб5Module_structurs.depend
  • #
    18.08.20191.16 Кб5Module_structurs.layout