Advertisement
Guest User

Untitled

a guest
May 6th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 69.56 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<string.h>
  5. #include<math.h>
  6. #include<Windows.h>
  7. #include "locale.h"
  8. #include <iostream>
  9.  
  10.  
  11.  
  12. using namespace std;
  13.  
  14.  
  15.  
  16. struct reis
  17. {
  18. double nomerReisa;
  19. }typedef reis;
  20.  
  21. struct raspisanie
  22. {
  23. char type[40];
  24. char punkt[40];
  25. int vremyaOCh;
  26. int vremyaOM;
  27. int vremyaPCh;
  28. int vremyaPM;
  29. reis nomer;
  30. struct raspisanie *next;
  31. }typedef raspisanie;
  32.  
  33.  
  34. struct user
  35. {
  36. char role[10];
  37. char phone[15];
  38. char login[20];
  39. char password[64];
  40. char status[3];
  41. struct user *previous, *next;
  42. }typedef USER;
  43.  
  44.  
  45.  
  46. raspisanie *begin=NULL;
  47. FILE *file,*file2,*file3;
  48.  
  49. user Authorization(char[10]);
  50. void Registration(char*);
  51. bool Check_login(char*, FILE*); //проверка на существование логина
  52. void ban(); //забанить
  53. void antiban(); //разбанить
  54. int read_users(USER **start, USER **finish); //запись в список пользователей
  55. void shaw_users(); //вывод инфы о пользователях на экран
  56. void write_users(USER *nachalo);
  57. void makeadmin(); //сделать админом
  58.  
  59. void vvod();//функция создания или открытия файла.
  60. void vivod();//функция вывода информации
  61. void insert();//функция вставки информации
  62. void schitivanie();//функция считывания данных в список
  63. void delete_all();//функция удаления всего списка по окончанию работы программы
  64. void glavnoe_menu();//функция перемещения указателя главного меню
  65.  
  66. /*char *shifr1(char *); //шифровка логина
  67. char *shifr2(char *);//шифровка пароля*/
  68. void admin_vibor();//функция выбора для меню администратора
  69. int adminmenu();//функция перемещения указателя для меню администратора
  70. int userchoice();//перемещение указателя для меню пользователя
  71. void openfile();//функция открытия файла с данными
  72. void usermenu();//функция выбоа для меню пользователя
  73. int managemenu();//перемещение указателя для меню редактирования пользователей
  74.  
  75. /*void delete_user();//функция удаления пользователя*/
  76. void usermanage();//функция выбора для меню редактирования пользователей
  77. void edit();//функция выбора для меню редактирования информации и редактирования этой информации
  78. int editchoice();//перемещение указателя для меню редактирования информации
  79. void del();//функция удаления информации
  80. void sort_reis();//функция сортировки информации по номеру рейса
  81. void sort_punkt();//функция сортировки по населёённому пункту
  82. void optim_time();//функция фильтрации данных по времени прибытия(для пользователей)
  83. void poisk_time();//функция поиска данных по времени прибытия
  84. void poisk_punkt();//функция поиска данных по названию населённого пункта
  85. void poisk_reis();//функция поиска данных по номеру рейса
  86. void filter_timeO();//фильтрация по времени отправления
  87. void filter_timeP();//фильтрация по времени прибытия
  88. void filter_punkt();//фильтрация по названию населённого пункта
  89. void filter_PandT();//фильтрация по времени отправления и населённому пункту
  90. void filter();//фильтрация по времени прибытия и населённому пункту
  91. void filte_reis_and_punkt();//фильтрация по пункту и номеру рейса
  92. int menusearch();//перемещение указателя для меню поиска
  93. void menusearch_choice();//функция выбора для меню поиска
  94. int menusort();//перемещение указателя для меню выбора сортировки
  95. void sortchoice();//функция выбора для меню выбора сортировки
  96.  
  97.  
  98. #define _CRT_SECURE_NO_WARNINGS
  99. #include"funcs.h"
  100.  
  101.  
  102. void main()
  103. {
  104. SetConsoleCP(1251);
  105. SetConsoleOutputCP(1251);
  106. glavnoe_menu();
  107. }
  108.  
  109. /*void vvod() //создание или открытие файла
  110. {
  111. if(begin!=NULL) //в опер памяти уже создан список
  112. {
  113. printf("Файл уже открыт!\n");
  114. Sleep(700); //приостанавливает работу потока на 700 мсек,если истекло время задержки возвращ.0
  115. return;
  116. }
  117. raspisanie *T, *st;
  118. if(!(T=(raspisanie*)malloc(sizeof(raspisanie)))) //если память не выделилась
  119. {
  120. printf("Доступа к памяти нет!\n");
  121. }
  122. T->nomer.nomerReisa=0;
  123. begin=T; //указатель на первый эл-т списка
  124. if((file=fopen("raspisanie.dat", "r+b"))==NULL) //если бинарный файл не открылся для чтения и записи
  125. {
  126. if((file=fopen("raspisanie.dat", "w+b"))==NULL) //Если файл не существует, он будет создан,и если он не создался
  127. {
  128. printf("Доступа к памяти нет!\n");
  129. fclose(file);
  130. return;
  131. }
  132. }
  133. else
  134. {
  135. printf("Файл открыт!\n");
  136. schitivanie();
  137. fclose(file);
  138. system("pause"); //ожидание ввода
  139. return;
  140. }
  141. if(begin==NULL)
  142. {
  143. printf("Нет доступа к памяти!\n");
  144. return;
  145. }
  146. int i,n,flag, pr;
  147. printf("Введите количество элементов списка\n");
  148. do
  149. {
  150. flag=0;
  151. fflush(stdin);
  152. pr=scanf("%d", &n);
  153. if(n<0 || pr==0)
  154. {
  155. flag=1;
  156. printf("Невереный ввод! Введите количество снова.\n");
  157. }
  158. }while(flag==1); //пока не введем верное кол-во будет повторяться
  159. rewind(file); //Устанавливает внутренний указатель положения файла в начальное положение (начало файла).
  160. for(i=0;i<n;i++)
  161. {
  162. double nom=0;
  163. char str[70];
  164. if(!(st=(raspisanie*)malloc(sizeof(raspisanie))))
  165. {
  166. printf("Доступа к памяти нет!\n");
  167. }
  168. printf("Введите номер рейса\n");
  169. int pr;
  170. do{
  171. fflush(stdin);
  172. pr=scanf("%15lf", nom); // l присвавает прочитанные данные переменной типа double
  173. }while(nom<0 || pr==0);
  174. st->nomer.nomerReisa=nom;
  175. printf("Введите тип автобуса\n");
  176. fflush(stdin);
  177. scanf("%15s", str);
  178. strcpy(st->type, str);
  179. str[0]='\0';
  180. printf("Введите пункт назначения\n");
  181. fflush(stdin);
  182. scanf("%15s",str);
  183. strcpy(st->punkt, str); //функция strcpy копирует строкум str в st->punkt
  184. str[0]='\0'; //конец строки
  185. printf("Введите время отправления атобуса\n");
  186. int k,m;
  187. do{
  188. printf("Часы:");
  189. fflush(stdin);
  190. pr=scanf("%2d", &k);
  191. }while(k<0 || k>24 || pr==0);
  192. do{
  193. printf("Минуты:");
  194. fflush(stdin);
  195. pr=scanf("%2d", &m);
  196. }while(m<0 || m>60 || pr==0);
  197. st->vremyaOCh=k;st->vremyaOM=m;
  198. printf("Введите время прибытия атобуса\n");
  199. do{
  200. printf("Часы:");
  201. fflush(stdin);
  202. pr=scanf("%2d", &k);
  203. }while(k<0 || k>24 || pr==0);
  204. do{
  205. printf("Минуты:");
  206. fflush(stdin);
  207. pr=scanf("%2d", &m);
  208. }while(m<0 || m>60 || pr==0);
  209. st->vremyaPCh=k;st->vremyaPM=m;
  210. fwrite(st, 1, sizeof(raspisanie), file);
  211. T->next=st;
  212. T=st;
  213. }
  214. T->next=NULL;
  215. fclose(file);
  216. }
  217.  
  218. void insert() //вставка инфы
  219. {
  220. if((file=fopen("raspisanie.dat", "r+b"))==NULL) //для чтения и записи,начинает с начала
  221. {
  222. printf("Доступа к памяти нет!\n");
  223. return;
  224. }
  225. int newCol, pr;
  226. raspisanie st;
  227. system("cls"); //очистка экрана консоли
  228. printf("Введите количество записей, которые хотите добавить\n");
  229. do{
  230. fflush(stdin);
  231. pr=scanf("%15d", &newCol);
  232. }while(newCol<0 || pr==0); //Ввод количества новых записей.
  233. fseek(file,0, SEEK_END); //позиционирование файла,смещает на ноль позиций с конца в файле
  234. for(int i=0;i<newCol;i++)
  235. {
  236. printf("Введите номер рейса\n");
  237. fflush(stdin);
  238. do{
  239. fflush(stdin);
  240. pr=scanf("%15lf", &st.nomer.nomerReisa);
  241. }while(st.nomer.nomerReisa<0 || pr==0);
  242. printf("Введите тип автобуса\n");
  243. fflush(stdin);
  244. scanf("%15s", st.type);
  245. printf("Введите пункт назначения\n");
  246. fflush(stdin);
  247. scanf("%15s", st.punkt);
  248. printf("Введите время отправления атобуса\n");
  249. do{
  250. printf("Часы:");
  251. fflush(stdin);
  252. pr=scanf("%2d", &st.vremyaOCh);
  253. }while(st.vremyaOCh<0 || st.vremyaOCh>24 || pr==0);
  254. do{
  255. printf("Минуты:");
  256. fflush(stdin);
  257. pr=scanf("%2d", &st.vremyaOM);
  258. }while(st.vremyaOM<0 || st.vremyaOM>60 || pr==0);
  259. printf("Введите время прибытия атобуса\n");
  260. do{
  261. printf("Часы:");
  262. fflush(stdin);
  263. pr=scanf("%2d", &st.vremyaPCh);
  264. }while(st.vremyaPCh<0 || st.vremyaPCh>24 || pr==0);
  265. do{
  266. printf("Минуты:");
  267. fflush(stdin);
  268. pr=scanf("%2d", &st.vremyaPM);
  269. }while(st.vremyaPM<0 || st.vremyaPM>60 || pr==0);
  270. fwrite(&st, 1, sizeof(st), file);
  271. }
  272. schitivanie();
  273. fclose(file);
  274. }
  275.  
  276. void schitivanie() //Считывает данные с файла в список.
  277. {
  278. raspisanie *T, *st,st1;
  279. if(!(T=(raspisanie*)malloc(sizeof(raspisanie))))
  280. {
  281. printf("Доступа к памяти нет!\n");
  282. return;
  283. }
  284. T->nomer.nomerReisa=0;
  285. begin=T;
  286. rewind(file); //указатель на начало файла
  287. int i=0;
  288. while(!feof(file)) //пока не наспуит конец файла
  289. {
  290. fread(&st1,sizeof(raspisanie),1,file);
  291. i++;
  292. }
  293. rewind(file);
  294. while(i>1)
  295. {
  296. fread(&st1,sizeof(raspisanie),1,file);
  297. if(!(st=(raspisanie*)malloc(sizeof(raspisanie))))
  298. {
  299. printf("Доступа к памяти нет!\n");
  300. }
  301. st->nomer.nomerReisa=st1.nomer.nomerReisa;
  302. strcpy(st->type, st1.type); //копируем строку st1.type в st.type
  303. strcpy(st->punkt, st1.punkt);
  304. st->vremyaOCh=st1.vremyaOCh;
  305. st->vremyaOM=st1.vremyaOM;
  306. st->vremyaPCh=st1.vremyaPCh;
  307. st->vremyaPM=st1.vremyaPM;
  308. T->next=st;
  309. T=st;
  310. i--;
  311. }
  312. T->next=NULL;
  313. }
  314.  
  315. void vivod() //функция вывода информации
  316. {
  317. if(begin==NULL)
  318. {
  319. printf("Файл не открыт!\n");
  320. Sleep(700);
  321. return;
  322. }
  323. system("cls");
  324. struct raspisanie *st,*T;
  325. st=begin->next;
  326. printf("--------------------------------------------------------------------------------");
  327. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  328. printf("| | | | | отправления | прибытия |");
  329. printf("--------------------------------------------------------------------------------");
  330. int i=1;
  331. while(st!=NULL) //пока не наступит конец списка СПРОСИТЬ почему номер рейса всегда странно считывается
  332. {
  333. if(st->vremyaOM>=10 && st->vremyaPM>=10) //если минуты меньше 10 добавляем 0,просматриваем все возможные вар-ы
  334. {
  335. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  336. }
  337. if(st->vremyaOM>=10 && st->vremyaPM<10)
  338. {
  339. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  340. }
  341. if(st->vremyaOM<10 && st->vremyaPM>=10)
  342. {
  343. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  344. }
  345. if(st->vremyaOM<10 && st->vremyaPM<10)
  346. {
  347. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  348. }
  349. st=st->next;
  350. i++;
  351. }
  352. printf("--------------------------------------------------------------------------------\n");
  353. system("pause");
  354. }
  355.  
  356. void delete_all() //удаление списка по оканчанию работы проги
  357. {
  358. raspisanie *Reis;
  359. Reis=begin;
  360. while(Reis!=NULL)
  361. {
  362. begin=Reis;
  363. Reis=Reis->next;
  364. delete begin;
  365. }
  366. }*/
  367.  
  368.  
  369.  
  370.  
  371. /*char *shifr1(char login[40])//Шифровка логина
  372. {
  373. char s=0;
  374. char *str;
  375. if(!(str=(char*)malloc(80*sizeof(char))))
  376. {
  377. printf("Доступа к памяти нет!\n");
  378. }
  379. for(int i=0;i<strlen(login);i++)
  380. {
  381. s+=login[i];
  382. }
  383. s/=strlen(login);
  384. _itoa(s,str,10);
  385. strncat(str,login,1);
  386. return str;
  387. }
  388.  
  389. char *shifr2(char pass[40])//Шифровка пароля
  390. {
  391. char s=0;
  392. char *str;
  393. if(!(str=(char*)malloc(80*sizeof(char))))
  394. {
  395. printf("Доступа к памяти нет!\n");
  396. }
  397. for(int i=0;i<strlen(pass);i++)
  398. {
  399. s+=pass[i];
  400. }
  401. s/=strlen(pass);
  402. _itoa(s,str,10);
  403. strncat(str,pass,1);
  404. return str;
  405. }*/
  406.  
  407.  
  408.  
  409. void glavnoe_menu()
  410. {
  411. USER user;
  412. while (1)
  413. {
  414. int ch;
  415. int pr = -1;
  416. do
  417. {
  418. system("cls");
  419. printf("=====================================МЕНЮ:======================================\n");
  420. printf(" 1 - Войти под администратором.\n");
  421. printf(" 2 - Войти под пользователем.\n");
  422. printf(" 3 - Регистрация пользователя.\n");
  423. printf(" 4 - Выход из программы.\n");
  424. pr = scanf("%d", &ch);
  425. } while (ch > 4 || pr == 0 || ch < 0);
  426. switch (ch)
  427. {
  428. case 1: user = Authorization("admin");
  429. if (!strcmp(user.role, "admin")) {
  430. admin_vibor();
  431. }
  432. break;
  433. case 2: user = Authorization("user");
  434. if (!strcmp(user.role, "user")) {
  435. usermenu();
  436. }
  437. break;
  438. case 3:Registration("users.txt");
  439. break;
  440. case 4:delete_all();
  441. _exit(0);
  442. }
  443. }
  444. }
  445.  
  446.  
  447.  
  448.  
  449. int adminmenu()
  450. {
  451. int ch;
  452. int pr=-1;
  453. do
  454. {
  455. system("cls");
  456. printf("===============================Вход:Режим администратора========================\n");
  457. printf(" 1 - Создать/открыть файл с данными.\n");
  458. printf(" 2 - Добавить рейс.\n");
  459. printf(" 3 - Редактировать запись.\n");
  460. printf(" 4 - Удалить запись.\n");
  461. printf(" 5 - Просмотр данных в табличной форме.\n");
  462. printf(" 6 - Поиск.\n");
  463. printf(" 7 - Управление пользователями.\n");
  464. printf(" 8 - Назад.\n");
  465. pr=scanf("%d", &ch);
  466. }while(ch>8 || pr==0 || ch < 0);
  467. return ch;
  468. }
  469.  
  470. user Authorization(char role[10])
  471. {
  472. char login[100]; //объявл массив логин
  473. char password[100]; //объявл массив пароль
  474. user user = {}; //создаем структуру данных юзер под именем юзер
  475. cout << "Введите логин\n";
  476. cin >> user.login; //вбиваем в поле логин структуры юзер
  477. cout << "Введите пароль\n";
  478. cin >> user.password; //в поле пароль структуры
  479. FILE *fp; //объявляем ссылку на переменную типа файл
  480. char estr[1000]; // переменная-мусорка,в нее записываем если пароль и логин не совпадает
  481. if (fp = fopen("users.txt", "r")) { //открываем файл,одновременно проверяя открылся ли он
  482. {
  483. while (!feof(fp)) { //пока не наступил конец файла
  484. fscanf(fp, "%s ", login); //читаем до первого пробела и записываем в переменную логин
  485. fscanf(fp, "%s ", password); //затем в переменную пасворд
  486. fscanf(fp, "%s", user.status);
  487. if (!strcmp(user.login, login) && !strcmp(user.password, password)) {
  488. if (!strcmp(user.status, "y")) { cout << "Пользователь забанен."; Sleep(700); fclose(fp); return user; }
  489. fscanf(fp, "%s ", user.role);
  490. if (strcmp(user.role, role)) { cout << "Неправильный логин либо пароль."; Sleep(700); fclose(fp); return user; }
  491. fscanf(fp, "%s\n", user.phone);
  492. return user;
  493. }
  494.  
  495. else { fscanf(fp, "%[^\n]s", estr); }
  496. }
  497.  
  498. if (strcmp(user.role, role)) {
  499. cout << " Неправильный логин либо пароль."; Sleep(700);
  500. }fclose(fp);
  501. return user;
  502. }
  503. }
  504. else {
  505. printf("\nОшибка открытия файла\n"); Sleep(700); glavnoe_menu();
  506. }
  507. void glavnoe_menu();
  508. }
  509. void Registration(char *filename) {
  510. FILE *fp;
  511. char* file_name = "users.txt";
  512. char *log;
  513. char *pass;
  514. char *phone;
  515.  
  516. if (fp = fopen(file_name, "a+")) {
  517. printf("Регистрация пользователя");
  518. log = (char*)malloc(sizeof(char));
  519. pass = (char*)malloc(sizeof(char));
  520. phone = (char*)malloc(sizeof(char));
  521.  
  522. printf("\nВведите логин: ");
  523. scanf("%s", log);
  524. if (Check_login(log, fp)) {
  525. printf("\nВведите пароль: ");
  526. scanf("%s", pass);
  527. printf("\nВведите номер телефона: ");
  528. scanf("%s", phone);
  529. printf("Пользователь зарегистрирован.\n"); Sleep(700);
  530. fprintf(fp, "\n%s %s n user %s", log, pass, phone);
  531. void glavnoe_menu();
  532. }
  533. else {
  534. printf("\nПользователь с таким логином уже существует!\nПопробуйте еще раз.\n\n"); Sleep(700);
  535. Registration("users.txt");
  536. }
  537. }
  538. else {
  539. printf("\nОшибка открытия файла\n");
  540. glavnoe_menu();
  541. }
  542. fclose(fp);
  543. printf("\n");
  544. void glavnoe_menu();
  545. }
  546.  
  547. bool Check_login(char* log, FILE *fp) {
  548. char login[100];
  549. char buf[500];
  550. while (!feof(fp)) {
  551. fscanf(fp, "%s ", login);
  552. if (!strcmp(login, log)) {
  553. return false;
  554. }
  555. fscanf(fp, "\n ", buf);
  556. }
  557. return true;
  558. }
  559.  
  560.  
  561. void admin_vibor()//функция меню администратора
  562. {
  563. while(1)
  564. {
  565. switch(adminmenu()) {
  566. case 1:
  567. /*vvod()*/;
  568. break;
  569. case 2:
  570. /* insert()*/;
  571. break;
  572. case 3:
  573. /* edit()*/;
  574. break;
  575. case 4:/* del()*/;
  576. break;
  577. case 5:/* sortchoice()*/;
  578. break;
  579. case 6: /*menusearch_choice()*/;
  580. break;
  581. case 7: usermanage();
  582. break;
  583. case 8: return;
  584. }
  585. }
  586. }
  587.  
  588.  
  589.  
  590. int userchoice()
  591. {int ch;
  592. int pr=-1;
  593. do
  594. {
  595. system("cls");
  596. printf("===============================Меню:Режим пользователя========================\n");
  597. printf(" 1 - Открыть файл.\n");
  598. printf(" 2 - Просмотр всех данных в табличной форме.\n");
  599. printf(" 3 - Поиск оптимального времени.\n");
  600. printf(" 4 - Поиск.\n");
  601. printf(" 5 - Назад.\n");
  602. pr=scanf("%d", &ch);
  603. }while(ch>5 || pr==0|| ch<0);
  604. return ch;
  605. }
  606.  
  607. void usermenu()
  608. {
  609. while(1)
  610. {
  611. switch(userchoice()) {
  612. case 1:
  613. /* openfile()*/;
  614. break;
  615. case 2: /*sortchoice()*/;
  616. break;
  617. case 3:
  618. /*optim_time()*/;
  619. break;
  620. case 4: /*menusearch_choice()*/;
  621. break;
  622. case 5: return;
  623. }
  624. }
  625. }
  626.  
  627. void openfile()
  628. {
  629. if(begin!=NULL)
  630. {
  631. printf("Файл уже открыт!\n");
  632. Sleep(700);
  633. return;
  634. }
  635. if(!(file=fopen("raspisanie.dat", "rb")))
  636. {
  637. printf("Файл ещё не создан. Обратитесь позже!\n");
  638. return;
  639. }
  640. printf("Файл открыт!\n");
  641. schitivanie();
  642. fclose(file);
  643. Sleep(600);
  644. }
  645.  
  646.  
  647. void usermanage()
  648. {
  649.  
  650. while(1)
  651. {
  652. switch(managemenu())
  653. {
  654. case 1: ban();
  655. break;
  656. case 2: antiban();
  657. break;
  658. case 3: makeadmin();
  659. break;
  660. case 4: shaw_users();
  661. system("pause");
  662. break;
  663. case 5: return;
  664. }
  665. }
  666. }
  667.  
  668. int managemenu()
  669. {
  670. int ch;
  671. int pr=-1;
  672. do
  673. {
  674. system("cls");
  675. printf("==================================Управление:===================================\n");
  676. printf(" 1 - Забанить пользователя\n");
  677. printf(" 2 - Разбанить пользователя\n");
  678. printf(" 3 - Назначить пользователя админом\n");
  679. printf(" 4 - Просмотр всех пользователей\n");
  680. printf(" 5 - Назад\n");
  681. pr=scanf("%d", &ch);
  682. }while(ch>5 || pr==0 || ch<0);
  683. return ch;
  684. }
  685.  
  686. int read_users(USER **start, USER **finish) {
  687. FILE *fp;
  688. if (!(fp = fopen("users.txt", "r+"))) {
  689. printf("Ни один не зарегестрирован\n");
  690. return 1;
  691. }
  692. else {
  693. char log[100];
  694. char pass[100];
  695. int flag = 0;
  696. USER *p;
  697. while (!feof(fp)) {
  698. if (!*start) {
  699. p = new USER;
  700.  
  701. fscanf(fp, "%s ", p->login);
  702. fscanf(fp, "%s ", p->password);
  703. int a = strlen(p->password);
  704. for (int i = 0; i < a; i++) p->password[i] -= 2;
  705. fscanf(fp, "%s ", p->status);
  706. fscanf(fp, "%s ", p->role);
  707. fscanf(fp, "%s ", p->phone);
  708.  
  709. p->next = p->previous = NULL;
  710. *start = *finish = p;
  711. }
  712. else {
  713. p = new USER;
  714.  
  715. fscanf(fp, "%s ", p->login);
  716. fscanf(fp, "%s ", p->password);
  717. int a = strlen(p->password);
  718. for (int i = 0; i < a; i++) p->password[i] -= 2;
  719. fscanf(fp, "%s ", p->status);
  720. fscanf(fp, "%s ", p->role);
  721.  
  722. fscanf(fp, "%s ", p->phone);
  723.  
  724. p->previous = *finish;
  725. p->next = NULL;
  726. (*finish)->next = p;
  727. *finish = p;
  728. }
  729. }
  730. fclose(fp);
  731. }
  732.  
  733. return 0;
  734. }
  735.  
  736. void shaw_users() {
  737. USER *nachalo = NULL, *end = NULL;
  738. int z = read_users(&nachalo, &end);
  739. if (!z) {
  740. USER *p = nachalo;
  741. printf("%-10s %-10s %-10s %-10s %-10s \n\n", "Логин", "Пароль", "Статус", "Роль", "Телефон");
  742. while (p) {
  743. printf("%-10s ", p->login);
  744. printf("%-10s ", p->password);
  745. printf("%-10s ", p->status);
  746. printf("%-10s ", p->role);
  747. printf("%-10s\n", p->phone);
  748. p = p->next;
  749. }
  750. }
  751. printf("\n");
  752. }
  753.  
  754. void write_users(USER *nachalo) {
  755. USER *p = nachalo;
  756. FILE *ff;
  757.  
  758.  
  759. ff = fopen("users.txt", "w+");
  760. if (ff == NULL)
  761. {
  762. printf("Файл users.txt не найден\n");
  763. return;
  764. }
  765. else {
  766. while (p) {
  767. int a = strlen(p->password);
  768. for (int i = 0; i < a; i++) p->password[i] += 2;
  769. fprintf(ff, "%s %s %s %s %s\n", p->login, p->password, p->status, p->role, p->phone);
  770. p = p->next;
  771. }
  772. fclose(ff);
  773. }
  774.  
  775. }
  776.  
  777. void ban() {
  778. system("cls");
  779. USER *nachalo = NULL, *end = NULL;
  780. int z = read_users(&nachalo, &end);
  781. if (!z) {
  782. USER *p = nachalo;
  783. printf("%-10s %-10s %-10s %-10s %-10s \n\n", "Логин", "Пароль", "Статус", "Роль", "Телефон");
  784. while (p) {
  785. printf("%-10s ", p->login);
  786. printf("%-10s ", p->password);
  787. printf("%-10s ", p->status);
  788. printf("%-10s ", p->role);
  789. printf("%-10s\n", p->phone);
  790. p = p->next;
  791. }
  792. char name[50];
  793. printf("Напишите логин пользователя, которого вы хотите забанить: ");
  794. cin >> name;
  795. if (cin.good())
  796. {
  797. cin.ignore(20, '\n');
  798. }
  799. cin.clear();
  800. USER *u = nachalo;
  801. while (u) {
  802. if (!strcmp(name, u->login)) {
  803. strcpy_s(u->status, "y");
  804. }
  805. u = u->next;
  806. }
  807.  
  808. write_users(nachalo);
  809. system("cls");
  810. }
  811. }
  812.  
  813. void antiban() {
  814. system("cls");
  815. USER *nachalo = NULL, *end = NULL;
  816. int z = read_users(&nachalo, &end);
  817. if (!z) {
  818. USER *p = nachalo;
  819. printf("%-10s %-10s %-10s %-10s %-10s \n\n", "Логин", "Пароль", "Статус", "Роль", "Телефон");
  820. while (p) {
  821. printf("%-10s ", p->login);
  822. printf("%-10s ", p->password);
  823. printf("%-10s ", p->status);
  824. printf("%-10s ", p->role);
  825. printf("%-10s\n", p->phone);
  826. p = p->next;
  827. }
  828. char name[50];
  829. printf("\nВведите логин пользователя которого вы хотите разбанить: ");
  830. cin >> name;
  831. if (cin.good())
  832. {
  833. cin.ignore(20, '\n');
  834. }
  835. cin.clear();
  836. USER *u = nachalo;
  837. while (u) {
  838. if (!strcmp(name, u->login)) {
  839. strcpy_s(u->status, "n");
  840. }
  841. u = u->next;
  842. }
  843.  
  844. write_users(nachalo);
  845. system("cls");
  846. }
  847. }
  848.  
  849. void makeadmin() {
  850. system("cls");
  851. USER *nachalo = NULL, *end = NULL;
  852. int z = read_users(&nachalo, &end);
  853. if (!z) {
  854. USER *p = nachalo;
  855. printf("%-10s %-10s %-10s %-10s %-10s \n\n", "Логин", "Пароль", "Статус", "Роль", "Телефон");
  856. while (p) {
  857. printf("%-10s ", p->login);
  858. printf("%-10s ", p->password);
  859. printf("%-10s ", p->status);
  860. printf("%-10s ", p->role);
  861. printf("%-10s\n", p->phone);
  862. p = p->next;
  863. }
  864. char name[50];
  865. printf("\nВведите логин пользователя которого вы хотите назначить админом: ");
  866. cin.ignore(cin.rdbuf()->in_avail());
  867. cin.getline(name, 50);
  868. USER *u = nachalo;
  869. while (u) {
  870. if (!strcmp(name, u->login)) {
  871. strcpy_s(u->role, "admin");
  872. }
  873. u = u->next;
  874. }
  875.  
  876. write_users(nachalo);
  877. system("cls");
  878. }
  879. }
  880.  
  881. /*void edit_pass()
  882. {
  883. char pass[40], str[40],str1[40], login[40],str2[40];char strlog[40];
  884. if(!(file3=fopen("usersname.txt", "r+t")))
  885. {
  886. printf("Доступа к памяти нет!\n");
  887. fclose(file3);
  888. return;
  889. }
  890. if(!(file2=fopen("users.txt", "r+t")))
  891. {
  892. printf("Доступа к памяти нет!\n");
  893. fclose(file2);
  894. return;
  895. }
  896. int i, j, schet=0;
  897. printf("\n");
  898. while(feof(file3)==0)
  899. {
  900. fgets(str1,40,file3);
  901. schet++;
  902. }
  903. schet--;
  904. str1[0]='\0';
  905. rewind(file3);
  906. for(i=0;i<schet;i++)
  907. {
  908. fgets(str1,40,file3);
  909. printf("%d.",i+1);puts(str1);
  910. }
  911. printf("Выберите пользователя, пароль которого вы хотите редактировать\n");
  912. int nomer;
  913. scanf("%d", &nomer);
  914. rewind(file3);
  915. for(i=0;i<nomer;i++)
  916. {
  917. str1[0]='\0';
  918. fgets(str1,40,file3);
  919. str1[strlen(str1)-1]='\0';
  920. }
  921. while(feof(file2)==0)
  922. {
  923. fgets(str,40,file2);
  924. str[strlen(str)-1]='\0';
  925. if(!(strstr(str,shifr1(str1))))
  926. {
  927. strcpy(strlog,shifr1(str1));
  928. printf("Введите новый пароль\n");
  929. fflush(stdin);
  930. scanf("%39s",pass);
  931. strcpy(str2, shifr2(pass));
  932. strcat(strlog,str2);
  933. break;
  934. }
  935. }
  936. vhod users[100];
  937. rewind(file2);
  938. int s=0;
  939. while(feof(file2)==0)
  940. {
  941. fgets(str1,40,file2);
  942. s++;}s--;rewind(file2);
  943. for(i=0;i<s;i++)
  944. {
  945. str1[0]='\0';
  946. fgets(str1,40,file2);
  947. str1[strlen(str1)-1]='\0';
  948. strcpy(users[i].pass, str1);
  949. }
  950. fclose(file2);
  951. if(!(file2=fopen("users.txt", "w+t")))
  952. {
  953. printf("Доступа к памяти нет!\n");
  954. fclose(file2);
  955. return;
  956. }
  957. users[nomer].pass[0]='\0';
  958. strcpy(users[nomer].pass, strlog);
  959. for(j=0;j<s;j++)
  960. {
  961. fprintf(file2,"%s\n",users[j].pass);
  962. }
  963. fclose(file2);
  964. fclose(file3);
  965. }
  966.  
  967. void delete_user()
  968. {
  969. char str1[40],str2[40];
  970. if(!(file3=fopen("usersname.txt", "r+t")))
  971. {
  972. printf("Доступа к памяти нет!\n");
  973. fclose(file3);
  974. return;
  975. }
  976. if(!(file2=fopen("users.txt", "r+t")))
  977. {
  978. printf("Доступа к памяти нет!\n");
  979. fclose(file2);
  980. return;
  981. }
  982. int i, j, schet=0;
  983. printf("\n");
  984. while(feof(file3)==0)
  985. {
  986. fgets(str1,40,file3);
  987. schet++;
  988. }
  989. schet--;
  990. str1[0]='\0';
  991. rewind(file3);
  992. for(i=0;i<schet;i++)
  993. {
  994. fgets(str1,40,file3);
  995. printf("%d.",i+1);puts(str1);
  996. }
  997. printf("Выберите пользователя, которого вы хотите удалить\n");
  998. int nomer;
  999. int pr=-1;
  1000. do
  1001. {
  1002. pr=scanf("%d", &nomer);
  1003. }while(nomer<0 || pr==0);
  1004. rewind(file3);
  1005. vhod users[100];
  1006. rewind(file2);
  1007. int s=0;
  1008. while(feof(file2)==0)
  1009. {
  1010. fgets(str1,40,file2);
  1011. s++;}s--;rewind(file2);
  1012. for(i=0;i<s;i++)
  1013. {
  1014. str1[0]='\0';
  1015. fgets(str1,40,file2);
  1016. str1[strlen(str1)-1]='\0';
  1017. strcpy(users[i].pass, str1);
  1018. if(i<s-1)
  1019. {
  1020. str2[0]='\0';
  1021. fgets(str2,40,file3);
  1022. str2[strlen(str2)-1]='\0';
  1023. strcpy(users[i].login, str2);
  1024. }
  1025. }
  1026. fclose(file2);
  1027. fclose(file3);
  1028. if(!(file2=fopen("users.txt", "w+t")))
  1029. {
  1030. printf("Доступа к памяти нет!\n");
  1031. fclose(file2);
  1032. return;
  1033. }
  1034. if(!(file3=fopen("usersname.txt", "w+t")))
  1035. {
  1036. printf("Доступа к памяти нет!\n");
  1037. fclose(file3);
  1038. return;
  1039. }
  1040. for(j=0;j<s;j++)
  1041. {
  1042. if(j==nomer) j++;
  1043. fprintf(file2,"%s\n",users[j].pass);
  1044. }
  1045. for(j=0;j<s-1;j++)
  1046. {
  1047. if(j==nomer-1) j++;
  1048. if(j<s-1)
  1049. fprintf(file3,"%s\n",users[j].login);
  1050. }
  1051. fclose(file2);
  1052. fclose(file3);
  1053. }*/
  1054.  
  1055. void edit()
  1056. {
  1057. if(begin==NULL)
  1058. {
  1059. printf("Файл не открыт!\n");
  1060. Sleep(700);
  1061. return;
  1062. }
  1063. int nomer, pr;
  1064. raspisanie *rasp;
  1065. rasp=begin->next;
  1066. int i=0;
  1067. while(rasp!=NULL)
  1068. {
  1069. i++;
  1070. rasp=rasp->next;
  1071. }
  1072. int flag;
  1073. do
  1074. {
  1075. system("cls");
  1076. vivod();
  1077. printf("Введите номер позиции рейса в таблице, который хотите отредактировать\n");
  1078. int p=0;
  1079. flag=0;
  1080. fflush(stdin);
  1081. pr=scanf("%15d", &nomer);
  1082. if(nomer>i || nomer<0 || pr==0)
  1083. {
  1084. printf("Неверный ввод!. Попробовать снова?\n1.Да\n2.Нет");
  1085. int choice;
  1086. flag=0;
  1087. int rp=-1;
  1088. do{
  1089. rp=scanf("%d",&choice);
  1090. }while(choice<0 || rp==0);
  1091. switch(choice)
  1092. {
  1093. case 1:
  1094. flag=1;printf("\n");
  1095. break;
  1096. case 2:return;
  1097. break;
  1098. default: printf("\nНеверное значение.\n");
  1099. Sleep(700);
  1100. return;
  1101. }
  1102. }
  1103. }while(flag==1);
  1104. raspisanie *red, red2;
  1105. red=begin;
  1106. for(i=0;i<nomer;i++)
  1107. {
  1108. red=red->next;
  1109. }
  1110. red2=(*red);
  1111. int flag2=0;
  1112. int nom;
  1113. while(flag2!=1)
  1114. {
  1115. switch(editchoice()) {
  1116. char str[40];
  1117. case 1:
  1118. printf("Введите номер рейса\n");
  1119. do{
  1120. fflush(stdin);
  1121. pr=scanf("%15lf", &red2.nomer.nomerReisa);
  1122. }while(red2.nomer.nomerReisa<0 || pr==0);
  1123. red->nomer.nomerReisa=red2.nomer.nomerReisa;
  1124. break;
  1125. case 2: printf("Введите тип автобуса\n");
  1126. fflush(stdin);
  1127. red->type[0]='\0';
  1128. gets_s(red2.type);
  1129. strcpy(red->type, red2.type);
  1130. red2.type[0]='\0';
  1131. break;
  1132. case 3:
  1133. printf("Введите пункт назначения\n");
  1134. fflush(stdin);
  1135. red->punkt[0]='\0';
  1136. gets_s(red2.punkt);
  1137. strcpy(red->punkt, red2.punkt);
  1138. red2.punkt[0]='\0';
  1139. break;
  1140. case 4: printf("Введите время отправления атобуса\n");
  1141. int k,m;
  1142. do{
  1143. printf("Часы:");
  1144. fflush(stdin);
  1145. pr=scanf("%2d", &k);
  1146. }while(k<0 || k>24 || pr==0);
  1147. do{
  1148. printf("Минуты:");
  1149. fflush(stdin);
  1150. pr=scanf("%2d", &m);
  1151. }while(m<0 || m>60 || pr==0);
  1152. red->vremyaOCh=k;red->vremyaOM=m;
  1153. break;
  1154. case 5: printf("Введите время прибытия атобуса\n");
  1155. int k2,m2;
  1156. do{
  1157. printf("Часы:");
  1158. fflush(stdin);
  1159. pr=scanf("%2d", &k2);
  1160. }while(k2<0 || k2>24 || pr==0);
  1161. do{
  1162. printf("Минуты:");
  1163. fflush(stdin);
  1164. pr=scanf("%2d", &m2);
  1165. }while(m2<0 || m2>60 || pr==0);
  1166. red->vremyaPCh=k2;red->vremyaPM=m2;
  1167. break;
  1168. case 6: flag2=1;
  1169. break;
  1170. }
  1171. }
  1172. if((file=fopen("raspisanie.dat", "w+b"))==NULL)
  1173. {
  1174. printf("Доступа к памяти нет!\n");
  1175. fclose(file);
  1176. return;
  1177. }
  1178. raspisanie *ed, ed2;
  1179. ed=begin->next;
  1180. while(ed!=NULL)
  1181. {
  1182. ed2=*ed;
  1183. fwrite( &ed2 ,1, sizeof(raspisanie),file);
  1184. ed=ed->next;
  1185. }
  1186. fclose(file);
  1187. }
  1188.  
  1189. int editchoice()
  1190. {
  1191. int ch;
  1192. int pr=-1;
  1193. do
  1194. {
  1195. system("cls");
  1196. printf("\n");
  1197. printf(" 1 - Редактировать номер рейса\n");
  1198. printf(" 2 - Редактировать тип автобуса\n");
  1199. printf(" 3 - Редактировать пункт назначения\n");
  1200. printf(" 4 - Редактировать время отправления\n");
  1201. printf(" 5 - Редактировать время прибытия\n");
  1202. printf(" 6 - Назад.\n");
  1203. pr=scanf("%d", &ch);
  1204. }while(ch>6 || pr==0 ||ch<0);
  1205. return ch;
  1206. }
  1207.  
  1208. void del()
  1209. {
  1210. if(begin==NULL)
  1211. {
  1212. printf("Файл не открыт!\n");
  1213. Sleep(700);
  1214. return;
  1215. }
  1216. vivod();
  1217. int nomer;
  1218. raspisanie *rasp;
  1219. rasp=begin->next;
  1220. int i=0;
  1221. while(rasp!=NULL)
  1222. {
  1223. i++;
  1224. rasp=rasp->next;
  1225. }
  1226. printf("Введите номер позиции рейса в таблице, который хотите удалить\n");
  1227. int flag,pr;
  1228. do
  1229. {
  1230. int p=0;
  1231. flag=0;
  1232. pr=scanf("%15d", &nomer);
  1233. if(nomer>i || nomer<0 || pr==0)
  1234. {
  1235. printf("Неверный ввод!. Попробовать снова?\n1.Да\n2.Нет");
  1236. int choice;
  1237. flag=0;
  1238. int rp=-1;
  1239. do{
  1240. rp=scanf("%d",&choice);
  1241. }while(choice<0 || rp==0);
  1242. switch(choice)
  1243. {
  1244. case 1:
  1245. flag=1;printf("\n");
  1246. break;
  1247. case 2:return;
  1248. break;
  1249. default: printf("\nНеверное значение.\n");
  1250. Sleep(700);
  1251. return;
  1252. }
  1253. }
  1254. }while(flag==1);
  1255. raspisanie *del1,*del2;
  1256. del1=begin;
  1257. for(i=0;i<nomer;i++)
  1258. {
  1259. if(i==nomer-1)
  1260. {
  1261. del2=del1->next;
  1262. del1->next=del2->next;
  1263. delete del2;
  1264. }
  1265. else del1=del1->next;
  1266. }
  1267. if((file=fopen("raspisanie.dat", "w+b"))==NULL)
  1268. {
  1269. printf("Доступа к памяти нет!\n");
  1270. fclose(file);
  1271. return;
  1272. }
  1273. raspisanie *ed, ed2;
  1274. ed=begin->next;
  1275. while(ed!=NULL)
  1276. {
  1277. ed2=*ed;
  1278. fwrite( &ed2 ,1, sizeof(raspisanie),file);
  1279. ed=ed->next;
  1280. }
  1281. fclose(file);
  1282. }
  1283.  
  1284. void sort_reis()
  1285. {
  1286. raspisanie *a = NULL, *b = NULL, *c = NULL, *e = NULL, *tmp = NULL;
  1287. while(e != begin->next->next)
  1288. {
  1289. c = a = begin->next;
  1290. b = a->next;
  1291. while(a != e)
  1292. {
  1293. if(a->nomer.nomerReisa > b->nomer.nomerReisa )
  1294. {
  1295. if(a == begin->next)
  1296. {
  1297. tmp = b -> next;
  1298. b->next = a;
  1299. a->next = tmp;
  1300. begin->next = b;
  1301. c = b;
  1302. }
  1303. else
  1304. {
  1305. tmp = b->next;
  1306. b->next = a;
  1307. a->next = tmp;
  1308. c->next = b;
  1309. c = b;
  1310. }
  1311. }
  1312. else
  1313. {
  1314. c = a;
  1315. a = a->next;
  1316. }
  1317. b = a->next;
  1318. if(b == e)
  1319. e = a;
  1320. }
  1321. }
  1322. vivod();
  1323. }
  1324.  
  1325. void sort_punkt()
  1326. {
  1327. raspisanie *a = NULL, *b = NULL, *c = NULL, *e = NULL, *tmp = NULL;
  1328. while(e != begin->next->next)
  1329. {
  1330. c = a = begin->next;
  1331. b = a->next;
  1332. while(a != e)
  1333. {
  1334. int i=0;
  1335. while(a->punkt[i]==b->punkt[i])
  1336. {
  1337. if( a->punkt[i]==b->punkt[i]) i++;
  1338. }
  1339. if(a->punkt[i] > b->punkt[i] )
  1340. {
  1341. if(a == begin->next)
  1342. {
  1343. tmp = b -> next;
  1344. b->next = a;
  1345. a->next = tmp;
  1346. begin->next = b;
  1347. c = b;
  1348. }
  1349. else
  1350. {
  1351. tmp = b->next;
  1352. b->next = a;
  1353. a->next = tmp;
  1354. c->next = b;
  1355. c = b;
  1356. }
  1357. }
  1358. else
  1359. {
  1360. c = a;
  1361. a = a->next;
  1362. }
  1363. b = a->next;
  1364. if(b == e)
  1365. e = a;
  1366. }
  1367. }
  1368. vivod();
  1369. }
  1370.  
  1371. void optim_time()
  1372. {
  1373. if(begin==NULL)
  1374. {
  1375. printf("Файл не открыт!\n");
  1376. Sleep(700);
  1377. return;
  1378. }
  1379. int ch,m, pr;
  1380. printf("Введите время, раньше которого автобус должен прибыть в пункт\n");
  1381. do{
  1382. printf("Час:");
  1383. fflush(stdin);
  1384. pr=scanf("%d", &ch);
  1385. }while(ch<0 || ch>24 || pr==0);
  1386. do{
  1387. printf("Минуты:");
  1388. fflush(stdin);
  1389. pr=scanf("%d",&m);
  1390. }while(m<0 || m>60 || pr==0);
  1391. raspisanie *rab;
  1392. rab=begin->next;
  1393. int s=0;
  1394. while(rab!=NULL)
  1395. {
  1396. if (rab->vremyaPCh<ch) s++;
  1397. rab=rab->next;
  1398. }
  1399. if(s==0) printf("Автобусов раньше заданного времени нет\n");
  1400. system("cls");
  1401. raspisanie *st;
  1402. st=begin->next;
  1403. printf("--------------------------------------------------------------------------------");
  1404. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  1405. printf("| | | | | отправления | прибытия |");
  1406. printf("--------------------------------------------------------------------------------");
  1407. int i=1;
  1408. while(st!=NULL)
  1409. {
  1410. if(st->vremyaPCh<ch)
  1411. {
  1412. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1413. {
  1414. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1415. }
  1416. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1417. {
  1418. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1419. }
  1420. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1421. {
  1422. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1423. }
  1424. if(st->vremyaOM<10 && st->vremyaPM<10)
  1425. {
  1426. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1427. }
  1428. }
  1429. if(st->vremyaPCh==ch && st->vremyaPM<m)
  1430. {
  1431. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1432. {
  1433. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1434. }
  1435. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1436. {
  1437. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1438. }
  1439. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1440. {
  1441. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1442. }
  1443. if(st->vremyaOM<10 && st->vremyaPM<10)
  1444. {
  1445. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1446. }
  1447. }
  1448. st=st->next;
  1449. i++;
  1450. }
  1451. printf("--------------------------------------------------------------------------------\n");
  1452. system("pause");
  1453. }
  1454.  
  1455. void poisk_time()
  1456. {
  1457. if(begin==NULL)
  1458. {
  1459. printf("Файл не открыт!\n");
  1460. Sleep(700);
  1461. return;
  1462. }
  1463. printf("Введите время, в которое автобус должен прибыть в пункт\n");
  1464. raspisanie *st=begin->next, *prov=begin->next;
  1465. int chas, min;
  1466. int pr;
  1467. do{
  1468. printf("Час:");
  1469. fflush(stdin);
  1470. pr=scanf("%d", &chas);
  1471. }while(chas<0 || chas>24 || pr==0);
  1472. do{
  1473. printf("Минуты:");
  1474. fflush(stdin);
  1475. pr=scanf("%d",&min);
  1476. }while(min<0 || min>60 || pr==0);
  1477. int schet=0;
  1478. while(prov!=NULL)
  1479. {
  1480. if(prov->vremyaPCh==chas && prov->vremyaPM==min) schet++;
  1481. prov=prov->next;
  1482. }
  1483. if(schet==0)
  1484. {
  1485. system("cls");
  1486. printf("Автобуса по заданному времени не существует.\n");
  1487. system("pause");
  1488. return;
  1489. }
  1490. system("cls");
  1491. printf("--------------------------------------------------------------------------------");
  1492. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  1493. printf("| | | | | отправления | прибытия |");
  1494. printf("--------------------------------------------------------------------------------");
  1495. int i=1;
  1496. while(st!=NULL)
  1497. {
  1498. if(st->vremyaPCh==chas && st->vremyaPM==min)
  1499. {
  1500. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1501. {
  1502. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1503. }
  1504. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1505. {
  1506. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1507. }
  1508. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1509. {
  1510. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1511. }
  1512. if(st->vremyaOM<10 && st->vremyaPM<10)
  1513. {
  1514. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1515. }
  1516. }
  1517. st=st->next;
  1518. i++;
  1519. }
  1520. printf("--------------------------------------------------------------------------------\n");
  1521. system("pause");
  1522. }
  1523.  
  1524. void poisk_punkt()
  1525. {
  1526. if(begin==NULL)
  1527. {
  1528. printf("Файл не открыт!\n");
  1529. Sleep(700);
  1530. return;
  1531. }
  1532. printf("Введите пункт, в который автобус должен прибыть\n");
  1533. raspisanie *st=begin->next, *prov=begin->next;
  1534. char punkt[40];
  1535. int shet=0;
  1536. fflush(stdin);
  1537. scanf("%15s", punkt);
  1538. int schet=0;
  1539. while(prov!=NULL)
  1540. {
  1541. if(strcmp(prov->punkt,punkt)==0) schet++;
  1542. prov=prov->next;
  1543. }
  1544. if(schet==0)
  1545. {
  1546. system("cls");
  1547. printf("Автобуса по заданному пути не существует.\n");
  1548. system("pause");
  1549. return;
  1550. }
  1551. system("cls");
  1552. printf("--------------------------------------------------------------------------------");
  1553. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  1554. printf("| | | | | отправления | прибытия |");
  1555. printf("--------------------------------------------------------------------------------");
  1556. int i=1;
  1557. while(st!=NULL)
  1558. {
  1559. if(strcmp(st->punkt,punkt)==0)
  1560. {
  1561. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1562. {
  1563. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1564. }
  1565. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1566. {
  1567. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1568. }
  1569. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1570. {
  1571. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1572. }
  1573. if(st->vremyaOM<10 && st->vremyaPM<10)
  1574. {
  1575. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1576. }
  1577. }
  1578. st=st->next;
  1579. i++;
  1580. }
  1581. printf("--------------------------------------------------------------------------------\n");
  1582. system("pause");
  1583. }
  1584.  
  1585. void poisk_reis()
  1586. {
  1587. if(begin==NULL)
  1588. {
  1589. printf("Файл не открыт!\n");
  1590. Sleep(700);
  1591. return;
  1592. }
  1593. printf("Введите номер рейса, по котрому вы хотите узнать расписание\n");
  1594. raspisanie *st=begin->next, *prov=begin->next;
  1595. int nomer;
  1596. int shet=0;
  1597. int pr, flag;
  1598. fflush(stdin);
  1599. do{
  1600. flag=0;
  1601. fflush(stdin);
  1602. pr=scanf("%15d", &nomer);
  1603. if(nomer<0 || pr==0)
  1604. {
  1605. printf("Неверный ввод. Попробуйие ещё раз\n");
  1606. flag=1;
  1607. }
  1608. }while(flag==1);
  1609. int schet=0;
  1610. while(prov!=NULL)
  1611. {
  1612. if(prov->nomer.nomerReisa==nomer) schet++;
  1613. prov=prov->next;
  1614. }
  1615. if(schet==0)
  1616. {
  1617. system("cls");
  1618. printf("Заданного рейса не существует.\n");
  1619. system("pause");
  1620. return;
  1621. }
  1622. system("cls");
  1623. printf("--------------------------------------------------------------------------------");
  1624. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  1625. printf("| | | | | отправления | прибытия |");
  1626. printf("--------------------------------------------------------------------------------");
  1627. int i=1;
  1628. while(st!=NULL)
  1629. {
  1630. if(st->nomer.nomerReisa==nomer)
  1631. {
  1632. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1633. {
  1634. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1635. }
  1636. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1637. {
  1638. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1639. }
  1640. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1641. {
  1642. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1643. }
  1644. if(st->vremyaOM<10 && st->vremyaPM<10)
  1645. {
  1646. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1647. }
  1648. }
  1649. st=st->next;
  1650. i++;
  1651. }
  1652. printf("--------------------------------------------------------------------------------\n");
  1653. system("pause");
  1654. }
  1655.  
  1656. void filter_timeO()
  1657. {
  1658. if(begin==NULL)
  1659. {
  1660. printf("Файл не открыт!\n");
  1661. Sleep(700);
  1662. return;
  1663. }
  1664. printf("Введите время отправления атобуса, от которого начнётся фильтрация\n");
  1665. int flag, pr;
  1666. int k1,k2,min1,min2;
  1667. do{
  1668. printf("Час:");
  1669. fflush(stdin);
  1670. pr=scanf("%2d", &k1);
  1671. }while(k1<0 || k1>24 || pr==0);
  1672. do{
  1673. printf("Минуты:");
  1674. fflush(stdin);
  1675. pr=scanf("%2d", &min1);
  1676. }while(min1<0 || min1>60 || pr==0);
  1677. printf("Введите время отправления атобуса,до которого будет идти фильтрация(макс. 23:59)\n");
  1678. do{
  1679. printf("Час:");
  1680. fflush(stdin);
  1681. pr=scanf("%2d", &k2);
  1682. }while(k2<0 || k2>24 || pr==0);
  1683. do{
  1684. printf("Минуты:");
  1685. fflush(stdin);
  1686. pr=scanf("%2d", &min2);
  1687. }while(min2<0 || min2>60 || pr==0);
  1688. raspisanie *st=begin->next;
  1689. system("cls");
  1690. printf("--------------------------------------------------------------------------------");
  1691. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  1692. printf("| | | | | отправления | прибытия |");
  1693. printf("--------------------------------------------------------------------------------");
  1694. int i=1;
  1695. while(st!=NULL)
  1696. {
  1697. if(st->vremyaOCh>k1 && st->vremyaOCh<k2)//сравнение по часам
  1698. {
  1699. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1700. {
  1701. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1702. }
  1703. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1704. {
  1705. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1706. }
  1707. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1708. {
  1709. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1710. }
  1711. if(st->vremyaOM<10 && st->vremyaPM<10)
  1712. {
  1713. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1714. }
  1715. }
  1716. if(st->vremyaOCh==k1 && st->vremyaOM>min1) //если часы отправления 1 совпали
  1717. {
  1718. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1719. {
  1720. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1721. }
  1722. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1723. {
  1724. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1725. }
  1726. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1727. {
  1728. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1729. }
  1730. if(st->vremyaOM<10 && st->vremyaPM<10)
  1731. {
  1732. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1733. }
  1734. }
  1735. if(st->vremyaOCh==k2 && st->vremyaOM<min2)//если часы отправления 2 совпали
  1736. {
  1737. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1738. {
  1739. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1740. }
  1741. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1742. {
  1743. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1744. }
  1745. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1746. {
  1747. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1748. }
  1749. if(st->vremyaOM<10 && st->vremyaPM<10)
  1750. {
  1751. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1752. }
  1753. }
  1754. st=st->next;
  1755. i++;
  1756. }
  1757. printf("--------------------------------------------------------------------------------\n");
  1758. system("pause");
  1759. }
  1760.  
  1761. void filter_timeP()
  1762. {
  1763. if(begin==NULL)
  1764. {
  1765. printf("Файл не открыт!\n");
  1766. Sleep(700);
  1767. return;
  1768. }
  1769. int ch,m,pr;
  1770. printf("Введите время, раньше которого автобус должен прибыть в пункт\n");
  1771. do{
  1772. printf("Час:");
  1773. fflush(stdin);
  1774. pr=scanf("%2d", &ch);
  1775. }while(ch<0 || ch>24 || ch==0);
  1776. do{
  1777. printf("Минуты:");
  1778. fflush(stdin);
  1779. pr=scanf("%2d", &m);
  1780. }while(m<0 || m>60 || pr==0);
  1781. raspisanie *rab;
  1782. rab=begin->next;
  1783. int s=0;
  1784. while(rab!=NULL)
  1785. {
  1786. if (rab->vremyaPCh<ch) s++;
  1787. rab=rab->next;
  1788. }
  1789. if(s==0) printf("Автобусов раньше заданного времени нет\n");
  1790. system("cls");
  1791. raspisanie *st;
  1792. st=begin->next;
  1793. printf("--------------------------------------------------------------------------------");
  1794. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  1795. printf("| | | | | отправления | прибытия |");
  1796. printf("--------------------------------------------------------------------------------");
  1797. int i=1;
  1798. while(st!=NULL)
  1799. {
  1800. if(st->vremyaPCh<ch)
  1801. {
  1802. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1803. {
  1804. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1805. }
  1806. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1807. {
  1808. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1809. }
  1810. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1811. {
  1812. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1813. }
  1814. if(st->vremyaOM<10 && st->vremyaPM<10)
  1815. {
  1816. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1817. }
  1818. }
  1819. if(st->vremyaPCh==ch && st->vremyaPM<m)
  1820. {
  1821. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1822. {
  1823. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1824. }
  1825. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1826. {
  1827. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1828. }
  1829. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1830. {
  1831. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1832. }
  1833. if(st->vremyaOM<10 && st->vremyaPM<10)
  1834. {
  1835. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1836. }
  1837. }
  1838. st=st->next;
  1839. i++;
  1840. }
  1841. printf("--------------------------------------------------------------------------------\n");
  1842. system("pause");
  1843. }
  1844.  
  1845. void filter_punkt()
  1846. {
  1847. if(begin==NULL)
  1848. {
  1849. printf("Файл не открыт!\n");
  1850. Sleep(700);
  1851. return;
  1852. }
  1853. printf("Введите букву, с которой начинается название населённого пункта (Заглавную)\n");
  1854. int pr;
  1855. char k1,k2;
  1856. do{
  1857. printf("Буква:");
  1858. fflush(stdin);
  1859. pr=scanf("%1c", &k1);
  1860. }while(k1<-64 || k1>-33 || pr==0);
  1861. printf("Введите букву до которой будет идти фильтрация(макс. Я/Заглавную)\n");
  1862. do{
  1863. printf("Буква:");
  1864. fflush(stdin);
  1865. pr=scanf("%1c", &k2);
  1866. }while(k2<-64 || k2>-33 || pr==0);
  1867. raspisanie *st=begin->next;
  1868. system("cls");
  1869. printf("--------------------------------------------------------------------------------");
  1870. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  1871. printf("| | | | | отправления | прибытия |");
  1872. printf("--------------------------------------------------------------------------------");
  1873. int i=1;
  1874. while(st!=NULL)
  1875. {
  1876. if(st->punkt[0]>=k1 && st->punkt[0]<=k2)//сравнение по буквам
  1877. {
  1878. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1879. {
  1880. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1881. }
  1882. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1883. {
  1884. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1885. }
  1886. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1887. {
  1888. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1889. }
  1890. if(st->vremyaOM<10 && st->vremyaPM<10)
  1891. {
  1892. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1893. }
  1894. }
  1895. st=st->next;
  1896. i++;
  1897. }
  1898. printf("--------------------------------------------------------------------------------\n");
  1899. system("pause");
  1900. }
  1901.  
  1902. void filter_PandT()
  1903. {
  1904. if(begin==NULL)
  1905. {
  1906. printf("Файл не открыт!\n");
  1907. Sleep(700);
  1908. return;
  1909. }
  1910. printf("Введите время отправления атобуса, от которого начнётся фильтрация\n");
  1911. int flag, pr;
  1912. int k1,k2,min1,min2;
  1913. do{
  1914. printf("Час:");
  1915. fflush(stdin);
  1916. pr=scanf("%2d", &k1);
  1917. }while(k1<0 || k1>24 || pr==0);
  1918. do{
  1919. printf("Минуты:");
  1920. fflush(stdin);
  1921. pr=scanf("%2d", &min1);
  1922. }while(min1<0 || min1>60 || pr==0);
  1923. printf("Введите время отправления атобуса,до которого будет идти фильтрация(макс. 23:59)\n");
  1924. do{
  1925. printf("Час:");
  1926. fflush(stdin);
  1927. pr=scanf("%2d", &k2);
  1928. }while(k2<0 || k2>24 || pr==0);
  1929. do{
  1930. printf("Минуты:");
  1931. fflush(stdin);
  1932. pr=scanf("%2d", &min2);
  1933. }while(min2<0 || min2>60 || pr==0);
  1934. char k11,k22;
  1935. printf("Введите букву, с которой начинается название населённого пункта (Заглавную)\n");
  1936. do{
  1937. printf("Буква:");
  1938. fflush(stdin);
  1939. pr=scanf("%1c", &k11);
  1940. }while(k11<-64 || k11>-33 || pr==0);
  1941. printf("Введите букву до которой будет идти фильтрация(макс. Я/Заглавную)\n");
  1942. do{
  1943. printf("Буква:");
  1944. fflush(stdin);
  1945. pr=scanf("%1c", &k22);
  1946. }while(k22<-64 || k22>-33 || pr==0);
  1947. raspisanie *st=begin->next;
  1948. system("cls");
  1949. printf("--------------------------------------------------------------------------------");
  1950. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  1951. printf("| | | | | отправления | прибытия |");
  1952. printf("--------------------------------------------------------------------------------");
  1953. int i=1;
  1954. while(st!=NULL)
  1955. {
  1956. if(st->punkt[0]>=k11 && st->punkt[0]<=k22)//сравнение по буквам
  1957. {
  1958. if(st->vremyaOCh>k1 && st->vremyaOCh<k2)//сравнение по часам
  1959. {
  1960. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1961. {
  1962. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1963. }
  1964. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1965. {
  1966. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1967. }
  1968. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1969. {
  1970. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1971. }
  1972. if(st->vremyaOM<10 && st->vremyaPM<10)
  1973. {
  1974. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1975. }
  1976. }
  1977. if(st->vremyaOCh==k1 && st->vremyaOM>min1) //если часы отправления 1 совпали
  1978. {
  1979. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1980. {
  1981. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1982. }
  1983. if(st->vremyaOM>=10 && st->vremyaPM<10)
  1984. {
  1985. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1986. }
  1987. if(st->vremyaOM<10 && st->vremyaPM>=10)
  1988. {
  1989. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1990. }
  1991. if(st->vremyaOM<10 && st->vremyaPM<10)
  1992. {
  1993. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  1994. }
  1995. }
  1996. if(st->vremyaOCh==k2 && st->vremyaOM<min2)//если часы отправления 2 совпали
  1997. {
  1998. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  1999. {
  2000. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2001. }
  2002. if(st->vremyaOM>=10 && st->vremyaPM<10)
  2003. {
  2004. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2005. }
  2006. if(st->vremyaOM<10 && st->vremyaPM>=10)
  2007. {
  2008. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2009. }
  2010. if(st->vremyaOM<10 && st->vremyaPM<10)
  2011. {
  2012. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2013. }
  2014. }
  2015. }
  2016. st=st->next;
  2017. i++;
  2018. }
  2019. printf("--------------------------------------------------------------------------------\n");
  2020. system("pause");
  2021. }
  2022.  
  2023. void filter()
  2024. {
  2025. if(begin==NULL)
  2026. {
  2027. printf("Файл не открыт!\n");
  2028. Sleep(700);
  2029. return;
  2030. }
  2031. printf("Введите букву, с которой начинается название населённого пункта (Заглавную)\n");
  2032. int pr;
  2033. char k1,k2;
  2034. do{
  2035. printf("Буква:");
  2036. fflush(stdin);
  2037. pr=scanf("%1c", &k1);
  2038. }while(k1<-64 || k1>-33 || pr==0);
  2039. printf("Введите букву до которой будет идти фильтрация(макс. Я/Заглавную)\n");
  2040. do{
  2041. printf("Буква:");
  2042. fflush(stdin);
  2043. pr=scanf("%1c", &k2);
  2044. }while(k2<-64 || k2>-33 || pr==0);
  2045. int ch,m;
  2046. printf("Введите время, раньше которого автобус должен прибыть в пункт(Макс. 23:59\n");
  2047. do{
  2048. printf("Час:");
  2049. fflush(stdin);
  2050. pr=scanf("%2d", &ch);
  2051. }while(ch<0 || ch>24 || ch==0);
  2052. do{
  2053. printf("Минуты:");
  2054. fflush(stdin);
  2055. pr=scanf("%2d", &m);
  2056. }while(m<0 || m>60 || pr==0);
  2057. raspisanie *rab;
  2058. rab=begin->next;
  2059. int s=0;
  2060. while(rab!=NULL)
  2061. {
  2062. if (rab->vremyaPCh<ch) s++;
  2063. rab=rab->next;
  2064. }
  2065. if(s==0) printf("Автобусов раньше заданного времени нет\n");
  2066. system("cls");
  2067. raspisanie *st;
  2068. st=begin->next;
  2069. printf("--------------------------------------------------------------------------------");
  2070. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  2071. printf("| | | | | отправления | прибытия |");
  2072. printf("--------------------------------------------------------------------------------");
  2073. int i=1;
  2074. while(st!=NULL)
  2075. {
  2076. if (st->punkt[0]>=k1 && st->punkt[0]<=k2)//сравнение по буквам
  2077. {
  2078. if(st->vremyaPCh<ch)//сравнение по часам
  2079. {
  2080. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  2081. {
  2082. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2083. }
  2084. if(st->vremyaOM>=10 && st->vremyaPM<10)
  2085. {
  2086. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2087. }
  2088. if(st->vremyaOM<10 && st->vremyaPM>=10)
  2089. {
  2090. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2091. }
  2092. if(st->vremyaOM<10 && st->vremyaPM<10)
  2093. {
  2094. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2095. }
  2096. }
  2097. if(st->vremyaPCh==ch && st->vremyaPM<m)
  2098. {
  2099. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  2100. {
  2101. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2102. }
  2103. if(st->vremyaOM>=10 && st->vremyaPM<10)
  2104. {
  2105. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2106. }
  2107. if(st->vremyaOM<10 && st->vremyaPM>=10)
  2108. {
  2109. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2110. }
  2111. if(st->vremyaOM<10 && st->vremyaPM<10)
  2112. {
  2113. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2114. }
  2115. }
  2116. }
  2117. st=st->next;
  2118. i++;
  2119. }
  2120. printf("--------------------------------------------------------------------------------\n");
  2121. system("pause");
  2122. }
  2123.  
  2124. void filte_reis_and_punkt()
  2125. {
  2126. if(begin==NULL)
  2127. {
  2128. printf("Файл не открыт!\n");
  2129. Sleep(700);
  2130. return;
  2131. }
  2132. printf("Введите букву, с которой начинается название населённого пункта (Заглавную)\n");
  2133. int pr;
  2134. char k1,k2;
  2135. do{
  2136. printf("Буква:");
  2137. fflush(stdin);
  2138. pr=scanf("%1c", &k1);
  2139. }while(k1<-64 || k1>-33 || pr==0);
  2140. printf("Введите букву до которой будет идти фильтрация(макс. Я/Заглавную)\n");
  2141. do{
  2142. printf("Буква:");
  2143. fflush(stdin);
  2144. pr=scanf("%1c", &k2);
  2145. }while(k2<-64 || k2>-33 || pr==0);
  2146. printf("Введите цифру от которой будет идти фильтрация рейсов(макс. 9)\n");
  2147. char m;
  2148. do{
  2149. printf("Цифра:");
  2150. fflush(stdin);
  2151. pr=scanf("%1c", &m);
  2152. }while(m<48 || m>57 || pr==0);
  2153. raspisanie *st=begin->next;
  2154. system("cls");
  2155. printf("--------------------------------------------------------------------------------");
  2156. printf("| № | Номер рейса | Тип автобуса | Пункт | Время | Время |");
  2157. printf("| | | | | отправления | прибытия |");
  2158. printf("--------------------------------------------------------------------------------");
  2159. int i=1;
  2160. while(st!=NULL)
  2161. {
  2162. if(st->punkt[0]>=k1 && st->punkt[0]<=k2)//сравнение по буквам
  2163. {
  2164. char buf[16];
  2165. _itoa(st->nomer.nomerReisa,buf,10);//преобразование номера рейса в строку для удобного сравнения
  2166. if(buf[0]>=m)
  2167. {
  2168. if(st->vremyaOM>=10 && st->vremyaPM>=10)
  2169. {
  2170. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2171. }
  2172. if(st->vremyaOM>=10 && st->vremyaPM<10)
  2173. {
  2174. printf("|%4d|%15.0lf|%15s|%15s|%10d:%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2175. }
  2176. if(st->vremyaOM<10 && st->vremyaPM>=10)
  2177. {
  2178. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2179. }
  2180. if(st->vremyaOM<10 && st->vremyaPM<10)
  2181. {
  2182. printf("|%4d|%15.0lf|%15s|%15s|%10d:0%d|%8d:0%d|",i, st->nomer.nomerReisa, st->type,st->punkt, st->vremyaOCh, st->vremyaOM,st->vremyaPCh, st->vremyaPM);
  2183. }
  2184. }
  2185. }
  2186. st=st->next;
  2187. i++;
  2188. }
  2189. printf("--------------------------------------------------------------------------------\n");
  2190. system("pause");
  2191. }
  2192.  
  2193. int menusearch()//меню поиска
  2194. {
  2195. int ch;
  2196. int pr=-1;
  2197. do
  2198. {
  2199. system("cls");
  2200. printf("===============================Меню:Поиск=======================================\n");
  2201. printf(" 1 - Поиск по времени прибытия\n");
  2202. printf(" 2 - Поиск по пункту\n");
  2203. printf(" 3 - Поиск по номеру рейса\n");
  2204. printf(" 4 - Фильтр по времени отправления\n");
  2205. printf(" 5 - Фильтр по времени прибытия\n");
  2206. printf(" 6 - Фильтр по первой букве названия пункта\n");
  2207. printf(" 7 - Фильтр по названию пункта и времени отправления\n");
  2208. printf(" 8 - Фильтр по названию пункта и времени прибытия\n");
  2209. printf(" 9 - Фильтр по названию номеру рейса\n");
  2210. printf(" 10 - Назад.\n");
  2211. pr=scanf("%d", &ch);
  2212. }while(ch>10 || pr==0 || ch<0);
  2213. return ch;
  2214. }
  2215.  
  2216. void menusearch_choice()
  2217. {
  2218. while(1)
  2219. {
  2220. switch(menusearch()) {
  2221. case 1:
  2222. poisk_time();
  2223. break;
  2224. case 2:
  2225. poisk_punkt();
  2226. break;
  2227. case 3:
  2228. poisk_reis();
  2229. break;
  2230. case 4: filter_timeO();
  2231. break;
  2232. case 5: filter_timeP();
  2233. break;
  2234. case 6: filter_punkt();
  2235. break;
  2236. case 7: filter_PandT();
  2237. break;
  2238. case 8: filter();
  2239. break;
  2240. case 9: filte_reis_and_punkt();
  2241. break;
  2242. case 10: return;
  2243. }
  2244. }
  2245. }
  2246.  
  2247. int menusort()
  2248. {
  2249. int ch;
  2250. int pr=-1;
  2251. do
  2252. {
  2253. system("cls");
  2254. printf("=====================================МЕНЮ:======================================\n");
  2255. printf(" 1 - Сортировать по номерам рейсов\n");
  2256. printf(" 2 - Сортировать пункты по алфавиту\n");
  2257. printf(" 3 - Назад\n");
  2258. pr=scanf("%d", &ch);
  2259. }while(ch>3 || pr==0 || ch<0);
  2260. return ch;
  2261. }
  2262.  
  2263. void sortchoice()
  2264. {
  2265. if(begin==NULL)
  2266. {
  2267. printf("Файл не открыт!\n");
  2268. Sleep(700);
  2269. return;
  2270. }
  2271. while(1)
  2272. {
  2273. switch(menusort())
  2274. {
  2275. case 1: sort_reis();
  2276. break;
  2277. case 2: sort_punkt();
  2278. break;
  2279. case 3: return;
  2280. }
  2281. }
  2282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement