Создание базы данных пассажиров

Автор: Пользователь скрыл имя, 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

Работа содержит 1 файл

ООП Расчетная работа.docx

— 350.41 Кб (Скачать)

 

Министерство образования  Республики Беларусь

 «Белорусский государственный университет информатики и радиоэлектроники»

 

Инженерно-экономический  факультет

Кафедра экономической информатики

Дисциплина: Объектно-ориентированное  программирование

 

 

 

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к расчётной работе на тему:

«Создание базы данных пассажиров»

 

 

 

 

                                                                               Выполнил:  ст.гр. 072301

                          Жук.Р.И.

                                                                               Проверила:

              Ковальчук А. М.                                                  

             

 

 

 

                                                   Минск  2012

Содержание:

1.Введение…………………..............................................................................3

2.Поставленая задача…………………………………………………..….......5

3.Структура данных…………………………………………………………...5

4.Диаграмма классов   .………………………………………………………..6

5.Описание классов……………………………………………………………7

6.Скриншоты к программе…………………………………………………...12

7.Заключение………………………………………………………………….13

8.Список использованной литературы...…………………………………….13

9.Приложение…………………………………………………………………14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 Введение

Главное нововведение C++ - механизм классов, дающий возможность определять и  использовать новые типы данных. Программист  описывает внутреннее представление  объекта класса и набор функций-методов  для доступа к этому представлению. Одной из заветных целей при создании C++ было стремление увеличить процент  повторного использования уже написанного  кода. Концепция классов предлагала для этого механизм наследования. Наследование позволяет создавать  новые (производные) классы с расширенным  представлением и модифицированными  методами, не затрагивая при этом скомпилированный код исходных (базовых) классов. Вместе с тем наследование обеспечивает один из механизмов реализации полиморфизма - базовой концепции объектно-ориентированного программирования, согласно которой, для  выполнения однотипной обработки разных типов данных может использоваться один и тот же код. Собственно, полиморфизм - тоже один из методов обеспечения  повторного использования кода.Существенным критерием при разработке языка  была простота. Там, где возникал выбор  между упрощением руководства по языку и другой документации и  упрощением компилятора, выбиралось первое. Огромное значение также предавалось  совместимости с C, это помешало удалить  синтаксис. C. 
В С++ нет типов данных высокого уровня и нет первичных операций высокого уровня. В нем нет, например, матричного типа с операцией обращения или типа строка с операцией конкатенации. Если пользователю понадобятся подобные типы, их можно определить в самом языке. По сути дела, основное, чем занимается программирование на С++ – это определение универсальных и специально-прикладных типов. Хорошо разработанный тип, определяемый пользователем, отличается от встроенного типа только способом определения, но не способом спользования.Исключались те черты, которые могли бы повлечь дополнительные расходы памяти или времени выполнения. Например, мыли о том, чтобы сделать необходимым хранение в каждом объекте «хозяйственной» информации, были отвергнуты. Если пользователь описывает структуру, состоящую из двух 16-битовых величин, то структура поместится в 32-битовый регистр. 
С++ проектировался для использования в довольно традиционной среде компиляции и выполнения, среде программирования на C в системе UNIX. Средства обработки особых ситуаций и параллельного программирования, требующие нетривиальной загрузки и поддержки в процессе выполнения, не были включены в С++. Вследствие этого реализация С++ очень легко переносима. Однако есть полные основания использовать С++ в среде, где имеется гораздо более существенная поддержка. Такие средства, как динамическая загрузка, пошаговая трансляция и база данных определений типов могут с пользой применяться без воздействия на язык. 
Типы и средства сокрытия данных в С++ опираются на проводимый во время компиляции анализ программ с целью предотвращения случайного искажения данных. Они не обеспечивают секретности или защиты от умышленного нарушения правил. Однако эти средства можно использовать без ограничений, что не приводит к дополнительным расходам времени на выполнение или пространства памяти.Поддерживает такие парадигмы программирования как процедурное программирование, модульность, раздельная компиляция, обработка исключений, абстракция данных, типы (объекты), виртуальные функции, объектно-ориентированное программирование, обобщенное программирование, контейнеры и алгоритмы, сочетает свойства как высокоуровневых, так и низкоуровневых языков[1][2]. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.[2] Название «C++» происходит от названия языка C, в котором унарный оператор ++ обозначает инкремент переменной.Являясь одним из самых популярных языков программирования,[3][4] C++ широко используется для разработки программного обеспечения. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений (например, видеоигры). Существует несколько реализаций языка C++ — как бесплатных, так и коммерческих. Наиболее популярны проект GNU, Microsoft, Intel и Embarcadero (Borland). C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C#.При создании C++ Бьёрн Страуструп стремился сохранить совместимость с языком C. Множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико — отчасти благодаря тому, что синтаксис C++ был основан на синтаксисе C.

 

 

 

 

 

 

1.Поставленая задача:

1.1.Условие  задачи:

На основе знаний языка С++ реализовать  программу для работы с базой

данных пассажиров в аэропорту при заказе билетов.В программе предусморены функции : добавление пассажиров по 3-м категориям, сотрировка по 4 категориям, поиск, удаление по 3-м категориям,запись в файл и чтение из него.

 

2.структура данных:

Входные данные:

Файл deque.txt содержить обьекты класса Pass

class Pass

{

int n;        // номер в списке

char family_name[20];     // фамилия

char name [20];                            // имя

char middle_name [20];    // отчество

int mesto;      // место в салоне

int price;      // цена билета

char klass[20]     // класс обслуживания

}

Данные объектов заносятся в STL- очередь deque.Информация вносится и считывается с файла “deque.txt”.

 

 

3.диаграмма классов:

 

4.описание классов:

сlass.h // в файле содержатся главные классы программы

сlass Pass // главный

 

class Pass

{

protected:

int n; // номер пассажира

char family_name [20]; //фамилия

char name[20]; //имя

char middle_name[20]; // отчество

int mesto; //место

int price; //цена

char klass[20]; //класс обслуживания в самолёте

public:

static int q; // переменная ,используемая для сортировки

Pass(); //конструктор

Pass ( int, char * , char * , char *, int , int , char *); //конструктор с параметрами

Pass(const Pass &); //конструктор копирования

Pass & operator = ( const Pass & ); //перегрузка =

friend istream &operator >> ( istream &, Pass & ); //перегрузка потока ввода

friend ostream &operator << ( ostream &, const Pass & ); // перегрузка потока вывода

friend bool operator <( const Pass &, const Pass &);//перегрузка больше/меньше

friend bool operator >( const Pass &, const Pass &);для сортировки //

 

friend ifstream &operator>>(ifstream &, Pass & ); // перегрузка потока ввода в файл

friend ofstream &operator<<(ofstream & ,  const Pass & ); //перегрузка потока вывода из файла

void Zap_Text_File( deque<Pass> & , int &); // запись в файл

void Prosm_Text_File( deque<Pass> & , int & ); // чтение из файла

void Poisk( deque<Pass> & , int & , int & , int & ); // поиск по номеру

void Sort_Mesto_Min( deque<Pass> & , int & ); // сортировка мест по убыванию

void Sort_Mesto_Max( deque<Pass> & , int & ); // сортировка мест по возростанию

void Sort_Nomer_Min( deque<Pass> & , int & ); // сортировка номера по убыванию

void Sort_Nomer_Max( deque<Pass> & , int & );//сортировка номера по возростанию

void Prosm_Deque( deque<Pass> & , int &); //просмотр списка 

void Udal_Elem_Nach( deque<Pass> & , int & ); //удаление из начала

void Udal_Elem_Kon( deque<Pass> & , int & ); // удаление из конца

void Udal_Deque( deque<Pass> & , int & ); //удаление целиком

 

int getN () { return n; } /*

char* getFamily_name()

{

char *family_nam = family_name;

return family_nam;

}

 

char* getName()

{

char *nam = name;

return nam;

}

char* getMiddle_name()

{

char *middle_nam = middle_name;

return middle_nam;

}

int getMesto() { return mesto; }

int getPrice () { return price; }

char* getClass()

{

char *klas = klass;

return klas;

}*/ функции возвращающие переменные класса(данные о пассажире)

 virtual ~Pass (); //виртуальный деструктор

};

 

 

 

class Comfort_Class // наследуемый

 

class Comfort_Class : virtual public Pass //объявление наследуемого класса, в котором определяется цена и класс обслуживания пассажира

{

public: 

Comfort_Class (); //конструктор

~Comfort_Class (); //деструктор

void Dobav_Comfort_Class(  deque<Pass> &pas, deque<Comfort_Class> &ob2 ,

 int & , int & ); //функция ввода

 

};

 

class Business_Class // наследуемый

 

class Business_Class : virtual public Pass //объявление наследуемого класса, в котором определяется цена и класс обслуживания пассажира

{

public:

Business_Class (); //конструктор

~Business_Class ();//деструктор

void Dobav_Business_Class( deque<Pass> &pas, deque<Business_Class> &ob3 ,

 int & , int & ); // функция ввода

 

};

 

class Economy_Class // наследуемый

 

class Economy_Class : virtual public Pass //объявление наследуемого класса, в котором определяется цена и класс обслуживания пассажира

{

public:

Economy_Class (); //конструктор

~Economy_Class ();//деструктор

void Dobav_Economy_Class(  deque<Pass> &pas, deque<Economy_Class> &ob4 ,

int & , int & ); // функция ввода

 

};

 

4.1 Алгоритм по шагам

Функция записи в файл (  Zap_Text_File()  )

1.Начало

2.Обьявление  данных: функция  принимает 2  параметра  pas(очередь) и flaq ( флаг положения в очереди).Внутри функции   определяем итератор   -  iter;

3. Создание   и открытие файла:    deque.txt

4.Цикл пока не конец контейнера : (iter=begin() + flaq , iter!=pas.begin()+ flaq -1 , iter++)

5.Запись  полей из контейнера в файл(в  цикле):   outfile << *iter

 

6.Закрытие  файла:  outfile.close()

7.Вывод информационного  сообщения :  cout <<””;

8.Конец

 

Функция чтения из файла ( Prosm_Text_File()  )

1.Начало

2.Обьявление данных: принимает 2  параметра  pas(очередь) и flaq ( флаг положения в очереди).Внутри функции определяем временный обьект  temp класса Pass.

3.Очищаем прежний список:  pas.clear().

4.Открываем файл для чтения  и устанавливаем позицию с которой начинаем считывать данные: ifstream infile(deque.txt), infile.seekg(ios::beg,0).

5.Записываем данные во временный объект и добавляем его в конец очереди, пока не коней файла: infile >> temp , pas.puch_back(temp).

6.Закрываем  файл:  infile.clase();

7.Вывод информационного сообщения: cout <<””.

 

 

 

4.12 Блок схемы функций:

Функция удаления элемента очереди из начала ( Udal_Elem_Nach() )

 

         Рис. 1

 

 

 

 

 

 

 

 

Функция добавления пассажира класса Comfort_Class ( Dobav_ Comfort_Class () )

 

Pис.  2

5.Скриншоты работы программы:

 

 

Скриншот главного меню программы.

 

Скриншот части программы для  работы с данными о пассажирах.

 

Скриншот  части программы  при  вводе данных.

 

Скриншот части программы при  чтении ее из базы( ранее сохранёного  файла).

6.Заключение:

Данная программа  реализована разными методами(функциями) описанными ранее. Цель достигнута. Пользователь может использовать данную базу в своих назначениях.

 

7.Список использованной литературы:

1.   Луцик Ю.А., Ковальчук А.М., Лукьянова И.В. Объектно-ориентированное программирование на языке C++: Учеб. пособие по курсу «Объектно-ориентированное программирование». Мн.: БРУИР, 2003 -            203 с.:ил.

2.  Дейтел Х.М., Дейтел П.Дж. Как программировать на C++: Четвёртое издание. Пер. с англ. – М.: ООО «Бином-Пресс», 2005 – 1248 с.:ил.

3.  Шилд Г. Программирование  на Borland C++. Пер. с англ. А. И. Панасюк, А. Н. Филимонов. – Мн.: ООО «Поппури», 1999. – 800 с.:ил.

 

8.Приложение:

сlass.h

#include <iostream>

#include "conio.h"

#include <iomanip>

#include "windows.h"

#include <cstring>

#include <fstream>

#include <algorithm>

#include <deque>

#include "stdafx.h"

#include "Exception.h"

 

using namespace std;

 

 

class Pass

{

protected:

int n;

char family_name [20];

char name[20];

char middle_name[20];

int mesto;

int price;

char klass[20];

public:

static int q;

Pass();

Pass ( int, char * , char * , char *, int , int , char *);

Pass(const Pass &);

Pass & operator = ( const Pass & );

friend istream &operator >> ( istream &, Pass & );

friend ostream &operator << ( ostream &, const Pass & );

friend ifstream &operator>>(ifstream &, Pass & );

friend ofstream &operator<<(ofstream & ,  const Pass & );

friend bool operator <( const Pass &, const Pass &);

friend bool operator >( const Pass &, const Pass &);

void Zap_Text_File( deque<Pass> & , int &);

void Prosm_Text_File( deque<Pass> & , int & );

void Poisk( deque<Pass> & , int & , int & , int & );

void Sort_Mesto_Min( deque<Pass> & , int & );

void Sort_Mesto_Max( deque<Pass> & , int & );

void Sort_Nomer_Min( deque<Pass> & , int & );

void Sort_Nomer_Max( deque<Pass> & , int & );

void Prosm_Deque( deque<Pass> & , int &); 

void Udal_Elem_Nach( deque<Pass> & , int & );

void Udal_Elem_Kon( deque<Pass> & , int & );

void Udal_Deque( deque<Pass> & , int & );

int getN () { return n; }

char* getFamily_name()

{

char *family_nam = family_name;

return family_nam;

char* getName()

{

char *nam = name;

return nam;

}

char* getMiddle_name()

{

char *middle_nam = middle_name;

return middle_nam;

}

int getMesto() { return mesto; }

int getPrice () { return price; }

char* getClass()

{

char *klas = klass;

return klas;

}

virtual ~Pass ();

};

 

 

class Comfort_Class : virtual public Pass

{

public: 

Comfort_Class ();

~Comfort_Class ();

void Dobav_Comfort_Class(  deque<Pass> &pas, deque<Comfort_Class> &ob2 , int & , int & );

};

 

 

class Business_Class : virtual public Pass

{

public:

Business_Class ();

~Business_Class ();

void Dobav_Business_Class( deque<Pass> &pas, deque<Business_Class> &ob3 , int & , int & );

};

 

class Economy_Class : virtual public Pass

{

public:

Economy_Class ();

~Economy_Class ();

void Dobav_Economy_Class(  deque<Pass> &pas, deque<Economy_Class> &ob4 , int & , int & );

};

 

metody.h

#include "class.h"

#include "stdafx.h"

 

 

int Pass::q = 0;

 

Pass :: Pass ()

{

this->n = 0;

strcpy_s ( this->family_name, "" );

strcpy_s ( this->name, "" );

strcpy_s ( this->middle_name, "" );

this->mesto = 0;

this->price = 0;

strcpy_s ( this->klass, "" );

}

 

Pass :: Pass ( int n, char *family_nam, char *nam, char *middle_nam, int mest , int pric , char *klas )

{

this->n = n;

strcpy_s ( this->family_name, family_nam );

strcpy_s ( this->name, nam );

strcpy_s ( this->middle_name, middle_nam );

this->mesto = mest;

this->price = pric;

strcpy_s ( this->klass, klas );

}

 

Pass :: Pass ( const Pass & ob )

{

this->n = ob.n;

strcpy_s ( this->family_name, ob.family_name);

strcpy_s ( this->name, ob.name );

strcpy_s ( this->middle_name, ob.middle_name );

this->mesto = ob.mesto;

this->price = ob.price;

strcpy_s ( this->klass, ob.klass );

 

}

Pass :: ~Pass () {}

 

Pass & Pass :: operator = ( const Pass &ob )

{

if ( this != &ob )

{

this->n = ob.n;

strcpy_s ( this->family_name, ob.family_name);

strcpy_s ( this->name, ob.name );

strcpy_s ( this->middle_name, ob.middle_name );

this->mesto = ob.mesto;

this->price = ob.price;

strcpy_s ( this->klass, ob.klass );

}

return *this;

}

 

ostream &operator << ( ostream &output, const Pass &num  )

{

 

cout<<  "\nНомер пассажира___________";

cout.width(23);

cout.right;

cout.fill('_');

output <<num.n;

cout<<  "\nФамилия___________________";

cout.width(23);

cout.right;

output << num.family_name;

cout<<  "\nИмя_______________________";

cout.width(23);

cout.right;

output << num.name;

cout<<  "\nОтчество__________________";

cout.width(23);

cout.right;

output << num.middle_name; 

cout << "\nМесто_____________________";

cout.width(23);

cout.right;

output << num.mesto ;

cout << "\nЦена билета_______________";

cout.width(23);

cout.right;

output << num.price;

cout<<  "\nКласс обслуживания________";

cout.width(23);

cout.right;

output << num.klass;

cout << endl;

return output;

}

 

 

istream &operator >> ( istream &input, Pass &num )

{

 

while(1)

{

cout << "\nНомер пассажира: ";

input >> num.n;

try

{

int flags;

flags = cin.rdstate();

if(flags &ios::failbit)

{

 

throw exp_1("\nДолжны быть введены цифры");

 

}

else

break;

}

}

catch(exp_1 ob)

{

ob.show();

cin.clear();

cin.sync();

}

}

while(1)

{

cout << "\nФамилия: ";

try

{

int size;

input >> num.family_name;

size=strlen(num.family_name);

if(strpbrk(num.family_name,"1234567890!@#$%^&*()_+{}~`[]#№;:><.,'"))

{

throw exp_4("\nВведены недопустимые символы");

Информация о работе Создание базы данных пассажиров