Advertisement
Guest User

8 laba kraskov

a guest
Jun 13th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.29 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #include <string.h>
  4.  
  5. #include <stdlib.h>
  6.  
  7.  
  8. typedef struct
  9.  
  10. {
  11.  
  12. char type_train[100];
  13.  
  14. float time;
  15.  
  16. int number_train;
  17.  
  18. char type_wagon[100];
  19.  
  20. int number_free_place;
  21.  
  22. int number_wagon;
  23.  
  24. int num;
  25.  
  26. } train;
  27.  
  28. /*функция выводит на экран в табличном виде базу данных*/
  29.  
  30. void printf_base(train tr[], int* number)
  31.  
  32. {
  33.  
  34. char s1[11] = "type_train", s2[5] = "time", s3[9] = " class";
  35.  
  36. char s4[19] = " number_free_place", s5[14] = "number_wagon";
  37.  
  38. char s6[7] = "number", s7[14] = "number_train";
  39.  
  40. int i;
  41.  
  42. /*название*/
  43.  
  44. printf("%7s%11s%5s%9s%19s%14s%14s", s6, s1, s2, s3, s4, s5, s7);
  45.  
  46. for (i = 0; i < *number; i++)
  47.  
  48. {
  49.  
  50. /*сами элементы*/
  51.  
  52. printf("\n");
  53.  
  54. printf("%6d%10s", tr[i].num, tr[i].type_train);
  55.  
  56. printf("%7.2f", tr[i].time);
  57.  
  58. printf("%9s%17d", tr[i].type_wagon, tr[i].number_free_place);
  59.  
  60. printf("%14d%14d\n", tr[i].number_wagon, tr[i].number_train);
  61.  
  62. }
  63.  
  64. printf("\n");
  65.  
  66. }
  67.  
  68. /*функция заполняющая базу данных*/
  69.  
  70. int full_base(train tr[], int* number)
  71.  
  72. {
  73.  
  74. int j, ret, w = 0;
  75.  
  76. float *q;
  77.  
  78. char s1[] = "SV", s2[] = "comp", s3[] = "res_seat", d1[] = "pass";
  79.  
  80. char d2[] = "fast", d[14], s[14], f1[30];
  81.  
  82. printf("How many train do you want to enter?\n");
  83.  
  84. ret = scanf("%d", number);
  85.  
  86. if(ret != 1)
  87.  
  88. {
  89.  
  90. printf("Error");
  91.  
  92. exit(1);
  93.  
  94. }
  95.  
  96. getchar();
  97.  
  98. for (j = 0; j < *number; j++)
  99.  
  100. {
  101.  
  102. printf("Input type train - pass, fast: ");
  103.  
  104. scanf("%s", d);
  105.  
  106. /*проверка на то, что верно введены типы поездов*/
  107.  
  108. if((strcmp(d, d1) == 0) || (strcmp(d, d2) == 0))
  109.  
  110. {
  111.  
  112. strcpy(tr[j].type_train, d);
  113.  
  114. }
  115.  
  116. else
  117.  
  118. {
  119.  
  120. printf("Error\n");
  121.  
  122. exit(1);
  123.  
  124. }
  125.  
  126. printf("Enter departure time(hours.minutes): ");
  127.  
  128. ret = scanf("%f", &tr[j].time);
  129.  
  130. while(w != 1)
  131. {
  132.  
  133. if((tr[j].time) >= 24.00 || tr[j].time < 0.00)
  134.  
  135. {
  136.  
  137. printf("Your enter incorrectly time. Input again: ");
  138.  
  139. ret = scanf("%f", &tr[j].time);
  140.  
  141. }
  142.  
  143. else
  144.  
  145. {
  146.  
  147. w = 1;
  148.  
  149. }
  150.  
  151. }
  152.  
  153. if(ret != 1)
  154.  
  155. {
  156.  
  157. printf("Error");
  158.  
  159. exit(1);
  160.  
  161. }
  162.  
  163. printf("Enter type wagon - SV, comp, res_seat: ");
  164.  
  165. scanf("%s", s);
  166.  
  167. /*проверка на то, что верно введены типы вагонов*/
  168.  
  169. if ((strcmp(s, s1) == 0) || (strcmp(s, s2) == 0) || (strcmp(s, s3) == 0))
  170.  
  171. {
  172.  
  173. strcpy(tr[j].type_wagon, s);
  174.  
  175. }
  176.  
  177. else
  178.  
  179. {
  180.  
  181. printf("Error\n");
  182.  
  183. exit(1);
  184.  
  185. }
  186.  
  187. printf("Enter your number free place: ");
  188.  
  189. ret = scanf("%d", &tr[j].number_free_place);
  190.  
  191. if(tr[j].number_free_place < 0)
  192.  
  193. {
  194.  
  195. printf("Error");
  196.  
  197. exit(1);
  198.  
  199. }
  200.  
  201. if(ret != 1)
  202.  
  203. {
  204.  
  205. printf("Error");
  206.  
  207. exit(1);
  208.  
  209. }
  210.  
  211. printf("Enter your number wagon: ");
  212.  
  213. ret = scanf("%d", &tr[j].number_wagon);
  214.  
  215. if(tr[j].number_wagon <= 0)
  216.  
  217. {
  218.  
  219. printf("Error");
  220.  
  221. exit(1);
  222.  
  223. }
  224.  
  225. if(ret != 1)
  226.  
  227. {
  228.  
  229. printf("Error");
  230.  
  231. exit(1);
  232.  
  233. }
  234.  
  235. if(tr[j].number_wagon > 15)
  236.  
  237. {
  238.  
  239. printf("Error\n");
  240.  
  241. exit(1);
  242.  
  243. }
  244.  
  245. printf("Enter your number train: ");
  246.  
  247. ret = scanf("%d", &tr[j].number_train);
  248.  
  249. if(tr[j].number_train <= 0)
  250.  
  251. {
  252.  
  253. printf("Error");
  254.  
  255. exit(1);
  256.  
  257. }
  258.  
  259. if(ret != 1)
  260.  
  261. {
  262.  
  263. printf("Error");
  264.  
  265. exit(1);
  266.  
  267. }
  268.  
  269. getchar();
  270.  
  271. /*запись в номер вводимого поезда*/
  272.  
  273. tr[j].num = j + 1;
  274.  
  275. }
  276.  
  277. return 0;
  278.  
  279. }
  280.  
  281. /*сохранение базы данных(запись её в файл). Происходит, когда завершаем*/ /*работу с ней*/
  282.  
  283. void save_base(train tr[], int* number)
  284.  
  285. {
  286.  
  287. FILE* f;
  288.  
  289. int j;
  290.  
  291. if ((f = fopen("train.bin", "wb+")) == NULL)
  292.  
  293. {
  294.  
  295. printf("File could not be opened\n");
  296.  
  297. }
  298.  
  299. else
  300.  
  301. {
  302.  
  303. fwrite(&number, sizeof(int), 1, f);
  304.  
  305. for (j = 0; j < *number; j++)
  306.  
  307. {
  308.  
  309. fwrite(&tr[j].type_train, sizeof(char), 1, f);
  310.  
  311. fwrite(&tr[j].time, sizeof(float), 1, f);
  312.  
  313. fwrite(&tr[j].type_wagon, sizeof(char), 1, f);
  314.  
  315. fwrite(&tr[j].number_free_place, sizeof(int), 1, f);
  316.  
  317. fwrite(&tr[j].number_wagon, sizeof(int), 1, f);
  318.  
  319. fwrite(&tr[j].number_train, sizeof(int), 1, f);
  320.  
  321. }
  322.  
  323. }
  324.  
  325. fclose(f);
  326.  
  327. }
  328.  
  329. /*Добавление в базу данных нового поезда*/
  330.  
  331. int add_train(train tr[], int* j)
  332.  
  333. {
  334.  
  335. int w = 0;
  336.  
  337. char s1[] = "SV", s2[] = "comp", s3[] = "res_seat", d1[] = "pass";
  338.  
  339. char d2[] = "fast", d[14], s[14], f1[30], f2[30], f3[30];
  340.  
  341. int ret;
  342.  
  343. printf("Specify the train you want to make to the database\n");
  344.  
  345. getchar();
  346.  
  347. printf("Input type_train - pass, fast: ");
  348.  
  349. scanf("%s", d);
  350.  
  351. /*проверка на корректный ввод типа поезда*/
  352.  
  353. if ((strcmp(d, d1) == 0) || (strcmp(d, d2) == 0))
  354.  
  355. {
  356.  
  357. strcpy(tr[*j].type_train, d);
  358.  
  359. }
  360.  
  361. else
  362.  
  363. {
  364.  
  365. printf("Error\n");
  366.  
  367. exit(1);
  368.  
  369. }
  370.  
  371. printf("Enter the time(hours.minutes): ");
  372.  
  373. ret = scanf("%f", &tr[*j].time);
  374.  
  375. while(w != 1)
  376.  
  377. {
  378.  
  379. if((tr[*j].time) >= 24.00 || tr[*j].time < 0.00)
  380.  
  381. {
  382.  
  383. printf("Your enter incorrectly time. Input again: ");
  384.  
  385. ret = scanf("%f", &tr[*j].time);
  386.  
  387. }
  388.  
  389. else
  390.  
  391. {
  392.  
  393. w = 1;
  394.  
  395. }
  396.  
  397. }
  398.  
  399. if(ret != 1)
  400.  
  401. {
  402.  
  403. printf("Error");
  404.  
  405. exit(1);
  406.  
  407. }
  408.  
  409. printf("Enter type wagon - SV, comp, res_seat: ");
  410.  
  411. scanf("%s", s);
  412.  
  413. /*проверка на корректный ввод типа вагона*/
  414.  
  415. if ((strcmp(s, s1) == 0) || (strcmp(s, s2) == 0) || (strcmp(s, s3) == 0))
  416.  
  417. {
  418.  
  419. strcpy(tr[*j].type_wagon, s);
  420.  
  421. }
  422.  
  423. else
  424.  
  425. {
  426.  
  427. printf("Error:bad input\n");
  428.  
  429. exit(1);
  430.  
  431. }
  432.  
  433. printf("Enter your number free place: ");
  434.  
  435. ret = scanf("%d", &tr[*j].number_free_place);
  436.  
  437. if(tr[*j].number_free_place < 0)
  438.  
  439. {
  440.  
  441. printf("Error");
  442.  
  443. exit(1);
  444.  
  445. }
  446.  
  447. if(ret != 1)
  448.  
  449. {
  450.  
  451. printf("Error");
  452.  
  453. exit(1);
  454.  
  455. }
  456.  
  457. printf("Enter your number wagon: ");
  458.  
  459. ret = scanf("%d", &tr[*j].number_wagon);
  460.  
  461. if(tr[*j].number_wagon <= 0)
  462.  
  463. {
  464.  
  465. printf("Error");
  466.  
  467. exit(1);
  468.  
  469. }
  470.  
  471. if(ret != 1)
  472.  
  473. {
  474.  
  475. printf("Error");
  476.  
  477. exit(1);
  478.  
  479. }
  480.  
  481. if(tr[*j].number_wagon > 15)
  482.  
  483. {
  484.  
  485. printf("Error\n");
  486.  
  487. exit(1);
  488.  
  489. }
  490.  
  491. printf("Enter your number train: ");
  492.  
  493. ret = scanf("%d", &tr[*j].number_train);
  494.  
  495. if(tr[*j].number_train <= 0)
  496.  
  497. {
  498.  
  499. printf("Error");
  500.  
  501. exit(1);
  502.  
  503. }
  504.  
  505. if(ret != 1)
  506.  
  507. {
  508.  
  509. printf("Error");
  510.  
  511. exit(1);
  512.  
  513. }
  514.  
  515. tr[*j].num = *j + 1;
  516.  
  517. (*j)++;
  518.  
  519. return 0;
  520.  
  521. }
  522.  
  523. /*функция вывода поезда для функции поиска*/
  524.  
  525. void vivod(int i, train tr[])
  526.  
  527. {
  528.  
  529. printf("%6d%10s", tr[i].num, tr[i].type_train);
  530.  
  531. printf("%7.2f", tr[i].time);
  532.  
  533. printf("%9s%17d", tr[i].type_wagon, tr[i].number_free_place);
  534.  
  535. printf("%14d%14d\n", tr[i].number_wagon, tr[i].number_train);
  536.  
  537. }
  538.  
  539. /*функция поиска поезда по его описанию*/
  540.  
  541. int find_train(train tr[], int* number)
  542.  
  543. {
  544.  
  545. char s[100];
  546.  
  547. int b, i, a, k = 0, c, d, ret;
  548.  
  549. int w = 0;
  550.  
  551. /*по какой характеристике искать?*/
  552.  
  553. printf("Search mode\n");
  554.  
  555. printf("1 - Search by type train\n");
  556.  
  557. printf("2 - Search by time\n");
  558.  
  559. printf("3 - Search by type wagon\n");
  560.  
  561. printf("4 - Search by number free place\n");
  562.  
  563. printf("5 - Search by number wagon\n");
  564.  
  565. printf("6 - Search by number train\n");
  566.  
  567. scanf("%d", &b);
  568.  
  569. getchar();
  570.  
  571. switch (b)
  572.  
  573. {
  574.  
  575. case 1:
  576.  
  577. printf("Input type train: ");
  578.  
  579. gets(s);
  580.  
  581. for (i = 0; i < *number; i++)
  582.  
  583. /*просто используем функцию сравнения строк*/
  584.  
  585. if (strcmp(s, tr[i].type_train) == 0)
  586.  
  587. {
  588.  
  589. k = 1;
  590.  
  591. vivod(i, tr);
  592.  
  593. }
  594.  
  595. if (k == 0)
  596.  
  597. return -1;
  598.  
  599. else
  600.  
  601. return 0;
  602.  
  603. break;
  604.  
  605. case 2:
  606.  
  607. printf("Enter the time(hours.minutes): ");
  608.  
  609. ret = scanf("%f", &a);
  610.  
  611. while(w != 1)
  612.  
  613. {
  614.  
  615. if((a) >= 24.00 || a < 0.00)
  616.  
  617. {
  618.  
  619. printf("Your enter incorrectly time. Input again: ");
  620.  
  621. ret = scanf("%f", &a);
  622.  
  623. }
  624.  
  625. else
  626.  
  627. {
  628.  
  629. w = 1;
  630.  
  631. }
  632.  
  633. }
  634.  
  635. if(ret != 1)
  636.  
  637. {
  638.  
  639. printf("Error");
  640.  
  641. exit(1);
  642.  
  643. }
  644.  
  645. for (i = 0; i < *number; i++)
  646.  
  647. /*сравниваем время поезда и время которое ввели*/
  648.  
  649. if (a == tr[i].time)
  650.  
  651. {
  652.  
  653. k = 1;
  654.  
  655. vivod(i, tr);
  656.  
  657. }
  658.  
  659. if (k == 0)
  660.  
  661. return -1;
  662.  
  663. else
  664.  
  665. return 0;
  666.  
  667. break;
  668.  
  669. case 3:
  670.  
  671. printf("Enter the type wagon: ");
  672.  
  673. gets(s);
  674.  
  675. for (i = 0; i < *number; i++)
  676.  
  677. /*так же просто используем функцию strcmp для сравнения*/
  678.  
  679. if (strcmp(s, tr[i].type_wagon) == 0)
  680.  
  681. {
  682.  
  683. k = 1;
  684.  
  685. vivod(i, tr);
  686.  
  687. }
  688.  
  689. if (k == 0)
  690.  
  691. {
  692.  
  693. return -1;
  694.  
  695. }
  696.  
  697. else
  698.  
  699. {
  700.  
  701. return 0;
  702.  
  703. }
  704.  
  705. break;
  706.  
  707. case 4:
  708.  
  709. printf("Enter your number free place: ");
  710.  
  711. ret = scanf("%d", &d);
  712.  
  713. if(d < 0)
  714.  
  715. {
  716.  
  717. printf("Error");
  718.  
  719. exit(1);
  720.  
  721. }
  722.  
  723. if(ret != 1)
  724.  
  725. {
  726.  
  727. printf("Error");
  728.  
  729. exit(1);
  730.  
  731. }
  732.  
  733. for (i = 0; i < *number; i++)
  734.  
  735. /*сравниваем количество свободных мест которое ввели и в поездах*/
  736.  
  737. if (d == tr[i].number_free_place)
  738.  
  739. {
  740.  
  741. k = 1;
  742.  
  743. vivod(i, tr);
  744.  
  745. }
  746.  
  747. if (k == 0)
  748.  
  749. {
  750.  
  751. return -1;
  752.  
  753. }
  754. else
  755.  
  756. {
  757.  
  758. return 0;
  759.  
  760. }
  761.  
  762. break;
  763.  
  764. case 5:
  765.  
  766. printf("Enter your number wagon: ");
  767.  
  768. ret = scanf("%d", &b);
  769.  
  770. if(b <= 0)
  771.  
  772. {
  773.  
  774. printf("Error");
  775.  
  776. exit(1);
  777.  
  778. }
  779.  
  780. if(ret != 1)
  781.  
  782. {
  783.  
  784. printf("Error");
  785.  
  786. exit(1);
  787.  
  788. }
  789.  
  790. /*ищем и сравниваем что ввели*/
  791.  
  792. for (i = 0; i < *number; i++)
  793.  
  794. if (b == tr[i].number_wagon)
  795.  
  796. {
  797.  
  798. k = 1;
  799.  
  800. vivod(i, tr);
  801.  
  802. }
  803.  
  804. if (k == 0)
  805.  
  806. {
  807.  
  808. return -1;
  809.  
  810. }
  811.  
  812. else
  813.  
  814. {
  815.  
  816. return 0;
  817.  
  818. }
  819.  
  820. break;
  821.  
  822. case 6:
  823.  
  824. printf("Enter your number train: ");
  825.  
  826. ret = scanf("%d", &c);
  827.  
  828. if(ret != 1 || c <= 0)
  829.  
  830. {
  831.  
  832. printf("Error");
  833.  
  834. exit(1);
  835.  
  836. }
  837.  
  838. for (i = 0; i < *number; i++)
  839.  
  840. /*ищем и сравниваем что ввели*/
  841.  
  842. if (c == tr[i].number_train)
  843.  
  844. {
  845.  
  846. k = 1;
  847.  
  848. vivod(i, tr);
  849.  
  850. }
  851.  
  852. if (k == 0)
  853.  
  854. {
  855.  
  856. return -1;
  857.  
  858. }
  859.  
  860. else
  861.  
  862. {
  863.  
  864. return 0;
  865.  
  866. }
  867.  
  868. break;
  869.  
  870. /*в случае неудачного ввода:*/
  871.  
  872. default:
  873.  
  874. printf("Error\n");
  875.  
  876. exit(1);
  877.  
  878. }
  879.  
  880. }
  881.  
  882. /*функция редактирования поезда по характеристике*/
  883.  
  884. int edit_train(train tr[], int j)
  885.  
  886. {
  887.  
  888. int i, ret;
  889.  
  890. int w = 0;
  891.  
  892. char s1[] = "SV", s2[] = "comp", s3[] = "res_seat", d1[] = "pass";
  893.  
  894. char d2[] = "fast", s[14], f1[30], f2[30], d[14];
  895.  
  896. printf("Edit mode\n");
  897.  
  898. /*по какому хочешь редактировать?*/
  899.  
  900. printf("1 - edit the type train\n");
  901.  
  902. printf("2 - edit the time\n");
  903.  
  904. printf("3 - editing the type wagon\n");
  905.  
  906. printf("4 - editing the number free place\n");
  907.  
  908. printf("5 - editing a number wagon\n");
  909.  
  910. printf("6 - editing a number train\n");
  911.  
  912. ret = scanf("%d", &i);
  913.  
  914. if(ret != 1)
  915.  
  916. {
  917.  
  918. printf("Error");
  919.  
  920. exit(1);
  921.  
  922. }
  923.  
  924. getchar();
  925.  
  926. switch (i)
  927.  
  928. {
  929.  
  930. case 1:
  931.  
  932. printf("Input type train - pass, fast: ");
  933.  
  934. gets(d);
  935.  
  936. /*смотрим правильно ли ввели тип поезда*/
  937.  
  938. if ((strcmp(d, d1) == 0) || (strcmp(d, d2) == 0))
  939.  
  940. {/*если да, то просто копируем что ввели в нужное место*/
  941.  
  942. strcpy(tr[j].type_train, d);
  943.  
  944. }
  945.  
  946. else
  947.  
  948. {
  949.  
  950. printf("Error\n");
  951.  
  952. exit(1);
  953.  
  954. }
  955.  
  956. break;
  957.  
  958. case 2:
  959.  
  960. /*просто вводим новое время, сохраняя сразу его в нужное место*/
  961.  
  962. printf("Enter the time(hours.minutes): ");
  963.  
  964. ret = scanf("%f", &tr[j].time);
  965.  
  966. while(w != 1)
  967.  
  968. {
  969.  
  970. if((tr[j].time) >= 24.00 || tr[j].time < 0.00)
  971.  
  972. {
  973.  
  974. printf("Your enter incorrectly time. Input again: ");
  975.  
  976. ret = scanf("%f", &tr[j].time);
  977.  
  978. }
  979.  
  980. else
  981.  
  982. {
  983.  
  984. w = 1;
  985.  
  986. }
  987.  
  988. }
  989.  
  990. if(ret != 1)
  991.  
  992. {
  993.  
  994. printf("Error");
  995.  
  996. exit(1);
  997.  
  998. }
  999.  
  1000. break;
  1001.  
  1002. case 3:
  1003.  
  1004. printf("Enter type wagon - SV, comp, res_seat: ");
  1005.  
  1006. gets(s);
  1007.  
  1008. /*проверка на корректность ввода*/
  1009.  
  1010. if ((strcmp(s, s1) == 0) || (strcmp(s, s2) == 0) || (strcmp(s, s3) == 0))
  1011.  
  1012. {
  1013.  
  1014. /*если всё ок, то копируем что ввели в нужное место описания поезда*/
  1015.  
  1016. strcpy(tr[j].type_wagon, s);
  1017.  
  1018. }
  1019.  
  1020. else
  1021.  
  1022. {
  1023.  
  1024. printf("Error\n");
  1025.  
  1026. exit(1);
  1027.  
  1028. }
  1029.  
  1030. break;
  1031.  
  1032. case 4:
  1033.  
  1034. /*то же что и со временем*/
  1035.  
  1036. printf("Enter your number free place: ");
  1037.  
  1038. ret = scanf("%d", &tr[j].number_free_place);
  1039.  
  1040. if(tr[j].number_free_place < 0)
  1041.  
  1042. {
  1043.  
  1044. printf("Error");
  1045.  
  1046. exit(1);
  1047.  
  1048. }
  1049.  
  1050. if(ret != 1)
  1051.  
  1052. {
  1053.  
  1054. printf("Error");
  1055.  
  1056. exit(1);
  1057.  
  1058. }
  1059.  
  1060. break;
  1061.  
  1062. case 5:
  1063.  
  1064. /*сначала скопируем, а потом только проверим)*/
  1065.  
  1066. printf("Enter your number wagon: ");
  1067.  
  1068. ret = scanf("%d", &tr[j].number_wagon);
  1069.  
  1070. if(tr[j].number_wagon <= 0)
  1071.  
  1072. {
  1073.  
  1074. printf("Error");
  1075.  
  1076. exit(1);
  1077.  
  1078. }
  1079.  
  1080. if(ret != 1)
  1081.  
  1082. {
  1083.  
  1084. printf("Error");
  1085.  
  1086. exit(1);
  1087.  
  1088. }
  1089.  
  1090. if(tr[j].number_wagon > 15)
  1091.  
  1092. {
  1093.  
  1094. printf("Error\n");
  1095.  
  1096. exit(1);
  1097.  
  1098. }
  1099.  
  1100. break;
  1101.  
  1102. case 6:
  1103.  
  1104. /*то же что и в предыдущих случаях, когда вводимое значение - число*/
  1105.  
  1106. printf("Enter your number train: ");
  1107.  
  1108. ret = scanf("%d", &tr[j].number_train);
  1109.  
  1110. if(tr[j].number_train <= 0)
  1111.  
  1112. {
  1113.  
  1114. printf("Error");
  1115.  
  1116. exit(1);
  1117.  
  1118. }
  1119.  
  1120. if(ret != 1)
  1121.  
  1122. {
  1123.  
  1124. printf("Error");
  1125.  
  1126. exit(1);
  1127.  
  1128. }
  1129.  
  1130. break;
  1131.  
  1132. }
  1133.  
  1134. return 0;
  1135.  
  1136. }
  1137.  
  1138. /*внутренность сортировки пузырьком*/
  1139.  
  1140. void sorty(int j, train tr[])
  1141.  
  1142. {
  1143.  
  1144. int c;
  1145.  
  1146. train buff;
  1147.  
  1148. buff = tr[j];
  1149.  
  1150. tr[j] = tr[j + 1];
  1151.  
  1152. tr[j + 1] = buff;
  1153.  
  1154. c = tr[j].num;
  1155.  
  1156. tr[j].num = tr[j + 1].num;
  1157.  
  1158. tr[j + 1].num = c;
  1159.  
  1160. }
  1161.  
  1162. /*функция сортировки пузырьком чего надо*/
  1163.  
  1164. void sort_train(train tr[], int* number)
  1165.  
  1166. {
  1167.  
  1168. int i, j, k, b, ret;
  1169.  
  1170. train buff;
  1171.  
  1172. int c;
  1173.  
  1174. printf("Sort mode\n");
  1175.  
  1176. /*определяем по какому сортировать, возрастание, убывание*/
  1177.  
  1178. printf("Sort by:\n1 - increase\n2 - decrease\n");
  1179.  
  1180. ret = scanf("%d", &k);
  1181.  
  1182. if(ret != 1)
  1183.  
  1184. {
  1185.  
  1186. printf("Error");
  1187.  
  1188. exit(1);
  1189.  
  1190. }
  1191.  
  1192. switch(k)
  1193.  
  1194. {
  1195.  
  1196. case 1:
  1197.  
  1198. /*по какой характеристике сортировать?*/
  1199.  
  1200. printf("1 - sort by type train\n");
  1201.  
  1202. printf("2 - sort by time\n");
  1203.  
  1204. printf("3 - sorting by type wagon\n");
  1205.  
  1206. printf("4 - sorting by number free_place\n");
  1207.  
  1208. printf("5 - sort by number wagon\n");
  1209.  
  1210. printf("6 - sort by number train\n");
  1211.  
  1212. ret = scanf("%d", &b);
  1213.  
  1214. if(ret != 1)
  1215.  
  1216. {
  1217.  
  1218. printf("Error");
  1219.  
  1220. exit(1);
  1221.  
  1222. }
  1223.  
  1224. getchar();
  1225.  
  1226. /*здесь везде представлена сортировка пузырьком, она сортирует по*/
  1227.  
  1228. /*характеристике и после этого также сортирует номера поездов(по num)*/
  1229.  
  1230. switch (b)
  1231.  
  1232. {
  1233.  
  1234. case 1:
  1235.  
  1236. for (i = 0; i < *number; i++)
  1237.  
  1238. for (j = 0; j < (*number) - i - 1; j++)
  1239.  
  1240. if (strcmp(tr[j].type_train, tr[j + 1].type_train) > 0)
  1241.  
  1242. {
  1243.  
  1244. sorty(j, tr);
  1245.  
  1246. }
  1247.  
  1248. break;
  1249.  
  1250. case 2:
  1251.  
  1252. for (i = 0; i < *number; i++)
  1253.  
  1254. for (j = 0; j < (*number) - i - 1; j++)
  1255.  
  1256. if (tr[j].time > tr[j + 1].time)
  1257.  
  1258. {
  1259.  
  1260. sorty(j, tr);
  1261.  
  1262. }
  1263.  
  1264. break;
  1265.  
  1266. case 3:
  1267.  
  1268. for (i = 0; i < *number; i++)
  1269.  
  1270. for (j = 0; j < (*number) - i - 1; j++)
  1271.  
  1272. if (strcmp(tr[j].type_wagon, tr[j + 1].type_wagon) > 0)
  1273.  
  1274. {
  1275.  
  1276. sorty(j, tr);
  1277.  
  1278. }
  1279.  
  1280. break;
  1281.  
  1282. case 4:
  1283.  
  1284. for (i = 0; i < *number; i++)
  1285.  
  1286. for (j = 0; j < (*number) - i - 1; j++)
  1287.  
  1288. if (tr[j].number_free_place > tr[j + 1].number_free_place)
  1289.  
  1290. {
  1291.  
  1292. sorty(j, tr);
  1293.  
  1294. }
  1295.  
  1296. break;
  1297.  
  1298. case 5:
  1299.  
  1300. for (i = 0; i < *number; i++)
  1301.  
  1302. for (j = 0; j < (*number) - i - 1; j++)
  1303.  
  1304. if (tr[j].number_wagon > tr[j + 1].number_wagon)
  1305.  
  1306. {
  1307.  
  1308. sorty(j, tr);
  1309.  
  1310. }
  1311.  
  1312. break;
  1313.  
  1314. case 6:
  1315.  
  1316. for (i = 0; i < *number; i++)
  1317.  
  1318. for (j = 0; j < (*number) - i - 1; j++)
  1319.  
  1320. if (tr[j].number_train > tr[j + 1].number_train)
  1321.  
  1322. {
  1323.  
  1324. sorty(j, tr);
  1325.  
  1326. }
  1327.  
  1328. break;
  1329.  
  1330. }
  1331.  
  1332. break;
  1333.  
  1334. case 2:
  1335.  
  1336. printf("1 - sort by type train\n");
  1337.  
  1338. printf("2 - sort by time\n");
  1339.  
  1340. printf("3 - sorting by type wagon\n");
  1341.  
  1342. printf("4 - sorting by number free place\n");
  1343.  
  1344. printf("5 - sort by number wagon\n");
  1345.  
  1346. printf("6 - sort by number train\n");
  1347.  
  1348. ret = scanf("%d", &b);
  1349.  
  1350. if(ret != 1)
  1351.  
  1352. {
  1353.  
  1354. printf("Error");
  1355.  
  1356. exit(1);
  1357.  
  1358. }
  1359.  
  1360. getchar();
  1361.  
  1362. switch (b)
  1363.  
  1364. {
  1365.  
  1366. case 1:
  1367.  
  1368. for (i = 0; i < *number; i++)
  1369.  
  1370. for (j = 0; j < (*number) - i - 1; j++)
  1371.  
  1372. if (strcmp(tr[j].type_train, tr[j + 1].type_train) < 0)
  1373.  
  1374. {
  1375.  
  1376. sorty(j, tr);
  1377.  
  1378. }
  1379. break;
  1380.  
  1381. case 2:
  1382.  
  1383. for (i = 0; i < *number; i++)
  1384.  
  1385. for (j = 0; j < (*number) - i - 1; j++)
  1386.  
  1387. if (tr[j].time < tr[j + 1].time)
  1388.  
  1389. {
  1390.  
  1391. sorty(j, tr);
  1392.  
  1393. }
  1394.  
  1395. break;
  1396.  
  1397. case 3:
  1398.  
  1399. for (i = 0; i < *number; i++)
  1400.  
  1401. for (j = 0; j < (*number) - i - 1; j++)
  1402.  
  1403. if (strcmp(tr[j].type_wagon, tr[j + 1].type_wagon) < 0)
  1404.  
  1405. {
  1406.  
  1407. sorty(j, tr);
  1408.  
  1409. }
  1410.  
  1411. break;
  1412.  
  1413. case 4:
  1414.  
  1415. for (i = 0; i < *number; i++)
  1416.  
  1417. for (j = 0; j < (*number) - i - 1; j++)
  1418.  
  1419. if (tr[j].number_free_place < tr[j + 1].number_free_place)
  1420.  
  1421. {
  1422.  
  1423. sorty(j, tr);
  1424.  
  1425. }
  1426.  
  1427. break;
  1428.  
  1429. case 5:
  1430.  
  1431. for (i = 0; i < *number; i++)
  1432.  
  1433. for (j = 0; j < (*number) - i - 1; j++)
  1434.  
  1435. if (tr[j].number_wagon < tr[j + 1].number_wagon)
  1436.  
  1437. {
  1438.  
  1439. sorty(j, tr);
  1440.  
  1441. }
  1442.  
  1443. break;
  1444.  
  1445. case 6:
  1446.  
  1447. for (i = 0; i < *number; i++)
  1448.  
  1449. for (j = 0; j < (*number) - i - 1; j++)
  1450.  
  1451. if (tr[j].number_train < tr[j + 1].number_train)
  1452.  
  1453. {
  1454.  
  1455. sorty(j, tr);
  1456.  
  1457. }
  1458.  
  1459. break;
  1460.  
  1461. default:
  1462.  
  1463. printf("Error\n");
  1464.  
  1465. break;
  1466.  
  1467. break;
  1468.  
  1469. }
  1470.  
  1471. }
  1472.  
  1473. }
  1474.  
  1475. /*функция удаления поезда. Сдвигает нужный номер поезда в конец поездов*/
  1476.  
  1477. /*Затем просто уменьшает на один их количество(тем самым все функции*/ /*обрабатывают уменьшенное их количество*/
  1478.  
  1479. void del_train(train tr[], int* number, int j)
  1480.  
  1481. {
  1482.  
  1483. for (j; j < (*number) - 1; j++)
  1484.  
  1485. {
  1486.  
  1487. tr[j] = tr[j + 1];
  1488.  
  1489. tr[j].num = j + 1;
  1490.  
  1491. }
  1492.  
  1493. (*number)--;
  1494.  
  1495. }
  1496.  
  1497. void menu()
  1498.  
  1499. {
  1500.  
  1501. printf("1 - Adding a record to the database\n");
  1502.  
  1503. printf("2 - Deleting a specified record from the database\n");
  1504.  
  1505. printf("3 - Search for a record by a specified field\n");
  1506.  
  1507. printf("4 - Editing a given record in the database\n");
  1508.  
  1509. printf("5 - Sorting in the database by a specified field\n");
  1510.  
  1511. printf("6 - Output to the screen\n");
  1512.  
  1513. printf("0 - Exit\n");
  1514.  
  1515. }
  1516.  
  1517. /*главная функция программы, в ней представлена меню и вызовы функций*/
  1518.  
  1519. int main()
  1520.  
  1521. {
  1522.  
  1523. int c, i, count = 0, ret;
  1524.  
  1525. int* number = &count;
  1526.  
  1527. train tr[100];
  1528.  
  1529. printf("The database is empty.\nYou must complete the database\n");
  1530.  
  1531. full_base(tr, number);
  1532.  
  1533. /*пока мы не нажмём «0» или не цифру от «1» до «6» включительно будет*/
  1534.  
  1535. /*работать*/
  1536.  
  1537. menu();
  1538.  
  1539. while (1)
  1540.  
  1541. {
  1542.  
  1543. /*Вводим какой пункт мы хотим проделать*/
  1544.  
  1545. printf("Selected action:\n");
  1546.  
  1547. ret = scanf("%d", &c);
  1548.  
  1549. if(ret != 1)
  1550.  
  1551. {
  1552.  
  1553. printf("Error");
  1554.  
  1555. exit(1);
  1556.  
  1557. }
  1558.  
  1559. switch(c)
  1560.  
  1561. {
  1562.  
  1563. case 1:
  1564.  
  1565. add_train(tr, number);
  1566.  
  1567. save_base(tr, number);
  1568.  
  1569. menu();
  1570.  
  1571. break;
  1572.  
  1573. case 2:
  1574.  
  1575. printf("Specify the number of the train you want to delete\n");
  1576.  
  1577. ret = scanf("%d", &i);
  1578.  
  1579. if(ret != 1)
  1580.  
  1581. {
  1582.  
  1583. printf("Error");
  1584.  
  1585. exit(1);
  1586.  
  1587. }
  1588.  
  1589. if (i > *number)
  1590.  
  1591. {
  1592.  
  1593. printf("The train was not found\n");
  1594.  
  1595. }
  1596.  
  1597. else
  1598.  
  1599. {
  1600.  
  1601. del_train(tr, number, i - 1);
  1602.  
  1603. save_base(tr, number);
  1604.  
  1605. }
  1606.  
  1607. menu();
  1608.  
  1609. break;
  1610.  
  1611. case 3:
  1612.  
  1613. i = find_train(tr, number);
  1614.  
  1615. if (i == -1)
  1616.  
  1617. {
  1618.  
  1619. printf("The train was not found\n");
  1620.  
  1621. }
  1622.  
  1623. menu();
  1624.  
  1625. break;
  1626.  
  1627. case 4:
  1628.  
  1629. printf("Specify the number of the train which you want to edit\n");
  1630.  
  1631. ret = scanf("%d", &i);
  1632.  
  1633. if(ret != 1)
  1634.  
  1635. {
  1636.  
  1637. printf("Error");
  1638.  
  1639. exit(1);
  1640.  
  1641. }
  1642.  
  1643. if (i > *number)
  1644.  
  1645. {
  1646.  
  1647. printf("The train was not found\n");
  1648.  
  1649. }
  1650.  
  1651. else
  1652.  
  1653. {
  1654.  
  1655. edit_train(tr, i - 1);
  1656.  
  1657. save_base(tr, number);
  1658.  
  1659. }
  1660.  
  1661. menu();
  1662.  
  1663. break;
  1664.  
  1665. case 5:
  1666.  
  1667. sort_train(tr, number);
  1668.  
  1669. save_base(tr, number);
  1670.  
  1671. menu();
  1672.  
  1673. break;
  1674.  
  1675. case 6:
  1676.  
  1677. printf_base(tr, number);
  1678.  
  1679. save_base(tr, number);
  1680.  
  1681. menu();
  1682.  
  1683. break;
  1684.  
  1685. case 0:
  1686.  
  1687. printf("That is end\n");
  1688.  
  1689. return 0;
  1690.  
  1691. break;
  1692.  
  1693. default:
  1694.  
  1695. printf("Error\n");
  1696.  
  1697. break;
  1698.  
  1699. }
  1700.  
  1701. }
  1702.  
  1703. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement