diff --git a/project/ProjectTourAgency/Forms/FormClients.Designer.cs b/project/ProjectTourAgency/Forms/FormClients.Designer.cs
new file mode 100644
index 0000000..28faf41
--- /dev/null
+++ b/project/ProjectTourAgency/Forms/FormClients.Designer.cs
@@ -0,0 +1,166 @@
+namespace ProjectTourAgency.Forms
+{
+ partial class FormClients
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ labelName = new Label();
+ textBoxName = new TextBox();
+ labelBirthDate = new Label();
+ textBoxNumber = new TextBox();
+ labelNumber = new Label();
+ dateTimePickerBirth = new DateTimePicker();
+ labelSocialStatus = new Label();
+ buttonSave = new Button();
+ buttonCancel = new Button();
+ numericUpDownSocialStatus = new NumericUpDown();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownSocialStatus).BeginInit();
+ SuspendLayout();
+ //
+ // labelName
+ //
+ labelName.AutoSize = true;
+ labelName.Location = new Point(12, 9);
+ labelName.Name = "labelName";
+ labelName.Size = new Size(75, 15);
+ labelName.TabIndex = 0;
+ labelName.Text = "Полное имя";
+ //
+ // textBoxName
+ //
+ textBoxName.Location = new Point(156, 6);
+ textBoxName.Name = "textBoxName";
+ textBoxName.Size = new Size(100, 23);
+ textBoxName.TabIndex = 1;
+ //
+ // labelBirthDate
+ //
+ labelBirthDate.AutoSize = true;
+ labelBirthDate.Location = new Point(12, 64);
+ labelBirthDate.Name = "labelBirthDate";
+ labelBirthDate.Size = new Size(90, 15);
+ labelBirthDate.TabIndex = 2;
+ labelBirthDate.Text = "Дата рождения";
+ //
+ // textBoxNumber
+ //
+ textBoxNumber.Location = new Point(156, 116);
+ textBoxNumber.Name = "textBoxNumber";
+ textBoxNumber.Size = new Size(100, 23);
+ textBoxNumber.TabIndex = 5;
+ textBoxNumber.Text = "+7";
+ //
+ // labelNumber
+ //
+ labelNumber.AutoSize = true;
+ labelNumber.Location = new Point(12, 119);
+ labelNumber.Name = "labelNumber";
+ labelNumber.Size = new Size(101, 15);
+ labelNumber.TabIndex = 4;
+ labelNumber.Text = "Номер телефона";
+ //
+ // dateTimePickerBirth
+ //
+ dateTimePickerBirth.Location = new Point(156, 58);
+ dateTimePickerBirth.Name = "dateTimePickerBirth";
+ dateTimePickerBirth.Size = new Size(200, 23);
+ dateTimePickerBirth.TabIndex = 6;
+ //
+ // labelSocialStatus
+ //
+ labelSocialStatus.AutoSize = true;
+ labelSocialStatus.Location = new Point(12, 187);
+ labelSocialStatus.Name = "labelSocialStatus";
+ labelSocialStatus.Size = new Size(131, 15);
+ labelSocialStatus.TabIndex = 7;
+ labelSocialStatus.Text = "Основания для скидки";
+ //
+ // buttonSave
+ //
+ buttonSave.Location = new Point(38, 272);
+ buttonSave.Name = "buttonSave";
+ buttonSave.Size = new Size(75, 23);
+ buttonSave.TabIndex = 9;
+ buttonSave.Text = "Сохранить";
+ buttonSave.UseVisualStyleBackColor = true;
+ buttonSave.Click += buttonSave_Click;
+ //
+ // buttonCancel
+ //
+ buttonCancel.Location = new Point(201, 272);
+ buttonCancel.Name = "buttonCancel";
+ buttonCancel.Size = new Size(75, 23);
+ buttonCancel.TabIndex = 10;
+ buttonCancel.Text = "Отменить";
+ buttonCancel.UseVisualStyleBackColor = true;
+ buttonCancel.Click += buttonCancel_Click;
+ //
+ // numericUpDownSocialStatus
+ //
+ numericUpDownSocialStatus.Location = new Point(156, 187);
+ numericUpDownSocialStatus.Maximum = new decimal(new int[] { 3, 0, 0, 0 });
+ numericUpDownSocialStatus.Name = "numericUpDownSocialStatus";
+ numericUpDownSocialStatus.Size = new Size(120, 23);
+ numericUpDownSocialStatus.TabIndex = 11;
+ //
+ // FormClients
+ //
+ AutoScaleDimensions = new SizeF(7F, 15F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(369, 314);
+ Controls.Add(numericUpDownSocialStatus);
+ Controls.Add(buttonCancel);
+ Controls.Add(buttonSave);
+ Controls.Add(labelSocialStatus);
+ Controls.Add(dateTimePickerBirth);
+ Controls.Add(textBoxNumber);
+ Controls.Add(labelNumber);
+ Controls.Add(labelBirthDate);
+ Controls.Add(textBoxName);
+ Controls.Add(labelName);
+ Name = "FormClients";
+ StartPosition = FormStartPosition.CenterScreen;
+ Text = "Клиенты";
+ ((System.ComponentModel.ISupportInitialize)numericUpDownSocialStatus).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Label labelName;
+ private TextBox textBoxName;
+ private Label labelBirthDate;
+ private TextBox textBoxNumber;
+ private Label labelNumber;
+ private DateTimePicker dateTimePickerBirth;
+ private Label labelSocialStatus;
+ private Button buttonSave;
+ private Button buttonCancel;
+ private NumericUpDown numericUpDownSocialStatus;
+ }
+}
\ No newline at end of file
diff --git a/project/ProjectTourAgency/Forms/FormClients.cs b/project/ProjectTourAgency/Forms/FormClients.cs
new file mode 100644
index 0000000..44ec741
--- /dev/null
+++ b/project/ProjectTourAgency/Forms/FormClients.cs
@@ -0,0 +1,84 @@
+using ProjectTourAgency.Enities;
+using ProjectTourAgency.Repositories;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ProjectTourAgency.Forms;
+
+public partial class FormClients : Form
+{
+ private readonly IClientRepository _clientRepository;
+
+ private int? _clientId;
+
+ public int Id
+ {
+ set
+ {
+ try
+ {
+ var client = _clientRepository.ReadClientById(value);
+ if (client == null)
+ {
+ throw new InvalidDataException(nameof(client));
+ }
+ textBoxName.Text = client.FullName;
+ textBoxNumber.Text = client.PhoneNumber;
+ numericUpDownSocialStatus.Value = (decimal)client.ClientSocialStatus;
+ dateTimePickerBirth.Value = client.BirthDate;
+
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при получении данных",
+ MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ }
+ public FormClients(IClientRepository clientRepository)
+ {
+ InitializeComponent();
+ _clientRepository = clientRepository ??
+ throw new ArgumentNullException(nameof(clientRepository));
+ }
+
+ private void buttonSave_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if(string.IsNullOrWhiteSpace(textBoxName.Text) ||
+ string.IsNullOrWhiteSpace(textBoxNumber.Text))
+ {
+ throw new Exception("Имеются незаполненные поля");
+ }
+
+ if(_clientId.HasValue)
+ {
+ _clientRepository.UpdateClient(CreateClient(_clientId.Value));
+ }
+ else
+ {
+ _clientRepository.CreateClient(CreateClient(0));
+ }
+ Close();
+ }
+ catch(Exception ex)
+ {
+ MessageBox.Show(ex.Message,"Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void buttonCancel_Click(object sender, EventArgs e) => Close();
+
+ private Client CreateClient(int id) => Client.CreateEntity(id, textBoxName.Text,
+ dateTimePickerBirth.Value, textBoxNumber.Text,
+ (Enities.Enums.ClientSocialStatus)numericUpDownSocialStatus.Value);
+}
diff --git a/project/ProjectTourAgency/Forms/FormClients.resx b/project/ProjectTourAgency/Forms/FormClients.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/project/ProjectTourAgency/Forms/FormClients.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/project/ProjectTourAgency/ProjectTourAgency.csproj b/project/ProjectTourAgency/ProjectTourAgency.csproj
index c19bde1..accbdf0 100644
--- a/project/ProjectTourAgency/ProjectTourAgency.csproj
+++ b/project/ProjectTourAgency/ProjectTourAgency.csproj
@@ -27,8 +27,4 @@
-
-
-
-
\ No newline at end of file