Untitled
unknown
plain_text
a year ago
7.2 kB
10
Indexable
unit MainForm;
interface
uses
System.SysUtils, System.Classes, Vcl.Forms, Vcl.Controls, Vcl.StdCtrls,
Vcl.Dialogs, Data.DB, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Phys.SQLite,
FireDAC.Phys.SQLiteDef, FireDAC.Stan.ExprFuncs, FireDAC.VCLUI.Wait,
FireDAC.Comp.Client, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
FireDAC.DApt, FireDAC.Comp.DataSet, Vcl.Grids, Vcl.DBGrids, Vcl.Menus,
Vcl.ExtCtrls, VclTee.TeeGDIPlus, VCLTee.TeEngine, VCLTee.Series,
VCLTee.TeeProcs, VCLTee.Chart, Vcl.ComCtrls;
type
TMainFrm = class(TForm)
FDConnection1: TFDConnection;
// Таблицы базы данных
tblFlights: TFDTable;
tblAircraft: TFDTable;
tblPassengers: TFDTable;
// Источники данных
dsFlights: TDataSource;
dsAircraft: TDataSource;
dsPassengers: TDataSource;
// Компоненты интерфейса
MainMenu1: TMainMenu;
FileMenu: TMenuItem;
EditMenu: TMenuItem;
ViewMenu: TMenuItem;
ExitItem: TMenuItem;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DBGrid3: TDBGrid;
Chart1: TChart;
BubbleSeries1: TBubbleSeries;
Panel1: TPanel;
FilterEdit: TEdit;
FilterBtn: TButton;
ClearFilterBtn: TButton;
RefreshBtn: TButton;
procedure FormCreate(Sender: TObject);
procedure FilterBtnClick(Sender: TObject);
procedure ClearFilterBtnClick(Sender: TObject);
procedure RefreshBtnClick(Sender: TObject);
procedure ExitItemClick(Sender: TObject);
private
procedure CreateDatabase;
procedure CreateTables;
procedure ConfigureComponents;
procedure UpdateChart;
public
{ Public declarations }
end;
var
MainFrm: TMainFrm;
implementation
{$R *.dfm}
procedure TMainFrm.FormCreate(Sender: TObject);
begin
CreateDatabase;
CreateTables;
ConfigureComponents;
UpdateChart;
end;
procedure TMainFrm.CreateDatabase;
begin
FDConnection1.Params.Clear;
FDConnection1.Params.Add('Database=sheremetyevo.db');
FDConnection1.Params.Add('DriverID=SQLite');
if not FileExists('sheremetyevo.db') then
begin
FDConnection1.ExecSQL(
'CREATE TABLE Aircraft (' +
'AircraftID INTEGER PRIMARY KEY AUTOINCREMENT,' +
'Model VARCHAR(50),' +
'Capacity INTEGER,' +
'ManufactureYear INTEGER)');
FDConnection1.ExecSQL(
'CREATE TABLE Flights (' +
'FlightID INTEGER PRIMARY KEY AUTOINCREMENT,' +
'FlightNumber VARCHAR(20),' +
'AircraftID INTEGER,' +
'DepartureTime DATETIME,' +
'ArrivalTime DATETIME,' +
'Destination VARCHAR(50),' +
'FOREIGN KEY (AircraftID) REFERENCES Aircraft(AircraftID))');
FDConnection1.ExecSQL(
'CREATE TABLE Passengers (' +
'PassengerID INTEGER PRIMARY KEY AUTOINCREMENT,' +
'FlightID INTEGER,' +
'FirstName VARCHAR(50),' +
'LastName VARCHAR(50),' +
'PassportNumber VARCHAR(20),' +
'SeatNumber VARCHAR(10),' +
'FOREIGN KEY (FlightID) REFERENCES Flights(FlightID))');
// Добавление тестовых данных
FDConnection1.ExecSQL(
'INSERT INTO Aircraft (Model, Capacity, ManufactureYear) VALUES ' +
'("Boeing 737", 180, 2015),' +
'("Airbus A320", 150, 2018),' +
'("Boeing 777", 350, 2016)');
FDConnection1.ExecSQL(
'INSERT INTO Flights (FlightNumber, AircraftID, DepartureTime, ArrivalTime, Destination) VALUES ' +
'("SU1845", 1, "2025-01-16 10:00", "2025-01-16 12:00", "Paris"),' +
'("SU2311", 2, "2025-01-16 11:30", "2025-01-16 14:30", "Berlin"),' +
'("SU1532", 3, "2025-01-16 13:00", "2025-01-16 19:00", "New York")');
end;
end;
procedure TMainFrm.CreateTables;
begin
tblAircraft.TableName := 'Aircraft';
tblAircraft.Active := True;
tblFlights.TableName := 'Flights';
tblFlights.Active := True;
tblPassengers.TableName := 'Passengers';
tblPassengers.Active := True;
end;
procedure TMainFrm.ConfigureComponents;
begin
// Настройка источников данных
dsAircraft.DataSet := tblAircraft;
dsFlights.DataSet := tblFlights;
dsPassengers.DataSet := tblPassengers;
// Настройка DBGrid
DBGrid1.DataSource := dsFlights;
DBGrid2.DataSource := dsAircraft;
DBGrid3.DataSource := dsPassengers;
// Настройка вкладок
TabSheet1.Caption := 'Рейсы';
TabSheet2.Caption := 'Воздушные суда';
TabSheet3.Caption := 'Пассажиры';
// Настройка меню
FileMenu.Caption := 'Файл';
EditMenu.Caption := 'Правка';
ViewMenu.Caption := 'Вид';
ExitItem.Caption := 'Выход';
// Настройка кнопок фильтрации
FilterBtn.Caption := 'Применить фильтр';
ClearFilterBtn.Caption := 'Очистить фильтр';
RefreshBtn.Caption := 'Обновить';
FilterEdit.TextHint := 'Введите текст для фильтрации...';
end;
procedure TMainFrm.FilterBtnClick(Sender: TObject);
var
FilterText: string;
begin
FilterText := FilterEdit.Text;
if FilterText <> '' then
begin
case PageControl1.ActivePageIndex of
0: tblFlights.Filter := Format('FlightNumber LIKE ''%%%s%%'' OR Destination LIKE ''%%%s%%''',
[FilterText, FilterText]);
1: tblAircraft.Filter := Format('Model LIKE ''%%%s%%''', [FilterText]);
2: tblPassengers.Filter := Format('FirstName LIKE ''%%%s%%'' OR LastName LIKE ''%%%s%%''',
[FilterText, FilterText]);
end;
case PageControl1.ActivePageIndex of
0: tblFlights.Filtered := True;
1: tblAircraft.Filtered := True;
2: tblPassengers.Filtered := True;
end;
end;
end;
procedure TMainFrm.ClearFilterBtnClick(Sender: TObject);
begin
FilterEdit.Clear;
tblFlights.Filtered := False;
tblAircraft.Filtered := False;
tblPassengers.Filtered := False;
end;
procedure TMainFrm.RefreshBtnClick(Sender: TObject);
begin
tblFlights.Refresh;
tblAircraft.Refresh;
tblPassengers.Refresh;
UpdateChart;
end;
procedure TMainFrm.UpdateChart;
begin
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add('Статистика рейсов по направлениям');
BubbleSeries1.Clear;
tblFlights.First;
while not tblFlights.Eof do
begin
BubbleSeries1.AddBubble(
tblFlights.FieldByName('FlightID').AsInteger,
tblFlights.FieldByName('PassengerCount').AsInteger,
Random(50) + 10,
tblFlights.FieldByName('FlightNumber').AsString
);
tblFlights.Next;
end;
end;
procedure TMainFrm.ExitItemClick(Sender: TObject);
begin
Close;
end;
end.Editor is loading...
Leave a Comment