Перспективы доработки

Российский Новый университет

 

Пояснительная записка

к курсовой работе

по предмету «Программирование»

на тему:

«База данных аэропорта».

 

 

Выполнил студент гр. 419

Факультета ИСиКТ

Аксинин Андрей Николаевич

Руководитель: Маслянкин В. И.

 

Курсовая работа допущена к защите: ______________________

 

 

Москва

2017 год

 

 

Содержание:

1. Введение. Цели и задачи курсовой работы.

2. Описание предметной области.

2.1. Постановка задачи

2.2. Объекты предметной области.

2.3. Необходимые ресурсы.

3. Разработка проекта.

3.1. Классы: свойства и методы.

3.2. Организация классов.

3.3. Интерфейс пользователя.

3.4. Хранение данных.

4. Реализация проекта.

5. Перспективы доработки программы.

 

Введение

Данная программа предназначена для применения на сервисах по поиску авиарейсов, для уточнения перелетной компании,модели самолета, города и страны пункта назначения, стоимости перелета.

Программа работает с базой авиарейсов, производит поиск, сортировку, редактирование, фильтрацию, удаление и добавление записей.

 

Описание предметной области

2.1. Постановка задачи

Основные функции программы:

1. Программа должна выполнять основные задачи:

2. Непосредственно, просмотр базы данных;

3. Добавлять, удалять и редактировать данные;

4. Сортировать и фильтровать данные;

5. Осуществлять различный тип поиска по базе;

6. Поддерживать хранение данных;

7. Открывать данные из файлов и сохранять данные в файл;

2.2. Объекты предметной области

 

В предлагаемом проекте базы данных должны присутствовать семь характеристик, для чего были выбраны соответствующие переменные и их тип, исходя из данных помещаемых в них.

 

1) Наименование компании, осуществляющей перелет. Наименование показывается и записывается с помощью текстового поля«EditCompany».

2) Наименование самолета, на котором осуществляется перелет. Наименование показывается и записывается с помощью текстового поля«EditAirbus».

3) Наименование страны, в которую осуществляется перелет. Наименование также показывается и записывается с помощью текстового поля«EditCountry».

4) Наименование города, куда осуществляется перелет. Наименование показывается и записывается с помощью текстового поля «EditCity».

5) Стоимость перелета. Наименование показывается и записывается с помощью текстового поля «EditCost». В дальнейшем, при использовании, преобразовывается в целочисленное тип.

6) Переменная «iCur»,указывающая на номер текущей записи. Целочисленный тип.

7) Переменная «iMax»,указывающая на количество записей. Целочисленный тип.

 

2.3. Необходимые ресурсы:

К исходному коду было подключено несколько заголовочных файлов стандартных библиотек с целью реализации необходимых функций, а также шаблонов классов и стандартных алгоритмов:

<Vcl.OleCtrls.hpp>, <System.Classes.hpp>, <Vcl.ComCtrls.hpp>, <Vcl.Controls.hpp>, <Vcl.Dialogs.hpp>, <Vcl.ImgList.hpp>, <Vcl.Menus.hpp>, <Vcl.StdCtrls.hpp>, <Vcl.ToolWin.hpp>, <vector>, <algorithm>, <functional>

 

Разработка проекта

3.1. Классы: поля и методы.

Класс является абстрактным типом данных, определяемым пользователем, и представляет собой модель реального объекта в виде данных и функций для работы с ними. Объектам рассматриваемой предметной области отвечает следующий класс:

structstaff {

 

       charcompany[20];

       char airbus[20];

       char country[20];

       char city[20];

       int cost;

 

       friend bool operator < (const staff& a, const staff& b) {

                   return a.cost < b.cost;

       }

       friend bool sortcomp(const staff& a, const staff& b) {

                   return strcmp(a.company, b.company) < 0;

       }

       friend bool sortair(const staff& a, const staff& b) {

                   return strcmp(a.airbus, b.airbus) < 0;

       }

       friend bool sortcountry(const staff& a, const staff& b) {

                   return strcmp(a.country, b.country) < 0;

       }

       friend bool sortcity(const staff& a, const staff& b) {

                   return strcmp(a.city, b.city) < 0;

       }

       friend bool operator == (const staff& a, const staff& b)

       {

                   return a.cost == b.cost;

       }

};

3.2. Организация классов

Записи образуют плоскую таблицу (реляционная модель данных). Соответствующая информация заносится в стандартный контейнер типа «вектор».

 

3.3. Интерфейс пользователя

 

(На скриншоте изображены управляющие кнопки и управляющая панель)

 

В самом верху программы расположено меню со вкладками «File»и «Sort». Во вкладке «File» три пункта: «OpenAs…» - открытие файла, «SaveAs…» - сохранение файла, «Exit» - выход из программы. Во вкладке «Sort» пять пунктов, которые отвечают за сортировку по данным, соответствующим названиям пунктов: «byКомпания», «byСамолет»,«byСтрана»,«byГород»,«byЦена».

Перед началом работы можно загрузить файл с базой данных. Для этого необходимо нажать на кнопку «OpenAs…» либо в панели управления, либо в меню, и выбрать нужный файл.

По кнопке «SaveAs…», которая есть как в меню, так и на панели, можно сохранить изменённую базу данных.

При нажатии на кнопку «Exit» приложение завершает работу.

С нажатием кнопки «Добавить» данные введенные в полях заносятся в базу данных.

По нажатию кнопки «Изменить» можно внести необходимые изменения в существующую текущую запись.

Кнопка «Удалить» удаляет существующую запись из базы данных.

Кнопка «Искать» в группе «По цене» осуществляет поиск данных по цене по заданному значению в соответствующем поле.

Кнопка «Сортировка» в группе «По цене» осуществляет сортировку по цене по возрастанию.

Панель управления, расположенная под управляющими кнопками, дублирует кнопки из меню и управляющие кнопки, а именно: «OpenAs…», «Добавить», «SaveAs…», «Удалить», «Exit».

В правом нижнем углу расположена кнопка перехода на вторую форму(страницу), где расположены поиск по вхождению и фильтрация.

 

(На скриншоте изображенавторая форма, на которой присутствуют управляющие элементы для поиска по вхождению и фильтрации)

 

В самом верху формы(страницы) расположено меню со вкладкой «File», где присутствует один пункт - «Exit», который осуществляет выход из программы

Верхняя группа «Поиск по вхождению» с переключателями отвечает за поиск по вхождению по определенному выбранному пункту, который ищет по введенному запросу в текстовом поле, расположенном под группой.

Под текстовым полем располагается список, куда выводятся результаты поиска по вхождению.

Еще ниже кнопка переход на первую форму(страницу), содержание которой описано выше.

Вторая группа «Фильтрация» отвечает за фильтрацию базы данных по запросу из текстового поля, расположенного под группой «Фильтрация цены». Результаты записываются в список под этими группами. Работает аналогично с группой «Поиск по вхождению».

Группа «Фильтрация цены» с переключателями «Меньше, чем…» и «Больше, чем…» отвечает за свойство фильтрации. При активном переключателе «Меньше, чем…» и «Цена» в группе «Фильтрация», в список будет выводиться стоимость билетов ниже, чем заданное значение в поле под группой «Фильтрация цены». Аналогично и с переключателем «Больше, чем…», где значения будут выводиться больше, чем заданные в поле.

 

3.4. Хранение данных

Данные хранятся в бинарном файле. Размер записи определяется автоматически.

 

Реализация проекта

Данный проект реализован на языке программирования С++ с использованием компилятора Embarcadero XE5 C++ Builder и представляет собой Windows приложение.

Код программы состоит из нескольких файлов:

- Project2.cbproj – файл проекта;

- Project2.res – ресурсы проекта;

- Project2.cpp – функция WinMain (точка входа);

- Unit1.dfm – ресурсы формы 1;

- Unit1.h – объявление класса формы 1;

- Unit1.cpp – реализация класса и основных операций на форме 1;

- Unit2.dfm – ресурсы формы 2;

- Unit2.h – заголовочный файл формы 2;

- Unit2.cpp – реализация класса и основных операций на форме 2;

 

Project1.cpp

//---------------------------------------------------------------------------

 

#include <vcl.h>

#pragma hdrstop

#include <tchar.h>

//---------------------------------------------------------------------------

USEFORM("Unit1.cpp", Form1);

USEFORM("Unit2.cpp", Form2);

//---------------------------------------------------------------------------

int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)

{

       try

       {

                   Application->Initialize();

                   Application->MainFormOnTaskBar = true;

                   Application->CreateForm(__classid(TForm1), &Form1);

                   Application->CreateForm(__classid(TForm2), &Form2);

                   Application->Run();

       }

       catch (Exception &exception)

       {

                   Application->ShowException(&exception);

       }

       catch (...)

       {

                   try

                   {

                              throw Exception("");

                   }

                   catch (Exception &exception)

                   {

                              Application->ShowException(&exception);

                   }

       }

       return 0;

}

//---------------------------------------------------------------------------

Unit1.dfm

object Form1: TForm1

Left = 0

Top = 0

BorderStyle = bsSingle

BorderWidth = 1

Caption = #1040#1101#1088#1086#1087#1086#1088#1090' [1/2]'

ClientHeight = 322

ClientWidth = 577

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'Tahoma'

Font.Style = []

Menu = MainMenu1

OldCreateOrder = False

Position = poDesigned

Visible = True

PixelsPerInch = 96

TextHeight = 13

object Label1: TLabel

Left = 76

Top = 20

Width = 121

Height = 17

AutoSize = False

Caption = #1050#1086#1084#1087#1072#1085#1080#1103

end

object Label2: TLabel

Left = 216

Top = 20

Width = 127

Height = 13

AutoSize = False

Caption = #1057#1072#1084#1086#1083#1077#1090

end

object Label3: TLabel

Left = 76

Top = 78

Width = 121

Height = 13

AutoSize = False

Caption = #1057#1090#1088#1072#1085#1072

end

object Label4: TLabel

Left = 216

Top = 78

Width = 127

Height = 13

AutoSize = False

Caption = #1043#1086#1088#1086#1076

end

object Label5: TLabel

Left = 76

Top = 132

Width = 121

Height = 13

AutoSize = False

Caption = #1062#1077#1085#1072

end

object LabelNum: TLabel

Left = 119

Top = 199

Width = 31

Height = 20

Alignment = taCenter

AutoSize = False

Caption = '0'

end

object Label7: TLabel

Left = 453

Top = 264

Width = 92

Height = 13

Caption = #1055#1077#1088#1077#1093#1086#1076' '#1085#1072' '#1089#1090#1088'. 2'

end

object EditCompany: TEdit

Left = 76

Top = 39

Width = 121

Height = 21

TabOrder = 0

end

object EditAirbus: TEdit

Left = 216

Top = 39

Width = 129

Height = 21

TabOrder = 1

end

object EditCountry: TEdit

Left = 76

Top = 97

Width = 121

Height = 21

TabOrder = 2

end

object EditCity: TEdit

Left = 216

Top = 97

Width = 129

Height = 21

TabOrder = 3

end

object EditCost: TEdit

Left = 76

Top = 151

Width = 121

Height = 21

TabOrder = 4

end

object ButtonAdd: TButton

Left = 214

Top = 132

Width = 129

Height = 25

Caption = #1044#1086#1073#1072#1074#1080#1090#1100

TabOrder = 5

OnClick = ButtonAddClick

end

object ButtonPrev: TButton

Left = 76

Top = 194

Width = 37

Height = 25

Caption = '<<'

TabOrder = 6

OnClick = ButtonPrevClick

end

object ButtonNext: TButton

Left = 156

Top = 194

Width = 41

Height = 25

Caption = '>>'

TabOrder = 7

OnClick = ButtonNextClick

end

object ButtonDelete: TButton

Left = 214

Top = 194

Width = 129

Height = 25

Caption = #1059#1076#1072#1083#1080#1090#1100

TabOrder = 8

OnClick = ButtonDeleteClick

end

object ButtonChange: TButton

Left = 214

Top = 163

Width = 129

Height = 25

Caption = #1048#1079#1084#1077#1085#1080#1090#1100

TabOrder = 9

OnClick = ButtonChangeClick

end

object ToolBar1: TToolBar

Left = 76

Top = 235

Width = 273

Height = 30

Align = alCustom

BorderWidth = 1

ButtonHeight = 25

ButtonWidth = 53

Caption = 'ToolBar1'

Color = clAppWorkSpace

Images = ImageList1

ParentColor = False

TabOrder = 10

object ToolButton1: TToolButton

Left = 0

Top = 0

Caption = 'ToolButton1'

ImageIndex = 0

OnClick = OpenAs1Click

end

object ToolButton2: TToolButton

Left = 53

Top = 0

Caption = 'ToolButton2'

ImageIndex = 2

OnClick = ButtonAddClick

end

object ToolButton5: TToolButton

Left = 106

Top = 0

Caption = 'ToolButton5'

ImageIndex = 1

OnClick = SaveAs1Click

end

object ToolButton3: TToolButton

Left = 159

Top = 0

Caption = 'ToolButton3'

ImageIndex = 3

OnClick = ButtonDeleteClick

end

object ToolButton4: TToolButton

Left = 212

Top = 0

Caption = 'ToolButton4'

ImageIndex = 4

OnClick = Exit1Click

end

end

object ButtonPgNext: TButton

Left = 470

Top = 283

Width = 75

Height = 25

Caption = '>>'

TabOrder = 11

OnClick = ButtonPgNextClick

end

object GroupBox1: TGroupBox

Left = 360

Top = 20

Width = 185

Height = 152

Caption = #1055#1086' '#1094#1077#1085#1077

TabOrder = 12

object Label6: TLabel

Left = 56

Top = -19

Width = 62

Height = 13

Caption = #1060#1080#1083#1100#1090#1088#1072#1094#1080#1103

end

object EditSearch: TEdit

Left = 32

Top = 36

Width = 121

Height = 21

TabOrder = 0

Text = '0'

end

object ButtonSearch: TButton

Left = 32

Top = 72

Width = 121

Height = 28

Caption = #1048#1089#1082#1072#1090#1100

TabOrder = 1

OnClick = ButtonSearchClick

end

object ButtonSort: TButton

Left = 32

Top = 106

Width = 121

Height = 28

Caption = #1057#1086#1088#1090#1080#1088#1086#1074#1082#1072' '

TabOrder = 2

WordWrap = True

  OnClick = ButtonSortClick

end

end

object MainMenu1: TMainMenu

Images = ImageList1

Left = 208

Top = 280

object File1: TMenuItem

Caption = 'File'

object OpenAs1: TMenuItem

   Caption = 'Open As...'

   ImageIndex = 0

   OnClick = OpenAs1Click

end

object SaveAs1: TMenuItem

   Caption = 'Save As...'

   ImageIndex = 1

   OnClick = SaveAs1Click

end

object N1: TMenuItem

   Caption = '-'

end

object Exit1: TMenuItem

   Caption = 'Exit'

   ImageIndex = 4

   OnClick = Exit1Click

end

end

object H1: TMenuItem

Caption = 'Sort'

object Sort1: TMenuItem

   Caption = 'by '#1050#1086#1084#1087#1072#1085#1080#1103

   OnClick = Sort1Click

end

object By1: TMenuItem

   Caption = 'by '#1057#1072#1084#1086#1083#1077#1090

   OnClick = By1Click

end

object by2: TMenuItem

   Caption = 'by '#1057#1090#1088#1072#1085#1072

   OnClick = by2Click

end

object by3: TMenuItem

   Caption = 'by '#1043#1086#1088#1086#1076

   OnClick = by3Click

end

object by4: TMenuItem

   Caption = 'by '#1062#1077#1085#1072

   OnClick = by4Click

end

end

end

object OpenDialog1: TOpenDialog

Left = 176

Top = 280

end

object SaveDialog1: TSaveDialog

Left = 144

Top = 280

end

object ImageList1: TImageList

Left = 312

Top = 280

Bitmap = {

Изображение}

end

end

Unit1.h

// ---------------------------------------------------------------------------

 

#ifndef Unit1H

#define Unit1H

// ---------------------------------------------------------------------------

 

#include <Vcl.OleCtrls.hpp>

#include <System.Classes.hpp>

#include <Vcl.ComCtrls.hpp>

#include <Vcl.Controls.hpp>

#include <Vcl.Dialogs.hpp>

#include <Vcl.ImgList.hpp>

#include <Vcl.Menus.hpp>

#include <Vcl.StdCtrls.hpp>

#include <Vcl.ToolWin.hpp>

#include <vector>

#include <algorithm>

#include <functional>

// ---------------------------------------------------------------------------

 

struct staff {

 

       char company[20];

       char airbus[20];

       char country[20];

       char city[20];

       int cost;

 

       friend bool operator < (const staff& a, const staff& b) {

                   return a.cost < b.cost;

       } // for sort by pay

 

       friend bool sortcomp(const staff& a, const staff& b) {

                   return strcmp(a.company, b.company) < 0;

       }

 

       friend bool sortair(const staff& a, const staff& b) {

                   return strcmp(a.airbus, b.airbus) < 0;

       }

 

       friend bool sortcountry(const staff& a, const staff& b) {

                   return strcmp(a.country, b.country) < 0;

       }

 

       friend bool sortcity(const staff& a, const staff& b) {

                   return strcmp(a.city, b.city) < 0;

       }

 

       friend bool operator == (const staff& a, const staff& b)

 

       {

                   return a.cost == b.cost;

       } // for search by pay

 

};

 

using namespace std;

extern vector<staff>crew;

extern int iMax, iCur;

 

class TForm1: public TForm {

__published: // IDE-managed Components

 

       TMainMenu *MainMenu1;

       TMenuItem *File1;

       TMenuItem *OpenAs1;

       TMenuItem *SaveAs1;

       TMenuItem *N1;

       TMenuItem *Exit1;

       TOpenDialog *OpenDialog1;

       TSaveDialog *SaveDialog1;

       TLabel *Label1;

       TEdit *EditCompany;

       TLabel *Label2;

       TEdit *EditAirbus;

       TLabel *Label3;

       TEdit *EditCountry;

       TEdit *EditCity;

       TLabel *Label4;

       TLabel *Label5;

       TEdit *EditCost;

       TLabel *LabelNum;

       TButton *ButtonAdd;

       TButton *ButtonPrev;

       TButton *ButtonNext;

       TButton *ButtonDelete;

       TButton *ButtonChange;

       TImageList *ImageList1;

       TToolBar *ToolBar1;

       TToolButton *ToolButton1;

       TToolButton *ToolButton2;

       TToolButton *ToolButton3;

       TToolButton *ToolButton4;

       TToolButton *ToolButton5;

       TButton *ButtonPgNext;

       TGroupBox *GroupBox1;

       TLabel *Label6;

       TEdit *EditSearch;

       TButton *ButtonSearch;

       TButton *ButtonSort;

       TMenuItem *H1;

       TMenuItem *Sort1;

       TMenuItem *By1;

       TMenuItem *by2;

       TMenuItem *by3;

       TMenuItem *by4;

       TLabel *Label7;

 

       void __fastcall Exit1Click(TObject *Sender);

       void __fastcall OpenAs1Click(TObject *Sender);

       void __fastcall SaveAs1Click(TObject *Sender);

       void __fastcall ButtonAddClick(TObject *Sender);

       void __fastcall ButtonPrevClick(TObject *Sender);

       void __fastcall ButtonNextClick(TObject *Sender);

       void __fastcall ButtonChangeClick(TObject *Sender);

       void __fastcall ButtonDeleteClick(TObject *Sender);

       void __fastcall ButtonPgNextClick(TObject *Sender);

       void __fastcall ButtonSearchClick(TObject *Sender);

       void __fastcall ButtonSortClick(TObject *Sender);

       void __fastcall by4Click(TObject *Sender);

       void __fastcall Sort1Click(TObject *Sender);

       void __fastcall By1Click(TObject *Sender);

       void __fastcall by2Click(TObject *Sender);

       void __fastcall by3Click(TObject *Sender);

 

private: // User declarations

                   public: // User declarations

       __fastcall TForm1(TComponent* Owner);

       void __fastcall ShowRecord();

};

 

// ---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

// ---------------------------------------------------------------------------

#endif

Unit1.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

#include "Unit1.h"

// ---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

 

vector<staff>crew;

int iMax = 0, iCur = 0;

 

// ---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner) {

}

 

// ---------------------------------------------------------------------------

void __fastcall TForm1::Exit1Click(TObject *Sender) {

       Form1->Close();

       Form2->Close();

}

 

// ---------------------------------------------------------------------------

void __fastcall TForm1::OpenAs1Click(TObject *Sender) {

       OpenDialog1->Execute();

 

       FILE *f = fopen(AnsiString(OpenDialog1->FileName).c_str(), "rb");

       if (f == 0) {

                   ShowMessage("Ошибка файла!");

                   return;

       }

 

       crew.clear();

 

       for (int i = 0; i < crew.max_size(); i++) {

                   staff s;

                   fread(&s, sizeof(staff), 1, f);

                   if (feof(f))

                              break;

                   crew.push_back(s);

       }

       fclose(f);

       iMax = crew.size();

       iCur = 0;

       ShowRecord();

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::SaveAs1Click(TObject *Sender) {

       SaveDialog1->Execute();

       FILE *f = fopen(AnsiString(SaveDialog1->FileName).c_str(), "wb");

       if (f)

                   fwrite(&crew[0], sizeof(staff), iMax, f);

       else

                   ShowMessage("Ошибка файла");

       fclose(f);

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::ButtonAddClick(TObject *Sender) {

       crew.push_back(staff());

       AnsiString C = EditCompany->Text;

       AnsiString A = EditAirbus->Text;

       AnsiString Co = EditCountry->Text;

       AnsiString Ci = EditCity->Text;

       AnsiString pr = EditCost->Text;

       strcpy(crew[iMax].company, ((AnsiString)EditCompany->Text).c_str());

       strcpy(crew[iMax].airbus, ((AnsiString)EditAirbus->Text).c_str());

       strcpy(crew[iMax].country, ((AnsiString)EditCountry->Text).c_str());

       strcpy(crew[iMax].city, ((AnsiString)EditCity->Text).c_str());

       crew[iMax].cost = EditCost->Text.ToIntDef(0);

       if (C.Length() == 0 || A.Length() == 0 || Co.Length() == 0 ||

                   Ci.Length() == 0 || pr.Length() == 0) {

                   ShowMessage("Введите значения!");

       }

       else {

                   ShowMessage("Запись добавлена!");

                   iCur = iMax;

                   iMax++;

                   LabelNum->Caption = IntToStr(iMax);

       }

 

}

 

// ---------------------------------------------------------------------------

void __fastcall TForm1::ShowRecord() {

       if (iMax == 0) {

                   EditCompany->Text = "";

                   EditAirbus->Text = "";

                   EditCountry->Text = "";

                   EditCity->Text = "";

                   EditCost->Text = "";

                   LabelNum->Caption = "0";

                   return;

       }

       EditCompany->Text = crew[iCur].company;

       EditAirbus->Text = crew[iCur].airbus;

       EditCountry->Text = crew[iCur].country;

       EditCity->Text = crew[iCur].city;

       EditCost->Text = IntToStr(crew[iCur].cost);

       LabelNum->Caption = IntToStr(iCur + 1);

 

}

 

// ---------------------------------------------------------------------------

void __fastcall TForm1::ButtonPrevClick(TObject *Sender) {

       if (iCur <= 0)

                   return;

       iCur--;

       ShowRecord();

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::ButtonNextClick(TObject *Sender) {

       if (iCur >= iMax - 1)

                   return;

       iCur++;

       ShowRecord();

}

 

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::ButtonChangeClick(TObject *Sender) {

       AnsiString C = EditCompany->Text;

       AnsiString A = EditAirbus->Text;

       AnsiString Co = EditCountry->Text;

       AnsiString Ci = EditCity->Text;

       AnsiString pr = EditCost->Text;

       if (C.Length() == 0 || A.Length() == 0 || Co.Length() == 0 ||

                   Ci.Length() == 0 || pr.Length() == 0) {

                   ShowMessage("Введите значения!");

       }

       else {

                   strcpy(crew[iCur].company, ((AnsiString)EditCompany->Text).c_str());

                   strcpy(crew[iCur].airbus, ((AnsiString)EditAirbus->Text).c_str());

                   strcpy(crew[iCur].country, ((AnsiString)EditCountry->Text).c_str());

                   strcpy(crew[iCur].city, ((AnsiString)EditCity->Text).c_str());

                   crew[iCur].cost = EditCost->Text.ToIntDef(0);

                   ShowMessage("Успешно изменено!");

       }

 

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::ButtonDeleteClick(TObject *Sender) {

       if (iMax == 0) {

                   ShowMessage("База пуста!");

                   return;

       }

 

       crew.erase(crew.begin() + iCur);

       iMax--;

       iCur--;

       ShowRecord();

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::ButtonPgNextClick(TObject *Sender) {

       Form2->Show();

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::ButtonSearchClick(TObject *Sender) {

       if (EditSearch->Text.ToIntDef(0) == 0) {

                   ShowMessage("Введите число!");

       }

       else {

                   try {

                              staff s;

                              vector<staff>::iterator p;

                              s.cost = EditSearch->Text.ToIntDef(0);

                              p = find(crew.begin(), crew.end(), s);

                              iCur = p - crew.begin();

                              if (crew[iCur].cost == 0) {

                                          ShowMessage("Ничего не найдено!");

                                          iCur = 0;

                              }

                              else {

                                          ShowRecord();

                              }

                   }

                   catch (...) {

                              ShowMessage("Записи отсутствуют");

                   };

       }

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::ButtonSortClick(TObject *Sender) {

       AnsiString C = EditCompany->Text;

       AnsiString A = EditAirbus->Text;

       AnsiString Co = EditCountry->Text;

       AnsiString Ci = EditCity->Text;

       AnsiString pr = EditCost->Text;

       if (C.Length() == 0 || A.Length() == 0 || Co.Length() == 0 ||

                   Ci.Length() == 0 || pr.Length() == 0) {

                   ShowMessage("Введите значения!");

       }

       else

                   sort(crew.begin(), crew.end());

       iCur = 0;

       ShowRecord();

}

 

// ---------------------------------------------------------------------------

void __fastcall TForm1::by4Click(TObject *Sender) {

       sort(crew.begin(), crew.end());

       iCur = 0;

       ShowRecord();

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::Sort1Click(TObject *Sender) {

       sort(crew.begin(), crew.end(), &sortcomp);

       iCur = 0;

       ShowRecord();

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm1::By1Click(TObject *Sender)

{

       sort(crew.begin(), crew.end(), &sortair);

       iCur = 0;

       ShowRecord();

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1::by2Click(TObject *Sender)

{

       sort(crew.begin(), crew.end(), &sortcountry);

       iCur = 0;

       ShowRecord();

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1::by3Click(TObject *Sender)

{

       sort(crew.begin(), crew.end(), &sortcity);

       iCur = 0;

       ShowRecord();

}

 

Unit2.dfm

object Form2: TForm2

Left = 0

Top = 0

Caption = #1040#1101#1088#1086#1087#1086#1088#1090' [2/2]'

ClientHeight = 323

ClientWidth = 564

Color = clBtnFace

Font.Charset = DEFAULT_CHARSET

Font.Color = clWindowText

Font.Height = -11

Font.Name = 'Tahoma'

Font.Style = []

Menu = MainMenu1

OldCreateOrder = False

PixelsPerInch = 96

TextHeight = 13

object Label1: TLabel

Left = 24

Top = 249

Width = 92

Height = 13

Caption = #1055#1077#1088#1077#1093#1086#1076' '#1085#1072' 1 '#1089#1090#1088'.'

end

object ButtonPgBack: TButton

Left = 24

Top = 268

Width = 75

Height = 25

Caption = '<<'

TabOrder = 0

OnClick = ButtonPgBackClick

end

object RadioGroup1: TRadioGroup

Left = 234

Top = 8

Width = 162

Height = 123

Caption = #1060#1080#1083#1100#1090#1088#1072#1094#1080#1103

Items.Strings = (

#1050#1086#1084#1087#1072#1085#1080#1103

#1057#1072#1084#1086#1083#1077#1090

#1057#1090#1088#1072#1085#1072

#1043#1086#1088#1086#1076

#1062#1077#1085#1072)

TabOrder = 1

OnClick = RadioGroup1Click

end

object EditFilter: TEdit

Left = 402

Top = 110

Width = 145

Height = 21

TabOrder = 2

end

object ListBox1: TListBox

Left = 280

Top = 137

Width = 267

Height = 102

ItemHeight = 13

TabOrder = 3

end

object RadioGroup2: TRadioGroup

Left = 402

Top = 8

Width = 145

Height = 87

Caption = #1060#1080#1083#1100#1090#1088#1072#1094#1080#1103' '#1094#1077#1085#1099

ItemIndex = 0

Items.Strings = (

#1052#1077#1085#1100#1096#1077', '#1095#1077#1084'...'

#1041#1086#1083#1100#1096#1077', '#1095#1077#1084'...')

TabOrder = 4

end

object RadioGroup3: TRadioGroup

Left = 24

Top = 8

Width = 185

Height = 105

Caption = #1055#1086#1080#1089#1082' '#1087#1086' '#1074#1093#1086#1078#1076#1077#1085#1080#1102

Items.Strings = (

#1050#1086#1084#1087#1072#1085#1080#1103

#1057#1072#1084#1086#1083#1077#1090

#1057#1090#1088#1072#1085#1072

#1043#1086#1088#1086#1076

#1062#1077#1085#1072)

TabOrder = 5

OnClick = RadioGroup3Click

end

object ListBox3: TListBox

Left = 24

Top = 146

Width = 241

Height = 93

ItemHeight = 13

TabOrder = 6

end

object EditSearchStr: TEdit

Left = 24

Top = 119

Width = 185

Height = 21

TabOrder = 7

end

object MainMenu1: TMainMenu

Images = ImageList1

Left = 455

Top = 273

object File1: TMenuItem

Caption = 'File'

object Exit1: TMenuItem

   Caption = 'Exit'

   ImageIndex = 4

   OnClick = Exit1Click

end

end

end

object OpenDialog1: TOpenDialog

Left = 383

Top = 273

end

object SaveDialog1: TSaveDialog

Left = 423

Top = 273

end

object ImageList1: TImageList

Left = 303

Top = 273

Bitmap = {

Изображение}

end

end

Unit2.h

//---------------------------------------------------------------------------

 

#ifndef Unit2H

#define Unit2H

//---------------------------------------------------------------------------

#include <System.Classes.hpp>

#include <Vcl.Controls.hpp>

#include <Vcl.StdCtrls.hpp>

#include <Vcl.Forms.hpp>

#include <Vcl.Dialogs.hpp>

#include <Vcl.ExtCtrls.hpp>

#include <Vcl.ImgList.hpp>

#include <Vcl.Menus.hpp>

#include <Vcl.ComCtrls.hpp>

#include <Vcl.ToolWin.hpp>

//---------------------------------------------------------------------------

class TForm2: public TForm

{

__published: // IDE-managed Components

       TButton *ButtonPgBack;

       TMainMenu *MainMenu1;

       TMenuItem *File1;

       TMenuItem *Exit1;

       TOpenDialog *OpenDialog1;

       TSaveDialog *SaveDialog1;

       TImageList *ImageList1;

       TRadioGroup *RadioGroup1;

       TEdit *EditFilter;

       TListBox *ListBox1;

       TRadioGroup *RadioGroup2;

       TRadioGroup *RadioGroup3;

       TListBox *ListBox3;

       TEdit *EditSearchStr;

       TLabel *Label1;

       void __fastcall ButtonPgBackClick(TObject *Sender);

       void __fastcall RadioGroup3Click(TObject *Sender);

       void __fastcall RadioGroup1Click(TObject *Sender);

       void __fastcall Exit1Click(TObject *Sender);

private:      // User declarations

public:        // User declarations

       __fastcall TForm2(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm2 *Form2;

//---------------------------------------------------------------------------

#endif

Unit2.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

// ---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

 

// ---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner): TForm(Owner) {

}

 

// ---------------------------------------------------------------------------

 

void __fastcall TForm2::ButtonPgBackClick(TObject *Sender) {

       Form1->Show();

Form2->Hide();

}

 

// ---------------------------------------------------------------------------

void __fastcall TForm2::RadioGroup3Click(TObject *Sender) {

       ListBox3->Items->Clear();

       iCur = -1;

       int a = 0;

       switch (RadioGroup3->ItemIndex) {

       case 0: {

                              for (int i = 0; i < iMax; i++) {

                                          if (strstr(crew[i].company,

                                                      AnsiString(EditSearchStr->Text).c_str())!= FALSE) {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                                      ListBox3->Items->Insert(a, Form1->EditCompany->Text + " " +

                                                                  Form1->EditAirbus->Text + " " +

                                                                  Form1->EditCountry->Text + " " + Form1->EditCity->Text +

                                                                  " " + Form1->EditCost->Text);

                                                      a++;

                                          }

                                          else {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                          }

                              }

                              break;

                   }

 

       case 1: {

                              for (int i = 0; i < iMax; i++) {

                                          if (strstr(crew[i].airbus,

                                                      AnsiString(EditSearchStr->Text).c_str())!= FALSE) {

                                                      iCur++;

                                                 Form1->ShowRecord();

                                                      ListBox3->Items->Insert(a, Form1->EditCompany->Text + " " +

                                                                  Form1->EditAirbus->Text + " " +

                                                                  Form1->EditCountry->Text + " " + Form1->EditCity->Text +

                                                                  " " + Form1->EditCost->Text);

                                                      a++;

                                          }

                                          else {

                                                 iCur++;

                                                      Form1->ShowRecord();

                                          }

                              }

                              break;

                   }

       case 2: {

                              for (int i = 0; i < iMax; i++) {

                                          if (strstr(crew[i].country,

                                                      AnsiString(EditSearchStr->Text).c_str())!= FALSE) {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                                      ListBox3->Items->Insert(a, Form1->EditCompany->Text + " " +

                                                                  Form1->EditAirbus->Text + " " +

                                                                  Form1->EditCountry->Text + " " + Form1->EditCity->Text +

                                                                  " " + Form1->EditCost->Text);

                                                      a++;

                                          }

                                          else {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                     }

                              }

                              break;

                   }

       case 3: {

                              for (int i = 0; i < iMax; i++) {

                                          if (strstr(crew[i].city,

                                                      AnsiString(EditSearchStr->Text).c_str())!= FALSE) {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                                      ListBox3->Items->Insert(a, Form1->EditCompany->Text + " " +

                                                                  Form1->EditAirbus->Text + " " +

                                                                  Form1->EditCountry->Text + " " + Form1->EditCity->Text +

                                                                  " " + Form1->EditCost->Text);

                                                      a++;

                                          }

                                          else {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                          }

                              }

                              break;

                   }

       case 4: {

                              try {

                                          for (int i = 0; i < iMax; i++) {

                                                      if (strstr(    AnsiString(crew[i].cost).c_str(),

                                                                  AnsiString(EditSearchStr->Text).c_str())!= FALSE) {

                                                                  iCur++;

                                                                  Form1->ShowRecord();

                                                                  ListBox3->Items->Insert(a,

                                                                             Form1->EditCompany->Text + " " +

                                                                             Form1->EditAirbus->Text + " " +

                                                                             Form1->EditCountry->Text + " " +

                                                                             Form1->EditCity->Text + " " +

                                                                             Form1->EditCost->Text);

                                                                  a++;

                                                      }

                                                      else {

                                                                  iCur++;

                                                                  Form1->ShowRecord();

                                                      }

 

                                          }

                              }

                              catch (...) {

                                     ShowMessage("ведите число!");

                              }

                              break;

                   }

       }

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm2::RadioGroup1Click(TObject *Sender) {

       ListBox1->Items->Clear();

       iCur = -1;

       int a = 0;

       switch (RadioGroup1->ItemIndex) {

       case 0: {

                              for (int i = 0; i < iMax; i++) {

                                          if (crew[i].company == EditFilter->Text) {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                                      ListBox1->Items->Insert(a, Form1->EditCompany->Text + " " +

                                                                  Form1->EditAirbus->Text + " " +

                                                                  Form1->EditCountry->Text + " " + Form1->EditCity->Text +

                                                                  " " + Form1->EditCost->Text);

                                                      a++;

                                          }

                                          else {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                          }

                              }

                              break;

                   }

 

       case 1: {

                              for (int i = 0; i < iMax; i++) {

                                          if (crew[i].airbus == EditFilter->Text) {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                                      ListBox1->Items->Insert(a, Form1->EditCompany->Text + " " +

                                                                  Form1->EditAirbus->Text + " " +

                                                                  Form1->EditCountry->Text + " " + Form1->EditCity->Text +

                                                                  " " + Form1->EditCost->Text);

                                                      a++;

                                          }

                                          else {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                          }

                              }

                              break;

                   }

       case 2: {

                              for (int i = 0; i < iMax; i++) {

                                          if (crew[i].country == EditFilter->Text) {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                                      ListBox1->Items->Insert(a, Form1->EditCompany->Text + " " +

                                                                  Form1->EditAirbus->Text + " " +

                                                                  Form1->EditCountry->Text + " " + Form1->EditCity->Text +

                                                                  " " + Form1->EditCost->Text);

                                                      a++;

                                          }

                                          else {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                          }

                              }

                              break;

                   }

       case 3: {

                              for (int i = 0; i < iMax; i++) {

                                          if (crew[i].city == EditFilter->Text) {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                                      ListBox1->Items->Insert(a, Form1->EditCompany->Text + " " +

                                                                  Form1->EditAirbus->Text + " " +

                                                                  Form1->EditCountry->Text + " " + Form1->EditCity->Text +

                                                                  " " + Form1->EditCost->Text);

                                                      a++;

                                          }

                                          else {

                                                      iCur++;

                                                      Form1->ShowRecord();

                                          }

                              }

                              break;

                   }

       case 4: {

                              try {

                                          for (int i = 0; i < iMax; i++) {

                                                 switch (RadioGroup2->ItemIndex) {

                                                      case 0: {

                                                                             if (crew[i].cost < EditFilter->Text) {

                                                                                         iCur++;

                                                                                         Form1->ShowRecord();

                                                                                         ListBox1->Items->Insert(a,

                                                                                                     Form1->EditCompany->Text + " " +

                                                                                                     Form1->EditAirbus->Text + " " +

                                                                                                     Form1->EditCountry->Text + " " +

                                                                                                     Form1->EditCity->Text + " " +

                                                                                                     Form1->EditCost->Text);

                                                                                         a++;

                                                                             }

                                                                             else {

                                                                                         iCur++;

                                                                                         Form1->ShowRecord();

                                                                             }

                                                                             break;

                                                                  }

                                                      case 1: {

                                                                             if (crew[i].cost > EditFilter->Text) {

                                                                                         iCur++;

                                                                                         Form1->ShowRecord();

                                                                                         ListBox1->Items->Insert(a,

                                                                                                     Form1->EditCompany->Text + " " +

                                                                                                     Form1->EditAirbus->Text + " " +

                                                                                                     Form1->EditCountry->Text + " " +

                                                                                                     Form1->EditCity->Text + " " +

                                                                                                     Form1->EditCost->Text);

                                                                                         a++;

                                                                             }

                                                                             else {

                                                                                         iCur++;

                                                                                         Form1->ShowRecord();

                                                                             }

                                                                             break;

                                                                  }

                                                      }

                                          }

                                          break;

                              }

                              catch (...) {

                                          ShowMessage("ведите число!");

                              }

                   }

 

       }

}

// ---------------------------------------------------------------------------

 

void __fastcall TForm2::Exit1Click(TObject *Sender) {

       Form1->Close();

       Form2->Close();

}

 

 

Перспективы доработки

В дальнейшем возможна доработка алгоритмов сортировки, поиска. Возможно добавление новых параметров в базу путем модернизации класса и его функций, а также улучшение и упрощение интерфейса программы.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: