Автор: Пользователь скрыл имя, 29 Марта 2013 в 00:30, курсовая работа
Главное нововведение C++ - механизм классов, дающий возможность определять и использовать новые типы данных. Программист описывает внутреннее представление объекта класса и набор функций-методов для доступа к этому представлению. Одной из заветных целей при создании C++ было стремление увеличить процент повторного использования уже написанного кода. Концепция классов предлагала для этого механизм наследования. Задание: На основе знаний языка С++ реализовать программу для работы с базой данных пассажиров в аэропорту при заказе билетов.В программе предусморены функции : добавление пассажиров по 3-м категориям, сотрировка по 4 категориям, поиск, удаление по 3-м категориям,запись в файл и чтение из него.
1.Введение…………………..............................................................................3
2.Поставленая задача…………………………………………………..….......5
3.Структура данных…………………………………………………………...5
4.Диаграмма классов .………………………………………………………..6
5.Описание классов……………………………………………………………7
6.Скриншоты к программе…………………………………………………...12
7.Заключение………………………………………………………………….13
8.Список использованной литературы...…………………………………….13
9.Приложение…………………………………………………………………14
}
if(size>20)
{
throw exp_2("\nПревышение размерноести");
}
else
{
break;
}
}
catch(exp_2 ob)
{
if(cin.rdstate())
{
ob.show();
cin.clear();
cin.sync();
}
}
catch(exp_4 ob)
{
if(cin.rdstate())
{
ob.show();
cin.clear();
cin.sync();
}
}
}
while(1)
{
cout << "\nИмя: ";
try
{
int size;
input >> num.name;
size=strlen(num.name);
if(strpbrk(num.name,"
{
throw exp_4("\nВведены недопустимые символы");
}
if(size>20)
{
throw exp_2("\nПревышение размерноести");
}
else
{
break;
}
}
catch(exp_2 ob)
{
if(cin.rdstate())
{
ob.show();
cin.clear();
cin.sync();
}
}
catch(exp_4 ob)
{
if(cin.rdstate())
{
ob.show();
cin.clear();
cin.sync();
}
}
}
while(1)
{
cout << "\nОтчество: ";
try
{
int size;
input >> num.middle_name;
size=strlen(num.middle_name);
if(strpbrk(num.middle_name,"
{
throw exp_4("\nВведены недопустимые символы");
}
if(size>20)
{
throw exp_2("\nПревышение размерности");
}
else
{
break;
}
}
catch(exp_2 ob)
{
if(cin.rdstate())
{
ob.show();
cin.clear();
cin.sync();
}
}
catch(exp_4 ob)
{
if(cin.rdstate())
{
ob.show();
cin.clear();
cin.sync();
}
}
}
while(1)
{
cout << "\nМесто: ";
input >> num.mesto ;
try
{
int flags;
flags = cin.rdstate();
if(flags &ios::failbit)
{
throw exp_1("\nДолжны быть введены цифры ");
}
if( num.mesto >= 300 )
{
throw exp_6("\nНедопустимое количевство пассажиров");
}
else
{
break;
}
}
catch(exp_1 ob)
{
ob.show();
cin.clear();
cin.sync();
}
catch(exp_3 ob)
{
ob.show();
cin.clear();
cin.sync();
}
}
return input;
}
ofstream &operator << ( ofstream &output, const Pass &num )
{
output << num.n << endl;
output << num.family_name << endl;
output << num.name << endl;
output << num.middle_name << endl;
output << num.mesto << endl;
output << num.price << endl;
output << num.klass << endl;
output << endl;
return output;
}
ifstream &operator >> ( ifstream &input, Pass &num )
{
input >> num.n;
input >> num.family_name;
input >> num.name;
input >> num.middle_name;
input >> num.mesto;
input >> num.price;
input >> num.klass;
return input;
}
bool operator<( const Pass &pas1, const Pass &pas2)
{
if (Pass::q == 1)
return (pas1.mesto < pas2.mesto);
if (Pass::q == 2)
return (pas1.mesto < pas2.mesto);
if (Pass::q == 3)
return (pas1.n < pas2.n);
if (Pass::q == 4)
return (pas1.n < pas2.n);
}
bool operator>( const Pass &pas1, const Pass &pas2)
{
if (Pass::q == 1)
return (pas1.mesto > pas2.mesto);
if (Pass::q == 2)
return (pas1.mesto > pas2.mesto);
if (Pass::q == 3)
return (pas1.n > pas2.n);
if (Pass::q == 4)
return (pas1.n > pas2.n);
}
Comfort_Class :: Comfort_Class ( )
{
this->price = 1500;
strcpy_s (this->klass, "Comfort_Class" );
}
Comfort_Class :: ~Comfort_Class () {}
Business_Class :: Business_Class ( )
{
this->price = 2500;
strcpy_s (this->klass, "Business_Class" );
}
Business_Class :: ~Business_Class () {}
Economy_Class :: Economy_Class ( )
{
this->price = 500;
strcpy_s (this->klass, "Economy_Class" );
}
Economy_Class :: ~Economy_Class () {}
void Pass::Prosm_Deque ( deque<Pass> &pas , int &flaq )
{
system("cls");
deque<Pass>::iterator iter;
cout <<"\nКоличество пассажиров в списке - " << flaq - 1 << endl;
for(iter=pas.begin(); iter!=pas.begin() + flaq -1 ; iter++)
{
cout << "\nЭлементы из списка 1"<< *iter;
}
}
void Pass::Zap_Text_File(deque<
{
system("cls");
deque<Pass>::iterator iter;
ofstream outfile("deque.txt");
for (iter = pas.begin (); iter!=pas.begin() + flaq - 1; iter ++)
{
outfile << *iter << endl;
}
outfile.close ();
cout <<"\nСписок занесён в файл";
}
void Pass::Prosm_Text_File( deque<Pass> &pas , int &flaq)
{
Pass temp;
pas.clear ();
flaq = 1;
ifstream infile("deque.txt");
infile.seekg(ios::beg,0);
while (1)
{
infile >> temp;
if (infile.eof ())
break;
pas.push_back (temp);
flaq++;
}
infile.close ();
cout <<"\nСписок пассажиров с файла прочитан";
}
void Pass::Poisk( deque<Pass> &pas , int &flaq , int &poisk , int &shet_poisk)
{
system("cls");
if (flaq > 1)
{
deque<Pass>::iterator iter;
cout <<"\nПоиск по номеру в списке ";
cout << "\nВведите номер пассажира: ";
cin >> poisk;
for (iter = pas.begin();iter != pas.end (); iter ++)
{
if (iter->getN () == poisk)
{
cout << "\n Искомый пассажир с номером "<< poisk <<" в списке:" << endl;
cout << *iter << endl;
shet_poisk = 1;
}
}
if (shet_poisk == 0)
{
cout << "\nПассажир с таким номером отсутствует";
}
shet_poisk = 0;
}
else
cout << "\nСписок пуст";
}
void Pass::Sort_Mesto_Max( deque<Pass> &pas , int &flaq)
{
system("cls");
sort(pas.begin(), pas.begin() + flaq -1);
cout <<"\nСписок отсортирован по местам (возростание) пассажиров в салоне";
}
void Pass::Sort_Mesto_Min ( deque<Pass> &pas , int &flaq )
{
system("cls");
sort( pas.rbegin() , pas.rend() );
cout <<"\nСписок отсортирован по местам (убывание) пассажиров в салоне";
}
void Pass::Sort_Nomer_Max ( deque<Pass> &pas , int &flaq )
{
system("cls");
sort(pas.begin(), pas.begin() + flaq -1 );
cout <<"\nСписок отсортирован по номеру (возростание)в списке";
}
void Pass::Sort_Nomer_Min ( deque<Pass> &pas , int &flaq )
{
system("cls");
sort( pas.rbegin(), pas.rend() );
cout <<"\nСписок отсортирован по номеру (убывание) в списке";
}
void Pass::Udal_Elem_Nach( deque<Pass> &pas , int &flaq )
{
if(flaq > 1)
{
pas.pop_front();
cout << "\nЭлемент удален из списка";
flaq--;
}
else
{
cout <<"\nСписок пуст";
}
}
void Pass::Udal_Elem_Kon( deque<Pass> &pas , int &flaq )
{
if(flaq > 1)
{
pas.pop_back();
cout << "\nЭлемент удален из списка";
flaq--;
}
else
{
cout <<"\nСписок пуст";
}
}
void Pass::Udal_Deque ( deque<Pass> &pas , int &flaq )
{
if(flaq > 1)
{
pas.clear();
cout << "\nЭлементы удалены из списка";
flaq = 1;
}
else
{
cout <<"\nСписок пуст";
}
}
void Comfort_Class::Dobav_Comfort_
{
deque<Comfort_Class>::iterator iter2;
system ("cls");
cout<<"\<_____Введите данные о пассажире_____>"<< endl;
for(iter2=ob2.begin() + flaq2 - 1; iter2!=ob2.begin() + flaq2; iter2++)
{
cout << "\n Обьект ";
cin >> *iter2;
}
pas.insert(pas.begin() + flaq - 1,ob2.begin() + flaq2 - 1 ,ob2.end());
flaq2++;
flaq++;
}
void Business_Class::Dobav_
{
system ("cls");
deque<Business_Class>::
cout<<"\<_____Введите данные о пассажире_____>"<< endl;
for(iter3=ob3.begin() + flaq3 - 1; iter3!=ob3.begin() + flaq3; iter3++)
{
cout << "\n Обьект ";
cin >> *iter3;
}
pas.insert(pas.begin() + flaq - 1,ob3.begin() + flaq3 - 1 ,ob3.end());
flaq3++;
flaq++;
}
void Economy_Class::Dobav_Economy_
{
system ("cls");
deque<Economy_Class>::iterator iter4;
cout<<"\<_____Введите данные о пассажире_____>"<< endl;
for(iter4=ob4.begin() + flaq4 - 1; iter4!=ob4.begin() + flaq4; iter4++)
{
cout << "\n Обьект ";
cin >> *iter4;
}
pas.insert(pas.begin() + flaq - 1,ob4.begin() + flaq4 - 1,ob4.end());
flaq4++;
flaq++;
}
Exception.h
#include "stdafx.h"
#include <iostream>
#include "string.h"
using namespace std;
class exp
{
public:
exp(){cout <<"\nПовторите ввод"<< endl;};
virtual ~exp(){};
};
class exp_1:public exp
{
char error1[50];
public:
exp_1(char *error_1)
{
strcpy(error1,error_1);
};
void show()
{
cout << error1 << endl;
}
~exp_1(){};
};
class exp_2:public exp
{
char error2[50];
public:
exp_2(char *error_2)
{
strcpy(error2,error_2);
};
void show()
{
cout << error2 << endl;
}
~exp_2(){};
};
class exp_3:public exp
{
char error3[50];
public:
exp_3(char *error_3)
{
strcpy(error3,error_3);
};
void show()
{
cout << error3 << endl;
}
~exp_3(){};
};
class exp_4:public exp
{
char error4[50];
public:
exp_4(char *error_4)
{
strcpy(error4,error_4);
};
void show()
{
cout << error4 << endl;
}
~exp_4(){};
};
class exp_5:public exp
{
char error5[50];
public:
exp_5(char *error_5)
{
strcpy(error5,error_5);
};
void show()
{
cout << error5 << endl;
}
~exp_5(){};
};
class exp_6:public exp
{
char error6[50];
public:
exp_6(char *error_6)
{
strcpy(error6,error_6);
};
void show()
{
cout << error6 << endl;
}
~exp_6(){};
};
main.cpp
#include "stdafx.h"
#include "metody.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Pass ob_1;
Comfort_Class ob_2;
Business_Class ob_3;
Economy_Class ob_4;
deque<Pass> pas(300);
deque<Pass>::iterator iter;
deque<Comfort_Class> ob2(50);
deque<Comfort_Class>::iterator iter2;
deque<Business_Class> ob3(100);
deque<Business_Class>::
deque<Economy_Class> ob4(150);
deque<Economy_Class>::iterator iter4;
int flaq = 1 , flaq2 = 1, flaq3 = 1, flaq4 = 1 , vibor, vibor_1 ,vibor_2 , vibor_3 = 1 , vibor_4 = 1 , vibor_5 = 1, vibor_6 ,shet_poisk = 0 ,poisk;
while ( 1 )
{
system ("cls");
cout << "<_______Операции с пассажирами_______>";
cout << "\n1)Добавление пассажиров";
cout << "\n2)Просмотр пассажиров ";
cout << "\n3)Очистка списка пассажиров ";
cout << "\n4)Сортировка списка пассажиров ";
cout << "\n5)Запись в файл данных списка ";
cout << "\n6)Чтение из файла данных в список";
cout << "\n7)Поиск в списке пассажира";
cout << "\n0)Выход\n";
cin >> vibor_1;
switch ( vibor_1 )
{
case 1 :
{
while ( vibor_3 == 1 )
{
system ("cls");
cout << "<_____Выберите класс обслуживания_____>";
cout << "\n1)Комфорт";
cout << "\n2)Бизнес";
cout << "\n3)Эконом";
cout << "\n0)Выход в главное меню" << endl;
cin >> vibor_2;
switch ( vibor_2 )
{
case 1:
{
ob_2.Dobav_Comfort_Class( pas , ob2 , flaq , flaq2 );
_getch();
break;
}
case 2:
{
ob_3.Dobav_Business_Class( pas , ob3 , flaq , flaq3 );
_getch();
break;
}
case 3:
{
ob_4.Dobav_Economy_Class( pas , ob4 , flaq , flaq4 );
_getch();
break;
}
case 0:
{
vibor_3 = 0;
}
}
}
vibor_3++;
_getch();
break;
}
case 2:
{
ob_1.Prosm_Deque( pas , flaq);
_getch();
break;
}
case 3:
{
if(flaq > 1)
{
while ( vibor_5 == 1)
{
system("cls");
cout << "\nВыберите способ удаления";
cout <<"\n1)Удалить первого пассажира в списке";
cout <<"\n2)Удалить последнего пассажира в списке";
cout <<"\n3)Удалить весь список";
cout <<"\n0)Выход в главное меню" << endl;
cin >> vibor_6;
switch( vibor_6 )
{
case 1:
{
ob_1.Udal_Elem_Nach(pas , flaq);
_getch();
break;
}
case 2:
{
ob_1.Udal_Elem_Kon(pas , flaq);
_getch();
break;
}
case 3:
{
ob_1.Udal_Deque( pas , flaq );
_getch();
break;
}
case 0:
{
vibor_5 = 0;
_getch();
break;
}
}
}
vibor_5++;
_getch();
break;
}
else
{
cout <<"\nСписок пуст" << endl;
}
_getch();
break;
}
case 4:
{
if(flaq > 1)
{
while ( vibor_4 == 1)
{
system("cls");
cout << "\nВыберите категорию сортировки";
cout <<"\n1)По месту пассажира в салоне по возростанию";
cout <<"\n2)По месту пассажира в салоне по убыванию";
cout <<"\n3)По номеру в списке по возростанию";
cout <<"\n4)По номеру в списке по убыванию";
cout <<"\n0)Выход в главное меню" << endl;
cin >> vibor;
Pass::q = vibor;
switch( vibor )
{
case 1:
{
ob_1.Sort_Mesto_Max( pas ,flaq);
_getch();
break;
}
case 2:
{
ob_1.Sort_Mesto_Min( pas,flaq);
_getch();
break;
}
case 3:
{
ob_1.Sort_Nomer_Max( pas ,flaq);
_getch();
break;
}
case 4:
{
ob_1.Sort_Nomer_Min( pas ,flaq);
_getch();
break;
}
case 0:
{
vibor_4 = 0;
_getch();
break;
}
}
}
vibor_4++;
_getch();
break;
}
else
{
cout <<"\nДанные для сортировки отсутсвуют" << endl;
}
_getch();
break;
}
case 5:
{
ob_1.Zap_Text_File( pas , flaq );
}
_getch();
break;
case 6:
{
ob_1.Prosm_Text_File( pas , flaq);
_getch();
break;
}
case 7:
{
ob_1.Poisk( pas , flaq , poisk , shet_poisk);
_getch();
break;
}
case 0:
{
return 0;
}
}
}
_getch();
return 0;
}