Advertisement
ksyshshot

Lab.5.1

Mar 31st, 2023
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 11.08 KB | Source Code | 0 0
  1. implementation
  2.  
  3. {$R *.dfm}
  4.  
  5. uses UnitAbout, UnitError, UnitExit, UnitTask_5_1, UnitInstruction_5_1;
  6.  
  7. type
  8.     TPointer = ^TElement;
  9.     TElement = record
  10.         Data: Integer;
  11.         Next: TPointer;
  12.     end;
  13.  
  14. procedure AddElementInList(var Prev: TPointer; Data: Integer); stdcall; external 'Lab_5_1_Lib';
  15. function ChangeList(Start: TPointer): TPointer; stdcall; external 'Lab_5_1_Lib';
  16.  
  17. const
  18.     MAX_VALUE = 9999;
  19.     MIN_VALUE = -9999;
  20.     MIN_SIZE = 1;
  21.  
  22. var
  23.     Start: TPointer;
  24.     IsEmpty: Boolean;
  25.  
  26. procedure TFormMain.ButtonAddElementClick(Sender: TObject);
  27. var
  28.     Data, I: Integer;
  29.     IsCorrect: Boolean;
  30.     Error: String;
  31. begin
  32.     IsCorrect := true;
  33.     try
  34.         Data := StrToInt(EditAddNewElement.Text);
  35.         if (Data > MAX_VALUE) or (Data < MIN_VALUE) then
  36.         begin
  37.             IsCorrect := false;
  38.             Error := 'Значение элемента не входит в допустимый диапазон. ';
  39.         end;
  40.     except
  41.         IsCorrect := false;
  42.         Error := 'Некорректное значение элемента списка. ';
  43.     end;
  44.     if (IsCorrect) then
  45.     begin
  46.         EditAddNewElement.Text := '';
  47.         I := List.ColCount;
  48.         List.ColCount := List.ColCount + 1;
  49.         List.Cells[I, 0] := '№' + IntToStr(I);
  50.         List.Cells[I, 1] := IntToStr(Data);
  51.         ButtonMakeNewList.Enabled := true;
  52.         FormMain.Height := 299;
  53.         NSaveFile.Enabled := false;
  54.     end
  55.     else
  56.     begin
  57.         UnitError.FormError.LabelError.Caption := 'Ошибка! ' + Error;
  58.         UnitError.FormError.ShowModal();
  59.         UnitError.FormError.LabelError.Caption := '';
  60.     end;
  61. end;
  62.  
  63. procedure TFormMain.ButtonDeleteElementClick(Sender: TObject);
  64. var
  65.     IsCorrect: Boolean;
  66.     Number, Index, I: Integer;
  67.     Error: String;
  68. begin
  69.     IsCorrect := true;
  70.     try
  71.         Number := StrToInt(EditDeleteElement.Text);
  72.         if (Number > List.ColCount - 1) or (Number < MIN_SIZE) then
  73.         begin
  74.             IsCorrect := false;
  75.             Error := 'Не найдено элемента с таким номером. ';
  76.         end;
  77.         if (List.ColCount = 1) then
  78.         begin
  79.             IsCorrect := false;
  80.             Error := 'В списке нет элементов для удаления. ';
  81.         end;
  82.     except
  83.         IsCorrect := false;
  84.         Error := 'Некорректное значение номера элемента списка. ';
  85.     end;
  86.     if (IsCorrect) then
  87.     begin
  88.         EditDeleteElement.Text := '';
  89.         Index := Number + 1;
  90.         for I := Number to List.ColCount - 2 do
  91.         begin
  92.             List.Cells[I, 0] := '№' + IntToStr(I);
  93.             List.Cells[I, 1] := List.Cells[I + 1, 1];
  94.         end;
  95.         List.ColCount := List.ColCount - 1;
  96.         FormMain.Height := 299;
  97.         NSaveFile.Enabled := false;
  98.     end
  99.     else
  100.     begin
  101.         UnitError.FormError.LabelError.Caption := 'Ошибка! ' + Error;
  102.         UnitError.FormError.ShowModal();
  103.         UnitError.FormError.LabelError.Caption := '';
  104.     end;
  105. end;
  106.  
  107. procedure TFormMain.ButtonMakeNewListClick(Sender: TObject);
  108. var
  109.     Temp, NewStart: TPointer;
  110.     IsCorrect: Boolean;
  111.     Error: String;
  112.     Element, I: Integer;
  113. begin
  114.     IsCorrect := true;
  115.     I := 1;
  116.     New(Temp);
  117.     New(NewStart);
  118.     Temp := Start;
  119.     if (List.ColCount = 1) then
  120.     begin
  121.         IsCorrect := false;
  122.         Error := 'Недостаточно элементов в списке. ';
  123.     end;
  124.     while (IsCorrect) and (I < List.ColCount) do
  125.     begin
  126.         try
  127.             Element := StrToInt(List.Cells[I, 1]);
  128.             AddElementInList(Temp, Element);
  129.             Temp := Temp^.Next;
  130.         except
  131.             IsCorrect := false;
  132.             Error := 'Ошибка при добавлении элемента №' + IntToStr(I) + ' в список';
  133.         end;
  134.         Inc(I);
  135.     end;
  136.     if (IsCorrect) then
  137.     begin
  138.         NewList.ColCount := 1;
  139.         NewStart := ChangeList(Start);
  140.         Temp := NewStart^.Next;
  141.         I := 0;
  142.         while (Temp <> nil) do
  143.         begin
  144.             NewList.Cells[I, 0] := IntToStr(Temp^.Data);
  145.             NewList.ColCount := NewList.ColCount + 1;
  146.             Temp := Temp^.Next;
  147.             Inc(I);
  148.         end;
  149.         NewList.ColCount := NewList.ColCount - 1;
  150.         FormMain.Height := 357;
  151.         NSaveFile.Enabled := true;
  152.     end
  153.     else
  154.     begin
  155.         UnitError.FormError.LabelError.Caption := Error;
  156.         UnitError.FormError.ShowModal();
  157.         UnitError.FormError.LabelError.Caption := '';
  158.     end;
  159. end;
  160.  
  161. procedure TFormMain.ButtonShowTaskClick(Sender: TObject);
  162. begin
  163.     UnitTask_5_1.FormTask.ShowModal();
  164. end;
  165.  
  166. procedure TFormMain.EditAddNewElementChange(Sender: TObject);
  167. begin
  168.     if (EditAddNewElement.Text = '') or (EditAddNewElement.Text = '-') then
  169.         ButtonAddElement.Enabled := false
  170.     else
  171.         ButtonAddElement.Enabled := true;
  172. end;
  173.  
  174. procedure TFormMain.EditAddNewElementKeyPress(Sender: TObject; var Key: Char);
  175. begin
  176.     if not(Key in ['0'..'9', '-', #8, #13]) then
  177.         Key := #0;
  178.     if (Length(EditAddNewElement.Text) > 0) and (EditAddNewElement.Text[1] = '-') then
  179.         EditAddNewElement.MaxLength := 5
  180.     else
  181.         EditAddNewElement.MaxLength := 4;
  182.     if (Length(EditAddNewElement.Text) > 0) and (EditAddNewElement.Text[1] = '0') and not(Key in [#8, #13]) and not(Length(EditAddNewElement.SelText) > 0) then
  183.         Key := #0;
  184.     if (Length(EditAddNewElement.Text) > 0) and (Key = '-') and not(Length(EditAddNewElement.SelText) > 0) then
  185.         Key := #0;
  186.     if (Length(EditAddNewElement.Text) = 1) and (EditAddNewElement.Text[1] = '-') and (Key = '0') then
  187.         Key := #0;
  188.     if (Length(EditAddNewElement.Text) > 0) and (Key = #13) then
  189.         ButtonAddElementClick(Sender);
  190. end;
  191.  
  192. procedure TFormMain.EditDeleteElementChange(Sender: TObject);
  193. begin
  194.     if (EditDeleteElement.Text = '') or (EditDeleteElement.Text = '-') then
  195.         ButtonDeleteElement.Enabled := false
  196.     else
  197.         ButtonDeleteElement.Enabled := true;
  198. end;
  199.  
  200. procedure TFormMain.EditDeleteElementKeyPress(Sender: TObject; var Key: Char);
  201. begin
  202.     if not(Key in ['0'..'9', #8, #13]) then
  203.         Key := #0;
  204.     if (Length(EditDeleteElement.Text) > 0) and (EditDeleteElement.Text[1] = '0') and not(Key in [#8, #13]) and not(Length(EditDeleteElement.SelText) > 0) then
  205.         Key := #0;
  206.     if (Length(EditDeleteElement.Text) > 0) and (Key = #13) then
  207.         ButtonDeleteElementClick(Sender);
  208. end;
  209.  
  210. procedure TFormMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  211. var
  212.     Res: Integer;
  213. begin
  214.     Res := UnitExit.FormExit.ShowModal();
  215.     if Res = mrOk then
  216.         CanClose := true
  217.     else
  218.         CanClose := false;
  219. end;
  220.  
  221. procedure TFormMain.FormCreate(Sender: TObject);
  222. begin
  223.     New(Start);
  224.     Start.Next := nil;
  225.     List.ColWidths[0] := 80;
  226.     List.RowHeights[0] := 20;
  227.     List.Cells[0, 0] := '№ элемента';
  228.     List.Cells[0, 1] := 'Элемент';
  229.     FormMain.Height := 299;
  230. end;
  231.  
  232. procedure TFormMain.NAboutClick(Sender: TObject);
  233. begin
  234.     UnitAbout.FormAbout.ShowModal();
  235. end;
  236.  
  237. procedure TFormMain.NInstructionClick(Sender: TObject);
  238. begin
  239.     UnitInstruction_5_1.FormInstruction.ShowModal();
  240. end;
  241.  
  242. procedure TFormMain.NOpenFileClick(Sender: TObject);
  243. var
  244.     Path, Error, InputStr: String;
  245.     IsCorrect: Boolean;
  246.     F: TextFile;
  247.     Element, I: Integer;
  248. begin
  249.     IsCorrect := true;
  250.     Error := '';
  251.     if (OpenDialog.Execute) then
  252.     begin
  253.         List.ColCount := 1;
  254.         Path := OpenDialog.FileName;
  255.         AssignFile(F, Path);
  256.         try
  257.             Reset(F);
  258.             try
  259.                 while not(EoF(F)) and (IsCorrect) do
  260.                 begin
  261.                     Readln(F, InputStr);
  262.                     if not(InputStr.IsEmpty) then
  263.                     begin
  264.                         try
  265.                             Element := StrToInt(InputStr);
  266.                             if (Element < MIN_VALUE) or (Element > MAX_VALUE) then
  267.                             begin
  268.                                 IsCorrect := false;
  269.                                 Error := 'Найден элемент, не входящий в допустимый диапазон. ';
  270.                             end
  271.                             else
  272.                             begin
  273.                                 I := List.ColCount;
  274.                                 List.ColCount := List.ColCount + 1;
  275.                                 List.Cells[I, 0] := '№' + IntToStr(I);
  276.                                 List.Cells[I, 1] := IntToStr(Element);
  277.                             end;
  278.                         except
  279.                             IsCorrect := false;
  280.                             Error := 'Найден некорректный элемент списка. ';
  281.                         end;
  282.                     end;
  283.                 end;
  284.                 if (IsCorrect) then
  285.                 begin
  286.                     if (List.ColCount = 1) then
  287.                     begin
  288.                         IsCorrect := false;
  289.                         Error := 'В файле не найдено элементов. ';
  290.                         ButtonMakeNewList.Enabled := false;
  291.                     end
  292.                     else
  293.                     begin
  294.                         ButtonMakeNewList.Enabled := true;
  295.                         FormMain.Height := 299;
  296.                         NSaveFile.Enabled := false;
  297.                     end;
  298.                 end;
  299.             finally
  300.                 CloseFile(F);
  301.             end;
  302.         except
  303.             IsCorrect := false;
  304.             Error := 'Ошибка при считывании данных из файла. ';
  305.         end;
  306.     end;
  307.     if not(IsCorrect) then
  308.     begin
  309.         List.ColCount := 1;
  310.         UnitError.FormError.LabelError.Caption := 'Ошибка! ' + Error;
  311.         UnitError.FormError.ShowModal();
  312.         UnitError.FormError.LabelError.Caption := '';
  313.     end;
  314. end;
  315.  
  316. procedure TFormMain.NSaveFileClick(Sender: TObject);
  317. var
  318.     IsCorrect: Boolean;
  319.     Error, Path: String;
  320.     I: Integer;
  321.     F: TextFile;
  322. begin
  323.     IsCorrect := true;
  324.     Error := '';
  325.     if (SaveDialog.Execute) then
  326.     begin
  327.         Path := SaveDialog.FileName;
  328.         AssignFile(F, Path);
  329.         try
  330.             Rewrite(F);
  331.             I := 0;
  332.             try
  333.                 Writeln(F, 'Полученный список: ');
  334.                 while (I < NewList.ColCount) do
  335.                 begin
  336.                     Write(F, NewList.Cells[I, 0], ' ');
  337.                     Inc(I);
  338.                 end;
  339.             finally
  340.                 CloseFile(F);
  341.             end;
  342.         except
  343.             IsCorrect := false;
  344.             Error := 'Оишбка открытия файла для записи. ';
  345.         end;
  346.     end;
  347.     if not(IsCorrect) then
  348.     begin
  349.         UnitError.FormError.LabelError.Caption := 'Ошибка! ' + Error;
  350.         UnitError.FormError.ShowModal();
  351.         UnitError.FormError.LabelError.Caption := ''
  352.     end;
  353. end;
  354.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement