Advertisement
Guest User

Untitled

a guest
Jan 14th, 2016
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.91 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include<fstream>
  4. #include<conio.h>
  5. #include<stdlib.h>
  6. #include<stdio.h>
  7. #include<string.h>
  8. #include<iomanip>
  9. #include <windows.h>
  10.  
  11. using namespace std;
  12. struct FIO//структура фамилии и инициалов
  13. {char fam[10];//фамилия
  14. char iniz[5];};//инициалы
  15.  
  16. struct TIME //Структура времени
  17. {int h; //час
  18. int min;}; //минута
  19.  
  20. struct VOKZAL //основная структура
  21. {char otpr[10]; //пункт отправления
  22. char nazn[10];//пункт назначения
  23. int nomer; //номер поезда
  24. TIME t; //прототип структуры времени
  25. FIO f; //прототип структуры фамилии и инициалов
  26. char tip[5]; //тип вагона
  27. int cost;};//стоимость
  28.  
  29. struct PERECH//структура перечня
  30. {VOKZAL p;//переменная типа VOKZAL
  31. int ng;//счетчик
  32. };
  33.  
  34. class perech;
  35. class vokzal //класс динамических массивов структур
  36. {private:
  37. VOKZAL *px;//указатель на массив записей
  38. int n;//число строк в массиве
  39. public:
  40. vokzal(){n=0;px=NULL;};//конструктор
  41. vokzal(vokzal&z);//конструктор копирования
  42. ~vokzal(){n=0;if(px!=NULL)delete[]px;};//деструктор
  43.  
  44. friend void makePerechOtpr(vokzal&v, perech &w);//создание перечня пунктов отправления
  45. friend void makePerechTime(vokzal &v,perech &w);//создание перечня времени отправления
  46. friend void makePerechNomer(vokzal &v,perech &w);//создание перечня номеров поезда
  47.  
  48. void newBD();//Создание новой Базы Данных(БД)
  49. void inputVokzalFile();//Чтение БД из текстового файла
  50. void addVokzal();//добавление новой записи в БД
  51. void deleteVokzal();//удаление записи
  52. void outputVokzal();//вывод БД на экран
  53. void outputVokzalFileBin();//сохранение БД в бинарный файл
  54. void inputVokzalFileBin();//Чтение БД из бинарного файла
  55. void outputVokzalFile();//сохранение БД в текстовый файл
  56.  
  57. int vuibor();//выбор строки
  58. void tabl();//вывод основания таблицы на экран
  59. void vivodStroki();//вывод i-ой строки
  60.  
  61. void redaktVokzal();//редактирование БД
  62. void poiskTime();//поиск по времени
  63. void poiskNazn();//поиск по пункту назначения
  64. void poiskFIO();//поиск по ФИО
  65. void poiskNomer();//поиск по номеру
  66. void sortCost();//сортировка по стоимости
  67. void sortFIO();//сортировка по ФИО
  68. void sortTime();//сортировка по времени
  69. void sortNazn();//сортировка по пункту назначения
  70. void sortOtpr();//сортировка попункту отправления
  71. void sortTip();//сортировка по пункту вагона
  72.  
  73. vokzal operator ++(){addVokzal();return *this;}//перегрузка операции добавления
  74. vokzal operator --(){deleteVokzal();return *this;}//перегрузка операции удаления
  75. friend istream &operator >>(istream &in, vokzal &z);//перегрузка операции ввода
  76. friend ostream &operator <<(ostream &out, vokzal &z);//перегрузка операции вывода
  77. friend ifstream &operator >>(ifstream &fin, vokzal &z);//перегрузка операции чтения
  78. friend ofstream &operator <<(ofstream &fout, vokzal&z);//перегрузка операции записи
  79. };
  80.  
  81. class perech//класс динамических массивов структур
  82. {private:
  83. PERECH *py;//указатель на массив записей
  84. int k;//число строк
  85. public:
  86. perech(){k=0;py=NULL;};//конструктор
  87. perech(perech&z);//конструктор копирования
  88. ~perech(){if(py!=NULL)delete[]py;};//деструктор
  89.  
  90. friend void makePerechOtpr(vokzal&v, perech &w);//создание перечня пунктов отправления
  91. friend void makePerechTime(vokzal &v,perech &w);//создание перечня времени отправления
  92. friend void makePerechNomer(vokzal &v,perech &w);//создание перечня номеров поезда
  93.  
  94. void sortPerechOtprAlf();//сортировка перечня отправления по алфавиту
  95. void sortPerechTimeKolvo();//сортирвка перечня времени отправления по количеству
  96. void sortPerechNomerTime();//сортировка перечня номеров по времени отправления
  97. void outputPerechOtpr();//вывод перечня отправлений на экран
  98. void outputPerechTime();//вывод перечня времени отправления на экран
  99. void outputPerechNomer();//вывод перечня номеров на экран
  100. void outputPerechOtprFile();//вывод перечня отправлений в файл
  101. void outputPerechTimeFile();//вывод перечня времени отправления в файл
  102. void outputPerechNomerFile();//вывод перечня номеров в файл
  103. };
  104.  
  105.  
  106. int main ()//основная функция
  107. {
  108. vokzal a;//класс типа anime
  109. perech b;//класс типа perech
  110. int j;//переменная для выбора строки
  111. char vibor;
  112. cout.setf(ios::left);//выравнивание полей по левому краю
  113. cout<<"\n\n ** ** ** ** ******* ** ******* ** *** *** *******\n";
  114. cout<<" ** ** ** ** ******* ** ******* ****** **** **** *******\n";
  115. cout<<" ** ** ** ** ** ** ** ** ** ** ** ** ** **\n";
  116. cout<<" ** *** ** ******* ** ** ** ** ** **** ** *******\n";
  117. cout<<" ** *** ** ******* ** ** ** ** ** ** ** *******\n";
  118. cout<<" ** *** ** ** ** ** ** ** ** ** **\n";
  119. cout<<" ******* ******* ******* ******* ****** ** ** *******\n";
  120. cout<<" ** ** ******* ******* ******* ** ** ** *******\n";
  121. getch();//приветствие
  122. while(1)//пока 1
  123. {
  124. j=0;//обнуление показателя выбора строки
  125. cout<<"---------------------------------------------------------\n";
  126. cout<<"| 1 | Sozdanie novoy BD |\n";
  127. cout<<"| 2 | Ch'tenie BD iz fayla |\n";
  128. cout<<"| 3 | Sohranenie BD v fayl |\n";
  129. cout<<"| 4 | Dobavlenie zapici v BD |\n";
  130. cout<<"| 5 | Udalenie zapici iz BD |\n";
  131. cout<<"| 6 | Prosmotr BD |\n";
  132. cout<<"| 7 | Redaktirovanie BD |\n";
  133. cout<<"| 8 | Sortirovka po stoimosti |\n";
  134. cout<<"| 9 | Sortirovka po FIO |\n";
  135. cout<<"| 10 | Sortirovka po vremeni otpravleniya |\n";
  136. cout<<"| 11 | Perechen' pynktov otpravleniya(sort po AlfOtpr) |\n";
  137. cout<<"| 12 | Perechen' chasov otravleniya(sort po kol-vy) |\n";
  138. cout<<"| 13 | Perechen' nomerov(sort po vremeni) |\n";
  139. cout<<"| 14 | Poisk po vremeni otpravleniya |\n";
  140. cout<<"| 15 | Poisk po pynkty naznacheniya |\n";
  141. cout<<"| 16 | Poisk po nomery poezda |\n";
  142. cout<<"| 17 | Poisk po FIO |\n";
  143. cout<<"| 18 | Sohranenie BD v bin fayl |\n";
  144. cout<<"| 19 | Chteniye BD iz bin fayla |\n";
  145. cout<<"| 20 | Vihod |\n";
  146. cout<<"---------------------------------------------------------\n\n\n";
  147. cout<<"Viberite pynkt menu:(1-20) ";
  148. cin>>j;
  149. switch(j)
  150. {case 1:a.newBD();//создание новой БД
  151. a.outputVokzal();getch();break;//вывод БД на экран
  152. case 2:a.inputVokzalFile();break;//чтение БД из файла
  153. case 3:a.outputVokzalFile();break;//запись БД в файл
  154. case 4:a++;break;// a.addVokzal(); добавление записи в БД
  155. case 5:a--;break;//a.deleteVokzal(); удаление записи из БД
  156. case 6:a.outputVokzal();getch();break;//вывод БД на экран
  157. case 7:a.redaktVokzal();;break;//редактирование БД
  158. case 8:a.sortCost();//сортировка по стоимости
  159. a.outputVokzal();getch();break;//вывод БД на экран
  160. case 9:a.sortFIO();//сортировка по ФИО
  161. a.outputVokzal();getch();break;//вывод БД на экран
  162. case 10:a.sortTime();//сортировка по времени отправления
  163. a.outputVokzal();getch();break;//вывод БД на экран
  164. case 11:makePerechOtpr(a,b);//создание перечня отправлений
  165. b.sortPerechOtprAlf();//сортировка перечня отправлений по алфавиту
  166. b.outputPerechOtpr();//выввод перечня отправлений на экран
  167. cout<<"Sohranit' polychenniy perechen' v fayl (Y/N)?: ";
  168. cin>>vibor;
  169. if(vibor!='y') break;
  170. else b.outputPerechOtprFile();//запись перечня отправлений в файл
  171. break;
  172. case 12:makePerechTime(a,b);//создание перечня времени отправления
  173. b.sortPerechTimeKolvo();//сортировка перечня времени по количеству
  174. b.outputPerechTime();//вывод перечня времени отправлений на экран
  175. cout<<"Sohranit' polychenniy perechen' v fayl (Y/N)?: ";
  176. cin>>vibor;
  177. if(vibor!='y') break;
  178. else b.outputPerechTimeFile();//запись перечня времени отправлений в файл
  179. break;
  180. case 13:a.sortTime();//сортировка БД по времени отправления
  181. makePerechNomer(a,b);//создание перечня номеров
  182. b.outputPerechNomer();//вывод перечня номеров на экран
  183. cout<<"Sohranit' polychenniy perechen' v fayl (Y/N)?: ";
  184. cin>>vibor;
  185. if(vibor!='y') break;
  186. else b.outputPerechNomerFile();//запись перечня номеров в файл
  187. break;
  188. case 14:a.sortNazn();//сортировка БД по пункту назначения
  189. a.poiskTime();break;//поиск по полю времени отправления
  190. case 15:a.sortOtpr();//сортировка БД по пункту отправления
  191. a.poiskNazn();break;//поиск по полю пункта назначения
  192. case 16:a.sortTip();//сортировка БД по типу вагона
  193. a.poiskNomer();break;//поиск пополю номера поезда
  194. case 17:a.poiskFIO();break;//поиск по ФИО
  195. case 18:a.outputVokzalFileBin();break;//сохранеие БД в бинарный файл
  196. case 19:a.inputVokzalFileBin();break;//чтение БД из бинарного файла
  197. case 20:cout<<"\n\n ******* ** ** ** ********\n";
  198. cout<<" ******* ** ** ** ********\n";
  199. cout<<" ** **** ** **\n";
  200. cout<<" ******* ** ** **\n";
  201. cout<<" ******* ** ** **\n";
  202. cout<<" ** **** ** **\n";
  203. cout<<" ******* ** ** ** **\n";
  204. cout<<" ******* ** ** ** **\n";
  205. getch();
  206. default:cout<<"\nTakogo pynkta net\nPovtorite popitky";getch();
  207. cin.clear(); while(cin.get()!=('\n'));};};
  208. }
  209.  
  210. vokzal::vokzal(vokzal&z)//конструктор копирования
  211. {int i;
  212. n=z.n;
  213. if(n==0) px=NULL;
  214. else{px=new VOKZAL[n];
  215. for(i=0;i<n;i++)
  216. px[i]=z.px[i];
  217. }
  218. }
  219.  
  220. perech::perech(perech&z)//конструктор копирования
  221. {int i;
  222. k=z.k;
  223. if(k==0)py=NULL;
  224. else{py=new PERECH[k];
  225. for(i=0;i<k;i++)
  226. py[i]=z.py[i];
  227. }
  228. }
  229.  
  230. istream &operator >>(istream &in, vokzal &z)//перегрузка операции ввода
  231. {int i;
  232. for(i=0;i<z.n;i++)
  233. {cout<<"\nPynkt otpravleniya: ";in>>z.px[i].otpr;
  234. cout<<"Pynkt naznacheniya: ";in>>z.px[i].nazn;
  235. cout<<"Nomer poezda: ";in>>z.px[i].nomer;
  236. cout<<"Chasi i minyti otpravleniya(vvodit' cherez probel): ";in>>z.px[i].t.h; in>>z.px[i].t.min;
  237. cout<<"Familiya passagira: ";in>>z.px[i].f.fam;
  238. cout<<"Iniziali: ";in>>z.px[i].f.iniz;
  239. cout<<"Tip vagona: ";in>>z.px[i].tip;
  240. cout<<"Cena bileta: ";in>>z.px[i].cost;}
  241. return in;
  242. }
  243.  
  244. ostream &operator <<(ostream &out, vokzal &z)//перегрузка операции вывода
  245. {int i;
  246. out.setf(ios::right);out<<"|"<<setfill('0')<<setw(2)<<i+1<<"| ";
  247. out.setf(ios::left);out<<setfill(' ')<<setw(11)<<z.px[i].otpr<<"| "<<setw(11)<<z.px[i].nazn<<"| "<<setw(4)<<z.px[i].nomer<<"| ";
  248. out.setf(ios::right);out<<setfill('0')<<setw(2)<<z.px[i].t.h<<":"<<setw(2)<<z.px[i].t.min<<" | ";
  249. out.setf(ios::left);out<<setfill(' ')<<setw(11)<<z.px[i].f.fam<<"| "<<setw(5)<<z.px[i].f.iniz<<"| "<<setw(5)<<z.px[i].tip<<"| "<<setw(5)<<z.px[i].cost<<"|"<<endl;
  250. return out;
  251. }
  252.  
  253. ofstream &operator <<(ofstream &fout, vokzal &z)//перегрузка операции записи
  254. {int i;
  255. fout.setf(ios::left);
  256. for (i=0;i<z.n;i++)
  257. fout<<setw(15)<<z.px[i].otpr<<setw(15)<<z.px[i].nazn<<setw(5)<<z.px[i].nomer<<setw(3)<<z.px[i].t.h<<setw(3)<<z.px[i].t.min<<setw(15)<<z.px[i].f.fam<<setw(5)<<z.px[i].f.iniz<<setw(5)<<z.px[i].tip<<setw(6)<<z.px[i].cost<<endl;
  258. return fout;
  259. }
  260.  
  261. ifstream &operator >>(ifstream &fin, vokzal &z)//перегрузка операции чтения
  262. {int i;
  263. for(i=0;i<z.n;i++)
  264. {fin>>z.px[i].otpr>>z.px[i].nazn>>z.px[i].nomer>>z.px[i].t.h>>z.px[i].t.min>>z.px[i].f.fam>>z.px[i].f.iniz>>z.px[i].tip>>z.px[i].cost;
  265. }
  266. return fin;
  267. }
  268.  
  269. void vokzal::inputVokzalFileBin()//чтение БД из бинарного файла
  270. {char file[16];
  271. ifstream fin;
  272. cout<<"\nVvedite imya bin fayla: ";
  273. cin>>file;
  274. fin.open(file,ios::binary);
  275. if (fin.fail()){cout<<"\nFayl "<<file<<" ne otkrit'";px=NULL; n=0; getch(); return;}
  276. fin.seekg(0,ios::end);
  277. n=fin.tellg()/sizeof(VOKZAL);
  278. fin.seekg(0,ios::beg);
  279. if (px!=NULL) delete[]px;
  280. px=new VOKZAL[n];
  281. if(px==NULL) {cout<<"\nNo memory\n"; getch(); n=0; return;}
  282. fin.read((char*)px,n*sizeof(VOKZAL));
  283. if (fin.fail()){cout<<"\nFayl "<<file<<" ne otkrit' povtorno"; px=NULL;n=0;getch(); return;}
  284. cout<<"\nFayl yspeshno prochitan \n";getch();
  285. fin.close();
  286. }
  287.  
  288. void vokzal::outputVokzalFileBin()//Запись файла в бинарный файл
  289. {int i;
  290. char file[16];
  291. VOKZAL *p;
  292. ofstream fout;
  293. if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  294. cout<<"Vvedite imya bin fayla: ";cin>>file;
  295. fout.open(file,ios::binary);
  296. if (fout.fail()) {cout<<"\nFayl "<<file<<" ne otkrit'"; getch(); return;};
  297. p=px;
  298. fout.write((char*)p,n*sizeof(VOKZAL));
  299. p=NULL;
  300. if (fout.fail()){cout<<"\nFayl"<<file<<" nevozmogno zapisat'\n";getch(); return;}
  301. fout.close();
  302. cout<<"\nFayl yspeshno zapisan\n";getch();
  303. }
  304.  
  305. void vokzal::newBD() //создание новой БД
  306. {int i;
  307. cout<<"Vvedite kolichestvo zapisey=";cin>>n;
  308. if(px!=NULL)delete[] px; //очистка массива
  309. px=new VOKZAL[n]; //выделение динамической памяти
  310. if(px==NULL){cout<<"No Memory\n";getch();n=0;return;}
  311. //создание базы данных
  312. cin>>*this;
  313. cout<<"\nBaza dannyh sozdana";getch();
  314. }
  315.  
  316. void vokzal::tabl()// вывод основания для таблицы
  317. {cout<<"\n------------------------------------------------------------------------------\n";
  318. cout<<"|# | Pynkt otpr | Pynkt nazn |Nomer| Time | Familiya | Iniz | Tip | Cena |\n";
  319. cout<<"|--|------------|------------|-----|-------|------------|------|------|------|\n";
  320. }
  321.  
  322. void vokzal::vivodStroki()//вывод i-ой строки
  323. {int i;
  324. cout.setf(ios::right);cout<<"|"<<setfill('0')<<setw(2)<<i+1<<"| ";
  325. cout.setf(ios::left);cout<<setfill(' ')<<setw(11)<<px[i].otpr<<"| "<<setw(11)<<px[i].nazn<<"| "<<setw(4)<<px[i].nomer<<"| ";
  326. cout.setf(ios::right);cout<<setfill('0')<<setw(2)<<px[i].t.h<<":"<<setw(2)<<px[i].t.min<<" | ";
  327. cout.setf(ios::left);cout<<setfill(' ')<<setw(11)<<px[i].f.fam<<"| "<<setw(5)<<px[i].f.iniz<<"| "<<setw(5)<<px[i].tip<<"| "<<setw(5)<<px[i].cost<<"|"<<endl;
  328. }
  329.  
  330. void vokzal::outputVokzal()// вывод БД на экран
  331. {int i;
  332. tabl();//вывод основания для таблицы
  333. for (i=0;i<n;i++)
  334. vivodStroki();//вывод i-ой строки
  335. cout<<"------------------------------------------------------------------------------\n\n";
  336. }
  337.  
  338. void vokzal::addVokzal()//добавление новой записи в БД
  339. {VOKZAL t,*k;
  340. int i;
  341. k=new VOKZAL[n+1]; //выделение динамической памяти(последняя запись пуста)
  342. if(k==NULL){cout<<"\nNo memory\n";getch(); return;};
  343. cout<<"\nPynkt otpravleniya: ";cin>>t.otpr;
  344. cout<<"Pynkt naznacheniya: ";cin>>t.nazn;
  345. cout<<"Nomer poezda: ";cin>>t.nomer;
  346. cout<<"Chasi i minyti otpravleniya(vvodit' cherez probel): ";cin>>t.t.h; cin>>t.t.min;
  347. cout<<"Familiya passagira: ";cin>>t.f.fam;
  348. cout<<"Iniziali: ";cin>>t.f.iniz;
  349. cout<<"Tip vagona: ";cin>>t.tip;
  350. cout<<"Cena bileta: ";cin>>t.cost;
  351. cout<<endl;
  352. for(i=0; i<n; i++)
  353. k[i]=px[i];
  354. k[n]=t;
  355. n++;
  356. delete[]px;
  357. px=k;
  358. outputVokzal();//вывод БД на экран
  359. cout<<"\nStroka yspeshno dobavlena";getch();}
  360.  
  361. void vokzal::deleteVokzal()//удаление записи
  362. {int i,j;
  363. char ch;
  364. VOKZAL *k;
  365. j=vuibor();
  366. cout<<"Ydalit (Y/N)?: ";cin>>ch;
  367. if(ch!='y') return;
  368. if(ch=='y'){k=new VOKZAL[n-1];
  369. for(i=0; i<j; i++)
  370. k[i]=px[i];
  371. for(i=j+1; i<n; i++)
  372. k[i-1]=px[i];
  373. delete[]px;
  374. px=k;}
  375. n--;
  376. outputVokzal();//вывод БД на экран
  377. cout<<"\nStroka yspeshno ydalena"; getch();}
  378.  
  379. void vokzal::inputVokzalFile()//чтение БД из текстового файла
  380. {ifstream fin;
  381. char file[16];
  382. VOKZAL t;
  383. int i;
  384. if(px!=NULL){delete[]px;n=0;px=NULL;} //очистка массива
  385. cout<<"\nVvedite imya fayla: ";cin>>file;
  386. fin.open(file);
  387. if(fin==NULL){cout<<"\nFayl "<<file<<" ne otkrit'\n";getch();return;}
  388. n=0;
  389. //подсчёт записей в файле
  390. do{fin>>t.otpr>>t.nazn>>t.nomer>>t.t.h>>t.t.min>>t.f.fam>>t.f.iniz>>t.tip>>t.cost;
  391. n++;
  392. } while(fin.good()); //пока открытие успешно
  393. n--;
  394. fin.close();
  395. px=new VOKZAL[n]; //выделение динамической памяти
  396. if(px==NULL){cout<<"\nNo memory\n";n=0;getch();return;}
  397. fin.open(file);
  398. if(fin==NULL){cout<<"\nFayl "<<file<<" ne otkrit' povtorno\n";getch();return;}
  399. //чтение массива из файла
  400. fin>>*this;//fin>>a;
  401. cout<<"\nMassiv yspeshno vveden\n";getch();
  402. fin.close();
  403. }
  404.  
  405.  
  406. void vokzal::outputVokzalFile() //запись БД в текстовый файл
  407. {ofstream fout;
  408. char file[16];
  409. int i;
  410. if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  411. cout<<"Vvedite imya txt fayla: ";cin>>file;
  412. fout.open(file);
  413. if(fout.fail()){cout<<"\nFayl"<<file<<" nevozmogno zapisat'\n";getch();n=0;px=NULL;return;}
  414. //запись БД в файл
  415. fout<<*this;// fout<<a;
  416. cout<<"\nBD yspeshno sohranena\n";getch();}
  417.  
  418. int vokzal::vuibor() //выбор нужной строки
  419. {int i,fl=0; //рабочая переменная для выбора строки
  420. cout.setf(ios::left);
  421. outputVokzal();
  422. while(fl==0)
  423. {cout<<"\n\nViberite stroku: ";cin>>i;
  424. if(i<=0|| i>n){cout<<"\nNet takoi stroki\nPovtorite vvod";getch();}
  425. else fl=1;}
  426. i--;
  427. return i;
  428. }
  429.  
  430. void vokzal::redaktVokzal() //редактирование БД
  431. {int j, //рабочая переменная для выбора пункта
  432. t; //рабочая переменная для вызова функции
  433. if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  434. t=vuibor(); //вызывается функция выбора строки
  435. while(1)
  436. { j=0;//очистка экрана
  437. outputVokzal();//вывод БД на экран
  438. cout.setf(ios::left); //выравнивание слева
  439. cout<<"Viberite redaktiruemiy razdel\n\n";
  440. cout<<"1.Pynkt otpravleniya\n"
  441. <<"2.Pynkt naznacheniya\n"
  442. <<"3.Nomer poezda\n"
  443. <<"4.Chasi i minyti otpravleniya(vvodit' cherez probel)\n"
  444. <<"5.Familiya passagira\n"
  445. <<"6.Iniziali\n"
  446. <<"7.Tip vagona\n"
  447. <<"8.Cena bileta\n\n"
  448. <<"9.Main menu\n";
  449. cout<<"\nVash vibor: ";cin>>j;
  450. //выбор редактируемого поля
  451. switch(j)
  452. {case 1:cout<<"Pynkt otpravleniya: ";cin>>px[t].otpr;break;
  453. case 2:cout<<"Pynkt naznacheniya: ";cin>>px[t].nazn;break;
  454. case 3:cout<<"Nomer poezda: ";cin>>px[t].nomer;break;
  455. case 4:cout<<"Chasi i minyti otpravleniya(vvodit' cherez probel): ";cin>>px[t].t.h;cin>>px[t].t.min;break;
  456. case 5:cout<<"Familiya passagira: ";cin>>px[t].f.fam;break;
  457. case 6:cout<<"Iniziali: ";cin>>px[t].f.iniz;break;
  458. case 7:cout<<"Tip vagona: ";cin>>px[t].tip;break;
  459. case 8:cout<<"Cena bileta: ";cin>>px[t].cost;break;
  460. case 9:return;
  461. default :cout<<"\n\nNet takogo pynkta\nPovtorite vvod";getch();
  462. cin.clear(); while(cin.get()!=('\n'));
  463. }
  464. }
  465. }
  466.  
  467. void vokzal::poiskNazn()
  468. { int i;
  469. char nazn[10];
  470. if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  471. cout <<"Pynkt naznacheniya: "; cin>>nazn;
  472. tabl();//вывод основания для таблицы
  473. int f=0;//индекс для подсчета найденных строк
  474. for (i=0;i<n;i++)
  475. if(strcmp(px[i].nazn,nazn)==0)
  476. {vivodStroki();//вывод i-ой строки
  477. f++;}
  478. cout<<"------------------------------------------------------------------------------\n\n";getch();
  479. if(f==0) {cout<<"\nNet takoi zapisi\n";getch();}
  480. }
  481.  
  482. void vokzal::poiskTime()
  483. {int i,
  484. hour,min;
  485. if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  486. cout <<"Chasi: "; cin>>hour;
  487. cout <<"Minuti: "; cin>>min;
  488. tabl();//вывод основания для таблицы
  489. int f=0;//индекс для подсчета найденных строк
  490. for (i=0;i<n;i++)
  491. if(px[i].t.h==hour && px[i].t.min==min)
  492. {vivodStroki();//вывод i-ой строки
  493. f++;}
  494. cout<<"------------------------------------------------------------------------------\n\n";getch();
  495. if(f==0) {cout<<"Net takoi zapisi\n";getch();}
  496. }
  497. void vokzal::poiskNomer()
  498. { int i;
  499. int nomer;
  500. if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  501. cout <<"Nomer poezda: "; cin>>nomer;
  502. tabl();//вывод основания для таблицы
  503. int f=0;//индекс для подсчета найденных строк
  504. for (i=0;i<n;i++)
  505. if(px[i].nomer==nomer)
  506. {vivodStroki();//вывод i-ой строки
  507. f++;}
  508. cout<<"------------------------------------------------------------------------------\n\n";getch();
  509. if(f==0) {cout<<"Net takoi zapisi\n";getch();}
  510. }
  511.  
  512. void vokzal::poiskFIO()
  513. { int i;
  514. char fam[15], iniz[5];
  515. if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  516. cout <<"Familiya: "; cin>>fam;
  517. cout <<"Iniziali: "; cin>>iniz;
  518. tabl();//вывод основания для таблицы
  519. int f=0;//индекс для подсчета найденных строк
  520. for (i=0;i<n;i++)
  521. if(strcmp(px[i].f.fam,fam)==0 && strcmp(px[i].f.iniz,iniz)==0)
  522. {vivodStroki();//вывод i-ой строки
  523. f++;}
  524. cout<<"------------------------------------------------------------------------------\n\n";getch();
  525. if(f==0) {cout<<"Net takoi zapisi\n";getch();}
  526. }
  527.  
  528. void vokzal::sortCost()
  529. {int fl,i,k;
  530. VOKZAL t;
  531. if(px==NULL){cout<<"Massiv pust\n";getch();return;}
  532. k=n-1;
  533. do{fl=0;
  534. for(i=0;i<k;i++)
  535. if(px[i].cost<px[i+1].cost)
  536. {t=px[i];
  537. px[i]=px[i+1];
  538. px[i+1]=t;
  539. fl=1;
  540. }
  541.  
  542. k--;
  543. }
  544. while(fl==1);
  545. }
  546.  
  547. void vokzal::sortTime()
  548. {int fl,i,k;
  549. VOKZAL t;
  550. if(px==NULL){cout<<"Massiv pust\n";getch();return;}
  551. k=n-1;
  552. do{fl=0;
  553. for(i=0;i<k;i++)
  554. {if(px[i].t.h>px[i+1].t.h)
  555. {t=px[i];
  556. px[i]=px[i+1];
  557. px[i+1]=t;
  558. fl=1;}
  559. if(px[i].t.h==px[i+1].t.h)
  560. {if(px[i].t.min>px[i+1].t.min)
  561. {t=px[i];
  562. px[i]=px[i+1];
  563. px[i+1]=t;
  564. fl=1;
  565. }
  566. }
  567. }
  568.  
  569. k--;}
  570. while(fl==1);
  571. }
  572.  
  573. void vokzal::sortFIO()
  574. {int fl,i,k;
  575. VOKZAL t;
  576. if(px==NULL){cout<<"Massiv pust\n";getch();return;}
  577. k=n-1;
  578. do{fl=0;
  579. for(i=0;i<k;i++)
  580. {if(strcmp(px[i].f.fam,px[i+1].f.fam)>0)
  581. {t=px[i];
  582. px[i]=px[i+1];
  583. px[i+1]=t;
  584. fl=1;}
  585. if(strcmp(px[i].f.fam,px[i+1].f.fam)==0)
  586. {if(strcmp(px[i].f.iniz,px[i+1].f.iniz)>0)
  587. {t=px[i];
  588. px[i]=px[i+1];
  589. px[i+1]=t;
  590. fl=1;}
  591. }
  592. }
  593. k--;
  594. }
  595. while(fl==1);
  596. }
  597.  
  598. void vokzal::sortNazn()
  599. {int fl,i,k;
  600. VOKZAL t;
  601. if(px==NULL){cout<<"Massiv pust\n";getch();return;}
  602. k=n-1;
  603. do{fl=0;
  604. for(i=0;i<k;i++)
  605. {if(strcmp(px[i].nazn,px[i+1].nazn)>0)
  606. {t=px[i];
  607. px[i]=px[i+1];
  608. px[i+1]=t;
  609. fl=1;}
  610. }
  611. k--;
  612. }
  613. while(fl==1);
  614. }
  615.  
  616. void vokzal::sortOtpr()
  617. {int fl,i,k;
  618. VOKZAL t;
  619. if(px==NULL){cout<<"Massiv pust\n";getch();return;}
  620. k=n-1;
  621. do{fl=0;
  622. for(i=0;i<k;i++)
  623. {if(strcmp(px[i].otpr,px[i+1].otpr)>0)
  624. {t=px[i];
  625. px[i]=px[i+1];
  626. px[i+1]=t;
  627. fl=1;}
  628. }
  629. k--;
  630. }
  631. while(fl==1);
  632. }
  633.  
  634. void vokzal::sortTip()
  635. {int fl,i,k;
  636. VOKZAL t;
  637. if(px==NULL){cout<<"Massiv pust\n";getch();return;}
  638. k=n-1;
  639. do{fl=0;
  640. for(i=0;i<k;i++)
  641. {if(strcmp(px[i].tip,px[i+1].tip)>0)
  642. {t=px[i];
  643. px[i]=px[i+1];
  644. px[i+1]=t;
  645. fl=1;}
  646. }
  647. k--;
  648. }
  649. while(fl==1);
  650. }
  651.  
  652.  
  653. void perech::sortPerechOtprAlf()
  654. {int i,fl,f;
  655. PERECH t;
  656. f=k-1;
  657. do{fl=0;
  658. for(i=0;i<f;i++)
  659. if (strcmp(py[i].p.otpr,py[i+1].p.otpr)>0)
  660. {t=py[i];
  661. py[i]=py[i+1];
  662. py[i+1]=t;
  663. fl=1;}
  664. f--;}
  665. while(fl==1);
  666. }
  667.  
  668. void perech::sortPerechTimeKolvo()
  669. {int i,fl,f;
  670. PERECH t;
  671. f=k-1;
  672. do{fl=0;
  673. for(i=0;i<f;i++)
  674. if (py[i].ng<py[i+1].ng)
  675. {t=py[i];
  676. py[i]=py[i+1];
  677. py[i+1]=t;
  678. fl=1;}
  679. f--;}
  680. while(fl==1);
  681. }
  682.  
  683. void perech::outputPerechOtpr()
  684. {cout<<"\n-------------------------------\n";
  685. cout<<"|# | Pynkt otpravleniya |Kolvo|";
  686. cout<<"\n|--|--------------------|-----|\n";
  687. for (int i=0;i<k;i++)
  688. cout<<"|"<<setw(2)<<i+1<<"| "<<setw(19)<<py[i].p.otpr<<"| "<<setw(3)<<py[i].ng<<"|"<<endl;
  689. cout<<"-------------------------------\n";
  690. }
  691.  
  692. void perech::outputPerechTime()
  693. {cout<<"\n------------------\n";
  694. cout<<"|# | Time |Kolvo|";
  695. cout<<"\n|--|-------|-----|\n";
  696. for (int i=0;i<k;i++)
  697. {cout.setf(ios::left);cout<<"|"<<setw(2)<<i+1<<"| ";
  698. cout.setf(ios::right);cout<<setfill('0')<<setw(2)<<py[i].p.t.h<<":"<<setw(2)<<py[i].p.t.min<<" | ";
  699. cout.setf(ios::left);cout<<setfill(' ')<<setw(3)<<py[i].ng<<" |"<<endl;}
  700. cout<<"------------------\n";
  701. }
  702.  
  703. void perech::outputPerechNomer()
  704. {cout<<"\n------------------\n";
  705. cout<<"|# | Nomer |Kolvo|";
  706. cout<<"\n|--|-------|-----|\n";
  707. for (int i=0;i<k;i++)
  708. cout<<"|"<<setw(2)<<i+1<<"| "<<setw(6)<<py[i].p.nomer<<"| "<<setw(3)<<py[i].ng<<"|"<<endl;
  709. cout<<"------------------\n";
  710. }
  711.  
  712. void perech::outputPerechOtprFile()
  713. {ofstream fout;
  714. int i;
  715. char file[16];
  716. fout.setf(ios::left);
  717. if(py==NULL){cout<<"Perechen eshe ne sostavlen\n";getch();return;}
  718. cout<<"Save perechen as? ";cin>>file;
  719. fout.open(file);
  720. if (fout==NULL){cout<<"Cannot save the perechen "<<file<<endl;getch();return;}
  721. for (i=0; i<k; i++)
  722. fout<<setw(18)<<py[i].p.otpr<<setw(3)<<py[i].ng<<endl;
  723. cout<<"Perechen was succesfully saved"; getch();
  724. fout.close();
  725. }
  726.  
  727. void perech::outputPerechTimeFile()
  728. {ofstream fout;
  729. int i;
  730. char file[16];
  731. fout.setf(ios::left);
  732. if(py==NULL){cout<<"Perechen eshe ne sostavlen\n";getch();return;}
  733. cout<<"Save perechen as? ";cin>>file;
  734. fout.open(file);
  735. if (fout==NULL){cout<<"Cannot save the perechen "<<file<<endl;getch();return;}
  736. for (i=0; i<k; i++)
  737. fout<<setw(3)<<py[i].p.t.h<<setw(3)<<py[i].p.t.min<<setw(3)<<py[i].ng<<endl;
  738. cout<<"Perechen was succesfully saved"; getch();
  739. fout.close();
  740. }
  741.  
  742. void perech::outputPerechNomerFile()
  743. {ofstream fout;
  744. int i;
  745. char file[16];
  746. fout.setf(ios::left);
  747. if(py==NULL){cout<<"Perechen eshe ne sostavlen\n";getch();return;}
  748. cout<<"Save perechen as? ";cin>>file;
  749. fout.open(file);
  750. if (fout==NULL){cout<<"Cannot save the perechen "<<file<<endl;getch();return;}
  751. for (i=0; i<k; i++)
  752. fout<<setw(6)<<py[i].p.nomer<<setw(3)<<py[i].ng<<endl;
  753. cout<<"Perechen was succesfully saved"; getch();
  754. fout.close();
  755. }
  756.  
  757. void makePerechOtpr(vokzal &v,perech &w)
  758. {int i,j,fl,nn,kk;
  759. if(v.px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  760. nn=v.n;//присвоение переменной nn, значения количества строк в основном массиве
  761. w.py=new PERECH[nn];//выделение памяти
  762. if(w.py==NULL){cout<<"No memory";getch();}
  763. kk=0;
  764. for(i=0;i<nn;i++)
  765. {fl=1;
  766. for(j=0;j<kk;j++)
  767. if(strcmp(v.px[i].otpr,w.py[j].p.otpr)==0){fl=0;w.py[j].ng++;break;}
  768. if(fl==1){strcpy(w.py[kk].p.otpr,v.px[i].otpr);w.py[kk].ng=1; kk++;}
  769. }
  770. w.k=kk;//присвоение значения переменной kk, значению количества строк в перечне
  771. }
  772.  
  773. void makePerechTime(vokzal &v,perech &w)
  774. {int i,j,fl,nn,kk;
  775. if(v.px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  776. nn=v.n;//присвоение переменной nn, значения количества строк в основном массиве
  777. w.py=new PERECH[nn];
  778. if(w.py==NULL){cout<<"No memory";getch();}
  779. kk=0;
  780. for(i=0;i<nn;i++)
  781. {fl=1;
  782. for(j=0;j<kk;j++)
  783. if(v.px[i].t.h==w.py[j].p.t.h && v.px[i].t.min==w.py[j].p.t.min){fl=0;w.py[j].ng++;break;}
  784. if(fl==1){w.py[kk].p.t.h=v.px[i].t.h;
  785. w.py[kk].p.t.min=v.px[i].t.min;w.py[kk].ng=1; kk++;}
  786. }
  787. w.k=kk;//присвоение значения переменной kk, значению количества строк в перечне
  788. }
  789.  
  790. void makePerechNomer(vokzal &v,perech &w)
  791. {int i,j,fl,nn,kk;
  792. if(v.px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
  793. nn=v.n;//присвоение переменной nn, значения количества строк в основном массиве
  794. w.py=new PERECH[nn];
  795. if(w.py==NULL){cout<<"No memory";getch();}
  796. kk=0;
  797. for(i=0;i<nn;i++)
  798. {fl=1;
  799. for(j=0;j<kk;j++)
  800. if(v.px[i].nomer==w.py[j].p.nomer ){fl=0;w.py[j].ng++;break;}
  801. if(fl==1){w.py[kk].p.nomer=v.px[i].nomer;w.py[kk].ng=1; kk++;}
  802. }
  803. w.k=kk;//присвоение значения переменной kk, значению количества строк в перечне
  804. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement