Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchyot_praktika_1.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
750.49 Кб
Скачать

Interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, ExtCtrls, THardwareDef, TStoreDef, FileWork, StdCtrls,

Globals, DiagramForm, PlotForm, EditForm;

type

TfrmMain = class(TForm)

paView: TPanel;

sgrView: TStringGrid;

paControls: TPanel;

btnAdd: TButton;

btnEdit: TButton;

btnDelete: TButton;

btnSave: TButton;

paMaxPrice: TPanel;

laedMaxPrice: TLabeledEdit;

btnSelectByPrice: TButton;

btnRefresh: TButton;

paMemory: TPanel;

laedMinMem: TLabeledEdit;

btnSelectByMem: TButton;

laedMinHard: TLabeledEdit;

btnGraph: TButton;

btnExit: TButton;

procedure FormCreate(Sender: TObject);

procedure btnSaveClick(Sender: TObject);

procedure btnDeleteClick(Sender: TObject);

procedure btnAddClick(Sender: TObject);

procedure btnEditClick(Sender: TObject);

procedure btnSelectByPriceClick(Sender: TObject);

procedure btnRefreshClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure btnSelectByMemClick(Sender: TObject);

procedure btnExitClick(Sender: TObject);

procedure btnGraphClick(Sender: TObject);

private

procedure InitDatabase;

procedure Save;

procedure InitGrid;

procedure FillGrid(base: TStore);

function SelectByPrice(base: TStore; maxprice:real): TStore;

function SelectByMem(base: TStore; minmem:integer): TStore;

function SelectByHard(base: TStore; minhard:integer): TStore;

public

{ Public declarations }

end;

var

frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.InitDatabase;

begin

try

ReadFile('Store.dat', dbase);

except

dbase := TStore.Create;

end;

end;

procedure TfrmMain.Save;

begin

WriteFile('Store.dat', dbase);

end;

procedure TfrmMain.InitGrid;

var

i: integer;

begin

with sgrView do

begin

RowCount := 2;

for i:= 0 to ColCount - 1 do

cells[i,1] := '';

end;

end;

procedure TfrmMain.FillGrid(base: TStore);

var

i: integer;

begin

if not (dbase.GetElement(0) = nil) then

begin

with sgrView do

begin

InitGrid;

for i := 0 to base.GetMaxIndex do

begin

cells[0,i+1] := IntToStr(i+1);

cells[1,i+1] := base.GetElement(i).CPU;

cells[2,i+1] := IntToStr(base.GetElement(i).Memory);

cells[3,i+1] := IntToStr(base.GetElement(i).HDD);

cells[4,i+1] := FloatToStr(base.GetElement(i).Price);

RowCount := RowCount + 1;

end;

if (RowCount>2) then RowCount := RowCount - 1;

end;

end;

end;

function TfrmMain.SelectByPrice(base: TStore; maxprice: real): TStore;

var

i: integer;

hw: THardware;

begin

result := TStore.Create;

hw := THardware.Create;

for i := 0 to base.GetMaxIndex do

begin

hw := base.GetElement(i);

if (maxprice >= hw.Price) then

result.Add(hw);

end;

end;

function TfrmMain.SelectByMem(base: TStore; minmem: integer): TStore;

var

i: integer;

hw: THardware;

begin

result := TStore.Create;

hw := THardware.Create;

for i := 0 to base.GetMaxIndex do

begin

hw := base.GetElement(i);

if (minmem <= hw.Memory) then

result.Add(hw);

end;

end;

function TfrmMain.SelectByHard(base: TStore; minhard: integer): TStore;

var

i: integer;

hw: THardware;

begin

result := TStore.Create;

hw := THardware.Create;

for i := 0 to base.GetMaxIndex do

begin

hw := base.GetElement(i);

if (minhard <= hw.HDD) then

result.Add(hw);

end;

end;

procedure TfrmMain.FormCreate(Sender: TObject);

begin

InitDatabase;

with sgrView do

begin

cells[0,0] := '№п/п';

cells[1,0] := 'Тип процессора';

cells[2,0] := 'Память (Мб)';

cells[3,0] := 'Жёсткий диск (Гб)';

cells[4,0] := 'Цена (руб)';

end;

FillGrid(dbase);

end;

procedure TfrmMain.btnSaveClick(Sender: TObject);

begin

Save;

end;

procedure TfrmMain.btnDeleteClick(Sender: TObject);

var

btn: integer;

begin

btn := MessageDlg('Удалить выделенную запись?', mtConfirmation,

[mbYes, mbNo], 0);

if btn = mrYes then

begin

dbase.Delete(StrToInt(sgrView.cells[0,sgrView.Row])-1);

FillGrid(dbase);

end;

end;

procedure TfrmMain.btnAddClick(Sender: TObject);

var

mr: integer;

hw: THardware;

begin

hw := THardware.Create('',0,0,0);

frmEdit := TfrmEdit.Create(frmMain, -1, hw);

mr := frmEdit.ShowModal;

FillGrid(dbase);

end;

procedure TfrmMain.btnEditClick(Sender: TObject);

var

mr: integer;

hw: THardware;

err: boolean;

begin

with sgrView do

hw := THardware.Create(dbase.GetElement(Row-1));

frmEdit := TfrmEdit.Create(frmMain, sgrView.Row-1, hw);

mr := frmEdit.ShowModal;

Save;

dbase.Destroy(err);

InitDatabase;

FillGrid(dbase);

end;

procedure TfrmMain.btnSelectByPriceClick(Sender: TObject);

var

mprice: real;

selection: TStore;

begin

try

mprice := StrToFloat(laedMaxPrice.Text);

selection := TStore.Create();

selection := SelectByPrice(dbase, mprice);

FillGrid(selection);

except

ShowMessage('Введены некорректные данные!');

end;

end;

procedure TfrmMain.btnRefreshClick(Sender: TObject);

begin

FillGrid(dbase);

end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);

begin

try

Save;

except

end;

end;

procedure TfrmMain.btnSelectByMemClick(Sender: TObject);

var

mmem, mhard: integer;

selection: TStore;

begin

try

mmem := StrToInt(laedMinMem.Text);

selection := TStore.Create();

selection := SelectByMem(dbase, mmem);

if not (laedMinHard.Text = '') then

begin

mhard := StrToInt(laedMinHard.Text);

selection := SelectByHard(selection, mhard);

end;

FillGrid(selection);

except

ShowMessage('Введены некорректные данные!');

end;

end;

procedure TfrmMain.btnExitClick(Sender: TObject);

begin

frmMain.Close;

end;

procedure TfrmMain.btnGraphClick(Sender: TObject);

begin

frmDiagram.Show;

frmPlot.Show;

end;

end.

Результаты тестирования:

Вывод:

Для приведённого выше набора данных программа выполняется корректно на всех этапах.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]