Advertisement
venik2405

lab4_1

Mar 14th, 2021
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 12.86 KB | None | 0 0
  1. procedure TFormAddComp.SortArr();
  2. var
  3.     Left, Right, I: Integer;
  4. begin
  5.     Left := 0;
  6.     Right := Length(FormComps.ArrComp) - 1;
  7.     Repeat
  8.         for I := Left to Right - 1 do
  9.             if FormComps.ArrComp[I].Price > FormComps.ArrComp[I + 1].Price then
  10.             begin
  11.                 FormComps.Temp := FormComps.ArrComp[I];
  12.                 FormComps.ArrComp[I] := FormComps.ArrComp[I + 1];
  13.                 FormComps.ArrComp[I + 1] := FormComps.Temp;
  14.             end;
  15.         Dec(Right);
  16.         for I := Right downto Left + 1 do
  17.             if FormComps.ArrComp[I].Price < FormComps.ArrComp[I - 1].Price then
  18.             begin
  19.                 FormComps.Temp := FormComps.ArrComp[I];
  20.                 FormComps.ArrComp[I] := FormComps.ArrComp[I - 1];
  21.                 FormComps.ArrComp[I - 1] := FormComps.Temp;
  22.             end;
  23.         Inc(Left);
  24.     Until (Left >= Right);
  25. end;
  26.  
  27. procedure AddCompInArr();
  28. var
  29.     SizeArr: Integer;
  30. begin
  31.     SizeArr := Length(FormComps.ArrComp) + 1;
  32.     SetLength(FormComps.ArrComp, SizeArr);
  33.     FormComps.ArrComp[SizeArr - 1].NameComp := FormAddComp.EditNameOfComp.Text;
  34.     FormComps.ArrComp[SizeArr - 1].Manufacturer := FormAddComp.EditNameOfManufacturer.Text;
  35.     FormComps.ArrComp[SizeArr - 1].MainChar := FormAddComp.EditMainChar.Text;
  36.     FormComps.ArrComp[SizeArr - 1].Warranty :=
  37.       StrToFloat(FormAddComp.EditWarranty.Text);
  38.     FormComps.ArrComp[SizeArr - 1].Price :=
  39.       StrToFloat(FormAddComp.EditPrice.Text);
  40. end;
  41.  
  42. Procedure TFormAddComp.AddArrInStringGrid();
  43. var
  44.     Size, I: Integer;
  45. begin
  46.     Size := Length(FormComps.ArrComp);
  47.     FormComps.StringGrid1.RowCount := Size + 1;
  48.     if FormComps.StringGrid1.RowCount > 1 then
  49.         FormComps.StringGrid1.Cells[0, Size] := '   ' + IntToStr(Size);
  50.     for I := 1 to Size do
  51.     begin
  52.         FormComps.StringGrid1.Cells[1, I] := FormComps.ArrComp[I - 1].NameComp;
  53.         FormComps.StringGrid1.Cells[2, I] := FormComps.ArrComp[I - 1].Manufacturer;
  54.         FormComps.StringGrid1.Cells[3, I] := FormComps.ArrComp[I - 1].MainChar;
  55.         FormComps.StringGrid1.Cells[4, I] :=
  56.           FloatToStr(FormComps.ArrComp[I - 1].Warranty);
  57.         FormComps.StringGrid1.Cells[5, I] :=
  58.           FloatToStr(FormComps.ArrComp[I - 1].Price) + '$';
  59.     end;
  60. end;
  61.  
  62. procedure CorrectCompInArr();
  63. var
  64.     Line: Integer;
  65.     Warranty, Price: Double;
  66. begin
  67.     Warranty := StrToFloat(FormAddComp.EditWarranty.Text);
  68.     Price := StrToFloat(FormAddComp.EditPrice.Text);
  69.     Line := FormComps.StringGrid1.Row - 1;
  70.     if (Warranty < 101) and (Warranty > 1) and (Price < 9999) then
  71.     begin
  72.         FormComps.ArrComp[Line].NameComp := FormAddComp.EditNameOfComp.Text;
  73.         FormComps.ArrComp[Line].Manufacturer := FormAddComp.EditNameOfManufacturer.Text;
  74.         FormComps.ArrComp[Line].MainChar := FormAddComp.EditMainChar.Text;
  75.         FormComps.ArrComp[Line].Warranty := Warranty;
  76.         FormComps.ArrComp[Line].Price := Price;
  77.     end
  78.     else
  79.     begin
  80.         MessageDlg('Ошибка ввода. Повторите попытку.', mtError,
  81.           [mbOK], 0);
  82.     end;
  83.  
  84. end;
  85.  
  86. procedure TFormAddComp.ButtonEditCompClick(Sender: TObject);
  87. begin
  88.     CorrectCompInArr();
  89.     AddArrInStringGrid();
  90.     FormAddComp.Close;
  91.     FormComps.Enabled := True;
  92. end;
  93.  
  94. procedure TFormAddComp.ButtonCreateCompClick(Sender: TObject);
  95. var
  96.     Warranty, Price: Double;
  97.     IsCorrect: Boolean;
  98. begin
  99.     IsCorrect := true;
  100.     try
  101.         Warranty := StrToFloat(EditWarranty.Text);
  102.     except
  103.         MessageDlg('Ошибка ввода гарантии. Повторите попытку.', mtError,
  104.           [mbOK], 0);
  105.         IsCorrect := false;
  106.     end;
  107.     try
  108.         Price := StrToFloat(EditPrice.Text);
  109.     except
  110.         MessageDlg('Ошибка ввода цены. Повторите попытку.', mtError,
  111.           [mbOK], 0);
  112.         IsCorrect := false;
  113.     end;
  114.     if IsCorrect then
  115.     Begin
  116.         if (Warranty < 100) and (Warranty > 0) then
  117.         begin
  118.             if (Price < 100000) then
  119.             Begin
  120.                 AddCompInArr();
  121.                 AddArrInStringGrid();
  122.                 FormComps.NSaveFile.Enabled := True;
  123.                 FormComps.ButtonClean.Enabled := True;
  124.                 FormAddComp.Close;
  125.                 FormComps.Enabled := True;
  126.             End
  127.             else
  128.             begin
  129.                 MessageDlg('Ошибка ввода, цена не должна превышать 99999$.' + #10 +
  130.                      'Повторите попытку.', mtError, [mbOK], 0);
  131.                 EditPrice.Text := '';
  132.             end
  133.         end
  134.         else
  135.         begin
  136.             MessageDlg('Ошибка ввода, гарантия не должна превышать 99 лет. Повторите попытку.', mtError,
  137.               [mbOK], 0);
  138.             EditWarranty.Text := '';
  139.         end;
  140.     End;
  141. end;
  142.  
  143. procedure TFormAddComp.DeleteComp(Line: Integer);
  144. var
  145.     I, Size: Integer;
  146. begin
  147.     for I := Line to High(FormComps.ArrComp) do
  148.     begin
  149.         FormComps.Temp := FormComps.ArrComp[I];
  150.         FormComps.ArrComp[I] := FormComps.ArrComp[I - 1];
  151.         FormComps.ArrComp[I - 1] := FormComps.Temp;
  152.     end;
  153.     Size := Length(FormComps.ArrComp) - 1;
  154.     SetLength(FormComps.ArrComp, Size);
  155. end;
  156.  
  157. procedure TFormAddComp.ButtonDeleteClick(Sender: TObject);
  158. var
  159.     Line: Integer;
  160. begin
  161.     Line := FormComps.StringGrid1.Row;
  162.     if Line <> 0 then
  163.     begin
  164.         if MessageDlg('Вы действительно хотите удалить компонент номер ' +
  165.           IntToStr(Line), mtWarning, [mbYes, mbNo], 0) = mrYes then
  166.         begin
  167.             DeleteCOmp(Line);
  168.             FormAddComp.AddArrInStringGrid();
  169.             FormAddComp.Close;
  170.         end;
  171.     end;
  172.  
  173.     if FormComps.StringGrid1.RowCount = 1 then
  174.     begin
  175.         FormComps.ButtonClean.Enabled := False;
  176.         FormComps.NSaveFile.Enabled := False;
  177.     end;
  178. end;
  179.  
  180.  
  181. procedure TFormAddComp.EditMainCharKeyPress(Sender: TObject; var Key: Char);
  182. begin
  183.     if (Length(EditMainChar.Text) > 15) and not(Key = #8) then
  184.         Key := #0;
  185. end;
  186.  
  187.  
  188. procedure TFormAddComp.EditNameOfManufacturerKeyPress(Sender: TObject;
  189.   var Key: Char);
  190. begin
  191.     if (Length(EditNameOfManufacturer.Text) > 15) and not(Key = #8) then
  192.         Key := #0;
  193. end;
  194.  
  195.  
  196. procedure TFormAddComp.EditNameOfCompKeyPress(Sender: TObject; var Key: Char);
  197. begin
  198.     if (Length(EditNameOfComp.Text) > 15) and not(Key = #8) then
  199.         Key := #0;
  200. end;
  201.  
  202. procedure TFormAddComp.EditChange(Sender: TObject);
  203. begin
  204.     ButtonCreateComp.Enabled := (EditNameOfComp.Text <> '') and
  205.       (EditNameOfComp.Text <> '') and (EditMainChar.Text <> '') and
  206.       (EditNameOfManufacturer.Text <> '') and
  207.       (EditWarranty.Text <> '') and
  208.       (EditPrice.Text <> '');
  209. end;
  210.  
  211. procedure TFormAddComp.EditWarrantyKeyPress(Sender: TObject; var Key: Char);
  212. begin
  213.     if Key = '.' then
  214.         key := ',';
  215.     if not(Key in ['0' .. '9' ,',' ,#8]) then
  216.         Key := #0;
  217.     if (Length(EditWarranty.Text) > 2) and not(Key = #8) then
  218.         Key := #0;
  219. end;
  220.  
  221. procedure DeleteComp(Line: Integer);
  222. var
  223.     I, Size: Integer;
  224. begin
  225.     for I := Line to High(FormComps.ArrComp) do
  226.     begin
  227.         FormComps.Temp := FormComps.ArrComp[I];
  228.         FormComps.ArrComp[I] := FormComps.ArrComp[I - 1];
  229.         FormComps.ArrComp[I - 1] := FormComps.Temp;
  230.     end;
  231.     Size := Length(FormComps.ArrComp) - 1;
  232.     SetLength(FormComps.ArrComp, Size);
  233. end;
  234.  
  235. procedure TFormComps.ButtonCleanClick(Sender: TObject);
  236. var
  237.     Line: Integer;
  238. begin
  239.     with StringGrid1 do
  240.     begin
  241.         StringGrid1.RowCount := 0;
  242.         DeleteComp(Line);
  243.     end;
  244.     if StringGrid1.RowCount = 1 then
  245.     begin
  246.         ButtonClean.Enabled := False;
  247.         NSaveFile.Enabled := False;
  248.         SortButton.Enabled := false;
  249.     end;
  250.  
  251. end;
  252.  
  253. procedure TFormComps.ButtonCreateClick(Sender: TObject);
  254. begin
  255.     FormAddComp.ButtonCreateComp.Visible := True;
  256.     FormAddComp.ButtonEditComp.Visible := False;
  257.     FormAddComp.ButtonDelete.Visible := False;
  258.     FormAddComp.Show;
  259.     FormComps.Enabled := False;
  260.     FormComps.SortButton.Enabled := True;
  261. end;
  262.  
  263. procedure TFormComps.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  264. begin
  265.     case MessageDlg('Действительно хотите выйти?. Все данные будут утеряны',
  266.       mtWarning, [mbYes, mbNo], 0) of
  267.         mrNo:
  268.             begin
  269.                 CanClose := False;
  270.             end;
  271.         mrYes:
  272.             begin
  273.                 FormComps.StringGrid1.RowCount := 1;
  274.                 SetLength(FormComps.ArrComp, 0);
  275.                 FormMain.Enabled := True;
  276.             end;
  277.     else
  278.         CanClose := False;
  279.     end
  280. end;
  281.  
  282. procedure TFormComps.FormCreate(Sender: TObject);
  283. begin
  284.     StringGrid1.ColWidths[0] := 60;
  285.     StringGrid1.Cells[0, 0] := '  №';
  286.     StringGrid1.Cells[1, 0] := 'Название';
  287.     StringGrid1.Cells[2, 0] := 'Производитель  ';
  288.     StringGrid1.Cells[3, 0] := 'Характеристика';
  289.     StringGrid1.Cells[4, 0] := 'Гарантия';
  290.     StringGrid1.Cells[5, 0] := 'Цена';
  291. end;
  292.  
  293. procedure FillArr();
  294. var
  295.     Line: Integer;
  296. begin
  297.     Line := FormComps.StringGrid1.Row - 1;
  298.     FormAddComp.EditNameOfComp.Text := FormComps.ArrComp[Line].NameComp;
  299.     FormAddComp.EditNameOfManufacturer.Text := FormComps.ArrComp[Line].Manufacturer;
  300.     FormAddComp.EditMainChar.Text := FormComps.ArrComp[Line].MainChar;
  301.     FormAddComp.EditWarranty.Text :=
  302.       FloatToStr(FormComps.ArrComp[Line].Warranty);
  303.     FormAddComp.EditPrice.Text :=
  304.       FloatToStr(FormComps.ArrComp[Line].Price);
  305. end;
  306.  
  307. Function IsCorrectSizeFile(Address: String): Boolean;
  308. Var
  309.     IsCorrect: Boolean;
  310. Begin
  311.     AssignFile(FormComps.FileComp, Address);
  312.     Reset(FormComps.FileComp);
  313.     If (EoF(FormComps.FileComp)) Then
  314.     Begin
  315.         MessageDlg('Файл пустой', mtError, [mbOK], 0);
  316.         IsCorrect := False;
  317.     End
  318.     Else
  319.         IsCorrect := True;
  320.     Close(FormComps.FileComp);
  321.     IsCorrectSizeFile := IsCorrect;
  322. End;
  323.  
  324. Function IsFileExist(Address: String): Boolean;
  325. Var
  326.     IsCorrect: Boolean;
  327. Begin
  328.     If FileExists(Address) Then
  329.         IsCorrect := True
  330.     Else
  331.     Begin
  332.         IsCorrect := False;
  333.         MessageDlg('Указанного файла не существует', mtError, [mbOK], 0);
  334.     End;
  335.     IsFileExist := IsCorrect;
  336. End;
  337.  
  338. Procedure ReadFile(Address: String);
  339. var
  340.     Rows, I: Integer;
  341. Begin
  342.     Rows := 1;
  343.     I := 0;
  344.     FormComps.StringGrid1.RowCount := 1;
  345.     AssignFile(FormComps.FileComp, Address);
  346.     Reset(FormComps.FileComp);
  347.     while not(EoF(FormComps.FileComp)) do
  348.     begin
  349.         Inc(Rows);
  350.         FormComps.StringGrid1.RowCount := Rows;
  351.         FormComps.StringGrid1.Cells[0, Rows - 1] := '   ' + IntToStr(Rows - 1);
  352.         SetLength(FormComps.ArrComp, I + 1);
  353.         Read(FormComps.FileComp, FormComps.ArrComp[I]);
  354.         FormComps.StringGrid1.Cells[1, I + 1] := FormComps.ArrComp[I].NameComp;
  355.         FormComps.StringGrid1.Cells[2, I + 1] := FormComps.ArrComp[I].Manufacturer;
  356.         FormComps.StringGrid1.Cells[3, I + 1] := FormComps.ArrComp[I].MainChar;
  357.         FormComps.StringGrid1.Cells[4, I + 1] :=
  358.           FloatToStr(FormComps.ArrComp[I].Warranty);
  359.         FormComps.StringGrid1.Cells[5, I + 1] :=
  360.           FloatToStr(FormComps.ArrComp[I].Price) + '$';
  361.         Inc(I);
  362.     end;
  363.     CloseFile(FormComps.FileComp);
  364. End;
  365.  
  366. procedure TFormComps.N5Click(Sender: TObject);
  367. begin
  368.     ShowMessage
  369.       ('Данная программа показывает данные о комплектующих компьютера.'
  370.       + #10 + #10 + 'Кнопка "Очистить таблицу" удлалит данные всех строк.'
  371.       + #10 + 'Двойное нажатие на строку позволяет изменить выделенный компонент.'
  372.       + #10 + 'Кнопка "Убрать некоторые элементы" уберёт те элементы,'
  373.       + #10 + 'гарантия которых больше 2 лет,остальные будут отсортированы по цене.');
  374. end;
  375.  
  376. procedure TFormComps.NOpenFileClick(Sender: TObject);
  377. var
  378.     IsCorrect: Boolean;
  379. begin
  380.     repeat
  381.         IsCorrect := True;
  382.         if OpenDialog1.Execute then
  383.         begin
  384.             IsCorrect := IsFileExist(OpenDialog1.FileName) and
  385.               IsCorrectSizeFile(OpenDialog1.FileName);
  386.             if IsCorrect then
  387.             begin
  388.                 ReadFile(OpenDialog1.FileName);
  389.                 FormComps.ButtonClean.Enabled := True;
  390.                 FormComps.SortButton.Enabled := True;
  391.                 FormComps.NSaveFile.Enabled := True;
  392.                 FormComps.Show;
  393.                 FormMain.Enabled := False;
  394.             end;
  395.         end;
  396.     until IsCorrect;
  397. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement