diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Athlete.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Athlete.cs new file mode 100644 index 0000000..d6cfff8 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Athlete.cs @@ -0,0 +1,29 @@ +using ProjectAthletesAccommodation.Entities.Enums; + +namespace ProjectAthletesAccommodation.Entities; + +public class Athlete +{ + public int Id { get; private set; } + + public string Name { get; private set; } = string.Empty; + + public string Surname { get; private set; } = string.Empty; + + public KindOfSport KindOfSport { get; private set; } + + public AthleteClassification AthleteClassification { get; private set; } + + public static Athlete CreateEntity(int id, string name, string surname, + KindOfSport sport, AthleteClassification athleteClassification) + { + return new Athlete + { + Id = id, + Name = name ?? string.Empty, + Surname = surname ?? string.Empty, + KindOfSport = sport, + AthleteClassification = athleteClassification + }; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/AthleteAccommodation.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/AthleteAccommodation.cs new file mode 100644 index 0000000..fcb01b4 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/AthleteAccommodation.cs @@ -0,0 +1,27 @@ +namespace ProjectAthletesAccommodation.Entities; + +public class AthleteAccommodation +{ + public int Id { get; private set; } + + public int RoomId { get; private set; } + + public int AthleteId { get; private set; } + + public DateTime DateStart { get; private set; } + + public DateTime DateEnd { get; private set; } + + public static AthleteAccommodation CreateOpeartion(int id, int roomId, int athleteId) + { + var dateStart = DateTime.Now; + return new AthleteAccommodation + { + Id = id, + RoomId = roomId, + AthleteId = athleteId, + DateStart = dateStart, + DateEnd = dateStart.AddMonths(1) + }; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/AthleteClassification.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/AthleteClassification.cs new file mode 100644 index 0000000..93becdb --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/AthleteClassification.cs @@ -0,0 +1,12 @@ +namespace ProjectAthletesAccommodation.Entities.Enums; + +public enum AthleteClassification +{ + None = 0, + + FirstCategory = 1, + + SecondCategory = 2, + + ThirdCategory = 3 +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/KindOfSport.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/KindOfSport.cs new file mode 100644 index 0000000..6f9513b --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/KindOfSport.cs @@ -0,0 +1,17 @@ +namespace ProjectAthletesAccommodation.Entities.Enums; + +[Flags] +public enum KindOfSport +{ + None = 0, + + Football = 1, + + Basketball = 2, + + Hockey = 4, + + Tennis = 8, + + Handball = 16 +} diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/TypeOfRoom.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/TypeOfRoom.cs new file mode 100644 index 0000000..3c94267 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Enums/TypeOfRoom.cs @@ -0,0 +1,12 @@ +namespace ProjectAthletesAccommodation.Entities.Enums; + +public enum TypeOfRoom +{ + None = 0, + + Single = 1, + + Double = 2, + + Triple = 3 +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Hotel.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Hotel.cs new file mode 100644 index 0000000..4e6763e --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Hotel.cs @@ -0,0 +1,17 @@ +namespace ProjectAthletesAccommodation.Entities; + +public class Hotel +{ + public int Id { get; private set; } + + public string Name { get; private set; } = string.Empty; + + public static Hotel CreateEntity(int id, string name) + { + return new Hotel + { + Id = id, + Name = name + }; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Room.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Room.cs new file mode 100644 index 0000000..a917408 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/Room.cs @@ -0,0 +1,26 @@ +using ProjectAthletesAccommodation.Entities.Enums; + +namespace ProjectAthletesAccommodation.Entities; + +public class Room +{ + public int Id { get; private set; } + + public int HotelId { get; private set; } + + public string Name { get; private set; } = string.Empty; + + public TypeOfRoom TypeOfRoom { get; private set; } + + public static Room CreateEntity(int id, int hotelId, string name, + TypeOfRoom typeOfRoom) + { + return new Room + { + Id = id, + HotelId = hotelId, + Name = name ?? string.Empty, + TypeOfRoom = typeOfRoom + }; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/ServiceProvision.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/ServiceProvision.cs new file mode 100644 index 0000000..43eee68 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/ServiceProvision.cs @@ -0,0 +1,27 @@ +namespace ProjectAthletesAccommodation.Entities; + +public class ServiceProvision +{ + public int Id { get; private set; } + + public int HotelId { get; private set; } + + public string Name { get; private set; } = string.Empty; + + public DateTime Date { get; private set; } + + public IEnumerable ServiceProvisionConnection { get; private set; } = []; + + public static ServiceProvision CreateOpeartion(int id, int hotelId, string name, + IEnumerable serviceProvisionConnection) + { + return new ServiceProvision + { + Id = id, + HotelId = hotelId, + Name = name ?? string.Empty, + Date = DateTime.Now, + ServiceProvisionConnection = serviceProvisionConnection + }; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/ServiceProvisionConnection.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/ServiceProvisionConnection.cs new file mode 100644 index 0000000..473e766 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Entities/ServiceProvisionConnection.cs @@ -0,0 +1,20 @@ +namespace ProjectAthletesAccommodation.Entities; + +public class ServiceProvisionConnection +{ + public int Id { get; private set; } + + public int AthleteId { get; private set; } + + public decimal Price { get; private set; } + + public static ServiceProvisionConnection CreateElement(int id, int athleteId, decimal price) + { + return new ServiceProvisionConnection + { + Id = id, + AthleteId = athleteId, + Price = price + }; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.Designer.cs deleted file mode 100644 index df375be..0000000 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectAthletesAccommodation -{ - partial class Form1 - { - /// - /// 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() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.cs deleted file mode 100644 index 0ddb8c0..0000000 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectAthletesAccommodation -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.Designer.cs new file mode 100644 index 0000000..24adb10 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.Designer.cs @@ -0,0 +1,138 @@ +namespace ProjectAthletesAccommodation +{ + partial class FormAthleteAccommodation + { + /// + /// 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() + { + menuStrip1 = new MenuStrip(); + DirectoryToolStripMenuItem = new ToolStripMenuItem(); + AthletesToolStripMenuItem = new ToolStripMenuItem(); + HotelsToolStripMenuItem = new ToolStripMenuItem(); + RoomsToolStripMenuItem = new ToolStripMenuItem(); + OperationsToolStripMenuItem = new ToolStripMenuItem(); + AthletesAccommodationToolStripMenuItem = new ToolStripMenuItem(); + ServicesProvisionToolStripMenuItem = new ToolStripMenuItem(); + ReportsToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.Items.AddRange(new ToolStripItem[] { DirectoryToolStripMenuItem, OperationsToolStripMenuItem, ReportsToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(784, 24); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip"; + // + // DirectoryToolStripMenuItem + // + DirectoryToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { AthletesToolStripMenuItem, HotelsToolStripMenuItem, RoomsToolStripMenuItem }); + DirectoryToolStripMenuItem.Name = "DirectoryToolStripMenuItem"; + DirectoryToolStripMenuItem.Size = new Size(94, 20); + DirectoryToolStripMenuItem.Text = "Справочники"; + // + // AthletesToolStripMenuItem + // + AthletesToolStripMenuItem.Name = "AthletesToolStripMenuItem"; + AthletesToolStripMenuItem.Size = new Size(180, 22); + AthletesToolStripMenuItem.Text = "Спортсмены"; + AthletesToolStripMenuItem.Click += AthletesToolStripMenuItem_Click; + // + // HotelsToolStripMenuItem + // + HotelsToolStripMenuItem.Name = "HotelsToolStripMenuItem"; + HotelsToolStripMenuItem.Size = new Size(180, 22); + HotelsToolStripMenuItem.Text = "Гостиницы"; + HotelsToolStripMenuItem.Click += HotelsToolStripMenuItem_Click; + // + // RoomsToolStripMenuItem + // + RoomsToolStripMenuItem.Name = "RoomsToolStripMenuItem"; + RoomsToolStripMenuItem.Size = new Size(180, 22); + RoomsToolStripMenuItem.Text = "Номера"; + RoomsToolStripMenuItem.Click += RoomsToolStripMenuItem_Click; + // + // OperationsToolStripMenuItem + // + OperationsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { AthletesAccommodationToolStripMenuItem, ServicesProvisionToolStripMenuItem }); + OperationsToolStripMenuItem.Name = "OperationsToolStripMenuItem"; + OperationsToolStripMenuItem.Size = new Size(75, 20); + OperationsToolStripMenuItem.Text = "Операции"; + // + // AthletesAccommodationToolStripMenuItem + // + AthletesAccommodationToolStripMenuItem.Name = "AthletesAccommodationToolStripMenuItem"; + AthletesAccommodationToolStripMenuItem.Size = new Size(220, 22); + AthletesAccommodationToolStripMenuItem.Text = "Размещение спортсменов"; + AthletesAccommodationToolStripMenuItem.Click += AthletesAccommodationToolStripMenuItem_Click; + // + // ServicesProvisionToolStripMenuItem + // + ServicesProvisionToolStripMenuItem.Name = "ServicesProvisionToolStripMenuItem"; + ServicesProvisionToolStripMenuItem.Size = new Size(220, 22); + ServicesProvisionToolStripMenuItem.Text = "Предоставление услуг"; + ServicesProvisionToolStripMenuItem.Click += ServicesProvisionToolStripMenuItem_Click; + // + // ReportsToolStripMenuItem + // + ReportsToolStripMenuItem.Name = "ReportsToolStripMenuItem"; + ReportsToolStripMenuItem.Size = new Size(60, 20); + ReportsToolStripMenuItem.Text = "Отчёты"; + // + // FormAthleteAccommodation + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.Гостиница1; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(784, 461); + Controls.Add(menuStrip1); + DoubleBuffered = true; + MainMenuStrip = menuStrip1; + Name = "FormAthleteAccommodation"; + StartPosition = FormStartPosition.CenterScreen; + Text = "Размещение спортсменов"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem DirectoryToolStripMenuItem; + private ToolStripMenuItem AthletesToolStripMenuItem; + private ToolStripMenuItem HotelsToolStripMenuItem; + private ToolStripMenuItem RoomsToolStripMenuItem; + private ToolStripMenuItem OperationsToolStripMenuItem; + private ToolStripMenuItem AthletesAccommodationToolStripMenuItem; + private ToolStripMenuItem ServicesProvisionToolStripMenuItem; + private ToolStripMenuItem ReportsToolStripMenuItem; + } +} diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.cs new file mode 100644 index 0000000..7ca5eb4 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.cs @@ -0,0 +1,81 @@ +using ProjectAthletesAccommodation.Forms; +using Unity; + +namespace ProjectAthletesAccommodation +{ + public partial class FormAthleteAccommodation : Form + { + private readonly IUnityContainer _container; + + public FormAthleteAccommodation(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + + private void AthletesToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void HotelsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void RoomsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void AthletesAccommodationToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ServicesProvisionToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.resx new file mode 100644 index 0000000..a0623c8 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/FormAthleteAccommodation.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.Designer.cs new file mode 100644 index 0000000..ee3b340 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.Designer.cs @@ -0,0 +1,165 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormAthlete + { + /// + /// 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(); + labelSurname = new Label(); + textBoxSurname = new TextBox(); + comboBoxClassification = new ComboBox(); + labelClassification = new Label(); + labelSport = new Label(); + buttonSave = new Button(); + buttonCancel = new Button(); + checkedListBoxSport = new CheckedListBox(); + SuspendLayout(); + // + // labelName + // + labelName.AutoSize = true; + labelName.Location = new Point(88, 28); + labelName.Name = "labelName"; + labelName.Size = new Size(31, 15); + labelName.TabIndex = 0; + labelName.Text = "Имя"; + // + // textBoxName + // + textBoxName.Location = new Point(125, 25); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(202, 23); + textBoxName.TabIndex = 1; + // + // labelSurname + // + labelSurname.AutoSize = true; + labelSurname.Location = new Point(61, 72); + labelSurname.Name = "labelSurname"; + labelSurname.Size = new Size(58, 15); + labelSurname.TabIndex = 2; + labelSurname.Text = "Фамилия"; + // + // textBoxSurname + // + textBoxSurname.Location = new Point(125, 69); + textBoxSurname.Name = "textBoxSurname"; + textBoxSurname.Size = new Size(202, 23); + textBoxSurname.TabIndex = 3; + // + // comboBoxClassification + // + comboBoxClassification.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxClassification.FormattingEnabled = true; + comboBoxClassification.Location = new Point(125, 113); + comboBoxClassification.Name = "comboBoxClassification"; + comboBoxClassification.Size = new Size(202, 23); + comboBoxClassification.TabIndex = 4; + // + // labelClassification + // + labelClassification.AutoSize = true; + labelClassification.Location = new Point(25, 116); + labelClassification.Name = "labelClassification"; + labelClassification.Size = new Size(94, 15); + labelClassification.TabIndex = 5; + labelClassification.Text = "Классификация"; + // + // labelSport + // + labelSport.AutoSize = true; + labelSport.Location = new Point(51, 157); + labelSport.Name = "labelSport"; + labelSport.Size = new Size(68, 15); + labelSport.TabIndex = 6; + labelSport.Text = "Вид спорта"; + // + // buttonSave + // + buttonSave.Location = new Point(25, 268); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(142, 49); + buttonSave.TabIndex = 7; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(185, 268); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(142, 49); + buttonCancel.TabIndex = 8; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // checkedListBoxSport + // + checkedListBoxSport.FormattingEnabled = true; + checkedListBoxSport.Location = new Point(125, 157); + checkedListBoxSport.Name = "checkedListBoxSport"; + checkedListBoxSport.Size = new Size(202, 94); + checkedListBoxSport.TabIndex = 9; + // + // FormAthlete + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(352, 335); + Controls.Add(checkedListBoxSport); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(labelSport); + Controls.Add(labelClassification); + Controls.Add(comboBoxClassification); + Controls.Add(textBoxSurname); + Controls.Add(labelSurname); + Controls.Add(textBoxName); + Controls.Add(labelName); + Name = "FormAthlete"; + StartPosition = FormStartPosition.CenterParent; + Text = "Спортсмен"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelName; + private TextBox textBoxName; + private Label labelSurname; + private TextBox textBoxSurname; + private ComboBox comboBoxClassification; + private Label labelClassification; + private Label labelSport; + private Button buttonSave; + private Button buttonCancel; + private CheckedListBox checkedListBoxSport; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.cs new file mode 100644 index 0000000..a0610d0 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.cs @@ -0,0 +1,106 @@ +using ProjectAthletesAccommodation.Entities; +using ProjectAthletesAccommodation.Entities.Enums; +using ProjectAthletesAccommodation.Repositories; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormAthlete : Form + { + private readonly IAthleteRepository _athleteRepository; + + private int? _athleteId; + + public int Id + { + set + { + try + { + var athlete = _athleteRepository.ReadAthleteById(value); + + if (athlete == null) + { + throw new + InvalidDataException(nameof(athlete)); + } + + foreach (KindOfSport elem in Enum.GetValues(typeof(KindOfSport))) + { + if ((elem & athlete.KindOfSport) != 0) + { + checkedListBoxSport.SetItemChecked(checkedListBoxSport.Items.IndexOf(elem), true); + } + } + + textBoxName.Text = athlete.Name; + textBoxSurname.Text = athlete.Surname; + comboBoxClassification.SelectedItem = athlete.AthleteClassification; + _athleteId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormAthlete(IAthleteRepository athleteRepository) + { + InitializeComponent(); + _athleteRepository = athleteRepository ?? throw new ArgumentNullException(nameof(athleteRepository)); + comboBoxClassification.DataSource = Enum.GetValues(typeof(AthleteClassification)); + + foreach (var elem in Enum.GetValues(typeof(KindOfSport))) + { + checkedListBoxSport.Items.Add(elem); + } + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) || + string.IsNullOrWhiteSpace(textBoxSurname.Text) || + comboBoxClassification.SelectedIndex < 1 || + checkedListBoxSport.CheckedItems.Count == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_athleteId.HasValue) + { + _athleteRepository.UpdateAthlete(CreateAthlete(_athleteId.Value)); + } + else + { + _athleteRepository.CreateAthlete(CreateAthlete(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Athlete CreateAthlete(int id) + { + KindOfSport kindOfSport = KindOfSport.None; + foreach (var elem in checkedListBoxSport.CheckedItems) + { + kindOfSport |= (KindOfSport)elem; + } + + return Athlete.CreateEntity(id, textBoxName.Text, textBoxSurname.Text, + kindOfSport, (AthleteClassification)comboBoxClassification.SelectedItem!); + } + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.resx similarity index 93% rename from ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.resx rename to ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.resx index 1af7de1..af32865 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Form1.resx +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthlete.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.Designer.cs new file mode 100644 index 0000000..a7ffb05 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.Designer.cs @@ -0,0 +1,168 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormAthleteAccommodation + { + /// + /// 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() + { + labelRoom = new Label(); + labelAthlete = new Label(); + labelDateStart = new Label(); + labelDateEnd = new Label(); + comboBoxRoom = new ComboBox(); + comboBoxAthlete = new ComboBox(); + dateTimePickerDateStart = new DateTimePicker(); + dateTimePickerDateEnd = new DateTimePicker(); + buttonSave = new Button(); + buttonCancel = new Button(); + SuspendLayout(); + // + // labelRoom + // + labelRoom.AutoSize = true; + labelRoom.Location = new Point(60, 27); + labelRoom.Name = "labelRoom"; + labelRoom.Size = new Size(45, 15); + labelRoom.TabIndex = 0; + labelRoom.Text = "Номер"; + // + // labelAthlete + // + labelAthlete.AutoSize = true; + labelAthlete.Location = new Point(36, 60); + labelAthlete.Name = "labelAthlete"; + labelAthlete.Size = new Size(69, 15); + labelAthlete.TabIndex = 1; + labelAthlete.Text = "Спортсмен"; + // + // labelDateStart + // + labelDateStart.AutoSize = true; + labelDateStart.Location = new Point(36, 102); + labelDateStart.Name = "labelDateStart"; + labelDateStart.Size = new Size(69, 15); + labelDateStart.TabIndex = 2; + labelDateStart.Text = "Дата заезда"; + // + // labelDateEnd + // + labelDateEnd.AutoSize = true; + labelDateEnd.Location = new Point(32, 135); + labelDateEnd.Name = "labelDateEnd"; + labelDateEnd.Size = new Size(73, 15); + labelDateEnd.TabIndex = 3; + labelDateEnd.Text = "Дата выезда"; + // + // comboBoxRoom + // + comboBoxRoom.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxRoom.FormattingEnabled = true; + comboBoxRoom.Location = new Point(111, 24); + comboBoxRoom.Name = "comboBoxRoom"; + comboBoxRoom.Size = new Size(200, 23); + comboBoxRoom.TabIndex = 4; + // + // comboBoxAthlete + // + comboBoxAthlete.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxAthlete.FormattingEnabled = true; + comboBoxAthlete.Location = new Point(111, 57); + comboBoxAthlete.Name = "comboBoxAthlete"; + comboBoxAthlete.Size = new Size(200, 23); + comboBoxAthlete.TabIndex = 5; + // + // dateTimePickerDateStart + // + dateTimePickerDateStart.Enabled = false; + dateTimePickerDateStart.Location = new Point(111, 96); + dateTimePickerDateStart.Name = "dateTimePickerDateStart"; + dateTimePickerDateStart.Size = new Size(200, 23); + dateTimePickerDateStart.TabIndex = 6; + // + // dateTimePickerDateEnd + // + dateTimePickerDateEnd.Enabled = false; + dateTimePickerDateEnd.Location = new Point(111, 129); + dateTimePickerDateEnd.Name = "dateTimePickerDateEnd"; + dateTimePickerDateEnd.Size = new Size(200, 23); + dateTimePickerDateEnd.TabIndex = 7; + // + // buttonSave + // + buttonSave.Location = new Point(32, 168); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(133, 45); + buttonSave.TabIndex = 8; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(178, 168); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(133, 45); + buttonCancel.TabIndex = 9; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormAthleteAccommodation + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(342, 225); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(dateTimePickerDateEnd); + Controls.Add(dateTimePickerDateStart); + Controls.Add(comboBoxAthlete); + Controls.Add(comboBoxRoom); + Controls.Add(labelDateEnd); + Controls.Add(labelDateStart); + Controls.Add(labelAthlete); + Controls.Add(labelRoom); + Name = "FormAthleteAccommodation"; + StartPosition = FormStartPosition.CenterParent; + Text = "Размещение спортсмена"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelRoom; + private Label labelAthlete; + private Label labelDateStart; + private Label labelDateEnd; + private ComboBox comboBoxRoom; + private ComboBox comboBoxAthlete; + private DateTimePicker dateTimePickerDateStart; + private DateTimePicker dateTimePickerDateEnd; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.cs new file mode 100644 index 0000000..5745643 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.cs @@ -0,0 +1,50 @@ +using ProjectAthletesAccommodation.Entities; +using ProjectAthletesAccommodation.Repositories; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormAthleteAccommodation : Form + { + private readonly IAthleteAccommodationRepository _athleteAccommodationRepository; + + public FormAthleteAccommodation(IAthleteAccommodationRepository athleteAccommodationRepository, + IRoomRepository roomRepository, IAthleteRepository athleteRepository) + { + InitializeComponent(); + _athleteAccommodationRepository = athleteAccommodationRepository + ?? throw new ArgumentNullException(nameof(athleteAccommodationRepository)); + + comboBoxRoom.DataSource = roomRepository.ReadRooms(); + comboBoxRoom.DisplayMember = "Name"; + comboBoxRoom.ValueMember = "Id"; + + comboBoxAthlete.DataSource = athleteRepository.ReadAthletes(); + comboBoxAthlete.DisplayMember = "Name"; + comboBoxAthlete.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxRoom.SelectedIndex < 0 || comboBoxAthlete.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + _athleteAccommodationRepository.CreateAthleteAccommodation + (AthleteAccommodation.CreateOpeartion(0, (int)comboBoxRoom.SelectedValue!, + (int)comboBoxAthlete.SelectedValue!)); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthleteAccommodation.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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.Designer.cs new file mode 100644 index 0000000..f3e3842 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.Designer.cs @@ -0,0 +1,127 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormAthletes + { + /// + /// 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() + { + panel1 = new Panel(); + buttonUpd = new Button(); + buttonAdd = new Button(); + buttonDel = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Controls.Add(buttonDel); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(719, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(115, 361); + panel1.TabIndex = 0; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.Редактировать; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(21, 174); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(75, 75); + buttonUpd.TabIndex = 2; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Создать; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(21, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(21, 93); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 1; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(719, 361); + dataGridView.TabIndex = 1; + // + // FormAthletes + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(834, 361); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormAthletes"; + StartPosition = FormStartPosition.CenterParent; + Text = "Спортсмены"; + Load += FormAthletes_Load; + Click += FormAthletes_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonUpd; + private Button buttonDel; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.cs new file mode 100644 index 0000000..f043def --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.cs @@ -0,0 +1,107 @@ +using ProjectAthletesAccommodation.Repositories; +using Unity; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormAthletes : Form + { + private readonly IUnityContainer _container; + + private readonly IAthleteRepository _athleteRepository; + + public FormAthletes(IUnityContainer container, IAthleteRepository athleteRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _athleteRepository = athleteRepository ?? throw new ArgumentNullException(nameof(athleteRepository)); + } + + private void FormAthletes_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _athleteRepository.DeleteAthlete(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _athleteRepository.ReadAthletes(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletes.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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.Designer.cs new file mode 100644 index 0000000..952eaee --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.Designer.cs @@ -0,0 +1,112 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormAthletesAccommodation + { + /// + /// 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() + { + panel1 = new Panel(); + buttonDel = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(710, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(124, 361); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(25, 93); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 1; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Создать; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(25, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(710, 361); + dataGridView.TabIndex = 1; + // + // FormAthletesAccommodation + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(834, 361); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormAthletesAccommodation"; + StartPosition = FormStartPosition.CenterParent; + Text = "Размещение спортсменов"; + Load += FormAthletesAccommodation_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private Button buttonDel; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.cs new file mode 100644 index 0000000..9302d64 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.cs @@ -0,0 +1,89 @@ +using ProjectAthletesAccommodation.Repositories; +using Unity; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormAthletesAccommodation : Form + { + private readonly IUnityContainer _container; + + private readonly IAthleteAccommodationRepository _athleteAccommodationRepository; + + public FormAthletesAccommodation(IUnityContainer container, + IAthleteAccommodationRepository athleteAccommodationRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _athleteAccommodationRepository = athleteAccommodationRepository + ?? throw new ArgumentNullException(nameof(athleteAccommodationRepository)); + } + + private void FormAthletesAccommodation_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _athleteAccommodationRepository.DeleteAthleteAccommodation(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = + _athleteAccommodationRepository.ReadAthleteAccommodation(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormAthletesAccommodation.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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.Designer.cs new file mode 100644 index 0000000..7cebf4c --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.Designer.cs @@ -0,0 +1,96 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormHotel + { + /// + /// 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() + { + labelHotelName = new Label(); + textBoxHotelName = new TextBox(); + buttonSave = new Button(); + buttonCancel = new Button(); + SuspendLayout(); + // + // labelHotelName + // + labelHotelName.AutoSize = true; + labelHotelName.Location = new Point(12, 41); + labelHotelName.Name = "labelHotelName"; + labelHotelName.Size = new Size(59, 15); + labelHotelName.TabIndex = 0; + labelHotelName.Text = "Название"; + // + // textBoxHotelName + // + textBoxHotelName.Location = new Point(77, 38); + textBoxHotelName.Name = "textBoxHotelName"; + textBoxHotelName.Size = new Size(149, 23); + textBoxHotelName.TabIndex = 1; + // + // buttonSave + // + buttonSave.Location = new Point(12, 84); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(97, 42); + buttonSave.TabIndex = 2; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(129, 84); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(97, 42); + buttonCancel.TabIndex = 3; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormHotel + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(238, 150); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxHotelName); + Controls.Add(labelHotelName); + Name = "FormHotel"; + StartPosition = FormStartPosition.CenterParent; + Text = "Гостиница"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelHotelName; + private TextBox textBoxHotelName; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.cs new file mode 100644 index 0000000..c8f431a --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.cs @@ -0,0 +1,74 @@ +using ProjectAthletesAccommodation.Entities; +using ProjectAthletesAccommodation.Repositories; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormHotel : Form + { + private readonly IHotelRepository _hotelRepository; + + private int? _hotelId; + + public int Id + { + set + { + try + { + var hotel = _hotelRepository.ReadHotelById(value); + + if (hotel == null) + { + throw new InvalidDataException(nameof(hotel)); + } + + textBoxHotelName.Text = hotel.Name; + _hotelId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormHotel(IHotelRepository hotelRepository) + { + InitializeComponent(); + _hotelRepository = hotelRepository ?? throw new ArgumentNullException(nameof(hotelRepository)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxHotelName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_hotelId.HasValue) + { + _hotelRepository.UpdateHotel(CreateHotel(_hotelId.Value)); + } + else + { + _hotelRepository.CreateHotel(CreateHotel(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Hotel CreateHotel(int id) => Hotel.CreateEntity(id, textBoxHotelName.Text); + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotel.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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.Designer.cs new file mode 100644 index 0000000..aa66a1b --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.Designer.cs @@ -0,0 +1,126 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormHotels + { + /// + /// 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() + { + panel1 = new Panel(); + buttonUpd = new Button(); + buttonDel = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(714, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(120, 361); + panel1.TabIndex = 0; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.Редактировать; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(24, 174); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(75, 75); + buttonUpd.TabIndex = 2; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(24, 93); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 1; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Создать; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(24, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(714, 361); + dataGridView.TabIndex = 1; + // + // FormHotels + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(834, 361); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormHotels"; + StartPosition = FormStartPosition.CenterParent; + Text = "Гостиницы"; + Load += FormHotels_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private Button buttonUpd; + private Button buttonDel; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.cs new file mode 100644 index 0000000..a8a3b4a --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.cs @@ -0,0 +1,108 @@ +using ProjectAthletesAccommodation.Repositories; +using Unity; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormHotels : Form + { + private readonly IUnityContainer _container; + + private readonly IHotelRepository _hotelRepository; + + public FormHotels(IUnityContainer container, IHotelRepository hotelRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _hotelRepository = hotelRepository ?? throw new ArgumentNullException(nameof(hotelRepository)); + } + + private void FormHotels_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _hotelRepository.DeleteHotel(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _hotelRepository.ReadHotels(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormHotels.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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.Designer.cs new file mode 100644 index 0000000..10b49da --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.Designer.cs @@ -0,0 +1,144 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormRoom + { + /// + /// 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() + { + labelHotel = new Label(); + labelRoomName = new Label(); + labelRoomType = new Label(); + buttonSave = new Button(); + textBoxRoomName = new TextBox(); + comboBoxRoomType = new ComboBox(); + comboBoxHotel = new ComboBox(); + buttonCancel = new Button(); + SuspendLayout(); + // + // labelHotel + // + labelHotel.AutoSize = true; + labelHotel.Location = new Point(32, 29); + labelHotel.Name = "labelHotel"; + labelHotel.Size = new Size(65, 15); + labelHotel.TabIndex = 0; + labelHotel.Text = "Гостиница"; + // + // labelRoomName + // + labelRoomName.AutoSize = true; + labelRoomName.Location = new Point(52, 69); + labelRoomName.Name = "labelRoomName"; + labelRoomName.Size = new Size(45, 15); + labelRoomName.TabIndex = 1; + labelRoomName.Text = "Номер"; + // + // labelRoomType + // + labelRoomType.AutoSize = true; + labelRoomType.Location = new Point(25, 108); + labelRoomType.Name = "labelRoomType"; + labelRoomType.Size = new Size(72, 15); + labelRoomType.TabIndex = 2; + labelRoomType.Text = "Тип номера"; + // + // buttonSave + // + buttonSave.Location = new Point(32, 146); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(83, 45); + buttonSave.TabIndex = 3; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // textBoxRoomName + // + textBoxRoomName.Location = new Point(103, 66); + textBoxRoomName.Name = "textBoxRoomName"; + textBoxRoomName.Size = new Size(121, 23); + textBoxRoomName.TabIndex = 4; + // + // comboBoxRoomType + // + comboBoxRoomType.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxRoomType.FormattingEnabled = true; + comboBoxRoomType.Location = new Point(103, 105); + comboBoxRoomType.Name = "comboBoxRoomType"; + comboBoxRoomType.Size = new Size(121, 23); + comboBoxRoomType.TabIndex = 5; + // + // comboBoxHotel + // + comboBoxHotel.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxHotel.FormattingEnabled = true; + comboBoxHotel.Location = new Point(103, 26); + comboBoxHotel.Name = "comboBoxHotel"; + comboBoxHotel.Size = new Size(121, 23); + comboBoxHotel.TabIndex = 6; + // + // buttonCancel + // + buttonCancel.Location = new Point(141, 146); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(83, 45); + buttonCancel.TabIndex = 7; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormRoom + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(260, 208); + Controls.Add(buttonCancel); + Controls.Add(comboBoxHotel); + Controls.Add(comboBoxRoomType); + Controls.Add(textBoxRoomName); + Controls.Add(buttonSave); + Controls.Add(labelRoomType); + Controls.Add(labelRoomName); + Controls.Add(labelHotel); + Name = "FormRoom"; + StartPosition = FormStartPosition.CenterParent; + Text = "Номер гостиницы"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelHotel; + private Label labelRoomName; + private Label labelRoomType; + private Button buttonSave; + private TextBox textBoxRoomName; + private ComboBox comboBoxRoomType; + private ComboBox comboBoxHotel; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.cs new file mode 100644 index 0000000..31ae8fd --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.cs @@ -0,0 +1,87 @@ +using ProjectAthletesAccommodation.Entities.Enums; +using ProjectAthletesAccommodation.Entities; +using ProjectAthletesAccommodation.Repositories; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormRoom : Form + { + private readonly IRoomRepository _roomRepository; + + private int? _roomId; + + public int Id + { + set + { + try + { + var room = _roomRepository.ReadRoomById(value); + + if (room == null) + { + throw new + InvalidDataException(nameof(room)); + } + + textBoxRoomName.Text = room.Name; + comboBoxRoomType.SelectedItem = room.TypeOfRoom; + comboBoxHotel.SelectedItem = room.HotelId; + _roomId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public FormRoom(IRoomRepository roomRepository, IHotelRepository hotelRepository) + { + InitializeComponent(); + _roomRepository = roomRepository ?? throw new ArgumentNullException(nameof(roomRepository)); + + comboBoxRoomType.DataSource = Enum.GetValues(typeof(TypeOfRoom)); + + comboBoxHotel.DataSource = hotelRepository.ReadHotels(); + comboBoxHotel.DisplayMember = "Name"; + comboBoxHotel.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxRoomName.Text) || + comboBoxHotel.SelectedIndex < 0 || + comboBoxRoomType.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_roomId.HasValue) + { + _roomRepository.UpdateRoom(CreateRoom(_roomId.Value)); + } + else + { + _roomRepository.CreateRoom(CreateRoom(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Room CreateRoom(int id) => Room.CreateEntity(id, (int)comboBoxHotel.SelectedValue!, + textBoxRoomName.Text, (TypeOfRoom)comboBoxRoomType.SelectedItem!); + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRoom.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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.Designer.cs new file mode 100644 index 0000000..e4de189 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.Designer.cs @@ -0,0 +1,127 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormRooms + { + /// + /// 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() + { + panel1 = new Panel(); + buttonUpd = new Button(); + buttonDel = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(717, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(117, 361); + panel1.TabIndex = 0; + // + // buttonUpd + // + buttonUpd.BackColor = SystemColors.Control; + buttonUpd.BackgroundImage = Properties.Resources.Редактировать; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(21, 174); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(75, 75); + buttonUpd.TabIndex = 2; + buttonUpd.UseVisualStyleBackColor = false; + buttonUpd.Click += ButtonUpd_Click; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(21, 93); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 1; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Создать; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(21, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(717, 361); + dataGridView.TabIndex = 1; + // + // FormRooms + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(834, 361); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormRooms"; + StartPosition = FormStartPosition.CenterParent; + Text = "Номера гостиниц"; + Load += FormRooms_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonUpd; + private Button buttonDel; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.cs new file mode 100644 index 0000000..28fbf00 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.cs @@ -0,0 +1,107 @@ +using ProjectAthletesAccommodation.Repositories; +using Unity; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormRooms : Form + { + private readonly IUnityContainer _container; + + private readonly IRoomRepository _roomRepository; + + public FormRooms(IUnityContainer container, IRoomRepository roomRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _roomRepository = roomRepository ?? throw new ArgumentNullException(nameof(roomRepository)); + } + + private void FormRooms_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _roomRepository.DeleteRoom(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + try + { + var form = _container.Resolve(); + form.Id = findId; + form.ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при изменении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = _roomRepository.ReadRooms(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormRooms.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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.Designer.cs new file mode 100644 index 0000000..79848fd --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.Designer.cs @@ -0,0 +1,195 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormServiceProvision + { + /// + /// 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() + { + comboBoxHotel = new ComboBox(); + labelHotel = new Label(); + groupBox = new GroupBox(); + dataGridView = new DataGridView(); + ColumnAthlete = new DataGridViewComboBoxColumn(); + ColumnPrice = new DataGridViewTextBoxColumn(); + labelName = new Label(); + textBoxName = new TextBox(); + labelDate = new Label(); + dateTimePicker = new DateTimePicker(); + buttonSave = new Button(); + buttonCancel = new Button(); + groupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // comboBoxHotel + // + comboBoxHotel.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxHotel.FormattingEnabled = true; + comboBoxHotel.Location = new Point(123, 21); + comboBoxHotel.Name = "comboBoxHotel"; + comboBoxHotel.Size = new Size(173, 23); + comboBoxHotel.TabIndex = 8; + // + // labelHotel + // + labelHotel.AutoSize = true; + labelHotel.Location = new Point(52, 24); + labelHotel.Name = "labelHotel"; + labelHotel.Size = new Size(65, 15); + labelHotel.TabIndex = 7; + labelHotel.Text = "Гостиница"; + // + // groupBox + // + groupBox.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + groupBox.Controls.Add(dataGridView); + groupBox.Location = new Point(27, 125); + groupBox.Name = "groupBox"; + groupBox.Size = new Size(275, 221); + groupBox.TabIndex = 9; + groupBox.TabStop = false; + groupBox.Text = "Услуги предоставлены:"; + // + // dataGridView + // + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnAthlete, ColumnPrice }); + dataGridView.Location = new Point(6, 22); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(263, 193); + dataGridView.TabIndex = 0; + // + // ColumnAthlete + // + ColumnAthlete.HeaderText = "Спортсмен"; + ColumnAthlete.Name = "ColumnAthlete"; + // + // ColumnPrice + // + ColumnPrice.HeaderText = "Стоимость"; + ColumnPrice.Name = "ColumnPrice"; + // + // labelName + // + labelName.AutoSize = true; + labelName.Location = new Point(27, 56); + labelName.Name = "labelName"; + labelName.Size = new Size(90, 15); + labelName.TabIndex = 10; + labelName.Text = "Наименование"; + // + // textBoxName + // + textBoxName.Location = new Point(123, 53); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(173, 23); + textBoxName.TabIndex = 11; + // + // labelDate + // + labelDate.AutoSize = true; + labelDate.Location = new Point(85, 92); + labelDate.Name = "labelDate"; + labelDate.Size = new Size(32, 15); + labelDate.TabIndex = 12; + labelDate.Text = "Дата"; + // + // dateTimePicker + // + dateTimePicker.Enabled = false; + dateTimePicker.Location = new Point(123, 86); + dateTimePicker.Name = "dateTimePicker"; + dateTimePicker.Size = new Size(173, 23); + dateTimePicker.TabIndex = 13; + // + // buttonSave + // + buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; + buttonSave.Location = new Point(27, 369); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(126, 40); + buttonSave.TabIndex = 14; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += ButtonSave_Click; + // + // buttonCancel + // + buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; + buttonCancel.Location = new Point(177, 369); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(122, 40); + buttonCancel.TabIndex = 15; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += ButtonCancel_Click; + // + // FormServiceProvision + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(332, 431); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(dateTimePicker); + Controls.Add(labelDate); + Controls.Add(textBoxName); + Controls.Add(labelName); + Controls.Add(groupBox); + Controls.Add(comboBoxHotel); + Controls.Add(labelHotel); + Name = "FormServiceProvision"; + StartPosition = FormStartPosition.CenterParent; + Text = "Предоставление услуг"; + groupBox.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxHotel; + private Label labelHotel; + private GroupBox groupBox; + private Label labelName; + private TextBox textBoxName; + private Label labelDate; + private DateTimePicker dateTimePicker; + private DataGridView dataGridView; + private Button buttonSave; + private Button buttonCancel; + private DataGridViewComboBoxColumn ColumnAthlete; + private DataGridViewTextBoxColumn ColumnPrice; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.cs new file mode 100644 index 0000000..4ec567f --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.cs @@ -0,0 +1,71 @@ +using ProjectAthletesAccommodation.Entities; +using ProjectAthletesAccommodation.Repositories; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormServiceProvision : Form + { + private readonly IServiceProvisionRepository _serviceProvisionRepository; + + public FormServiceProvision(IServiceProvisionRepository serviceProvisionRepository, + IHotelRepository hotelRepository, IAthleteRepository athleteRepository) + { + InitializeComponent(); + _serviceProvisionRepository = serviceProvisionRepository + ?? throw new ArgumentNullException(nameof(serviceProvisionRepository)); + + comboBoxHotel.DataSource = hotelRepository.ReadHotels(); + comboBoxHotel.DisplayMember = "Name"; + comboBoxHotel.ValueMember = "Id"; + + ColumnAthlete.DataSource = athleteRepository.ReadAthletes(); + ColumnAthlete.DisplayMember = "Name"; + ColumnAthlete.ValueMember = "Id"; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (dataGridView.RowCount < 1 || + comboBoxHotel.SelectedIndex < 0 || + string.IsNullOrWhiteSpace(textBoxName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + + _serviceProvisionRepository.CreateServiceProvision + (ServiceProvision.CreateOpeartion(0, (int)comboBoxHotel.SelectedValue!, + textBoxName.Text, CreateListServiceProvisionConnectionFromDataGrid())); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private List CreateListServiceProvisionConnectionFromDataGrid() + { + var list = new List(); + + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnAthlete"].Value == null || row.Cells["ColumnPrice"].Value == null) + { + continue; + } + + list.Add(ServiceProvisionConnection.CreateElement + (0, Convert.ToInt32(row.Cells["ColumnAthlete"].Value), + Convert.ToDecimal(row.Cells["ColumnPrice"].Value))); + } + + return list; + } + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.resx new file mode 100644 index 0000000..d2de630 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServiceProvision.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.Designer.cs new file mode 100644 index 0000000..5cc2938 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.Designer.cs @@ -0,0 +1,109 @@ +namespace ProjectAthletesAccommodation.Forms +{ + partial class FormServicesProvision + { + /// + /// 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() + { + panel1 = new Panel(); + buttonDel = new Button(); + buttonAdd = new Button(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(712, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(122, 361); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Удалить; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(24, 93); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(75, 75); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += ButtonDel_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Создать; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(24, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(75, 75); + buttonAdd.TabIndex = 1; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += ButtonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(712, 361); + dataGridView.TabIndex = 1; + // + // FormServicesProvision + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(834, 361); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormServicesProvision"; + StartPosition = FormStartPosition.CenterParent; + Text = "Предоставление услуг"; + Load += FormServicesProvision_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private Button buttonDel; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.cs new file mode 100644 index 0000000..deab4af --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.cs @@ -0,0 +1,89 @@ +using ProjectAthletesAccommodation.Repositories; +using Unity; + +namespace ProjectAthletesAccommodation.Forms +{ + public partial class FormServicesProvision : Form + { + private readonly IUnityContainer _container; + + private readonly IServiceProvisionRepository _serviceProvisionRepository; + + public FormServicesProvision(IUnityContainer container, + IServiceProvisionRepository serviceProvisionRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _serviceProvisionRepository = serviceProvisionRepository + ?? throw new ArgumentNullException(nameof(serviceProvisionRepository)); + } + + private void FormServicesProvision_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonDel_Click(object sender, EventArgs e) + { + if (!TryGetIdentifierFromSelectedRow(out var findId)) + { + return; + } + + if (MessageBox.Show("Удалить запись?", "Удаление", + MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + + try + { + _serviceProvisionRepository.DeleteServiceProvision(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridView.DataSource = + _serviceProvisionRepository.ReadServiceProvision(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + return true; + } + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Forms/FormServicesProvision.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/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Program.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Program.cs index 2345c7b..7659cf6 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Program.cs +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Program.cs @@ -1,3 +1,8 @@ +using ProjectAthletesAccommodation.Repositories.Implementations; +using ProjectAthletesAccommodation.Repositories; +using Unity.Lifetime; +using Unity; + namespace ProjectAthletesAccommodation { internal static class Program @@ -11,7 +16,20 @@ namespace ProjectAthletesAccommodation // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(CreateContainer().Resolve()); + } + + private static IUnityContainer CreateContainer() + { + var container = new UnityContainer(); + + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + + return container; } } } \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/ProjectAthletesAccommodation.csproj b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/ProjectAthletesAccommodation.csproj index 663fdb8..0bb163b 100644 --- a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/ProjectAthletesAccommodation.csproj +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/ProjectAthletesAccommodation.csproj @@ -8,4 +8,27 @@ enable + + + + + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Properties/Resources.Designer.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Properties/Resources.Designer.cs new file mode 100644 index 0000000..1b300cd --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectAthletesAccommodation.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом StronglyTypedResourceBuilder + // с помощью такого средства, как ResGen или Visual Studio. + // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen + // с параметром /str или перестройте свой проект VS. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProjectAthletesAccommodation.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Гостиница1 { + get { + object obj = ResourceManager.GetObject("Гостиница1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Редактировать { + get { + object obj = ResourceManager.GetObject("Редактировать", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Создать { + get { + object obj = ResourceManager.GetObject("Создать", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Создать1 { + get { + object obj = ResourceManager.GetObject("Создать1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Удалить { + get { + object obj = ResourceManager.GetObject("Удалить", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Properties/Resources.resx b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Properties/Resources.resx new file mode 100644 index 0000000..2635be4 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\Resources\Создать.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Гостиница1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Редактировать.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Создать1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Удалить.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IAthleteAccommodationRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IAthleteAccommodationRepository.cs new file mode 100644 index 0000000..c62db99 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IAthleteAccommodationRepository.cs @@ -0,0 +1,13 @@ +using ProjectAthletesAccommodation.Entities; + +namespace ProjectAthletesAccommodation.Repositories; + +public interface IAthleteAccommodationRepository +{ + IEnumerable ReadAthleteAccommodation(DateTime? dateFrom = null, DateTime? dateTo = null, + int? roomId = null, int? athleteId = null); + + void CreateAthleteAccommodation(AthleteAccommodation athleteAccommodation); + + void DeleteAthleteAccommodation(int id); +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IAthleteRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IAthleteRepository.cs new file mode 100644 index 0000000..20eb88f --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IAthleteRepository.cs @@ -0,0 +1,12 @@ +using ProjectAthletesAccommodation.Entities; + +namespace ProjectAthletesAccommodation.Repositories; + +public interface IAthleteRepository +{ + IEnumerable ReadAthletes(); + Athlete ReadAthleteById(int id); + void CreateAthlete(Athlete athlete); + void UpdateAthlete(Athlete athlete); + void DeleteAthlete(int id); +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IHotelRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IHotelRepository.cs new file mode 100644 index 0000000..249dcdc --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IHotelRepository.cs @@ -0,0 +1,12 @@ +using ProjectAthletesAccommodation.Entities; + +namespace ProjectAthletesAccommodation.Repositories; + +public interface IHotelRepository +{ + IEnumerable ReadHotels(); + Hotel ReadHotelById(int id); + void CreateHotel(Hotel hotel); + void UpdateHotel(Hotel hotel); + void DeleteHotel(int id); +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IRoomRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IRoomRepository.cs new file mode 100644 index 0000000..75bd9e8 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IRoomRepository.cs @@ -0,0 +1,12 @@ +using ProjectAthletesAccommodation.Entities; + +namespace ProjectAthletesAccommodation.Repositories; + +public interface IRoomRepository +{ + IEnumerable ReadRooms(); + Room ReadRoomById(int id); + void CreateRoom(Room room); + void UpdateRoom(Room room); + void DeleteRoom(int id); +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IServiceProvisionRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IServiceProvisionRepository.cs new file mode 100644 index 0000000..6306c75 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/IServiceProvisionRepository.cs @@ -0,0 +1,13 @@ +using ProjectAthletesAccommodation.Entities; + +namespace ProjectAthletesAccommodation.Repositories; + +public interface IServiceProvisionRepository +{ + IEnumerable ReadServiceProvision(DateTime? dateFrom = null, DateTime? dateTo = null, + int? hotelId = null, int? athleteId = null); + + void CreateServiceProvision(ServiceProvision serviceProvision); + + void DeleteServiceProvision(int id); +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteAccommodationRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteAccommodationRepository.cs new file mode 100644 index 0000000..2d0e08b --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteAccommodationRepository.cs @@ -0,0 +1,19 @@ +using ProjectAthletesAccommodation.Entities; +namespace ProjectAthletesAccommodation.Repositories.Implementations; + +public class AthleteAccommodationRepository : IAthleteAccommodationRepository +{ + public void CreateAthleteAccommodation(AthleteAccommodation athleteAccommodation) + { + } + + public void DeleteAthleteAccommodation(int id) + { + } + + public IEnumerable ReadAthleteAccommodation(DateTime? dateFrom = null, DateTime? dateTo = null, + int? roomId = null, int? athleteId = null) + { + return []; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteRepository.cs new file mode 100644 index 0000000..992fa18 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/AthleteRepository.cs @@ -0,0 +1,28 @@ +using ProjectAthletesAccommodation.Entities.Enums; +using ProjectAthletesAccommodation.Entities; +namespace ProjectAthletesAccommodation.Repositories.Implementations; + +public class AthleteRepository : IAthleteRepository +{ + public void CreateAthlete(Athlete athlete) + { + } + + public void DeleteAthlete(int id) + { + } + + public Athlete ReadAthleteById(int id) + { + return Athlete.CreateEntity(0, string.Empty, string.Empty, KindOfSport.None, AthleteClassification.None); + } + + public IEnumerable ReadAthletes() + { + return []; + } + + public void UpdateAthlete(Athlete athlete) + { + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/HotelRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/HotelRepository.cs new file mode 100644 index 0000000..b8baad5 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/HotelRepository.cs @@ -0,0 +1,27 @@ +using ProjectAthletesAccommodation.Entities; +namespace ProjectAthletesAccommodation.Repositories.Implementations; + +public class HotelRepository : IHotelRepository +{ + public void CreateHotel(Hotel hotel) + { + } + + public void DeleteHotel(int id) + { + } + + public Hotel ReadHotelById(int id) + { + return Hotel.CreateEntity(0, string.Empty); + } + + public IEnumerable ReadHotels() + { + return []; + } + + public void UpdateHotel(Hotel hotel) + { + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/RoomRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/RoomRepository.cs new file mode 100644 index 0000000..6a9ec7f --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/RoomRepository.cs @@ -0,0 +1,28 @@ +using ProjectAthletesAccommodation.Entities.Enums; +using ProjectAthletesAccommodation.Entities; +namespace ProjectAthletesAccommodation.Repositories.Implementations; + +public class RoomRepository : IRoomRepository +{ + public void CreateRoom(Room room) + { + } + + public void DeleteRoom(int id) + { + } + + public Room ReadRoomById(int id) + { + return Room.CreateEntity(0, 0, string.Empty, TypeOfRoom.None); + } + + public IEnumerable ReadRooms() + { + return []; + } + + public void UpdateRoom(Room room) + { + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ServiceProvisionRepository.cs b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ServiceProvisionRepository.cs new file mode 100644 index 0000000..fec3e84 --- /dev/null +++ b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Repositories/Implementations/ServiceProvisionRepository.cs @@ -0,0 +1,19 @@ +using ProjectAthletesAccommodation.Entities; +namespace ProjectAthletesAccommodation.Repositories.Implementations; + +public class ServiceProvisionRepository : IServiceProvisionRepository +{ + public void CreateServiceProvision(ServiceProvision serviceProvision) + { + } + + public void DeleteServiceProvision(int id) + { + } + + public IEnumerable ReadServiceProvision(DateTime? dateFrom = null, DateTime? dateTo = null, + int? hotelId = null, int? athleteId = null) + { + return []; + } +} \ No newline at end of file diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Гостиница1.png b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Гостиница1.png new file mode 100644 index 0000000..1b09aad Binary files /dev/null and b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Гостиница1.png differ diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Редактировать.png b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Редактировать.png new file mode 100644 index 0000000..945e78b Binary files /dev/null and b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Редактировать.png differ diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Создать.png b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Создать.png new file mode 100644 index 0000000..9f2c9bf Binary files /dev/null and b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Создать.png differ diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Создать1.png b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Создать1.png new file mode 100644 index 0000000..9f2c9bf Binary files /dev/null and b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Создать1.png differ diff --git a/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Удалить.png b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Удалить.png new file mode 100644 index 0000000..bd9645a Binary files /dev/null and b/ProjectAthletesAccommodation/ProjectAthletesAccommodation/Resources/Удалить.png differ