Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include "actions.h"
- #include <locale.h>
- int menu()
- {
- int option = 0;
- int k = 0;
- do
- {
- printf("\n|----------------------------------------------------------------------------|\n\n");
- printf(" Меню:\n");
- printf(" 1. Заполнение исходного файла\n");
- printf(" 2. Просмотр исходного файла:\n");
- printf(" 3. 3 победителя\n");
- printf(" 4. Просмотр результата\n");
- printf(" 5. Поиск\n");
- printf(" 6. Выход\n");
- scanf("%d", &option);
- printf("\n");
- if (option > 0 && option < 7)
- k = 1;
- }
- while (!k);
- return option;
- }
- int filldata(FILE* f)
- {
- int num = 0;
- ST stud;
- if ((f = fopen("f.dat", "wb")) == NULL)
- printf("\nОшибка доступа к файлу\n");
- else
- {
- printf("Введите кол-во студентов: ");
- scanf("%d", &num);
- for (int i = 0; i < num; i++)
- {
- scanf("%s %s %d %f", stud.N, stud.GR, &(stud.year), &(stud.TT));
- fwrite(&stud, sizeof(ST), 1, f);
- }
- }
- fclose(f);
- return num;
- }
- void outputdata(FILE* f)
- {
- ST stud;
- if ((f = fopen("f.dat", "rb")) == NULL)
- printf("Ошибка доступа к файлу");
- else
- {
- printf("\n|-----------------------------------------------------|\n");
- while(fread(&stud, sizeof(ST), 1, f) != 0)
- {
- printf("%12s %8s-%4d-%6f\n", stud.N, stud.GR, (stud.year), (stud.TT));
- }
- }
- fclose(f);
- }
- void winners(FILE* g, int num)
- {
- FILE* f;
- ST stud, stud1, stud2, stud3; // stud - для чтения. Остальные - для записи победителей
- stud1.TT = 1000; // определяем какое-то максимально допустимое значение
- stud2.TT = 1000;
- stud3.TT = 1000;
- g = fopen("g.dat", "wb");
- if ((f = fopen("f.dat", "rb")) == NULL)
- printf("\nОшибка доступа к файлу\n");
- else
- {
- int step = sizeof(ST) - sizeof(float); // тут определяем, на сколько нам сдвигать fseek, чтобы попать на переменную TT
- fseek(f, 0, SEEK_SET);
- float time = 0; // сюда будем записывать время из файла
- for (int i = 0; i < num; i++) // num - кол-во элементов в массиве
- {
- fseek(f, step, SEEK_CUR); // ставим на TT
- fread(&time, sizeof(float), 1, f); // читаем TT и записываем в time (после этого fseek сдвинулся на sizeof(float) байт)
- if (time <= stud1.TT)
- {
- fseek(f, -sizeof(ST), SEEK_CUR); // сдвигаем на начало записи
- fread(&stud, sizeof(ST), 1, f); // читаем структуру нового победителя
- stud3 = stud2;
- stud2 = stud1;
- stud1 = stud;
- }
- else if (time <= stud2.TT)
- {
- fseek(f, -sizeof(ST), SEEK_CUR);
- fread(&stud, sizeof(ST), 1, f);
- stud3 = stud2;
- stud2 = stud;
- }
- else if (time <= stud3.TT)
- {
- fseek(f, -sizeof(ST), SEEK_CUR);
- fread(&stud, sizeof(ST), 1, f);
- stud3 = stud;
- }
- }
- // тут запись победителей
- if (num == 1)
- fwrite(&stud1, sizeof(ST), 1, g);
- else if (num == 2)
- {
- fwrite(&stud1, sizeof(ST), 1, g);
- fwrite(&stud2, sizeof(ST), 1, g);
- }
- else
- {
- fwrite(&stud1, sizeof(ST), 1, g);
- fwrite(&stud2, sizeof(ST), 1, g);
- fwrite(&stud3, sizeof(ST), 1, g);
- }
- }
- printf("\nФайл создан\n");
- fclose(f);
- fclose(g);
- }
- void outputwin(FILE *g){
- ST stud;
- if ((g = fopen("g.dat", "rb")) == NULL)
- printf("Ошибка доступа к файлу");
- else
- {
- printf("\n|-----------------------------------------------------|\n");
- while(fread(&stud, sizeof(ST), 1, g))
- {
- printf("%12s %8s-%4d-%6f\n", stud.N, stud.GR, (stud.year), (stud.TT));
- }
- }
- fclose(g);
- }
- void search(FILE *g)
- {
- FILE *f;
- char ch;
- printf("Введите букву: \n");
- ch = getchar();
- if (ch == '\n')
- ch = getchar();
- ST stud, stud1[20], stud2[20];
- int num1 = 0, num2 = 0;
- if ((f = fopen("f.dat", "rb")) == NULL)
- printf("Ошибка доступа к файлу");
- else {
- printf("\n|-----------------------------------------------------|\n");
- while(fread(&stud, sizeof(ST), 1, f))
- {
- if (stud.N[0] == ch) {
- stud1[num1] = stud;
- num1++;
- }
- else {
- stud2[num2] = stud;
- num2++;
- }
- }
- printf("Студенты:\n");
- for (int i = 0; i < num1; i++)
- printf("%s %s %d %f\n", stud1[i].N, stud1[i].GR, (stud1[i].year), (stud1[i].TT));
- fclose(f);
- f = fopen("f.dat", "wb");
- for (int i = 0; i < num2; i++)
- fwrite(&stud2[i], sizeof(ST), 1, f);
- for (int i = 0; i < num1; i++)
- fwrite(&stud1[i], sizeof(ST), 1, f);
- fclose(f);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement