Российский Новый университет
Пояснительная записка
к курсовой работе
по предмету «Программирование»
на тему:
«База данных аэропорта».
Выполнил студент гр. 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();
}
Перспективы доработки
В дальнейшем возможна доработка алгоритмов сортировки, поиска. Возможно добавление новых параметров в базу путем модернизации класса и его функций, а также улучшение и упрощение интерфейса программы.