Advertisement
Vanya_Shestakov

Untitled

Nov 20th, 2020
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 11.30 KB | None | 0 0
  1. unit MainMenu;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.Menus,
  8.   Vcl.Imaging.pngimage, Vcl.ExtCtrls, Vcl.ComCtrls;
  9.  
  10. type
  11.   TMainForm = class(TForm)
  12.     MainMenu: TMainMenu;
  13.     N1: TMenuItem;
  14.     N2: TMenuItem;
  15.     ViewRecordsButton: TBitBtn;
  16.     ChangeRecordsButton: TBitBtn;
  17.     Logo: TImage;
  18.     ConnectFileButton: TBitBtn;
  19.     CreateProofFileButton: TBitBtn;
  20.     Title: TLabel;
  21.     OpenDialog: TOpenDialog;
  22.     SaveDialog: TSaveDialog;
  23.     procedure N1Click(Sender: TObject);
  24.     procedure FormCreate(Sender: TObject);
  25.     procedure N2Click(Sender: TObject);
  26.     procedure ViewRecordsButtonClick(Sender: TObject);
  27.     procedure ChangeRecordsButtonClick(Sender: TObject);
  28.     procedure ConnectFileButtonClick(Sender: TObject);
  29.     function CheckFile(FileName: String): Boolean;
  30.     procedure CreateProofFileButtonClick(Sender: TObject);
  31.   private
  32.     { Private declarations }
  33.   public
  34.     { Public declarations }
  35.   end;
  36.  
  37. var
  38.   MainForm: TMainForm;
  39.   Path: String;
  40.  
  41. implementation
  42.  
  43. {$R *.dfm}
  44.  
  45. uses
  46.     CreateFile, ShowRecords, ChangeData;
  47.  
  48. procedure TMainForm.ChangeRecordsButtonClick(Sender: TObject);
  49. begin
  50.     ChangeDataForm.Show;
  51.     ChangeDataForm.N2Click(ChangeRecordsButton);
  52. end;
  53.  
  54. procedure TMainForm.ConnectFileButtonClick(Sender: TObject);
  55. var
  56.     IsCorrect: Boolean;
  57.     I: Integer;
  58. begin
  59.     if OpenDialog.Execute then
  60.     begin
  61.         IsCorrect := CheckFile(OpenDialog.FileName);
  62.         if IsCorrect then
  63.         begin
  64.             Path := OpenDialog.FileName;
  65.             ViewRecordsButton.Enabled := True;
  66.             ChangeRecordsButton.Enabled := True;
  67.         end;
  68.     end;
  69.  
  70. end;
  71.  
  72. procedure TMainForm.CreateProofFileButtonClick(Sender: TObject);
  73. var
  74.     FileOfRecords: File of Tpatient;
  75. begin
  76.     if SaveDialog.Execute then
  77.     begin
  78.         AssignFile(FileOfRecords, SaveDialog.FileName);
  79.         Rewrite(FileOfRecords);
  80.         Path := SaveDialog.FileName;
  81.         ViewRecordsButton.Enabled := True;
  82.         ChangeRecordsButton.Enabled := True;
  83.         CloseFile(FileOfRecords);
  84.     end;
  85. end;
  86.  
  87. function TMainForm.CheckFile(FileName: String): Boolean;
  88. var
  89.     FileOfRecords: file of Tpatient;
  90.     TempArr: array of Tpatient;
  91.     IsCorrect: Boolean;
  92.     I: Integer;
  93. begin
  94.     IsCorrect := True;
  95.     try
  96.         AssignFile(FileOfRecords, OpenDialog.FileName);
  97.         Reset(FileOfRecords);
  98.     except
  99.         MessageDlg('Ошибка доступа к файлу', mtError, [mbOK], 0);
  100.         IsCorrect := False;
  101.     end;
  102.  
  103.     if IsCorrect and (FileSize(FileOfRecords) = 0) then
  104.     begin
  105.         MessageDlg('Данный файл не является типизированным!', mtError, [mbOK], 0);
  106.         IsCorrect := False;
  107.     end;
  108.  
  109.     I := 0;
  110.     SetLength(TempArr, FileSize(FileOfRecords));
  111.     while not EOF(FileOfRecords) and IsCorrect do
  112.     begin
  113.         Read(FileOfRecords, TempArr[I]);
  114.         Inc(I);
  115.     end;
  116.  
  117.     I := 0;
  118.     while (I < High(TempArr)) and (IsCorrect) do
  119.     begin
  120.         if not CreateFileForm.CheckLine(TempArr[I].Surname) or
  121.            not CreateFileForm.CheckLine(TempArr[I].Diagnosis) or
  122.            not CreateFileForm.CheckLine(TempArr[I].City) or
  123.            not CreateFileForm.CheckAge(TempArr[I].Age) or
  124.            not CreateFileForm.CheckSex(TempArr[I].Sex) then
  125.         begin
  126.             MessageDlg('Некорректные данные в файле!', mtError, [mbOK], 0);
  127.             IsCorrect := False;
  128.         end;
  129.         Inc(I);
  130.     end;
  131.     CloseFile(FileOfRecords);
  132.     CheckFile := IsCorrect;
  133. end;
  134.  
  135. procedure TMainForm.FormCreate(Sender: TObject);
  136. begin
  137.     Title.Caption := 'Минская городская'+#13#10+'         клиника';
  138.     ViewRecordsButton.Caption := 'Просмотреть сведения'+#13#10+'о пациентах';
  139.  
  140.     Path := 'FileOfRecords.txt';
  141.     if not FileExists(Path) then
  142.     begin
  143.         ViewRecordsButton.Enabled := False;
  144.         ChangeRecordsButton.Enabled := False;
  145.     end;
  146.  
  147. end;
  148.  
  149. procedure TMainForm.N1Click(Sender: TObject);
  150. begin
  151.     MessageDlg('Данная программа предоставляет сведения о пациентах клиники' + #13#10 +
  152.     '- фамилия' + #13#10 + '- пол' + #13#10 + '- возраст' + #13#10 + '- диагноз' , mtInformation, [mbOK], 0);
  153. end;
  154.  
  155. procedure TMainForm.N2Click(Sender: TObject);
  156. begin
  157.     MessageDlg('Данная программа предоставляет сведения о пациентах клиники' + #13#10 +
  158.     '- фамилия' + #13#10 + '- пол' + #13#10 + '- возраст' + #13#10 + '- диагноз' , mtConfirmation, [mbOK], 0);
  159. end;
  160.  
  161. procedure TMainForm.ViewRecordsButtonClick(Sender: TObject);
  162. begin
  163.     ShowRecordsForm.Show;
  164. end;
  165.  
  166. end.
  167.  
  168.  
  169. unit CreateFile;
  170.  
  171. interface
  172.  
  173. uses
  174.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  175.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls, Vcl.Grids;
  176.  
  177. type
  178.     TPatient = packed record
  179.         Surname: string[20];
  180.         Sex: string[1];
  181.         Age: String[3];
  182.         Diagnosis: string[20];
  183.         City: string[20];
  184.     end;
  185.     TCreateFileForm = class(TForm)
  186.         MainMenu: TMainMenu;
  187.         N1: TMenuItem;
  188.         GenderSelection: TComboBox;
  189.         LabelInf1: TLabel;
  190.         LabelInf2: TLabel;
  191.         LabelInf3: TLabel;
  192.         LabelInf4: TLabel;
  193.         EditOfAge: TEdit;
  194.         LabelInf5: TLabel;
  195.         EditOfDiagnosis: TEdit;
  196.         AddButton: TButton;
  197.     LabelInf6: TLabel;
  198.     EditOfCity: TEdit;
  199.     EditOfSurname: TEdit;
  200.         procedure FormCreate(Sender: TObject);
  201.         procedure AddButtonClick(Sender: TObject);
  202.         function CheckLine(Line: string): Boolean;
  203.         procedure OutputToFile(Patient: Tpatient);
  204.         function CheckAge(Line: String): Boolean;
  205.         function CheckSex(Line: String): Boolean;
  206.   private
  207.     { Private declarations }
  208.   public
  209.     { Public declarations }
  210.   end;
  211.  
  212. var
  213.   CreateFileForm: TCreateFileForm;
  214.  
  215. implementation
  216.  
  217. {$R *.dfm}
  218.  
  219. uses
  220.     MainMenu, ChangeData;
  221. const
  222.     COL_OF_SURNAME = 0;
  223.     COL_OF_SEX = 1;
  224.     COL_OF_AGE = 2;
  225.     COL_OF_CITY = 3;
  226.     COL_OF_DIAGNOSIS = 4;
  227. var
  228.     FileOfRecords: File of TPatient;
  229.  
  230. procedure TCreateFileForm.AddButtonClick(Sender: TObject);
  231. var
  232.     Patient: TPatient;
  233.     IsCorrect: Boolean;
  234. begin
  235.     IsCorrect := CheckLine(EditOfSurname.Text) and CheckLine(EditOfDiagnosis.Text)
  236.                  and CheckLine(EditOfCity.Text) and CheckAge(EditOfAge.Text)
  237.                  and CheckSex(GenderSelection.Text);
  238.     if IsCorrect then
  239.     begin
  240.         Patient.Surname := EditOfSurname.Text;
  241.         Patient.Sex := GenderSelection.Text;
  242.         Patient.Age := EditOfAge.Text;
  243.         Patient.Diagnosis := EditOfDiagnosis.Text;
  244.         Patient.City := EditOfCity.Text;
  245.         OutputToFile(Patient);
  246.         ChangeDataForm.N2Click(AddButton);
  247.     end;
  248. end;
  249.  
  250. procedure TCreateFileForm.OutputToFile(Patient: Tpatient);
  251. var
  252.     IsCorrect: Boolean;
  253. begin
  254.     IsCorrect := True;
  255.     if FileExists(Path) then
  256.     begin
  257.         try
  258.             AssignFile(FileOfRecords, Path);
  259.             Reset(FileOfRecords);
  260.             Seek(FileOfRecords, FileSize(FileOfRecords));
  261.         except
  262.             IsCorrect := False;
  263.             MessageDlg('Ошибка доступа к файлу!', mtError, [mbOK], 0);
  264.         end;
  265.  
  266.         if IsCorrect then
  267.         begin
  268.             Write(FileOfRecords, Patient);
  269.             MessageDlg('Пациент занесён в базу', mtCustom, [mbOK], 0);
  270.             EditOfSurname.Clear;
  271.             EditOfAge.Clear;
  272.             EditOfCity.Clear;
  273.             EditOfDiagnosis.Clear;
  274.             GenderSelection.Text := '';
  275.             CloseFile(FileOfRecords);
  276.         end;
  277.     end
  278.     else
  279.     begin
  280.         MessageDlg('Файл с записями не найден! Подключите файл в главном меню в разделе: ' +
  281.         '"Подключить файл с данными"', mtError, [mbOK], 0);
  282.         EditOfSurname.Clear;
  283.         EditOfAge.Clear;
  284.         EditOfCity.Clear;
  285.         EditOfDiagnosis.Clear;
  286.         GenderSelection.Text := '';
  287.     end;
  288. end;
  289.  
  290. function TCreateFileForm.CheckSex(Line: String): Boolean;
  291. var
  292.     IsCorrect: Boolean;
  293. begin
  294.     IsCorrect := True;
  295.     if (Length(Line) <> 0) then
  296.     begin
  297.         if ((Line[1] <> 'М') and (Line[1] <> 'Ж')) then
  298.         begin
  299.             MessageDlg('Пол должен быть задан большой буквой русского алфавита (М/Ж)!', mtError, [mbOK], 0);
  300.             IsCorrect := False;
  301.         end;
  302.     end
  303.     else
  304.     begin
  305.         MessageDlg('Все данные о пациенте должны быть заполнены!', mtError, [mbOK], 0);
  306.         IsCorrect := False;
  307.     end;
  308.     CheckSex := IsCorrect;
  309. end;
  310.  
  311. function TCreateFileForm.CheckAge(Line: String): Boolean;
  312. var
  313.     IsCorrect: Boolean;
  314.     Age: Integer;
  315. begin
  316.     IsCorrect := True;
  317.     if Length(Line) <> 0 then
  318.     begin
  319.         try
  320.             Age := StrToInt(Line);
  321.         except
  322.             IsCorrect := False;
  323.             MessageDlg('Возраст пациента должен быть задан целым числом!', mtError, [mbOK], 0);
  324.         end;
  325.  
  326.         if IsCorrect and ((Age < 0) or (Age > 150)) then
  327.         begin
  328.             IsCorrect := False;
  329.             MessageDlg('Возраст пациента должен быть в промежутке от 0 до 150 лет!', mtError, [mbOK], 0);
  330.         end;
  331.     end
  332.     else
  333.     begin
  334.         MessageDlg('Все данные о пациенте должны быть заполнены!', mtError, [mbOK], 0);
  335.         IsCorrect := False;
  336.     end;
  337.     CheckAge := IsCorrect;
  338. end;
  339.  
  340. function TCreateFileForm.CheckLine(Line: string): Boolean;
  341. const
  342.     CHARACTERS_OF_RUSSIAN_LANGUAGE = ['а'..'я', ' ', '-'];
  343. var
  344.     IsCorrect: Boolean;
  345.     I: Integer;
  346. begin
  347.     IsCorrect := True;
  348.     Line := AnsiLowerCase(Line);
  349.     I := 1;
  350.  
  351.     if (Length(Line) > 0) and (Length(Line) <= 20) then
  352.     begin
  353.         while (IsCorrect) and (I < Length(Line)) do
  354.         begin
  355.             if not (AnsiString(Line)[I] in CHARACTERS_OF_RUSSIAN_LANGUAGE) then
  356.             begin
  357.                 IsCorrect := False;
  358.                 MessageDlg('Фамилия, диагноз и город пациента должны быть написаны ' +
  359.                 'с помощью символов русского алфавита', mtError, [mbOK], 0);
  360.             end;
  361.             Inc(I);
  362.         end;
  363.     end
  364.     else if Length(Line) = 0 then
  365.     begin
  366.         MessageDlg('Все данные о пациенте должны быть заполнены!', mtError, [mbOK], 0);
  367.         IsCorrect := False;
  368.     end
  369.     else
  370.     begin
  371.         MessageDlg('Фамилия, диагноз и город пациента должны иметь максимум 20 символов!', mtError, [mbOK], 0);
  372.         IsCorrect := False;
  373.     end;
  374.     CheckLine := IsCorrect;
  375. end;
  376.  
  377. procedure TCreateFileForm.FormCreate(Sender: TObject);
  378. begin
  379.     GenderSelection.Items.Add('М');
  380.     GenderSelection.Items.Add('Ж');
  381. end;
  382.  
  383. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement