Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include<fstream>
- #include<conio.h>
- #include<stdlib.h>
- #include<stdio.h>
- #include<string.h>
- #include<iomanip>
- #include <windows.h>
- using namespace std;
- struct FIO//структура фамилии и инициалов
- {char fam[10];//фамилия
- char iniz[5];};//инициалы
- struct TIME //Структура времени
- {int h; //час
- int min;}; //минута
- struct VOKZAL //основная структура
- {char otpr[10]; //пункт отправления
- char nazn[10];//пункт назначения
- int nomer; //номер поезда
- TIME t; //прототип структуры времени
- FIO f; //прототип структуры фамилии и инициалов
- char tip[5]; //тип вагона
- int cost;};//стоимость
- struct PERECH//структура перечня
- {VOKZAL p;//переменная типа VOKZAL
- int ng;//счетчик
- };
- class perech;
- class vokzal //класс динамических массивов структур
- {private:
- VOKZAL *px;//указатель на массив записей
- int n;//число строк в массиве
- public:
- vokzal(){n=0;px=NULL;};//конструктор
- vokzal(vokzal&z);//конструктор копирования
- ~vokzal(){n=0;if(px!=NULL)delete[]px;};//деструктор
- friend void makePerechOtpr(vokzal&v, perech &w);//создание перечня пунктов отправления
- friend void makePerechTime(vokzal &v,perech &w);//создание перечня времени отправления
- friend void makePerechNomer(vokzal &v,perech &w);//создание перечня номеров поезда
- void newBD();//Создание новой Базы Данных(БД)
- void inputVokzalFile();//Чтение БД из текстового файла
- void addVokzal();//добавление новой записи в БД
- void deleteVokzal();//удаление записи
- void outputVokzal();//вывод БД на экран
- void outputVokzalFileBin();//сохранение БД в бинарный файл
- void inputVokzalFileBin();//Чтение БД из бинарного файла
- void outputVokzalFile();//сохранение БД в текстовый файл
- int vuibor();//выбор строки
- void tabl();//вывод основания таблицы на экран
- void vivodStroki();//вывод i-ой строки
- void redaktVokzal();//редактирование БД
- void poiskTime();//поиск по времени
- void poiskNazn();//поиск по пункту назначения
- void poiskFIO();//поиск по ФИО
- void poiskNomer();//поиск по номеру
- void sortCost();//сортировка по стоимости
- void sortFIO();//сортировка по ФИО
- void sortTime();//сортировка по времени
- void sortNazn();//сортировка по пункту назначения
- void sortOtpr();//сортировка попункту отправления
- void sortTip();//сортировка по пункту вагона
- vokzal operator ++(){addVokzal();return *this;}//перегрузка операции добавления
- vokzal operator --(){deleteVokzal();return *this;}//перегрузка операции удаления
- friend istream &operator >>(istream &in, vokzal &z);//перегрузка операции ввода
- friend ostream &operator <<(ostream &out, vokzal &z);//перегрузка операции вывода
- friend ifstream &operator >>(ifstream &fin, vokzal &z);//перегрузка операции чтения
- friend ofstream &operator <<(ofstream &fout, vokzal&z);//перегрузка операции записи
- };
- class perech//класс динамических массивов структур
- {private:
- PERECH *py;//указатель на массив записей
- int k;//число строк
- public:
- perech(){k=0;py=NULL;};//конструктор
- perech(perech&z);//конструктор копирования
- ~perech(){if(py!=NULL)delete[]py;};//деструктор
- friend void makePerechOtpr(vokzal&v, perech &w);//создание перечня пунктов отправления
- friend void makePerechTime(vokzal &v,perech &w);//создание перечня времени отправления
- friend void makePerechNomer(vokzal &v,perech &w);//создание перечня номеров поезда
- void sortPerechOtprAlf();//сортировка перечня отправления по алфавиту
- void sortPerechTimeKolvo();//сортирвка перечня времени отправления по количеству
- void sortPerechNomerTime();//сортировка перечня номеров по времени отправления
- void outputPerechOtpr();//вывод перечня отправлений на экран
- void outputPerechTime();//вывод перечня времени отправления на экран
- void outputPerechNomer();//вывод перечня номеров на экран
- void outputPerechOtprFile();//вывод перечня отправлений в файл
- void outputPerechTimeFile();//вывод перечня времени отправления в файл
- void outputPerechNomerFile();//вывод перечня номеров в файл
- };
- int main ()//основная функция
- {
- vokzal a;//класс типа anime
- perech b;//класс типа perech
- int j;//переменная для выбора строки
- char vibor;
- cout.setf(ios::left);//выравнивание полей по левому краю
- cout<<"\n\n ** ** ** ** ******* ** ******* ** *** *** *******\n";
- cout<<" ** ** ** ** ******* ** ******* ****** **** **** *******\n";
- cout<<" ** ** ** ** ** ** ** ** ** ** ** ** ** **\n";
- cout<<" ** *** ** ******* ** ** ** ** ** **** ** *******\n";
- cout<<" ** *** ** ******* ** ** ** ** ** ** ** *******\n";
- cout<<" ** *** ** ** ** ** ** ** ** ** **\n";
- cout<<" ******* ******* ******* ******* ****** ** ** *******\n";
- cout<<" ** ** ******* ******* ******* ** ** ** *******\n";
- getch();//приветствие
- while(1)//пока 1
- {
- j=0;//обнуление показателя выбора строки
- cout<<"---------------------------------------------------------\n";
- cout<<"| 1 | Sozdanie novoy BD |\n";
- cout<<"| 2 | Ch'tenie BD iz fayla |\n";
- cout<<"| 3 | Sohranenie BD v fayl |\n";
- cout<<"| 4 | Dobavlenie zapici v BD |\n";
- cout<<"| 5 | Udalenie zapici iz BD |\n";
- cout<<"| 6 | Prosmotr BD |\n";
- cout<<"| 7 | Redaktirovanie BD |\n";
- cout<<"| 8 | Sortirovka po stoimosti |\n";
- cout<<"| 9 | Sortirovka po FIO |\n";
- cout<<"| 10 | Sortirovka po vremeni otpravleniya |\n";
- cout<<"| 11 | Perechen' pynktov otpravleniya(sort po AlfOtpr) |\n";
- cout<<"| 12 | Perechen' chasov otravleniya(sort po kol-vy) |\n";
- cout<<"| 13 | Perechen' nomerov(sort po vremeni) |\n";
- cout<<"| 14 | Poisk po vremeni otpravleniya |\n";
- cout<<"| 15 | Poisk po pynkty naznacheniya |\n";
- cout<<"| 16 | Poisk po nomery poezda |\n";
- cout<<"| 17 | Poisk po FIO |\n";
- cout<<"| 18 | Sohranenie BD v bin fayl |\n";
- cout<<"| 19 | Chteniye BD iz bin fayla |\n";
- cout<<"| 20 | Vihod |\n";
- cout<<"---------------------------------------------------------\n\n\n";
- cout<<"Viberite pynkt menu:(1-20) ";
- cin>>j;
- switch(j)
- {case 1:a.newBD();//создание новой БД
- a.outputVokzal();getch();break;//вывод БД на экран
- case 2:a.inputVokzalFile();break;//чтение БД из файла
- case 3:a.outputVokzalFile();break;//запись БД в файл
- case 4:a++;break;// a.addVokzal(); добавление записи в БД
- case 5:a--;break;//a.deleteVokzal(); удаление записи из БД
- case 6:a.outputVokzal();getch();break;//вывод БД на экран
- case 7:a.redaktVokzal();;break;//редактирование БД
- case 8:a.sortCost();//сортировка по стоимости
- a.outputVokzal();getch();break;//вывод БД на экран
- case 9:a.sortFIO();//сортировка по ФИО
- a.outputVokzal();getch();break;//вывод БД на экран
- case 10:a.sortTime();//сортировка по времени отправления
- a.outputVokzal();getch();break;//вывод БД на экран
- case 11:makePerechOtpr(a,b);//создание перечня отправлений
- b.sortPerechOtprAlf();//сортировка перечня отправлений по алфавиту
- b.outputPerechOtpr();//выввод перечня отправлений на экран
- cout<<"Sohranit' polychenniy perechen' v fayl (Y/N)?: ";
- cin>>vibor;
- if(vibor!='y') break;
- else b.outputPerechOtprFile();//запись перечня отправлений в файл
- break;
- case 12:makePerechTime(a,b);//создание перечня времени отправления
- b.sortPerechTimeKolvo();//сортировка перечня времени по количеству
- b.outputPerechTime();//вывод перечня времени отправлений на экран
- cout<<"Sohranit' polychenniy perechen' v fayl (Y/N)?: ";
- cin>>vibor;
- if(vibor!='y') break;
- else b.outputPerechTimeFile();//запись перечня времени отправлений в файл
- break;
- case 13:a.sortTime();//сортировка БД по времени отправления
- makePerechNomer(a,b);//создание перечня номеров
- b.outputPerechNomer();//вывод перечня номеров на экран
- cout<<"Sohranit' polychenniy perechen' v fayl (Y/N)?: ";
- cin>>vibor;
- if(vibor!='y') break;
- else b.outputPerechNomerFile();//запись перечня номеров в файл
- break;
- case 14:a.sortNazn();//сортировка БД по пункту назначения
- a.poiskTime();break;//поиск по полю времени отправления
- case 15:a.sortOtpr();//сортировка БД по пункту отправления
- a.poiskNazn();break;//поиск по полю пункта назначения
- case 16:a.sortTip();//сортировка БД по типу вагона
- a.poiskNomer();break;//поиск пополю номера поезда
- case 17:a.poiskFIO();break;//поиск по ФИО
- case 18:a.outputVokzalFileBin();break;//сохранеие БД в бинарный файл
- case 19:a.inputVokzalFileBin();break;//чтение БД из бинарного файла
- case 20:cout<<"\n\n ******* ** ** ** ********\n";
- cout<<" ******* ** ** ** ********\n";
- cout<<" ** **** ** **\n";
- cout<<" ******* ** ** **\n";
- cout<<" ******* ** ** **\n";
- cout<<" ** **** ** **\n";
- cout<<" ******* ** ** ** **\n";
- cout<<" ******* ** ** ** **\n";
- getch();
- default:cout<<"\nTakogo pynkta net\nPovtorite popitky";getch();
- cin.clear(); while(cin.get()!=('\n'));};};
- }
- vokzal::vokzal(vokzal&z)//конструктор копирования
- {int i;
- n=z.n;
- if(n==0) px=NULL;
- else{px=new VOKZAL[n];
- for(i=0;i<n;i++)
- px[i]=z.px[i];
- }
- }
- perech::perech(perech&z)//конструктор копирования
- {int i;
- k=z.k;
- if(k==0)py=NULL;
- else{py=new PERECH[k];
- for(i=0;i<k;i++)
- py[i]=z.py[i];
- }
- }
- istream &operator >>(istream &in, vokzal &z)//перегрузка операции ввода
- {int i;
- for(i=0;i<z.n;i++)
- {cout<<"\nPynkt otpravleniya: ";in>>z.px[i].otpr;
- cout<<"Pynkt naznacheniya: ";in>>z.px[i].nazn;
- cout<<"Nomer poezda: ";in>>z.px[i].nomer;
- cout<<"Chasi i minyti otpravleniya(vvodit' cherez probel): ";in>>z.px[i].t.h; in>>z.px[i].t.min;
- cout<<"Familiya passagira: ";in>>z.px[i].f.fam;
- cout<<"Iniziali: ";in>>z.px[i].f.iniz;
- cout<<"Tip vagona: ";in>>z.px[i].tip;
- cout<<"Cena bileta: ";in>>z.px[i].cost;}
- return in;
- }
- ostream &operator <<(ostream &out, vokzal &z)//перегрузка операции вывода
- {int i;
- out.setf(ios::right);out<<"|"<<setfill('0')<<setw(2)<<i+1<<"| ";
- out.setf(ios::left);out<<setfill(' ')<<setw(11)<<z.px[i].otpr<<"| "<<setw(11)<<z.px[i].nazn<<"| "<<setw(4)<<z.px[i].nomer<<"| ";
- out.setf(ios::right);out<<setfill('0')<<setw(2)<<z.px[i].t.h<<":"<<setw(2)<<z.px[i].t.min<<" | ";
- 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;
- return out;
- }
- ofstream &operator <<(ofstream &fout, vokzal &z)//перегрузка операции записи
- {int i;
- fout.setf(ios::left);
- for (i=0;i<z.n;i++)
- 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;
- return fout;
- }
- ifstream &operator >>(ifstream &fin, vokzal &z)//перегрузка операции чтения
- {int i;
- for(i=0;i<z.n;i++)
- {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;
- }
- return fin;
- }
- void vokzal::inputVokzalFileBin()//чтение БД из бинарного файла
- {char file[16];
- ifstream fin;
- cout<<"\nVvedite imya bin fayla: ";
- cin>>file;
- fin.open(file,ios::binary);
- if (fin.fail()){cout<<"\nFayl "<<file<<" ne otkrit'";px=NULL; n=0; getch(); return;}
- fin.seekg(0,ios::end);
- n=fin.tellg()/sizeof(VOKZAL);
- fin.seekg(0,ios::beg);
- if (px!=NULL) delete[]px;
- px=new VOKZAL[n];
- if(px==NULL) {cout<<"\nNo memory\n"; getch(); n=0; return;}
- fin.read((char*)px,n*sizeof(VOKZAL));
- if (fin.fail()){cout<<"\nFayl "<<file<<" ne otkrit' povtorno"; px=NULL;n=0;getch(); return;}
- cout<<"\nFayl yspeshno prochitan \n";getch();
- fin.close();
- }
- void vokzal::outputVokzalFileBin()//Запись файла в бинарный файл
- {int i;
- char file[16];
- VOKZAL *p;
- ofstream fout;
- if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- cout<<"Vvedite imya bin fayla: ";cin>>file;
- fout.open(file,ios::binary);
- if (fout.fail()) {cout<<"\nFayl "<<file<<" ne otkrit'"; getch(); return;};
- p=px;
- fout.write((char*)p,n*sizeof(VOKZAL));
- p=NULL;
- if (fout.fail()){cout<<"\nFayl"<<file<<" nevozmogno zapisat'\n";getch(); return;}
- fout.close();
- cout<<"\nFayl yspeshno zapisan\n";getch();
- }
- void vokzal::newBD() //создание новой БД
- {int i;
- cout<<"Vvedite kolichestvo zapisey=";cin>>n;
- if(px!=NULL)delete[] px; //очистка массива
- px=new VOKZAL[n]; //выделение динамической памяти
- if(px==NULL){cout<<"No Memory\n";getch();n=0;return;}
- //создание базы данных
- cin>>*this;
- cout<<"\nBaza dannyh sozdana";getch();
- }
- void vokzal::tabl()// вывод основания для таблицы
- {cout<<"\n------------------------------------------------------------------------------\n";
- cout<<"|# | Pynkt otpr | Pynkt nazn |Nomer| Time | Familiya | Iniz | Tip | Cena |\n";
- cout<<"|--|------------|------------|-----|-------|------------|------|------|------|\n";
- }
- void vokzal::vivodStroki()//вывод i-ой строки
- {int i;
- cout.setf(ios::right);cout<<"|"<<setfill('0')<<setw(2)<<i+1<<"| ";
- cout.setf(ios::left);cout<<setfill(' ')<<setw(11)<<px[i].otpr<<"| "<<setw(11)<<px[i].nazn<<"| "<<setw(4)<<px[i].nomer<<"| ";
- cout.setf(ios::right);cout<<setfill('0')<<setw(2)<<px[i].t.h<<":"<<setw(2)<<px[i].t.min<<" | ";
- 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;
- }
- void vokzal::outputVokzal()// вывод БД на экран
- {int i;
- tabl();//вывод основания для таблицы
- for (i=0;i<n;i++)
- vivodStroki();//вывод i-ой строки
- cout<<"------------------------------------------------------------------------------\n\n";
- }
- void vokzal::addVokzal()//добавление новой записи в БД
- {VOKZAL t,*k;
- int i;
- k=new VOKZAL[n+1]; //выделение динамической памяти(последняя запись пуста)
- if(k==NULL){cout<<"\nNo memory\n";getch(); return;};
- cout<<"\nPynkt otpravleniya: ";cin>>t.otpr;
- cout<<"Pynkt naznacheniya: ";cin>>t.nazn;
- cout<<"Nomer poezda: ";cin>>t.nomer;
- cout<<"Chasi i minyti otpravleniya(vvodit' cherez probel): ";cin>>t.t.h; cin>>t.t.min;
- cout<<"Familiya passagira: ";cin>>t.f.fam;
- cout<<"Iniziali: ";cin>>t.f.iniz;
- cout<<"Tip vagona: ";cin>>t.tip;
- cout<<"Cena bileta: ";cin>>t.cost;
- cout<<endl;
- for(i=0; i<n; i++)
- k[i]=px[i];
- k[n]=t;
- n++;
- delete[]px;
- px=k;
- outputVokzal();//вывод БД на экран
- cout<<"\nStroka yspeshno dobavlena";getch();}
- void vokzal::deleteVokzal()//удаление записи
- {int i,j;
- char ch;
- VOKZAL *k;
- j=vuibor();
- cout<<"Ydalit (Y/N)?: ";cin>>ch;
- if(ch!='y') return;
- if(ch=='y'){k=new VOKZAL[n-1];
- for(i=0; i<j; i++)
- k[i]=px[i];
- for(i=j+1; i<n; i++)
- k[i-1]=px[i];
- delete[]px;
- px=k;}
- n--;
- outputVokzal();//вывод БД на экран
- cout<<"\nStroka yspeshno ydalena"; getch();}
- void vokzal::inputVokzalFile()//чтение БД из текстового файла
- {ifstream fin;
- char file[16];
- VOKZAL t;
- int i;
- if(px!=NULL){delete[]px;n=0;px=NULL;} //очистка массива
- cout<<"\nVvedite imya fayla: ";cin>>file;
- fin.open(file);
- if(fin==NULL){cout<<"\nFayl "<<file<<" ne otkrit'\n";getch();return;}
- n=0;
- //подсчёт записей в файле
- do{fin>>t.otpr>>t.nazn>>t.nomer>>t.t.h>>t.t.min>>t.f.fam>>t.f.iniz>>t.tip>>t.cost;
- n++;
- } while(fin.good()); //пока открытие успешно
- n--;
- fin.close();
- px=new VOKZAL[n]; //выделение динамической памяти
- if(px==NULL){cout<<"\nNo memory\n";n=0;getch();return;}
- fin.open(file);
- if(fin==NULL){cout<<"\nFayl "<<file<<" ne otkrit' povtorno\n";getch();return;}
- //чтение массива из файла
- fin>>*this;//fin>>a;
- cout<<"\nMassiv yspeshno vveden\n";getch();
- fin.close();
- }
- void vokzal::outputVokzalFile() //запись БД в текстовый файл
- {ofstream fout;
- char file[16];
- int i;
- if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- cout<<"Vvedite imya txt fayla: ";cin>>file;
- fout.open(file);
- if(fout.fail()){cout<<"\nFayl"<<file<<" nevozmogno zapisat'\n";getch();n=0;px=NULL;return;}
- //запись БД в файл
- fout<<*this;// fout<<a;
- cout<<"\nBD yspeshno sohranena\n";getch();}
- int vokzal::vuibor() //выбор нужной строки
- {int i,fl=0; //рабочая переменная для выбора строки
- cout.setf(ios::left);
- outputVokzal();
- while(fl==0)
- {cout<<"\n\nViberite stroku: ";cin>>i;
- if(i<=0|| i>n){cout<<"\nNet takoi stroki\nPovtorite vvod";getch();}
- else fl=1;}
- i--;
- return i;
- }
- void vokzal::redaktVokzal() //редактирование БД
- {int j, //рабочая переменная для выбора пункта
- t; //рабочая переменная для вызова функции
- if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- t=vuibor(); //вызывается функция выбора строки
- while(1)
- { j=0;//очистка экрана
- outputVokzal();//вывод БД на экран
- cout.setf(ios::left); //выравнивание слева
- cout<<"Viberite redaktiruemiy razdel\n\n";
- cout<<"1.Pynkt otpravleniya\n"
- <<"2.Pynkt naznacheniya\n"
- <<"3.Nomer poezda\n"
- <<"4.Chasi i minyti otpravleniya(vvodit' cherez probel)\n"
- <<"5.Familiya passagira\n"
- <<"6.Iniziali\n"
- <<"7.Tip vagona\n"
- <<"8.Cena bileta\n\n"
- <<"9.Main menu\n";
- cout<<"\nVash vibor: ";cin>>j;
- //выбор редактируемого поля
- switch(j)
- {case 1:cout<<"Pynkt otpravleniya: ";cin>>px[t].otpr;break;
- case 2:cout<<"Pynkt naznacheniya: ";cin>>px[t].nazn;break;
- case 3:cout<<"Nomer poezda: ";cin>>px[t].nomer;break;
- case 4:cout<<"Chasi i minyti otpravleniya(vvodit' cherez probel): ";cin>>px[t].t.h;cin>>px[t].t.min;break;
- case 5:cout<<"Familiya passagira: ";cin>>px[t].f.fam;break;
- case 6:cout<<"Iniziali: ";cin>>px[t].f.iniz;break;
- case 7:cout<<"Tip vagona: ";cin>>px[t].tip;break;
- case 8:cout<<"Cena bileta: ";cin>>px[t].cost;break;
- case 9:return;
- default :cout<<"\n\nNet takogo pynkta\nPovtorite vvod";getch();
- cin.clear(); while(cin.get()!=('\n'));
- }
- }
- }
- void vokzal::poiskNazn()
- { int i;
- char nazn[10];
- if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- cout <<"Pynkt naznacheniya: "; cin>>nazn;
- tabl();//вывод основания для таблицы
- int f=0;//индекс для подсчета найденных строк
- for (i=0;i<n;i++)
- if(strcmp(px[i].nazn,nazn)==0)
- {vivodStroki();//вывод i-ой строки
- f++;}
- cout<<"------------------------------------------------------------------------------\n\n";getch();
- if(f==0) {cout<<"\nNet takoi zapisi\n";getch();}
- }
- void vokzal::poiskTime()
- {int i,
- hour,min;
- if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- cout <<"Chasi: "; cin>>hour;
- cout <<"Minuti: "; cin>>min;
- tabl();//вывод основания для таблицы
- int f=0;//индекс для подсчета найденных строк
- for (i=0;i<n;i++)
- if(px[i].t.h==hour && px[i].t.min==min)
- {vivodStroki();//вывод i-ой строки
- f++;}
- cout<<"------------------------------------------------------------------------------\n\n";getch();
- if(f==0) {cout<<"Net takoi zapisi\n";getch();}
- }
- void vokzal::poiskNomer()
- { int i;
- int nomer;
- if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- cout <<"Nomer poezda: "; cin>>nomer;
- tabl();//вывод основания для таблицы
- int f=0;//индекс для подсчета найденных строк
- for (i=0;i<n;i++)
- if(px[i].nomer==nomer)
- {vivodStroki();//вывод i-ой строки
- f++;}
- cout<<"------------------------------------------------------------------------------\n\n";getch();
- if(f==0) {cout<<"Net takoi zapisi\n";getch();}
- }
- void vokzal::poiskFIO()
- { int i;
- char fam[15], iniz[5];
- if(px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- cout <<"Familiya: "; cin>>fam;
- cout <<"Iniziali: "; cin>>iniz;
- tabl();//вывод основания для таблицы
- int f=0;//индекс для подсчета найденных строк
- for (i=0;i<n;i++)
- if(strcmp(px[i].f.fam,fam)==0 && strcmp(px[i].f.iniz,iniz)==0)
- {vivodStroki();//вывод i-ой строки
- f++;}
- cout<<"------------------------------------------------------------------------------\n\n";getch();
- if(f==0) {cout<<"Net takoi zapisi\n";getch();}
- }
- void vokzal::sortCost()
- {int fl,i,k;
- VOKZAL t;
- if(px==NULL){cout<<"Massiv pust\n";getch();return;}
- k=n-1;
- do{fl=0;
- for(i=0;i<k;i++)
- if(px[i].cost<px[i+1].cost)
- {t=px[i];
- px[i]=px[i+1];
- px[i+1]=t;
- fl=1;
- }
- k--;
- }
- while(fl==1);
- }
- void vokzal::sortTime()
- {int fl,i,k;
- VOKZAL t;
- if(px==NULL){cout<<"Massiv pust\n";getch();return;}
- k=n-1;
- do{fl=0;
- for(i=0;i<k;i++)
- {if(px[i].t.h>px[i+1].t.h)
- {t=px[i];
- px[i]=px[i+1];
- px[i+1]=t;
- fl=1;}
- if(px[i].t.h==px[i+1].t.h)
- {if(px[i].t.min>px[i+1].t.min)
- {t=px[i];
- px[i]=px[i+1];
- px[i+1]=t;
- fl=1;
- }
- }
- }
- k--;}
- while(fl==1);
- }
- void vokzal::sortFIO()
- {int fl,i,k;
- VOKZAL t;
- if(px==NULL){cout<<"Massiv pust\n";getch();return;}
- k=n-1;
- do{fl=0;
- for(i=0;i<k;i++)
- {if(strcmp(px[i].f.fam,px[i+1].f.fam)>0)
- {t=px[i];
- px[i]=px[i+1];
- px[i+1]=t;
- fl=1;}
- if(strcmp(px[i].f.fam,px[i+1].f.fam)==0)
- {if(strcmp(px[i].f.iniz,px[i+1].f.iniz)>0)
- {t=px[i];
- px[i]=px[i+1];
- px[i+1]=t;
- fl=1;}
- }
- }
- k--;
- }
- while(fl==1);
- }
- void vokzal::sortNazn()
- {int fl,i,k;
- VOKZAL t;
- if(px==NULL){cout<<"Massiv pust\n";getch();return;}
- k=n-1;
- do{fl=0;
- for(i=0;i<k;i++)
- {if(strcmp(px[i].nazn,px[i+1].nazn)>0)
- {t=px[i];
- px[i]=px[i+1];
- px[i+1]=t;
- fl=1;}
- }
- k--;
- }
- while(fl==1);
- }
- void vokzal::sortOtpr()
- {int fl,i,k;
- VOKZAL t;
- if(px==NULL){cout<<"Massiv pust\n";getch();return;}
- k=n-1;
- do{fl=0;
- for(i=0;i<k;i++)
- {if(strcmp(px[i].otpr,px[i+1].otpr)>0)
- {t=px[i];
- px[i]=px[i+1];
- px[i+1]=t;
- fl=1;}
- }
- k--;
- }
- while(fl==1);
- }
- void vokzal::sortTip()
- {int fl,i,k;
- VOKZAL t;
- if(px==NULL){cout<<"Massiv pust\n";getch();return;}
- k=n-1;
- do{fl=0;
- for(i=0;i<k;i++)
- {if(strcmp(px[i].tip,px[i+1].tip)>0)
- {t=px[i];
- px[i]=px[i+1];
- px[i+1]=t;
- fl=1;}
- }
- k--;
- }
- while(fl==1);
- }
- void perech::sortPerechOtprAlf()
- {int i,fl,f;
- PERECH t;
- f=k-1;
- do{fl=0;
- for(i=0;i<f;i++)
- if (strcmp(py[i].p.otpr,py[i+1].p.otpr)>0)
- {t=py[i];
- py[i]=py[i+1];
- py[i+1]=t;
- fl=1;}
- f--;}
- while(fl==1);
- }
- void perech::sortPerechTimeKolvo()
- {int i,fl,f;
- PERECH t;
- f=k-1;
- do{fl=0;
- for(i=0;i<f;i++)
- if (py[i].ng<py[i+1].ng)
- {t=py[i];
- py[i]=py[i+1];
- py[i+1]=t;
- fl=1;}
- f--;}
- while(fl==1);
- }
- void perech::outputPerechOtpr()
- {cout<<"\n-------------------------------\n";
- cout<<"|# | Pynkt otpravleniya |Kolvo|";
- cout<<"\n|--|--------------------|-----|\n";
- for (int i=0;i<k;i++)
- cout<<"|"<<setw(2)<<i+1<<"| "<<setw(19)<<py[i].p.otpr<<"| "<<setw(3)<<py[i].ng<<"|"<<endl;
- cout<<"-------------------------------\n";
- }
- void perech::outputPerechTime()
- {cout<<"\n------------------\n";
- cout<<"|# | Time |Kolvo|";
- cout<<"\n|--|-------|-----|\n";
- for (int i=0;i<k;i++)
- {cout.setf(ios::left);cout<<"|"<<setw(2)<<i+1<<"| ";
- cout.setf(ios::right);cout<<setfill('0')<<setw(2)<<py[i].p.t.h<<":"<<setw(2)<<py[i].p.t.min<<" | ";
- cout.setf(ios::left);cout<<setfill(' ')<<setw(3)<<py[i].ng<<" |"<<endl;}
- cout<<"------------------\n";
- }
- void perech::outputPerechNomer()
- {cout<<"\n------------------\n";
- cout<<"|# | Nomer |Kolvo|";
- cout<<"\n|--|-------|-----|\n";
- for (int i=0;i<k;i++)
- cout<<"|"<<setw(2)<<i+1<<"| "<<setw(6)<<py[i].p.nomer<<"| "<<setw(3)<<py[i].ng<<"|"<<endl;
- cout<<"------------------\n";
- }
- void perech::outputPerechOtprFile()
- {ofstream fout;
- int i;
- char file[16];
- fout.setf(ios::left);
- if(py==NULL){cout<<"Perechen eshe ne sostavlen\n";getch();return;}
- cout<<"Save perechen as? ";cin>>file;
- fout.open(file);
- if (fout==NULL){cout<<"Cannot save the perechen "<<file<<endl;getch();return;}
- for (i=0; i<k; i++)
- fout<<setw(18)<<py[i].p.otpr<<setw(3)<<py[i].ng<<endl;
- cout<<"Perechen was succesfully saved"; getch();
- fout.close();
- }
- void perech::outputPerechTimeFile()
- {ofstream fout;
- int i;
- char file[16];
- fout.setf(ios::left);
- if(py==NULL){cout<<"Perechen eshe ne sostavlen\n";getch();return;}
- cout<<"Save perechen as? ";cin>>file;
- fout.open(file);
- if (fout==NULL){cout<<"Cannot save the perechen "<<file<<endl;getch();return;}
- for (i=0; i<k; i++)
- fout<<setw(3)<<py[i].p.t.h<<setw(3)<<py[i].p.t.min<<setw(3)<<py[i].ng<<endl;
- cout<<"Perechen was succesfully saved"; getch();
- fout.close();
- }
- void perech::outputPerechNomerFile()
- {ofstream fout;
- int i;
- char file[16];
- fout.setf(ios::left);
- if(py==NULL){cout<<"Perechen eshe ne sostavlen\n";getch();return;}
- cout<<"Save perechen as? ";cin>>file;
- fout.open(file);
- if (fout==NULL){cout<<"Cannot save the perechen "<<file<<endl;getch();return;}
- for (i=0; i<k; i++)
- fout<<setw(6)<<py[i].p.nomer<<setw(3)<<py[i].ng<<endl;
- cout<<"Perechen was succesfully saved"; getch();
- fout.close();
- }
- void makePerechOtpr(vokzal &v,perech &w)
- {int i,j,fl,nn,kk;
- if(v.px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- nn=v.n;//присвоение переменной nn, значения количества строк в основном массиве
- w.py=new PERECH[nn];//выделение памяти
- if(w.py==NULL){cout<<"No memory";getch();}
- kk=0;
- for(i=0;i<nn;i++)
- {fl=1;
- for(j=0;j<kk;j++)
- if(strcmp(v.px[i].otpr,w.py[j].p.otpr)==0){fl=0;w.py[j].ng++;break;}
- if(fl==1){strcpy(w.py[kk].p.otpr,v.px[i].otpr);w.py[kk].ng=1; kk++;}
- }
- w.k=kk;//присвоение значения переменной kk, значению количества строк в перечне
- }
- void makePerechTime(vokzal &v,perech &w)
- {int i,j,fl,nn,kk;
- if(v.px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- nn=v.n;//присвоение переменной nn, значения количества строк в основном массиве
- w.py=new PERECH[nn];
- if(w.py==NULL){cout<<"No memory";getch();}
- kk=0;
- for(i=0;i<nn;i++)
- {fl=1;
- for(j=0;j<kk;j++)
- 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;}
- if(fl==1){w.py[kk].p.t.h=v.px[i].t.h;
- w.py[kk].p.t.min=v.px[i].t.min;w.py[kk].ng=1; kk++;}
- }
- w.k=kk;//присвоение значения переменной kk, значению количества строк в перечне
- }
- void makePerechNomer(vokzal &v,perech &w)
- {int i,j,fl,nn,kk;
- if(v.px==NULL){cout<<"\nMassiv pyst\n";getch();return;}
- nn=v.n;//присвоение переменной nn, значения количества строк в основном массиве
- w.py=new PERECH[nn];
- if(w.py==NULL){cout<<"No memory";getch();}
- kk=0;
- for(i=0;i<nn;i++)
- {fl=1;
- for(j=0;j<kk;j++)
- if(v.px[i].nomer==w.py[j].p.nomer ){fl=0;w.py[j].ng++;break;}
- if(fl==1){w.py[kk].p.nomer=v.px[i].nomer;w.py[kk].ng=1; kk++;}
- }
- w.k=kk;//присвоение значения переменной kk, значению количества строк в перечне
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement