Advertisement
Dora-goha

Untitled

Jul 8th, 2020
1,341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.63 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <locale.h>
  5. //Объявление структуры
  6. struct number
  7. {
  8.     char name[20];
  9.     char education[10];
  10.     char gender[2];
  11.     int age;
  12.     int starofwork;
  13. };
  14. //Прототипы
  15. void change(char *); //создание и добавление табло рейсов
  16. void show(char *); //табло рейсов с информацией
  17. void view(char *); //поиск рейсов
  18. void view_2(char *); //покупка билетов
  19. void del(char* );
  20. void menu (char*);
  21. void text ();
  22. // Главная функция
  23. int main()
  24. {
  25. char file_name[25];
  26. puts("\n Enter the file name   \n"); // ввод имени файла
  27. gets(file_name);
  28. // Вывод на экран текста меню
  29. menu(file_name);
  30. return;
  31. }
  32. void menu (char *file)
  33. { FILE *f;
  34. system ("cLs");
  35. int ans;
  36. while (1)
  37. {
  38. system ("cLs");
  39. puts(" \n      M E N U"); puts(" \n  1.Create or Add");
  40. puts(" \n  2.Show file"); puts(" \n  3.View young workers with higher education");
  41. puts(" \n  4.View the oldest worker"); puts(" \n  5.Delete");
  42. puts(" \n  6.The task"); puts(" \n  7.Exit");
  43. puts(" \n\n select menu item - ");
  44. scanf("%d",&ans);
  45. // Обработка меню
  46. switch (ans)
  47. {
  48. case 1: change (file);break;
  49. case 2: show (file);break;
  50. case 3: view (file);break;
  51. case 4: view_2 (file);break;
  52. case 5: del (file);break;
  53. case 6: text ();break;
  54. case 7: system ("cLs");
  55. printf("\n\n end of program \n\n");
  56. system ("pause");
  57. return 0;
  58. default:
  59. system ("cLs");
  60. printf("\n\n \ there is no such menu item \n\n");
  61. system ("pause");
  62. return;
  63. }
  64. }
  65. }
  66. typedef struct number Human;// новое имя типа
  67. // Ввод данных об одном рейсе
  68. Human in_plane(void)
  69. {
  70.     Human number;
  71. printf("Staff \nName - ");
  72.     gets(number.name);
  73.     printf("Education - ");
  74.     gets(number.education);
  75.     printf("Gender - ");
  76.     gets(number.gender);
  77.     printf("Age - ");
  78.     scanf("%d",&number.age);
  79.     printf("Start of working - ");
  80.     scanf("%d",&number.starofwork);
  81.     return number;
  82. }
  83. // Заполнение файла
  84. void change (char *file)
  85. {         FILE *fp=fopen(file, "rb+");
  86.     int changing;
  87.     fseek(fp,0,SEEK_END); // курсор в конец
  88.     int lenght=sizeof(Human); // сохраняем размер одной записи (необязательно)
  89.     int size = ftell(fp) / lenght; // узнаем количество записей
  90.     fflush(stdin);
  91.     system("cLs");
  92.     printf("In file %s %d elements\n",file,size);
  93.     do
  94.     {
  95.         puts("Enter # of element to change");
  96.         scanf("%d",&changing);
  97.     } while (changing<=0 || changing>size);
  98.     fflush(stdin);
  99.     Human number;
  100.     printf("Staff \nName - ");
  101.     gets(number.name);
  102.     printf("Education - ");
  103.     gets(number.education);
  104.     printf("Gender - ");
  105.     gets(number.gender);
  106.     printf("Age - ");
  107.     scanf("%d",&number.age);
  108.     printf("Start of working - ");
  109.     scanf("%d",&number.starofwork);
  110.     printf("Changed in file %s element #%d -> <%s>\teducation <%s>\tgender <%s>\tage <%d>\tstart of work <%d>\n",\
  111.            file,changing,number.name,number.education,number.gender,number.age,number.starofwork);
  112.     fseek(fp,(changing-1)*sizeof(number),SEEK_SET); // смещаемся на начало элемента в файле
  113.     fwrite(&number,sizeof(number),1,fp);
  114.     system("pause");
  115.     fclose(fp);
  116. }
  117. // Вывод данных об одном рейсе
  118. void out_plane(Human number )
  119. {
  120. printf("|<%s>\t|\t<%s>\t|\t<%s>\t|\t<%d>\t|\t<%d>\t\t|\n",\
  121.                 number.name,number.education,number.gender,number.age,number.starofwork);
  122. }
  123. // Просмотр всего файла
  124. void show(char *file)
  125. {
  126. FILE *f;
  127. Human number;
  128. system ("cLs");
  129. if((f=fopen(file,"rb"))==NULL)
  130. {
  131. perror("\n   open error_2 show ");
  132. puts("\n   press any key....\n");
  133. system("pause");
  134. return;
  135. }
  136. // Вывод шапки таблицы
  137.     // Пока в файле есть записи, чтение из файла данных об одном рейсе
  138.     printf("|\tName\t|\teducation\t|\tgender\t|\tage\t|\tstart of work \t|\n");printf("_________________________________________________________________________________________________\n");
  139.     while (fread(&number, sizeof(number),1,f))
  140.     out_plane (number); // Вывод прочитанных данных на экран
  141.     printf("_________________________________________________________________________________________________\n");
  142.             printf("\n");
  143.     system ("pause");
  144.     fclose(f);
  145. }
  146.  
  147.     void view(char * file)
  148. {    FILE *f;
  149.     int i=0;
  150.     char ky[20]="higher";
  151.     Human number;
  152.     system ("cLs");
  153.     f=fopen(file, "rb");
  154.     fflush(stdin);
  155.      printf("\n");
  156.     printf("\n");
  157.     printf(" The young workers with higher education\n\n");
  158.     printf("_________________________________________________________________________________________________\n");
  159.  
  160.     printf("|\tName\t|\teducation\t|\tgender\t|\tage\t|\tstart of work \t|\n");printf("_________________________________________________________________________________________________\n");
  161.     while (fread(&number,sizeof(number),1,f))
  162.    if((2020-(number.age)) < 28)
  163.    {if(!strcmp(number.education,ky))
  164.            out_plane(number);
  165.     }
  166. printf("_________________________________________________________________________________________________\n");
  167.      system ("pause");
  168.     fclose(f);
  169. }
  170. void view_2(char * file)
  171. {
  172.     FILE *f;
  173.  
  174.     Human number;
  175.     int i=0,min = 2020-(number.age);
  176.     system ("cLs");
  177.     f=fopen(file, "rb");
  178.     fflush(stdin);
  179.      printf("\n");
  180.     printf("\n");
  181.     printf(" The oldest worker");
  182.     while (fread(&number,sizeof(number),1,f))
  183.    {
  184.       if((2020-(number.age))> min)
  185.      {min=2020-(number.age);
  186.       printf("%d ",min);
  187.       out_plane(number);
  188.      }
  189.  
  190.    }
  191.      system ("pause");
  192.     fclose(f);
  193. }
  194. void del (char * file) // Удаление записи
  195. {
  196.     int i,todelete;
  197.     FILE *fp=fopen(file, "rb");
  198.     FILE *fp2=fopen("temp.dat", "wb");
  199.     fseek(fp,0,SEEK_END); // курсор в конец
  200.     int lenght=sizeof(Human); // сохраняем размер одной записи (необязательно)
  201.     int size = ftell(fp) / lenght; // узнаем количество записей
  202.     Human number;
  203.     rewind(fp);
  204.     fflush(stdin);
  205.     printf("In file %s %d elements\n",file,size);
  206.     do
  207.     {
  208.         puts("Enter number of element to delete");
  209.         scanf("%d",&todelete);
  210.     } while (todelete<=0 || todelete>size);
  211.     fflush(stdin);
  212.     for (i = 0; i < size; ++i)
  213.     {
  214.         fread(&number,sizeof(Human),1,fp);
  215.         if (i!=(todelete-1)) // если текущая запись не удаляемая
  216.         {
  217.             fwrite(&number,sizeof(Human),1,fp2); // то записываем
  218.             printf("Added to file %s -> <%s>\teducation <%s>\tgender <%s>\tage <%d>\tstart of work <%d>\n",\
  219.            file,number.name,number.education,number.gender,number.age,number.starofwork);
  220.         }
  221.  
  222.     }
  223.     system("pause");
  224.     fclose(fp2);
  225.     fclose(fp);
  226.     remove(file);
  227.     rename("temp.dat",file);
  228. }
  229. void text ()
  230. {setlocale(LC_ALL, "Rus");
  231. system("cLs");
  232. printf("\nВ файле содержатся сведения о сотрудниках лаборатории: фамилия, год рождения, пол,\
  233. образование (среднее, высшее), год поступления наработу. Найти самого старшего сотрудника\
  234. среди мужчин. Вывести списокмолодых специалистов (до 28 лет) с высшим образованием.\n");
  235.         system("pause");
  236.     return 0;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement