Untitled
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.
Leave a Comment