albaSANDROS

Untitled

Apr 23rd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 18.36 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <locale.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include "Header.h"
  7.  
  8. int strlenght(int &lines)
  9. {
  10.     lines = 0;
  11.     char s[200];
  12.     FILE *f;
  13.     if (!(f = fopen("binaryfile", "r")))
  14.     {
  15.         printf("Ошибка открытия файлап.\n");
  16.         return 0;
  17.     }
  18.     while (fgets(s, 300, f) != NULL)if (feof(f)) break; { lines++; }lines++;
  19.     fclose(f);
  20.     return lines;
  21. }
  22.  
  23. int processing1(int &checker1)
  24. {  
  25.         {
  26.             printf("\nВыберите дальнейшее действие : \n");
  27.             printf("\n1. Чтение из бинарного файла  \n2. Отображение любой строки\n3. Поиск самого низкого студента   (рост)\n4. Поиск самого высокого студента  (рост)\n5. Поиск самого тяжелого студента  (вес)\n6. Поиск самого худого студента    (вес)\n0 - Закрытие программы\n"); // реализация повторного запуска программы
  28.             printf("Ваш выбор: ");
  29.             scanf_s("%d", &checker1);          
  30.             system("cls");
  31.             if (checker1 != 0)                                                  // если не 0
  32.             {
  33.                 cases1(checker1);                                           // вызов функции выбора                                            
  34.             }
  35.         }
  36.         return checker1;                                                                    // иначе конец программы
  37. }
  38.  
  39. int cases1(int checker1)                            // функция выбора действия
  40. {
  41.     rewind(stdin);
  42.     int m = 0, i = 0;
  43.     switch (checker1)
  44.     {
  45.     case 1:
  46.         read1();
  47.         break;
  48.     case 2:
  49.         vivodstr1();
  50.         break;
  51.     case 3 :
  52.         poiskminrost();
  53.         break;
  54.     case 4 :
  55.         poiskmaxrost();
  56.         break;
  57.     case 5 :
  58.         poiskmaxweight();
  59.         break; 
  60.     case 6 :
  61.         poiskminweight();
  62.         break;
  63.     case 0: break;
  64.     }
  65.     return checker1;
  66. }
  67.  
  68. void read1()
  69. {
  70.     int a=0;
  71.     FILE *f;
  72.     if (!(f = fopen("binaryfile", "rb")))
  73.     {
  74.         printf("Ошибка открытия файла.\n");
  75.         return;
  76.     }
  77.     struct inform inf;
  78.     printf(" Пол  | Группа | Фамилия | Имя | Отчество |  Рост  |    Вес ");
  79.     while (1)
  80.     {
  81.         fread(&inf, sizeof(struct inform), 1, f);
  82.         if (feof(f)) break;
  83.         printf("\n%5s   %5s   %5s   %5s   %5s       %.3lf    %.3lf",            // вывод на экран
  84.             inf.pol, inf.group, inf.familia, inf.imya,
  85.             inf.otchestvo, inf.rost, inf.ves); a++;
  86.     }
  87.     if (a == 0) printf("\nФайл пуст\n");
  88.     fclose(f);
  89. }
  90.  
  91. void vivodstr1()
  92. {
  93.     printf("\nДля корректной работы, введенные данные были записаны в файл\n");
  94.     FILE *f;
  95.     int str;
  96.     if (!(f = fopen("binaryfile", "rb")))                                   // открытие файла для чтения
  97.     {
  98.         printf("Ошибка открытия файла.\n");
  99.         return;
  100.     }
  101.     printf("\nВыберите строку, содержимое которой хотите увидеть: ");
  102.     scanf_s("%d", &str);                                                    // чтение того, что мы хотим вывести
  103.     int lines;
  104.     strlenght(lines);
  105.     if (str > lines){ printf("\nТакой строки не существует\n"); return; }
  106.     fseek(f, ((str - 1)*sizeof(struct inform)), 0);                     // переход на "нужную" позицию
  107.     struct inform inf2;
  108.     fread(&inf2, sizeof(struct inform), 1, f);                              // запись интересующей строки в inf2
  109.     printf("\nСодержимое %d строки:\n\n", str);
  110.     printf(" Пол  | Группа | Фамилия | Имя | Отчество |  Рост  |    Вес ");
  111.     printf("\n%5s   %5s   %5s   %5s   %5s       %.3lf    %.3lf",            // вывод на экран
  112.         inf2.pol, inf2.group, inf2.familia, inf2.imya,
  113.         inf2.otchestvo, inf2.rost, inf2.ves);                                                           // вывод
  114.     printf("\n");
  115.     fclose(f);
  116. }
  117.  
  118. void vvod(struct inform *inf, int n)                                        // функция ввода данных о студентах
  119. {
  120.     for (int i = 0; i < n; i++)                                             // цикл ввода
  121.     {
  122.         rewind(stdin);                                                      // очистка входного потока
  123.         printf("\nПол студента: ");                                          // интерфейс
  124.         gets_s(inf[i].pol);                                                 // ввод
  125.         rewind(stdin);                                                      // очистка входного потока
  126.         printf("\nГруппа студента: ");                                        // интерфейс
  127.         gets_s(inf[i].group);                                               // ввод
  128.         rewind(stdin);                                                      // очистка входного потока
  129.         printf("\nФамилия студента: ");                                  // интерфейс
  130.         gets_s(inf[i].familia);                                             // ввод
  131.         rewind(stdin);                                                      // очистка входного потока
  132.         printf("\nИмя студента: ");                                          // интерфейс
  133.         gets_s(inf[i].imya);                                                // ввод
  134.         rewind(stdin);                                                      // очистка входного потока
  135.         printf("\nОтчество студента: ");                                    // интерфейс
  136.         gets_s(inf[i].otchestvo);                                           // ввод
  137.         rewind(stdin);                                                      // очистка входного потока
  138.         printf("\nРост студента: ");                                        // интерфейс
  139.         scanf_s("%lf", &(inf[i].rost));                                     // ввод
  140.         rewind(stdin);                                                      // очистка входного потока
  141.         printf("\nВес студента: ");                                          // интерфейс
  142.         scanf_s("%lf", &(inf[i].ves));                                      // ввод
  143.         rewind(stdin);                                                      // очистка входного потока
  144.         system("cls");                                                      // очистка экрана
  145.     }
  146. }
  147.  
  148. int cases(struct inform *inf, int checker, int n)                           // функция выбора действия
  149. {
  150.     rewind(stdin);
  151.     int m = 0, i=0;
  152.     switch (checker)
  153.     {
  154.     case 1:                                                                 // функция записи в бинарный файл
  155.         write(inf, n, i);
  156.     break;
  157.     case 2:
  158.         write(inf, n, i);                                                   // запись имеющихся данных в файл для корректной работы
  159.         printf("\nДля корректной работы, введенные данные были записаны в файл\n");
  160.         read(inf, n, i);                                                    // функция вывода данных из бинарного файла
  161.     break;
  162.     case 3:
  163.         write(inf, n, i);                                                   // запись имеющихся данных в файл для корректной работы
  164.         printf("\nДля корректной работы, введенные данные были записаны в файл\n");
  165.         vivodstr(inf,n,i);                                                  // функция вывода любой строки из структуры
  166.         break;
  167.     case 4:
  168.         write(inf, n, i);                                                   // запись имеющихся данных в файл для корректной работы
  169.         printf("\nДля корректной работы, введенные данные были записаны в файл\n");
  170.         poiskminrost();                                                     // функция поиска самого низкого студента
  171.         break;
  172.     case 5 :
  173.         write(inf, n, i);                                                   // запись имеющихся данных в файл для корректной работы
  174.         printf("\nДля корректной работы, введенные данные были записаны в файл\n");
  175.         poiskmaxrost();                                                     // функция поиска самого высокого студента
  176.         break;
  177.     case 6 :
  178.         write(inf, n, i);                                                   // запись имеющихся данных в файл для корректной работы
  179.         printf("\nДля корректной работы, введенные данные были записаны в файл\n");
  180.         poiskminweight();                                                   // функция поиска самого лёгкого студента
  181.         break;
  182.     case 7 :
  183.         write(inf, n, i);                                                   // запись имеющихся данных в файл для корректной работы
  184.         printf("\nДля корректной работы, введенные данные были записаны в файл\n");
  185.         poiskmaxweight();                                                       // функция поиска самого тяжелого студента
  186.         break;
  187.     case 0:
  188.         break;                                                              // возможность закрытия программы
  189.     }
  190.     return checker;
  191. }
  192.  
  193. int processing(int &checker, struct inform *inf, int n)                     // функция диалогового окна и выбора действий
  194. {
  195.     {      
  196.         printf("\nВыберите дальнейшее действие:\n1. Запись в бинарный файл\n2. Вывести на экран содержимоке файла\n3. Отображение любой строки\n4. Поиск самого низкого студента   (рост)\n5. Поиск самого высокого студента  (рост)\n6. Поиск самого худого студента    (вес)\n7. Поиск самого тяжелого студента  (вес)\n0. Закрыть программу\n"); // реализация повторного запуска программы
  197.         printf("Ваш выбор: ");
  198.         scanf_s("%d", &checker);
  199.         system("cls");
  200.         if (checker != 0)                                                   // если не 0
  201.         {
  202.             cases(inf, checker, n);                                         // вызов функции выбора                                            
  203.         }                                                                                                                            
  204.     }
  205.     return checker;                                                         // иначе конец программы
  206. }
  207.  
  208. void read(inform *inf, int n, int i)                                        // функция вывода данных из бинарного файла
  209. {
  210.     rewind(stdin);
  211.     FILE *f;
  212.     if (!(f = fopen("binaryfile", "rb")))                                   // открытие файла для чтения
  213.     {
  214.         printf("error");
  215.         return;
  216.     }
  217.     inf = (inform *)calloc(n, sizeof(inform));                              // выделение памяти под структуру
  218.     fread(inf, sizeof(inform), n , f);                                      // чтение из бинарного файла с записью в inf
  219.     printf("\nСодержимое бинарного файла:\n");
  220.     printf(" Пол  | Группа | Фамилия | Имя | Отчество |  Рост  |    Вес ");
  221.     for (i = 0; i < n; i++)                                                 // вывод содержимого inf
  222.     {
  223.         vivod(inf[i]);
  224.         if (feof(f)) break;
  225.     }
  226.     printf("\n");
  227.     fclose(f);                                                              // закрытие файла
  228. }
  229.  
  230. void write(inform *inf, int n, int i)                                       // функция записи данных в бинарный файл
  231. {
  232.     FILE *f;
  233.     if ((f = fopen("binaryfile", "wb")) == NULL)                            // открытие файла
  234.     {                                                                       // если файл не открылся
  235.         printf("Ошибка открытия файла.\n");                                  // то вывести соответствующее сообщение
  236.         return ;
  237.     }
  238.     else printf("\nДанные в бинарный файл успешно записаны\n");      
  239.     fwrite(inf, sizeof(inform), n, f);                                      // вывод из бинарного файла
  240.     fclose(f);                                                              // закрытие файла
  241. }
  242.  
  243. void vivodstr(inform *inf, int n,int i)                                     // функция вывода любой строки
  244. {
  245.     FILE *f;                                                           
  246.     int str;
  247.     if (!(f = fopen("binaryfile", "rb")))                                   // открытие файла для чтения
  248.     {
  249.         printf("Ошибка открытия файла.\n");
  250.         return;
  251.     }
  252.     printf("\nВыберите строку, содержимое которой хотите увидеть: ");
  253.     scanf_s("%d", &str);                                                    // чтение того, что мы хотим вывести
  254.     if (str > n)                                                            // проверка на наличие данной строки
  255.     {
  256.         printf("\nТакой строки не существует\n");
  257.         return;
  258.     }
  259.     fseek(f,  ((str - 1)*sizeof(struct inform)), 0);                        // переход на "нужную" позицию
  260.     struct inform inf2;
  261.     fread(&inf2, sizeof(struct inform), 1, f);                              // запись интересующей строки в inf2
  262.     printf("\nСодержимое %d строки:\n\n", str);
  263.     printf(" Пол  | Группа | Фамилия | Имя | Отчество |  Рост  |    Вес ");
  264.     vivod(inf2);                                                            // вывод
  265.     printf("\n");
  266.     fclose(f);
  267. }
  268.  
  269. void poiskmaxrost()                                                         // функция поиска самого высокого студента
  270. {
  271.     FILE *f;
  272.     fpos_t i1, i2;                                                          // позиция в файле
  273.     if (!(f = fopen("binaryfile", "rb")))                                   // открытие файла для чтения
  274.     {  
  275.         puts("Ошибка открытия файла.\n");
  276.         return;
  277.     }
  278.     int max = 0;
  279.     struct inform inf;
  280.     while (1)
  281.     {
  282.         fgetpos(f, &i1);                                                    // начальная позиция
  283.         fread(&inf, sizeof(struct inform), 1, f);                           // чтение из файла
  284.         if (feof(f)) break;
  285.         if ((inf.rost) > max)                                               // сравнение текущего и того, который запомнил                                    
  286.         {
  287.             max = (inf.rost);                                               // если более высокий рост найдет
  288.             i2 = i1;                                                        // то запоминаем где он находится
  289.         }
  290.     }
  291.     fsetpos(f, &i2);                                                        // после завершения цикла ищем самый большой
  292.     fread(&inf, sizeof(inform), 1, f);                                      // переписываем его в inf
  293.     printf("\nПараметры самого высокого студента:\n");
  294.     printf("\n");
  295.     printf(" Пол  | Группа | Фамилия | Имя | Отчество |  Рост  |    Вес ");
  296.     vivod(inf);                                                             // и соответствующий вывод
  297.     fclose(f);
  298. }
  299.  
  300. void poiskminrost()                                                         // функция поиска самого низкого студента
  301. {
  302.     FILE *f;
  303.     fpos_t i1, i2;                                                          // позиция в файле
  304.     if (!(f = fopen("binaryfile", "rb")))                                   // открытие файла для чтения
  305.     {
  306.         puts("Ошибка открытия файла.\n");
  307.         return;
  308.     }
  309.     int min = 0;
  310.     struct inform inf;
  311.     fread(&inf, sizeof(struct inform), 1, f);                               // чтение из файла
  312.     min = (inf.rost);                                                       // говорю что первый элемент минимальный, затем сравниваю с ним
  313.     while (1)
  314.     {
  315.         fgetpos(f, &i1);                                                    // начальная позиция
  316.         fread(&inf, sizeof(struct inform), 1, f);                           // чтение из файла
  317.         if (feof(f)) break;
  318.         if ((inf.rost) < min)                                               // сравнение текущего и того, который запомнил                                    
  319.         {
  320.             min = (inf.rost);                                               // если более низкий рост найде
  321.             i2 = i1;                                                        // то запоминаем где он находится
  322.         }
  323.     }
  324.     fsetpos(f, &i2);                                                        // после завершения цикла ищем самый маленький
  325.     fread(&inf, sizeof(inform), 1, f);                                      // переписываем его в inf
  326.     printf("\nПараметры самого высокого студента:\n");
  327.     printf("\n");
  328.     printf(" Пол  | Группа | Фамилия | Имя | Отчество |  Рост  |    Вес ");
  329.     vivod(inf);                                                             // и соответствующий вывод
  330.     fclose(f);
  331. }
  332.  
  333. void poiskmaxweight()                                                       // функция поиска самого тяжелого студента
  334. {
  335.     FILE *f;
  336.     fpos_t i1, i2;                                                          // позиция в файле
  337.     if (!(f = fopen("binaryfile", "rb")))                                   // открытие файла для чтения
  338.     {
  339.         puts("Ошибка открытия файла.\n");
  340.         return;
  341.     }
  342.     int max = 0;
  343.     struct inform inf;
  344.     while (1)
  345.     {
  346.         fgetpos(f, &i1);                                                    // начальная позиция
  347.         fread(&inf, sizeof(struct inform), 1, f);                           // чтение из файла
  348.         if (feof(f)) break;
  349.         if ((inf.ves) > max)                                                // сравнение текущего и того, который запомнил                                    
  350.         {
  351.             max = (inf.ves);                                                // если более высокий вес найдет
  352.             i2 = i1;                                                            // то запоминаем где он находится
  353.         }
  354.     }
  355.     fsetpos(f, &i2);                                                        // после завершения цикла ищем самый большой
  356.     fread(&inf, sizeof(inform), 1, f);                                      // переписываем его в inf
  357.     printf("\nПараметры самого высокого студента:\n");
  358.     printf("\n");
  359.     printf(" Пол  | Группа | Фамилия | Имя | Отчество |  Рост  |    Вес ");
  360.     vivod(inf);                                                             // и соответствующий вывод
  361.     fclose(f);
  362. }
  363.  
  364. void poiskminweight()                                                       // функция поиска самого легкого студента
  365. {
  366.     FILE *f;
  367.     fpos_t i1, i2;                                                          // позиция в файле
  368.     if (!(f = fopen("binaryfile", "rb")))                                   // открытие файла для чтения
  369.     {
  370.         puts("Ошибка открытия файла.\n");
  371.         return;
  372.     }
  373.     int min = 0;
  374.     struct inform inf;
  375.     fread(&inf, sizeof(struct inform), 1, f);                               // чтение из файла
  376.     min = (inf.ves);                                                        // говорю что первый элемент минимальный, затем сравниваю с ним
  377.     while (1)
  378.     {
  379.         fgetpos(f, &i1);                                                    // начальная позиция
  380.         fread(&inf, sizeof(struct inform), 1, f);                           // чтение из файла
  381.         if (feof(f)) break;
  382.         if ((inf.ves) < min)                                                // сравнение текущего и того, который запомнил                                    
  383.         {
  384.             min = (inf.ves);                                                // если более маленький вес найден
  385.             i2 = i1;                                                        // то запоминаем где он находится
  386.         }
  387.     }
  388.     fsetpos(f, &i2);                                                        // после завершения цикла ищем самый маленький
  389.     fread(&inf, sizeof(inform), 1, f);                                      // переписываем его в inf
  390.     printf("\nПараметры самого высокого студента:\n");
  391.     printf("\n");
  392.     printf(" Пол  | Группа | Фамилия | Имя | Отчество |  Рост  |    Вес ");
  393.     vivod(inf);                                                             // и соответствующий вывод
  394.     fclose(f);
  395. }
  396.  
  397.  
  398. void vivod(inform inf)                                                      // функция вывода данных на экран
  399. {
  400.     printf("\n%5s   %5s   %5s   %5s   %5s       %.3lf    %.3lf",            // вывод на экран
  401.         inf.pol, inf.group, inf.familia, inf.imya,
  402.         inf.otchestvo, inf.rost, inf.ves);
  403.     printf("\n");
  404. }
Add Comment
Please, Sign In to add comment