Advertisement
epidzhx

functions

Feb 11th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "actions.h"
  4. #include <locale.h>
  5.  
  6.  
  7. int menu()
  8. {
  9.     int option = 0;
  10.     int k = 0;
  11.    
  12.     do
  13.     {
  14.         printf("\n|----------------------------------------------------------------------------|\n\n");
  15.         printf("   Меню:\n");
  16.         printf("        1. Заполнение исходного файла\n");
  17.         printf("        2. Просмотр исходного файла:\n");
  18.         printf("        3. 3 победителя\n");
  19.         printf("        4. Просмотр результата\n");
  20.         printf("        5. Поиск\n");
  21.         printf("        6. Выход\n");
  22.         scanf("%d", &option);
  23.         printf("\n");
  24.        
  25.         if (option > 0 && option < 7)
  26.             k = 1;
  27.     }
  28.     while (!k);
  29.     return option;
  30. }
  31.  
  32.  
  33. int filldata(FILE* f)
  34. {
  35.     int num = 0;
  36.     ST stud;
  37.     if ((f = fopen("f.dat", "wb")) == NULL)
  38.         printf("\nОшибка доступа к файлу\n");
  39.     else
  40.     {
  41.         printf("Введите кол-во студентов: ");
  42.         scanf("%d", &num);
  43.         for (int i = 0; i < num; i++)
  44.         {
  45.             scanf("%s %s %d %f", stud.N, stud.GR, &(stud.year), &(stud.TT));
  46.             fwrite(&stud, sizeof(ST), 1, f);
  47.         }
  48.     }
  49.     fclose(f);
  50.     return num;
  51. }
  52.  
  53.  
  54. void outputdata(FILE* f)
  55. {
  56.     ST stud;
  57.     if ((f = fopen("f.dat", "rb")) == NULL)
  58.         printf("Ошибка доступа к файлу");
  59.     else
  60.     {
  61.         printf("\n|-----------------------------------------------------|\n");
  62.         while(fread(&stud, sizeof(ST), 1, f) != 0)
  63.         {
  64.             printf("%12s %8s-%4d-%6f\n", stud.N, stud.GR, (stud.year), (stud.TT));
  65.         }
  66.     }
  67.    
  68.     fclose(f);
  69. }
  70.  
  71. void winners(FILE* g, int num)
  72. {
  73.     FILE* f;
  74.     ST stud, stud1, stud2, stud3; // stud - для чтения. Остальные - для записи победителей
  75.     stud1.TT = 1000; // определяем какое-то максимально допустимое значение
  76.     stud2.TT = 1000;
  77.     stud3.TT = 1000;
  78.    
  79.     g = fopen("g.dat", "wb");
  80.    
  81.     if ((f = fopen("f.dat", "rb")) == NULL)
  82.         printf("\nОшибка доступа к файлу\n");
  83.     else
  84.     {
  85.  
  86.         int step = sizeof(ST) - sizeof(float); // тут определяем, на сколько нам сдвигать fseek, чтобы попать на переменную TT
  87.         fseek(f, 0, SEEK_SET);
  88.         float time = 0; // сюда будем записывать время из файла
  89.        
  90.         for (int i = 0; i < num; i++) // num - кол-во элементов в массиве
  91.         {
  92.             fseek(f, step, SEEK_CUR); // ставим на TT
  93.             fread(&time, sizeof(float), 1, f); // читаем TT и записываем в time (после этого fseek сдвинулся на sizeof(float) байт)
  94.            
  95.             if (time <= stud1.TT)
  96.             {
  97.                 fseek(f, -sizeof(ST), SEEK_CUR); // сдвигаем на начало записи
  98.                 fread(&stud, sizeof(ST), 1, f); // читаем структуру нового победителя
  99.                
  100.                 stud3 = stud2;
  101.                 stud2 = stud1;
  102.                 stud1 = stud;
  103.             }
  104.             else if (time <= stud2.TT)
  105.             {
  106.                 fseek(f, -sizeof(ST), SEEK_CUR);
  107.                 fread(&stud, sizeof(ST), 1, f);
  108.                 stud3 = stud2;
  109.                 stud2 = stud;
  110.             }
  111.             else if (time <= stud3.TT)
  112.             {
  113.                 fseek(f, -sizeof(ST), SEEK_CUR);
  114.                 fread(&stud, sizeof(ST), 1, f);
  115.                 stud3 = stud;
  116.             }
  117.         }
  118.  
  119.         // тут запись победителей
  120.         if (num == 1)
  121.             fwrite(&stud1, sizeof(ST), 1, g);
  122.         else if (num == 2)
  123.         {
  124.             fwrite(&stud1, sizeof(ST), 1, g);
  125.             fwrite(&stud2, sizeof(ST), 1, g);
  126.         }
  127.         else
  128.         {
  129.             fwrite(&stud1, sizeof(ST), 1, g);
  130.             fwrite(&stud2, sizeof(ST), 1, g);
  131.             fwrite(&stud3, sizeof(ST), 1, g);
  132.         }
  133.     }
  134.     printf("\nФайл создан\n");
  135.    
  136.     fclose(f);
  137.     fclose(g);
  138. }
  139.  
  140. void outputwin(FILE *g){
  141.     ST stud;
  142.     if ((g = fopen("g.dat", "rb")) == NULL)
  143.         printf("Ошибка доступа к файлу");
  144.     else
  145.     {
  146.         printf("\n|-----------------------------------------------------|\n");
  147.         while(fread(&stud, sizeof(ST), 1, g))
  148.         {
  149.             printf("%12s %8s-%4d-%6f\n", stud.N, stud.GR, (stud.year), (stud.TT));
  150.         }
  151.     }
  152.    
  153.     fclose(g);
  154. }
  155.  
  156. void search(FILE *g)
  157. {
  158.     FILE *f;
  159.     char ch;
  160.     printf("Введите букву: \n");
  161.     ch = getchar();
  162.     if (ch == '\n')
  163.         ch = getchar();
  164.     ST stud, stud1[20], stud2[20];
  165.     int num1 = 0, num2 = 0;
  166.     if ((f = fopen("f.dat", "rb")) == NULL)
  167.         printf("Ошибка доступа к файлу");
  168.     else {
  169.         printf("\n|-----------------------------------------------------|\n");
  170.         while(fread(&stud, sizeof(ST), 1, f))
  171.         {
  172.             if (stud.N[0] == ch) {
  173.                 stud1[num1] = stud;
  174.                 num1++;
  175.             }
  176.             else {
  177.                 stud2[num2] = stud;
  178.                 num2++;
  179.             }
  180.         }
  181.        
  182.         printf("Студенты:\n");
  183.         for (int i = 0; i < num1; i++)
  184.             printf("%s %s %d %f\n", stud1[i].N, stud1[i].GR, (stud1[i].year), (stud1[i].TT));
  185.         fclose(f);
  186.         f = fopen("f.dat", "wb");
  187.         for (int i = 0; i < num2; i++)
  188.             fwrite(&stud2[i], sizeof(ST), 1, f);
  189.         for (int i = 0; i < num1; i++)
  190.             fwrite(&stud1[i], sizeof(ST), 1, f);
  191.         fclose(f);
  192.     }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement