redmanexe

Lab8Challenge14VS

Dec 25th, 2024
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 14.79 KB | None | 0 0
  1. #include <locale.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. struct station
  6. {
  7.     unsigned int train_id;      // Номер поезда
  8.     char stop_name[100];        // Пункт назначения (название)
  9.     unsigned int days_to_ride;  // Дни следования
  10.     char arrival_time[6];       // Время прибытия
  11.     char stop_time[6];          // Время стоянки
  12. };
  13.  
  14. struct station stations[30];
  15. struct station empty;
  16. unsigned int stationsCount = 0;
  17. unsigned int selectedOption;
  18.  
  19. int main();
  20.  
  21. void inputIntoArray();
  22. void sortArray();
  23. void findByField();
  24. void changeElement();
  25. void deleteElement();
  26. void printArray();
  27. void loadFromFile();
  28. void saveToFile();
  29.  
  30. void printStruct(struct station *station);
  31. int isStringsEquals(const char *string1, const char *string2);
  32.  
  33. int main(void) {
  34.     setlocale(LC_ALL, "rus");
  35.  
  36.     while (1)
  37.     {
  38.         printf("Выберите функцию для выполнения:\n");
  39.         printf("1. Ввод массива структур\n");
  40.         printf("2. Сортировка массива структур\n");
  41.         printf("3. Поиск в массиве структур по заданному параметру\n");
  42.         printf("4. Изменение заданной структуры\n");
  43.         printf("5. Удаление структуры из массива\n");
  44.         printf("6. Вывод на экран массива структур\n");
  45.         printf("7. Ввод данных из файла\n");
  46.         printf("8. Сохранение данных в файл\n");
  47.         printf("9. Выход\n");
  48.         scanf_s("%d", &selectedOption);
  49.         switch (selectedOption)
  50.         {
  51.             case 1:
  52.                 inputIntoArray();
  53.             break;
  54.             case 2:
  55.                 sortArray();
  56.             break;
  57.             case 3:
  58.                 findByField();
  59.             break;
  60.             case 4:
  61.                 changeElement();
  62.             break;
  63.             case 5:
  64.                 deleteElement();
  65.             break;
  66.             case 6:
  67.                 printArray();
  68.             break;
  69.             case 7:
  70.                 loadFromFile();
  71.             break;
  72.             case 8:
  73.                 saveToFile();
  74.             break;
  75.             case 9:
  76.                 return 0;
  77.             default:
  78.                 printf("Такой функции не существует!\n\n");
  79.         }
  80.     }
  81. }
  82.  
  83. void inputIntoArray()
  84. {
  85.     printf("Введите количество добавляемых структур: ");
  86.     scanf_s("%d", &stationsCount);
  87.     for (int i = 0; i < stationsCount; i++)
  88.     {
  89.         printf("Вокзал %d:\n", i + 1);
  90.         printf("Номер поезда? ");
  91.         scanf_s("%d", &stations[i].train_id);
  92.         printf("Пункт назначения? ");
  93.         fflush(stdin);
  94.         gets_s(stations[i].stop_name);
  95.         printf("Дни следования? ");
  96.         scanf_s("%d", &stations[i].days_to_ride);
  97.         printf("Время прибытия? ");
  98.         fflush(stdin);
  99.         gets_s(stations[i].arrival_time);
  100.         printf("Время стоянки? ");
  101.         fflush(stdin);
  102.         gets_s(stations[i].stop_time);
  103.     }
  104.     printf("Записано %d структур!\n\n", stationsCount);
  105. }
  106.  
  107. void sortArray()
  108. {
  109.     int sortableItem;
  110.     while (1)
  111.     {
  112.         printf("По какому параметру отсортировать массив?\n");
  113.         printf("1. Номер поезда\n");
  114.         printf("2. Дни следования\n");
  115.         scanf_s("%d", &sortableItem);
  116.  
  117.         struct station temp;
  118.         switch (sortableItem)
  119.         {
  120.             case 1:
  121.                 for (int i = 0; i < stationsCount - 1; i++)
  122.                     for (int j = 0; j < stationsCount - i - 1; j++)
  123.                         if (stations[j].train_id > stations[j + 1].train_id)
  124.                         {
  125.                             temp = stations[j];
  126.                             stations[j] = stations[j + 1];
  127.                             stations[j + 1] = temp;
  128.                         }
  129.                 printf("Массив отсортирован по номеру поездов!\n\n");
  130.             return;
  131.             case 2:
  132.                 for (int i = 0; i < stationsCount - 1; i++)
  133.                     for (int j = 0; j < stationsCount - i - 1; j++)
  134.                         if (stations[j].days_to_ride > stations[j + 1].days_to_ride)
  135.                         {
  136.                             temp = stations[j];
  137.                             stations[j] = stations[j + 1];
  138.                             stations[j + 1] = temp;
  139.                         }
  140.                 printf("Массив отсортирован по дням следования!\n\n");
  141.             return;
  142.             default:
  143.                 printf("Такого параметра не существует!\n");
  144.         }
  145.     }
  146. }
  147.  
  148. void printArray()
  149. {
  150.     printf("\n");
  151.     printf("В массиве находится %d структур!\n\n", stationsCount);
  152.     for (int i = 0; i < stationsCount; i++)
  153.     {
  154.         printf("Вокзал %d:\n", i + 1);
  155.         printStruct(&stations[i]);
  156.         printf("\n");
  157.     }
  158. }
  159.  
  160. void printStruct(struct station *station)
  161. {
  162.     printf("- Номер поезда: %d\n", station->train_id);
  163.     if (station->stop_name != "")
  164.         printf("- Пункт назначения: %s\n", station->stop_name);
  165.     if (station->days_to_ride != 0)
  166.         printf("- Дни следования: %d\n", station->days_to_ride);
  167.     if (station->arrival_time != "")
  168.         printf("- Время прибытия: %s\n", station->arrival_time);
  169.     if (station->stop_time != "")
  170.         printf("- Время стоянки: %s\n", station->stop_time);
  171. }
  172.  
  173. void findByField()
  174. {
  175.     int option, records = 0;
  176.     printf("\n");
  177.     while (1)
  178.     {
  179.         option = 0;
  180.         records = 0;
  181.  
  182.         printf("Выберите параметр для создания фильтра:\n");
  183.         printf("1. Номер поезда\n");
  184.         printf("2. Пункт назначения\n");
  185.         printf("3. Дни следования\n");
  186.         printf("4. Время прибытия\n");
  187.         printf("5. Время стоянки\n");
  188.         printf("6. Выход\n");
  189.         scanf_s("%d", &option);
  190.         printf("\n");
  191.  
  192.         switch (option)
  193.         {
  194.             case 1:
  195.             {
  196.                 int required;
  197.                 printf("Введите номер поезда для поиска: ");
  198.                 scanf_s("%d", &required);
  199.                 for (int i = 0; i < stationsCount; i++)
  200.                     if (stations[i].train_id == required)
  201.                     {
  202.                         printf("Найденная запись #%d\n", records + 1);
  203.                         printStruct(&stations[i]);
  204.                         records++;
  205.                         printf("\n");
  206.                     }
  207.             }
  208.             break;
  209.             case 2:
  210.             {
  211.                 char required[100];
  212.                 printf("Введите пункт назначения для поиска: ");
  213.                 scanf_s("%[^\n]", &required);
  214.                 for (int i = 0; i < stationsCount; i++)
  215.                     if (isStringsEquals(stations[i].stop_name, required))
  216.                     {
  217.                         printf("Найденная запись #%d\n", records + 1);
  218.                         printStruct(&stations[i]);
  219.                         records++;
  220.                         printf("\n");
  221.                     }
  222.             }
  223.             break;
  224.             case 3:
  225.             {
  226.                 int required;
  227.                 printf("Введите дни следования для поиска: ");
  228.                 scanf_s("%d", &required);
  229.                 for (int i = 0; i < stationsCount; i++)
  230.                     if (stations[i].days_to_ride == required)
  231.                     {
  232.                         printf("Найденная запись #%d\n", records + 1);
  233.                         printStruct(&stations[i]);
  234.                         records++;
  235.                         printf("\n");
  236.                     }
  237.             }
  238.             break;
  239.             case 4:
  240.             {
  241.                 char required[6];
  242.                 printf("Введите время прибытия для поиска: ");
  243.                 scanf_s("%s", &required);
  244.                 for (int i = 0; i < stationsCount; i++)
  245.                     if (isStringsEquals(stations[i].arrival_time, required))
  246.                     {
  247.                         printf("Найденная запись #%d\n", records + 1);
  248.                         printStruct(&stations[i]);
  249.                         records++;
  250.                         printf("\n");
  251.                     }
  252.             }
  253.             break;
  254.             case 5:
  255.             {
  256.                 char required[6];
  257.                 printf("Введите время стоянки для поиска: ");
  258.                 scanf_s("%s", &required);
  259.                 for (int i = 0; i < stationsCount; i++)
  260.                     if (isStringsEquals(stations[i].stop_time, required))
  261.                     {
  262.                         printf("Найденная запись #%d\n", records + 1);
  263.                         printStruct(&stations[i]);
  264.                         records++;
  265.                         printf("\n");
  266.                     }
  267.             }
  268.             break;
  269.             case 6:
  270.                 return;
  271.             default:
  272.                 printf("Такого поля не существует!\n");
  273.         }
  274.  
  275.         if (option >= 1 && option <= 5)
  276.             printf("Найдено записей: %d\n\n", records);
  277.     }
  278. }
  279.  
  280. void deleteElement()
  281. {
  282.     int elementIndex;
  283.     printf("Введите номер элемента для удаления: ");
  284.     scanf_s("%d", &elementIndex);
  285.     elementIndex--;
  286.  
  287.     stations[elementIndex] = empty;
  288.     for (int i = elementIndex; i < stationsCount - 1; i++)
  289.         stations[i] = stations[i + 1];
  290.     stationsCount--;
  291.  
  292.     printf("Запись удалена успешно!\n\n");
  293. }
  294.  
  295. void changeElement()
  296. {
  297.     int elementIndex, option;
  298.     printf("Введите номер элемента для изменения: ");
  299.     scanf_s("%d", &elementIndex);
  300.     elementIndex--;
  301.     printf("\nВыбранный элемент:\n");
  302.     printStruct(&stations[elementIndex]);
  303.     while (1)
  304.     {
  305.         printf("\nВыберите поле для изменения:\n");
  306.         printf("1. Номер поезда\n");
  307.         printf("2. Пункт назначения\n");
  308.         printf("3. Дни следования\n");
  309.         printf("4. Время прибытия\n");
  310.         printf("5. Время стоянки\n");
  311.         printf("6. Выход\n");
  312.         scanf_s("%d", &option);
  313.  
  314.         switch (option)
  315.         {
  316.             case 1:
  317.                 printf("Введите новый номер поезда: ");
  318.                 scanf_s("%d", &stations[elementIndex].train_id);
  319.                 printf("Изменённая запись:\n");
  320.                 printStruct(&stations[elementIndex]);
  321.             break;
  322.             case 2:
  323.                 printf("Введите новый пункт назначения: ");
  324.                 fflush(stdin);
  325.                 gets_s(stations[elementIndex].stop_name);
  326.                 printf("Изменённая запись:\n");
  327.                 printStruct(&stations[elementIndex]);
  328.             break;
  329.             case 3:
  330.                 printf("Введите новое количество дней следования: ");
  331.                 scanf_s("%d", &stations[elementIndex].days_to_ride);
  332.                 printf("Изменённая запись:\n");
  333.                 printStruct(&stations[elementIndex]);
  334.             break;
  335.             case 4:
  336.                 printf("Введите новое время прибытия: ");
  337.                 scanf_s("%s", &stations[elementIndex].arrival_time);
  338.                 printf("Изменённая запись:\n");
  339.                 printStruct(&stations[elementIndex]);
  340.             break;
  341.             case 5:
  342.                 printf("Введите новое время стоянки: ");
  343.                 scanf_s("%s", &stations[elementIndex].stop_time);
  344.                 printf("Изменённая запись:\n");
  345.                 printStruct(&stations[elementIndex]);
  346.             break;
  347.             case 6:
  348.                 return;
  349.             default:
  350.                 printf("Этого поля не существует!\n");
  351.         }
  352.     }
  353. }
  354.  
  355. void loadFromFile()
  356. {
  357.     FILE *file;
  358.     char filePath[255];
  359.     while (1)
  360.     {
  361.         printf("Введите путь до файла: ");
  362.         scanf_s("%s", filePath);
  363.         if (fopen_s(&file, filePath, "r") == 0)
  364.             printf("Этот файл недоступен!\n");
  365.         else
  366.             break;
  367.     }
  368.  
  369.     stationsCount = 0;
  370.     while (fscanf_s(file, "- Номер поезда: %d\n- Пункт назначения: %[^\n]\n- Дни следования: %d\n- Время прибытия: %s\n- Время стоянки: %s\n\n",
  371.         &stations[stationsCount].train_id, &stations[stationsCount].stop_name, &stations[stationsCount].days_to_ride, &stations[stationsCount].arrival_time,
  372.         &stations[stationsCount].stop_time) != EOF)
  373.         stationsCount++;
  374.     fclose(file);
  375.     printf("Прочитано %d записей!\n\n", stationsCount);
  376. }
  377.  
  378. void saveToFile()
  379. {
  380.     FILE *file;
  381.     char filePath[255];
  382.     while (1)
  383.     {
  384.         printf("Введите путь до файла: ");
  385.         scanf_s("%s", filePath);
  386.         if (fopen_s(&file, filePath, "w") == 0)
  387.             printf("Этот файл недоступен!\n");
  388.         else
  389.             break;
  390.     }
  391.  
  392.     for (int i = 0; i < stationsCount; i++)
  393.     {
  394.         fprintf(file, "- Номер поезда: %d\n", stations[i].train_id);
  395.         fprintf(file, "- Пункт назначения: %s\n", stations[i].stop_name);
  396.         fprintf(file, "- Дни следования: %d\n", stations[i].days_to_ride);
  397.         fprintf(file, "- Время прибытия: %s\n", stations[i].arrival_time);
  398.         fprintf(file, "- Время стоянки: %s\n\n", stations[i].stop_time);
  399.     }
  400.     fclose(file);
  401.     printf("Записано %d записей!\n\n", stationsCount);
  402. }
  403.  
  404. int isStringsEquals(const char *string1, const char *string2)
  405. {
  406.     if (string1 == NULL || string2 == NULL)
  407.         return 0;
  408.  
  409.     if (strlen(string1) != strlen(string2))
  410.         return 0;
  411.  
  412.     for (int i = 0; i < strlen(string1); i++)
  413.     {
  414.         if (string1[i] != string2[i])
  415.             return 0;
  416.     }
  417.  
  418.     return 1;
  419. }
Advertisement
Add Comment
Please, Sign In to add comment