diff --git a/ProjectSchedule/ProjectSchedule/Entities/Audience.cs b/ProjectSchedule/ProjectSchedule/Entities/Audience.cs
new file mode 100644
index 0000000..cd6518a
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/Audience.cs
@@ -0,0 +1,21 @@
+using ProjectSchedule.Entities.Enums;
+
+namespace ProjectSchedule.Entities;
+
+public class Audience
+{
+ public int Id { get; private set; }
+ public string NumberAudience { get; private set; } = string.Empty;
+ public TypeAudience TypeAudience { get; private set; }
+ public int QuantitySeats { get; private set; }
+ public static Audience CreateEntity(int id, string numberAudience, TypeAudience typeAudience, int quantitySeats)
+ {
+ return new Audience
+ {
+ Id = id,
+ NumberAudience = numberAudience ?? string.Empty,
+ TypeAudience = typeAudience,
+ QuantitySeats = quantitySeats
+ };
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Entities/CompilingSchedule.cs b/ProjectSchedule/ProjectSchedule/Entities/CompilingSchedule.cs
new file mode 100644
index 0000000..2e6382c
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/CompilingSchedule.cs
@@ -0,0 +1,32 @@
+using ProjectSchedule.Entities.Enums;
+
+namespace ProjectSchedule.Entities;
+
+public class CompilingSchedule
+{
+ public int Id { get; private set; }
+ public int EducatorId { get; private set; }
+ public int DisciplineId { get; private set; }
+ public int GroupStudentsId { get; private set; }
+ public int AudienceId { get; private set; }
+ public TypeWeek TypeWeek { get; private set; }
+ public int NumberDay { get; private set; }
+ public int NumberPair { get; private set; }
+ public TypeActivity TypeActivity { get; private set; }
+ public static CompilingSchedule CreateOperation(int id, int educatorId, int disciplineId, int groupStudentsId, int audienceId, TypeWeek typeWeek,
+ int numberDay, int numberPair, TypeActivity typeActivity)
+ {
+ return new CompilingSchedule
+ {
+ Id = id,
+ EducatorId = educatorId,
+ DisciplineId = disciplineId,
+ GroupStudentsId = groupStudentsId,
+ AudienceId = audienceId,
+ TypeWeek = typeWeek,
+ NumberDay = numberDay,
+ NumberPair = numberPair,
+ TypeActivity = typeActivity
+ };
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Entities/CurriculumSupplement.cs b/ProjectSchedule/ProjectSchedule/Entities/CurriculumSupplement.cs
new file mode 100644
index 0000000..3e028f1
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/CurriculumSupplement.cs
@@ -0,0 +1,26 @@
+namespace ProjectSchedule.Entities;
+
+public class CurriculumSupplement
+{
+ public int Id { get; private set; }
+ public int DisciplineId { get; private set; }
+ public int GroupStudentsId { get; private set; }
+ public string NameCurriculum { get; private set; } = string.Empty;
+ public int QuantityLectures { get; private set; }
+ public int QuantityPractices { get; private set; }
+ public string Semester { get; private set; } = string.Empty;
+ public static CurriculumSupplement CreateOperation(int id, int disciplineId, int groupStudentsId, string nameCurriculum,
+ int quantityLectures, int quantityPractices, string semester)
+ {
+ return new CurriculumSupplement
+ {
+ Id = id,
+ DisciplineId = disciplineId,
+ GroupStudentsId = groupStudentsId,
+ NameCurriculum = nameCurriculum ?? string.Empty,
+ QuantityLectures = quantityLectures,
+ QuantityPractices = quantityPractices,
+ Semester = semester ?? string.Empty
+ };
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Entities/Discipline.cs b/ProjectSchedule/ProjectSchedule/Entities/Discipline.cs
new file mode 100644
index 0000000..706fb39
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/Discipline.cs
@@ -0,0 +1,15 @@
+namespace ProjectSchedule.Entities;
+
+public class Discipline
+{
+ public int Id { get; private set; }
+ public string NameDiscipline { get; private set; } = string.Empty;
+ public static Discipline CreateEntity(int id, string nameDiscipline)
+ {
+ return new Discipline
+ {
+ Id = id,
+ NameDiscipline = nameDiscipline ?? string.Empty,
+ };
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Entities/Educator.cs b/ProjectSchedule/ProjectSchedule/Entities/Educator.cs
new file mode 100644
index 0000000..a22e0b4
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/Educator.cs
@@ -0,0 +1,19 @@
+namespace ProjectSchedule.Entities;
+
+public class Educator
+{
+ public int Id { get; private set; }
+ public string Surname { get; private set; } = string.Empty;
+ public string Name { get; private set; } = string.Empty;
+ public string Patronymic { get; private set; } = string.Empty;
+ public static Educator CreateEntity(int id, string surname, string name, string patronymic)
+ {
+ return new Educator
+ {
+ Id = id,
+ Surname = surname ?? string.Empty,
+ Name = name ?? string.Empty,
+ Patronymic = patronymic ?? string.Empty
+ };
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeActivity.cs b/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeActivity.cs
new file mode 100644
index 0000000..8d7d3dc
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeActivity.cs
@@ -0,0 +1,10 @@
+namespace ProjectSchedule.Entities.Enums;
+
+public enum TypeActivity
+{
+ None = 0,
+
+ Practice = 1,
+
+ Lecture = 2
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeAudience.cs b/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeAudience.cs
new file mode 100644
index 0000000..64bd562
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeAudience.cs
@@ -0,0 +1,10 @@
+namespace ProjectSchedule.Entities.Enums;
+
+public enum TypeAudience
+{
+ None = 0,
+
+ СomputerСlass = 1,
+
+ LectureAudience = 2
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeWeek.cs b/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeWeek.cs
new file mode 100644
index 0000000..d6267ed
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/Enums/TypeWeek.cs
@@ -0,0 +1,10 @@
+namespace ProjectSchedule.Entities.Enums;
+
+public enum TypeWeek
+{
+ None = 0,
+
+ OddWeek = 1,
+
+ EvenWeek = 2
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Entities/GroupStudents.cs b/ProjectSchedule/ProjectSchedule/Entities/GroupStudents.cs
new file mode 100644
index 0000000..88122f6
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Entities/GroupStudents.cs
@@ -0,0 +1,19 @@
+namespace ProjectSchedule.Entities;
+
+public class GroupStudents
+{
+ public int Id { get; private set; }
+ public string AbbreviationGroup { get; private set; } = string.Empty;
+ public string GroupNumber { get; private set; } = string.Empty;
+ public int QuantityStudents { get; private set; }
+ public static GroupStudents CreateEntity(int id, string abbreviationGroup, string groupNumber, int quantityStudents)
+ {
+ return new GroupStudents
+ {
+ Id = id,
+ AbbreviationGroup = abbreviationGroup ?? string.Empty,
+ GroupNumber = groupNumber ?? string.Empty,
+ QuantityStudents = quantityStudents
+ };
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Form1.Designer.cs b/ProjectSchedule/ProjectSchedule/Form1.Designer.cs
deleted file mode 100644
index 3180711..0000000
--- a/ProjectSchedule/ProjectSchedule/Form1.Designer.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-namespace ProjectSchedule
-{
- 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/ProjectSchedule/ProjectSchedule/Form1.cs b/ProjectSchedule/ProjectSchedule/Form1.cs
deleted file mode 100644
index 488af1c..0000000
--- a/ProjectSchedule/ProjectSchedule/Form1.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-namespace ProjectSchedule
-{
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- }
-}
diff --git a/ProjectSchedule/ProjectSchedule/FormSchedule.Designer.cs b/ProjectSchedule/ProjectSchedule/FormSchedule.Designer.cs
new file mode 100644
index 0000000..3105e05
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/FormSchedule.Designer.cs
@@ -0,0 +1,147 @@
+namespace ProjectSchedule
+{
+ partial class FormSchedule
+ {
+ ///
+ /// 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()
+ {
+ menuStrip = new MenuStrip();
+ справочникиToolStripMenuItem = new ToolStripMenuItem();
+ AudiencesToolStripMenuItem = new ToolStripMenuItem();
+ DisciplinesToolStripMenuItem = new ToolStripMenuItem();
+ EducatorsToolStripMenuItem = new ToolStripMenuItem();
+ GroupsStudentsToolStripMenuItem = new ToolStripMenuItem();
+ операцииToolStripMenuItem = new ToolStripMenuItem();
+ CompilingScheduleToolStripMenuItem = new ToolStripMenuItem();
+ CurriculumSupplementToolStripMenuItem = new ToolStripMenuItem();
+ отчётыToolStripMenuItem = new ToolStripMenuItem();
+ menuStrip.SuspendLayout();
+ SuspendLayout();
+ //
+ // menuStrip
+ //
+ menuStrip.ImageScalingSize = new Size(20, 20);
+ menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчётыToolStripMenuItem });
+ menuStrip.Location = new Point(0, 0);
+ menuStrip.Name = "menuStrip";
+ menuStrip.Size = new Size(782, 28);
+ menuStrip.TabIndex = 0;
+ menuStrip.Text = "menuStrip";
+ //
+ // справочникиToolStripMenuItem
+ //
+ справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { AudiencesToolStripMenuItem, DisciplinesToolStripMenuItem, EducatorsToolStripMenuItem, GroupsStudentsToolStripMenuItem });
+ справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
+ справочникиToolStripMenuItem.Size = new Size(117, 24);
+ справочникиToolStripMenuItem.Text = "Справочники";
+ //
+ // AudiencesToolStripMenuItem
+ //
+ AudiencesToolStripMenuItem.Name = "AudiencesToolStripMenuItem";
+ AudiencesToolStripMenuItem.Size = new Size(224, 26);
+ AudiencesToolStripMenuItem.Text = "Аудитории";
+ AudiencesToolStripMenuItem.Click += AudiencesToolStripMenuItem_Click;
+ //
+ // DisciplinesToolStripMenuItem
+ //
+ DisciplinesToolStripMenuItem.Name = "DisciplinesToolStripMenuItem";
+ DisciplinesToolStripMenuItem.Size = new Size(224, 26);
+ DisciplinesToolStripMenuItem.Text = "Дисциплины";
+ DisciplinesToolStripMenuItem.Click += DisciplinesToolStripMenuItem_Click;
+ //
+ // EducatorsToolStripMenuItem
+ //
+ EducatorsToolStripMenuItem.Name = "EducatorsToolStripMenuItem";
+ EducatorsToolStripMenuItem.Size = new Size(224, 26);
+ EducatorsToolStripMenuItem.Text = "Преподаватели";
+ EducatorsToolStripMenuItem.Click += EducatorsToolStripMenuItem_Click;
+ //
+ // GroupsStudentsToolStripMenuItem
+ //
+ GroupsStudentsToolStripMenuItem.Name = "GroupsStudentsToolStripMenuItem";
+ GroupsStudentsToolStripMenuItem.Size = new Size(224, 26);
+ GroupsStudentsToolStripMenuItem.Text = "Группы студентов";
+ GroupsStudentsToolStripMenuItem.Click += GroupsStudentsToolStripMenuItem_Click;
+ //
+ // операцииToolStripMenuItem
+ //
+ операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CompilingScheduleToolStripMenuItem, CurriculumSupplementToolStripMenuItem });
+ операцииToolStripMenuItem.Name = "операцииToolStripMenuItem";
+ операцииToolStripMenuItem.Size = new Size(95, 24);
+ операцииToolStripMenuItem.Text = "Операции";
+ //
+ // CompilingScheduleToolStripMenuItem
+ //
+ CompilingScheduleToolStripMenuItem.Name = "CompilingScheduleToolStripMenuItem";
+ CompilingScheduleToolStripMenuItem.Size = new Size(295, 26);
+ CompilingScheduleToolStripMenuItem.Text = "Составление расписания";
+ CompilingScheduleToolStripMenuItem.Click += CompilingScheduleToolStripMenuItem_Click;
+ //
+ // CurriculumSupplementToolStripMenuItem
+ //
+ CurriculumSupplementToolStripMenuItem.Name = "CurriculumSupplementToolStripMenuItem";
+ CurriculumSupplementToolStripMenuItem.Size = new Size(295, 26);
+ CurriculumSupplementToolStripMenuItem.Text = "Дополнение учебного плана";
+ CurriculumSupplementToolStripMenuItem.Click += CurriculumSupplementToolStripMenuItem_Click;
+ //
+ // отчётыToolStripMenuItem
+ //
+ отчётыToolStripMenuItem.Name = "отчётыToolStripMenuItem";
+ отчётыToolStripMenuItem.Size = new Size(73, 24);
+ отчётыToolStripMenuItem.Text = "Отчёты";
+ //
+ // FormSchedule
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ BackgroundImage = Properties.Resources.Расписание_на_фон;
+ BackgroundImageLayout = ImageLayout.Stretch;
+ ClientSize = new Size(782, 403);
+ Controls.Add(menuStrip);
+ MainMenuStrip = menuStrip;
+ Name = "FormSchedule";
+ StartPosition = FormStartPosition.CenterScreen;
+ Text = "Расписание";
+ menuStrip.ResumeLayout(false);
+ menuStrip.PerformLayout();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private MenuStrip menuStrip;
+ private ToolStripMenuItem справочникиToolStripMenuItem;
+ private ToolStripMenuItem AudiencesToolStripMenuItem;
+ private ToolStripMenuItem DisciplinesToolStripMenuItem;
+ private ToolStripMenuItem EducatorsToolStripMenuItem;
+ private ToolStripMenuItem GroupsStudentsToolStripMenuItem;
+ private ToolStripMenuItem операцииToolStripMenuItem;
+ private ToolStripMenuItem CompilingScheduleToolStripMenuItem;
+ private ToolStripMenuItem отчётыToolStripMenuItem;
+ private ToolStripMenuItem CurriculumSupplementToolStripMenuItem;
+ }
+}
diff --git a/ProjectSchedule/ProjectSchedule/FormSchedule.cs b/ProjectSchedule/ProjectSchedule/FormSchedule.cs
new file mode 100644
index 0000000..78c7207
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/FormSchedule.cs
@@ -0,0 +1,95 @@
+using ProjectSchedule.Forms;
+using Unity;
+
+namespace ProjectSchedule
+{
+ public partial class FormSchedule : Form
+ {
+ private readonly IUnityContainer _container;
+
+ public FormSchedule(IUnityContainer container)
+ {
+ InitializeComponent();
+ _container = container ??
+ throw new ArgumentNullException(nameof(container));
+ }
+
+ private void AudiencesToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ _container.Resolve().ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+ }
+ }
+
+ private void DisciplinesToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ _container.Resolve().ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+ }
+ }
+
+ private void EducatorsToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ _container.Resolve().ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+ }
+ }
+
+ private void GroupsStudentsToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ _container.Resolve().ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+ }
+ }
+
+ private void CompilingScheduleToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ _container.Resolve().ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+ }
+ }
+
+ private void CurriculumSupplementToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ _container.Resolve().ShowDialog();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error);
+
+ }
+ }
+ }
+}
diff --git a/ProjectSchedule/ProjectSchedule/FormSchedule.resx b/ProjectSchedule/ProjectSchedule/FormSchedule.resx
new file mode 100644
index 0000000..6c82d08
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/FormSchedule.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/ProjectSchedule/ProjectSchedule/Forms/FormAudience.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormAudience.Designer.cs
new file mode 100644
index 0000000..737297f
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormAudience.Designer.cs
@@ -0,0 +1,145 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormAudience
+ {
+ ///
+ /// 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()
+ {
+ labelNumberAudience = new Label();
+ labelQuantitySeats = new Label();
+ labelTypeAudience = new Label();
+ buttonSave = new Button();
+ buttonCancel = new Button();
+ textBoxNumberAudience = new TextBox();
+ numericUpDownQuantitySeats = new NumericUpDown();
+ comboBoxTypeAudience = new ComboBox();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownQuantitySeats).BeginInit();
+ SuspendLayout();
+ //
+ // labelNumberAudience
+ //
+ labelNumberAudience.AutoSize = true;
+ labelNumberAudience.Location = new Point(21, 32);
+ labelNumberAudience.Name = "labelNumberAudience";
+ labelNumberAudience.Size = new Size(138, 20);
+ labelNumberAudience.TabIndex = 0;
+ labelNumberAudience.Text = "Номер аудитории:";
+ //
+ // labelQuantitySeats
+ //
+ labelQuantitySeats.AutoSize = true;
+ labelQuantitySeats.Location = new Point(21, 77);
+ labelQuantitySeats.Name = "labelQuantitySeats";
+ labelQuantitySeats.Size = new Size(129, 20);
+ labelQuantitySeats.TabIndex = 1;
+ labelQuantitySeats.Text = "Количество мест:";
+ //
+ // labelTypeAudience
+ //
+ labelTypeAudience.AutoSize = true;
+ labelTypeAudience.Location = new Point(21, 127);
+ labelTypeAudience.Name = "labelTypeAudience";
+ labelTypeAudience.Size = new Size(116, 20);
+ labelTypeAudience.TabIndex = 2;
+ labelTypeAudience.Text = "Тип аудитории:";
+ //
+ // buttonSave
+ //
+ buttonSave.Location = new Point(21, 208);
+ buttonSave.Name = "buttonSave";
+ buttonSave.Size = new Size(116, 29);
+ buttonSave.TabIndex = 3;
+ buttonSave.Text = "Сохранить";
+ buttonSave.UseVisualStyleBackColor = true;
+ buttonSave.Click += ButtonSave_Click;
+ //
+ // buttonCancel
+ //
+ buttonCancel.Location = new Point(234, 208);
+ buttonCancel.Name = "buttonCancel";
+ buttonCancel.Size = new Size(116, 29);
+ buttonCancel.TabIndex = 4;
+ buttonCancel.Text = "Отмена";
+ buttonCancel.UseVisualStyleBackColor = true;
+ buttonCancel.Click += ButtonCancel_Click;
+ //
+ // textBoxNumberAudience
+ //
+ textBoxNumberAudience.Location = new Point(176, 29);
+ textBoxNumberAudience.Name = "textBoxNumberAudience";
+ textBoxNumberAudience.Size = new Size(174, 27);
+ textBoxNumberAudience.TabIndex = 5;
+ //
+ // numericUpDownQuantitySeats
+ //
+ numericUpDownQuantitySeats.Location = new Point(176, 77);
+ numericUpDownQuantitySeats.Maximum = new decimal(new int[] { 500, 0, 0, 0 });
+ numericUpDownQuantitySeats.Name = "numericUpDownQuantitySeats";
+ numericUpDownQuantitySeats.Size = new Size(174, 27);
+ numericUpDownQuantitySeats.TabIndex = 6;
+ //
+ // comboBoxTypeAudience
+ //
+ comboBoxTypeAudience.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxTypeAudience.FormattingEnabled = true;
+ comboBoxTypeAudience.Location = new Point(176, 124);
+ comboBoxTypeAudience.Name = "comboBoxTypeAudience";
+ comboBoxTypeAudience.Size = new Size(174, 28);
+ comboBoxTypeAudience.TabIndex = 7;
+ //
+ // FormAudience
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(382, 253);
+ Controls.Add(comboBoxTypeAudience);
+ Controls.Add(numericUpDownQuantitySeats);
+ Controls.Add(textBoxNumberAudience);
+ Controls.Add(buttonCancel);
+ Controls.Add(buttonSave);
+ Controls.Add(labelTypeAudience);
+ Controls.Add(labelQuantitySeats);
+ Controls.Add(labelNumberAudience);
+ Name = "FormAudience";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Аудитория";
+ ((System.ComponentModel.ISupportInitialize)numericUpDownQuantitySeats).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Label labelNumberAudience;
+ private Label labelQuantitySeats;
+ private Label labelTypeAudience;
+ private Button buttonSave;
+ private Button buttonCancel;
+ private TextBox textBoxNumberAudience;
+ private NumericUpDown numericUpDownQuantitySeats;
+ private ComboBox comboBoxTypeAudience;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormAudience.cs b/ProjectSchedule/ProjectSchedule/Forms/FormAudience.cs
new file mode 100644
index 0000000..6400242
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormAudience.cs
@@ -0,0 +1,76 @@
+using ProjectSchedule.Entities.Enums;
+using ProjectSchedule.Entities;
+using ProjectSchedule.Repositories;
+
+namespace ProjectSchedule.Forms;
+
+public partial class FormAudience : Form
+{
+ private readonly IAudienceRepository _audienceRepository;
+
+ private int? _audienceId;
+
+ public int Id
+ {
+ set
+ {
+ try
+ {
+ var audience = _audienceRepository.ReadAudienceById(value);
+ if (audience == null)
+ {
+ throw new InvalidDataException(nameof(audience));
+ }
+
+ textBoxNumberAudience.Text = audience.NumberAudience;
+ comboBoxTypeAudience.SelectedItem = audience.TypeAudience;
+ numericUpDownQuantitySeats.Value = audience.QuantitySeats;
+ _audienceId = value;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ }
+
+ public FormAudience(IAudienceRepository audienceRepository)
+ {
+ InitializeComponent();
+ _audienceRepository = audienceRepository ??
+ throw new ArgumentNullException(nameof(audienceRepository));
+ comboBoxTypeAudience.DataSource = Enum.GetValues(typeof(TypeAudience));
+ }
+
+ private void ButtonSave_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (string.IsNullOrWhiteSpace(textBoxNumberAudience.Text) || comboBoxTypeAudience.SelectedIndex < 1)
+ {
+ throw new Exception("Имеются незаполненные поля");
+ }
+
+ if (_audienceId.HasValue)
+ {
+ _audienceRepository.UpdateAudience(CreateAudience(_audienceId.Value));
+ }
+ else
+ {
+ _audienceRepository.CreateAudience(CreateAudience(0));
+ }
+
+ Close();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void ButtonCancel_Click(object sender, EventArgs e) => Close();
+
+ private Audience CreateAudience(int id) =>
+ Audience.CreateEntity(id, textBoxNumberAudience.Text, (TypeAudience)comboBoxTypeAudience.SelectedItem!, Convert.ToInt32(numericUpDownQuantitySeats.Value));
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Form1.resx b/ProjectSchedule/ProjectSchedule/Forms/FormAudience.resx
similarity index 93%
rename from ProjectSchedule/ProjectSchedule/Form1.resx
rename to ProjectSchedule/ProjectSchedule/Forms/FormAudience.resx
index 1af7de1..af32865 100644
--- a/ProjectSchedule/ProjectSchedule/Form1.resx
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormAudience.resx
@@ -1,17 +1,17 @@
-
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.Designer.cs
new file mode 100644
index 0000000..02853b8
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.Designer.cs
@@ -0,0 +1,127 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormAudiences
+ {
+ ///
+ /// 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()
+ {
+ panel = new Panel();
+ buttonDel = new Button();
+ buttonUpd = new Button();
+ buttonAdd = new Button();
+ dataGridViewData = new DataGridView();
+ panel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
+ SuspendLayout();
+ //
+ // panel
+ //
+ panel.Controls.Add(buttonDel);
+ panel.Controls.Add(buttonUpd);
+ panel.Controls.Add(buttonAdd);
+ panel.Dock = DockStyle.Right;
+ panel.Location = new Point(672, 0);
+ panel.Name = "panel";
+ panel.Size = new Size(140, 483);
+ panel.TabIndex = 0;
+ //
+ // buttonDel
+ //
+ buttonDel.BackgroundImage = Properties.Resources.Del;
+ buttonDel.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonDel.Location = new Point(24, 194);
+ buttonDel.Name = "buttonDel";
+ buttonDel.Size = new Size(94, 66);
+ buttonDel.TabIndex = 4;
+ buttonDel.UseVisualStyleBackColor = true;
+ buttonDel.Click += ButtonDel_Click;
+ //
+ // buttonUpd
+ //
+ buttonUpd.BackgroundImage = Properties.Resources.Upd;
+ buttonUpd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonUpd.Location = new Point(24, 106);
+ buttonUpd.Name = "buttonUpd";
+ buttonUpd.Size = new Size(94, 66);
+ buttonUpd.TabIndex = 3;
+ buttonUpd.UseVisualStyleBackColor = true;
+ buttonUpd.Click += ButtonUpd_Click;
+ //
+ // buttonAdd
+ //
+ buttonAdd.BackgroundImage = Properties.Resources.Add;
+ buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonAdd.Location = new Point(24, 12);
+ buttonAdd.Name = "buttonAdd";
+ buttonAdd.Size = new Size(94, 66);
+ buttonAdd.TabIndex = 0;
+ buttonAdd.UseVisualStyleBackColor = true;
+ buttonAdd.Click += ButtonAdd_Click;
+ //
+ // dataGridViewData
+ //
+ dataGridViewData.AllowUserToAddRows = false;
+ dataGridViewData.AllowUserToDeleteRows = false;
+ dataGridViewData.AllowUserToResizeColumns = false;
+ dataGridViewData.AllowUserToResizeRows = false;
+ dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
+ dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridViewData.Dock = DockStyle.Fill;
+ dataGridViewData.Location = new Point(0, 0);
+ dataGridViewData.MultiSelect = false;
+ dataGridViewData.Name = "dataGridViewData";
+ dataGridViewData.ReadOnly = true;
+ dataGridViewData.RowHeadersVisible = false;
+ dataGridViewData.RowHeadersWidth = 51;
+ dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
+ dataGridViewData.Size = new Size(672, 483);
+ dataGridViewData.TabIndex = 1;
+ //
+ // FormAudiences
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(812, 483);
+ Controls.Add(dataGridViewData);
+ Controls.Add(panel);
+ Name = "FormAudiences";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Аудитории";
+ Load += FormAudiences_Load;
+ panel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panel;
+ private Button buttonDel;
+ private Button buttonUpd;
+ private Button buttonAdd;
+ private DataGridView dataGridViewData;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.cs b/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.cs
new file mode 100644
index 0000000..d982761
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.cs
@@ -0,0 +1,98 @@
+using ProjectSchedule.Repositories;
+using Unity;
+
+namespace ProjectSchedule.Forms
+{
+ public partial class FormAudiences : Form
+ {
+ private readonly IUnityContainer _container;
+
+ private readonly IAudienceRepository _audienceRepository;
+ public FormAudiences(IUnityContainer container, IAudienceRepository audienceRepository)
+ {
+ InitializeComponent();
+ _container = container ??
+ throw new ArgumentNullException(nameof(container));
+ _audienceRepository = audienceRepository ??
+ throw new ArgumentNullException(nameof(audienceRepository));
+ }
+ private void FormAudiences_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
+ {
+ _audienceRepository.DeleteAudience(findId);
+ LoadList();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void LoadList() => dataGridViewData.DataSource = _audienceRepository.ReadAudiences();
+ private bool TryGetIdentifierFromSelectedRow(out int id)
+ {
+ id = 0;
+ if (dataGridViewData.SelectedRows.Count < 1)
+ {
+ MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+
+ id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.resx b/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormAudiences.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/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.Designer.cs
new file mode 100644
index 0000000..8ae86f8
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.Designer.cs
@@ -0,0 +1,268 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormCompilingSchedule
+ {
+ ///
+ /// 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()
+ {
+ labelEducator = new Label();
+ labelDiscipline = new Label();
+ labelAudience = new Label();
+ labelGroupStudents = new Label();
+ labelNumberDay = new Label();
+ labelTypeWeek = new Label();
+ labelNumberPair = new Label();
+ labelTypeActivity = new Label();
+ comboBoxDiscipline = new ComboBox();
+ comboBoxGroupStudents = new ComboBox();
+ comboBoxEducator = new ComboBox();
+ comboBoxAudience = new ComboBox();
+ comboBoxTypeWeek = new ComboBox();
+ comboBoxTypeActivity = new ComboBox();
+ numericUpDownNumberPair = new NumericUpDown();
+ numericUpDownNumberDay = new NumericUpDown();
+ buttonSave = new Button();
+ buttonCancel = new Button();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownNumberPair).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownNumberDay).BeginInit();
+ SuspendLayout();
+ //
+ // labelEducator
+ //
+ labelEducator.AutoSize = true;
+ labelEducator.Location = new Point(34, 27);
+ labelEducator.Name = "labelEducator";
+ labelEducator.Size = new Size(120, 20);
+ labelEducator.TabIndex = 0;
+ labelEducator.Text = "Преподаватель:";
+ //
+ // labelDiscipline
+ //
+ labelDiscipline.AutoSize = true;
+ labelDiscipline.Location = new Point(34, 66);
+ labelDiscipline.Name = "labelDiscipline";
+ labelDiscipline.Size = new Size(99, 20);
+ labelDiscipline.TabIndex = 1;
+ labelDiscipline.Text = "Дисциплина:";
+ //
+ // labelAudience
+ //
+ labelAudience.AutoSize = true;
+ labelAudience.Location = new Point(34, 159);
+ labelAudience.Name = "labelAudience";
+ labelAudience.Size = new Size(87, 20);
+ labelAudience.TabIndex = 2;
+ labelAudience.Text = "Аудитория:";
+ //
+ // labelGroupStudents
+ //
+ labelGroupStudents.AutoSize = true;
+ labelGroupStudents.Location = new Point(34, 111);
+ labelGroupStudents.Name = "labelGroupStudents";
+ labelGroupStudents.Size = new Size(133, 20);
+ labelGroupStudents.TabIndex = 3;
+ labelGroupStudents.Text = "Группа студентов:";
+ //
+ // labelNumberDay
+ //
+ labelNumberDay.AutoSize = true;
+ labelNumberDay.Location = new Point(34, 264);
+ labelNumberDay.Name = "labelNumberDay";
+ labelNumberDay.Size = new Size(89, 20);
+ labelNumberDay.TabIndex = 4;
+ labelNumberDay.Text = "Номер дня:";
+ //
+ // labelTypeWeek
+ //
+ labelTypeWeek.AutoSize = true;
+ labelTypeWeek.Location = new Point(34, 212);
+ labelTypeWeek.Name = "labelTypeWeek";
+ labelTypeWeek.Size = new Size(63, 20);
+ labelTypeWeek.TabIndex = 5;
+ labelTypeWeek.Text = "Неделя:";
+ //
+ // labelNumberPair
+ //
+ labelNumberPair.AutoSize = true;
+ labelNumberPair.Location = new Point(34, 302);
+ labelNumberPair.Name = "labelNumberPair";
+ labelNumberPair.Size = new Size(101, 20);
+ labelNumberPair.TabIndex = 6;
+ labelNumberPair.Text = "Номер пары:";
+ //
+ // labelTypeActivity
+ //
+ labelTypeActivity.AutoSize = true;
+ labelTypeActivity.Location = new Point(34, 355);
+ labelTypeActivity.Name = "labelTypeActivity";
+ labelTypeActivity.Size = new Size(97, 20);
+ labelTypeActivity.TabIndex = 7;
+ labelTypeActivity.Text = "Тип занятия:";
+ //
+ // comboBoxDiscipline
+ //
+ comboBoxDiscipline.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxDiscipline.FormattingEnabled = true;
+ comboBoxDiscipline.Location = new Point(245, 66);
+ comboBoxDiscipline.Name = "comboBoxDiscipline";
+ comboBoxDiscipline.Size = new Size(210, 28);
+ comboBoxDiscipline.TabIndex = 8;
+ //
+ // comboBoxGroupStudents
+ //
+ comboBoxGroupStudents.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxGroupStudents.FormattingEnabled = true;
+ comboBoxGroupStudents.Location = new Point(245, 108);
+ comboBoxGroupStudents.Name = "comboBoxGroupStudents";
+ comboBoxGroupStudents.Size = new Size(210, 28);
+ comboBoxGroupStudents.TabIndex = 9;
+ //
+ // comboBoxEducator
+ //
+ comboBoxEducator.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxEducator.FormattingEnabled = true;
+ comboBoxEducator.Location = new Point(245, 24);
+ comboBoxEducator.Name = "comboBoxEducator";
+ comboBoxEducator.Size = new Size(210, 28);
+ comboBoxEducator.TabIndex = 10;
+ //
+ // comboBoxAudience
+ //
+ comboBoxAudience.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxAudience.FormattingEnabled = true;
+ comboBoxAudience.Location = new Point(245, 159);
+ comboBoxAudience.Name = "comboBoxAudience";
+ comboBoxAudience.Size = new Size(210, 28);
+ comboBoxAudience.TabIndex = 11;
+ //
+ // comboBoxTypeWeek
+ //
+ comboBoxTypeWeek.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxTypeWeek.FormattingEnabled = true;
+ comboBoxTypeWeek.Location = new Point(245, 209);
+ comboBoxTypeWeek.Name = "comboBoxTypeWeek";
+ comboBoxTypeWeek.Size = new Size(210, 28);
+ comboBoxTypeWeek.TabIndex = 12;
+ //
+ // comboBoxTypeActivity
+ //
+ comboBoxTypeActivity.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxTypeActivity.FormattingEnabled = true;
+ comboBoxTypeActivity.Location = new Point(245, 347);
+ comboBoxTypeActivity.Name = "comboBoxTypeActivity";
+ comboBoxTypeActivity.Size = new Size(210, 28);
+ comboBoxTypeActivity.TabIndex = 14;
+ //
+ // numericUpDownNumberPair
+ //
+ numericUpDownNumberPair.Location = new Point(245, 302);
+ numericUpDownNumberPair.Maximum = new decimal(new int[] { 8, 0, 0, 0 });
+ numericUpDownNumberPair.Name = "numericUpDownNumberPair";
+ numericUpDownNumberPair.Size = new Size(210, 27);
+ numericUpDownNumberPair.TabIndex = 15;
+ //
+ // numericUpDownNumberDay
+ //
+ numericUpDownNumberDay.Location = new Point(245, 257);
+ numericUpDownNumberDay.Maximum = new decimal(new int[] { 7, 0, 0, 0 });
+ numericUpDownNumberDay.Name = "numericUpDownNumberDay";
+ numericUpDownNumberDay.Size = new Size(210, 27);
+ numericUpDownNumberDay.TabIndex = 16;
+ //
+ // buttonSave
+ //
+ buttonSave.Location = new Point(34, 409);
+ buttonSave.Name = "buttonSave";
+ buttonSave.Size = new Size(116, 29);
+ buttonSave.TabIndex = 17;
+ buttonSave.Text = "Сохранить";
+ buttonSave.UseVisualStyleBackColor = true;
+ buttonSave.Click += ButtonSave_Click;
+ //
+ // buttonCancel
+ //
+ buttonCancel.Location = new Point(339, 409);
+ buttonCancel.Name = "buttonCancel";
+ buttonCancel.Size = new Size(116, 29);
+ buttonCancel.TabIndex = 18;
+ buttonCancel.Text = "Отмена";
+ buttonCancel.UseVisualStyleBackColor = true;
+ buttonCancel.Click += ButtonCancel_Click;
+ //
+ // FormCompilingSchedule
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(482, 453);
+ Controls.Add(buttonCancel);
+ Controls.Add(buttonSave);
+ Controls.Add(numericUpDownNumberDay);
+ Controls.Add(numericUpDownNumberPair);
+ Controls.Add(comboBoxTypeActivity);
+ Controls.Add(comboBoxTypeWeek);
+ Controls.Add(comboBoxAudience);
+ Controls.Add(comboBoxEducator);
+ Controls.Add(comboBoxGroupStudents);
+ Controls.Add(comboBoxDiscipline);
+ Controls.Add(labelTypeActivity);
+ Controls.Add(labelNumberPair);
+ Controls.Add(labelTypeWeek);
+ Controls.Add(labelNumberDay);
+ Controls.Add(labelGroupStudents);
+ Controls.Add(labelAudience);
+ Controls.Add(labelDiscipline);
+ Controls.Add(labelEducator);
+ Name = "FormCompilingSchedule";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Составление расписания";
+ ((System.ComponentModel.ISupportInitialize)numericUpDownNumberPair).EndInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownNumberDay).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Label labelEducator;
+ private Label labelDiscipline;
+ private Label labelAudience;
+ private Label labelGroupStudents;
+ private Label labelNumberDay;
+ private Label labelTypeWeek;
+ private Label labelNumberPair;
+ private Label labelTypeActivity;
+ private ComboBox comboBoxDiscipline;
+ private ComboBox comboBoxGroupStudents;
+ private ComboBox comboBoxEducator;
+ private ComboBox comboBoxAudience;
+ private ComboBox comboBoxTypeWeek;
+ private ComboBox comboBoxTypeActivity;
+ private NumericUpDown numericUpDownNumberPair;
+ private NumericUpDown numericUpDownNumberDay;
+ private Button buttonSave;
+ private Button buttonCancel;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.cs b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.cs
new file mode 100644
index 0000000..6d8be3d
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.cs
@@ -0,0 +1,66 @@
+using ProjectSchedule.Entities;
+using ProjectSchedule.Entities.Enums;
+using ProjectSchedule.Repositories;
+
+namespace ProjectSchedule.Forms
+{
+ public partial class FormCompilingSchedule : Form
+ {
+ private readonly ICompilingScheduleRepository _сompilingScheduleRepository;
+
+ public FormCompilingSchedule(ICompilingScheduleRepository сompilingScheduleRepository, IDisciplineRepository disciplineRepository,
+ IEducatorRepository educatorRepository, IGroupStudentsRepository groupStudentsRepository, IAudienceRepository audienceRepository)
+ {
+ InitializeComponent();
+
+ _сompilingScheduleRepository = сompilingScheduleRepository ??
+ throw new ArgumentNullException(nameof(сompilingScheduleRepository));
+
+ comboBoxEducator.DataSource = educatorRepository.ReadEducators();
+ comboBoxEducator.DisplayMember = "Surname";
+ comboBoxEducator.ValueMember = "Id";
+
+ comboBoxDiscipline.DataSource = disciplineRepository.ReadDisciplines();
+ comboBoxDiscipline.DisplayMember = "NameDiscipline";
+ comboBoxDiscipline.ValueMember = "Id";
+
+ comboBoxGroupStudents.DataSource = groupStudentsRepository.ReadGroupsStudents();
+ comboBoxGroupStudents.DisplayMember = "AbbreviationGroup";
+ comboBoxGroupStudents.ValueMember = "Id";
+
+ comboBoxAudience.DataSource = audienceRepository.ReadAudiences();
+ comboBoxAudience.DisplayMember = "NumberAudience";
+ comboBoxAudience.ValueMember = "Id";
+
+ comboBoxTypeWeek.DataSource = Enum.GetValues(typeof(TypeWeek));
+
+ comboBoxTypeActivity.DataSource = Enum.GetValues(typeof(TypeActivity));
+ }
+
+ private void ButtonSave_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (comboBoxEducator.SelectedIndex < 0 || comboBoxDiscipline.SelectedIndex < 0 || comboBoxGroupStudents.SelectedIndex < 0 ||
+ comboBoxAudience.SelectedIndex < 0 || comboBoxTypeWeek.SelectedIndex < 1 || comboBoxTypeActivity.SelectedIndex < 1)
+ {
+ throw new Exception("Имеются незаполненные поля");
+ }
+
+ _сompilingScheduleRepository.CreateCompilingSchedule(CompilingSchedule.CreateOperation(0,
+ (int)comboBoxEducator.SelectedValue!, (int)comboBoxDiscipline.SelectedValue!,
+ (int)comboBoxGroupStudents.SelectedValue!, (int)comboBoxAudience.SelectedValue!,
+ (TypeWeek)comboBoxTypeWeek.SelectedItem!, Convert.ToInt32(numericUpDownNumberDay.Value),
+ Convert.ToInt32(numericUpDownNumberPair.Value), (TypeActivity)comboBoxTypeActivity.SelectedItem!));
+
+ 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/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.resx b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedule.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/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.Designer.cs
new file mode 100644
index 0000000..e176a51
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.Designer.cs
@@ -0,0 +1,113 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormCompilingSchedules
+ {
+ ///
+ /// 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()
+ {
+ panel = new Panel();
+ buttonDel = new Button();
+ buttonAdd = new Button();
+ dataGridViewData = new DataGridView();
+ panel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
+ SuspendLayout();
+ //
+ // panel
+ //
+ panel.Controls.Add(buttonDel);
+ panel.Controls.Add(buttonAdd);
+ panel.Dock = DockStyle.Right;
+ panel.Location = new Point(1113, 0);
+ panel.Name = "panel";
+ panel.Size = new Size(140, 484);
+ panel.TabIndex = 3;
+ //
+ // buttonDel
+ //
+ buttonDel.BackgroundImage = Properties.Resources.Del;
+ buttonDel.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonDel.Location = new Point(24, 372);
+ buttonDel.Name = "buttonDel";
+ buttonDel.Size = new Size(94, 66);
+ buttonDel.TabIndex = 4;
+ buttonDel.UseVisualStyleBackColor = true;
+ buttonDel.Click += ButtonDel_Click;
+ //
+ // buttonAdd
+ //
+ buttonAdd.BackgroundImage = Properties.Resources.Add;
+ buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonAdd.Location = new Point(24, 12);
+ buttonAdd.Name = "buttonAdd";
+ buttonAdd.Size = new Size(94, 66);
+ buttonAdd.TabIndex = 0;
+ buttonAdd.UseVisualStyleBackColor = true;
+ buttonAdd.Click += ButtonAdd_Click;
+ //
+ // dataGridViewData
+ //
+ dataGridViewData.AllowUserToAddRows = false;
+ dataGridViewData.AllowUserToDeleteRows = false;
+ dataGridViewData.AllowUserToResizeColumns = false;
+ dataGridViewData.AllowUserToResizeRows = false;
+ dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
+ dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridViewData.Dock = DockStyle.Fill;
+ dataGridViewData.Location = new Point(0, 0);
+ dataGridViewData.MultiSelect = false;
+ dataGridViewData.Name = "dataGridViewData";
+ dataGridViewData.ReadOnly = true;
+ dataGridViewData.RowHeadersVisible = false;
+ dataGridViewData.RowHeadersWidth = 51;
+ dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
+ dataGridViewData.Size = new Size(1113, 484);
+ dataGridViewData.TabIndex = 4;
+ //
+ // FormCompilingSchedules
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(1253, 484);
+ Controls.Add(dataGridViewData);
+ Controls.Add(panel);
+ Name = "FormCompilingSchedules";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Cоставление расписаний";
+ Load += FormCompilingSchedules_Load;
+ panel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panel;
+ private Button buttonDel;
+ private Button buttonAdd;
+ private DataGridView dataGridViewData;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.cs b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.cs
new file mode 100644
index 0000000..2dadab9
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.cs
@@ -0,0 +1,89 @@
+using ProjectSchedule.Repositories;
+using Unity;
+
+namespace ProjectSchedule.Forms
+{
+ public partial class FormCompilingSchedules : Form
+ {
+ private readonly IUnityContainer _container;
+
+ private readonly ICompilingScheduleRepository _сompilingScheduleRepository;
+
+ public FormCompilingSchedules(IUnityContainer container, ICompilingScheduleRepository сompilingScheduleRepository)
+ {
+ InitializeComponent();
+
+ _container = container ??
+ throw new ArgumentNullException(nameof(container));
+ _сompilingScheduleRepository = сompilingScheduleRepository ??
+ throw new ArgumentNullException(nameof(сompilingScheduleRepository));
+ }
+
+ private void FormCompilingSchedules_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
+ {
+ _сompilingScheduleRepository.DeleteCompilingSchedule(findId);
+ LoadList();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void LoadList()
+ {
+ dataGridViewData.DataSource = _сompilingScheduleRepository.ReadCompilingSchedules();
+ }
+
+ private bool TryGetIdentifierFromSelectedRow(out int id)
+ {
+ id = 0;
+
+ if (dataGridViewData.SelectedRows.Count < 1)
+ {
+ MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+
+ id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.resx b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCompilingSchedules.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/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.Designer.cs
new file mode 100644
index 0000000..bdbf405
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.Designer.cs
@@ -0,0 +1,217 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormCurriculumSupplement
+ {
+ ///
+ /// 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()
+ {
+ comboBoxDiscipline = new ComboBox();
+ comboBoxGroupStudents = new ComboBox();
+ labelDiscipline = new Label();
+ labelGroupStudents = new Label();
+ labelNameCurriculum = new Label();
+ labelQuantityLectures = new Label();
+ labelQuantityPractices = new Label();
+ labelSemester = new Label();
+ textBoxNameCurriculum = new TextBox();
+ numericUpDownQuantityLectures = new NumericUpDown();
+ numericUpDownQuantityPractices = new NumericUpDown();
+ buttonSave = new Button();
+ buttonCancel = new Button();
+ textBoxSemester = new TextBox();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownQuantityLectures).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownQuantityPractices).BeginInit();
+ SuspendLayout();
+ //
+ // comboBoxDiscipline
+ //
+ comboBoxDiscipline.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxDiscipline.FormattingEnabled = true;
+ comboBoxDiscipline.Location = new Point(252, 12);
+ comboBoxDiscipline.Name = "comboBoxDiscipline";
+ comboBoxDiscipline.Size = new Size(218, 28);
+ comboBoxDiscipline.TabIndex = 0;
+ //
+ // comboBoxGroupStudents
+ //
+ comboBoxGroupStudents.DropDownStyle = ComboBoxStyle.DropDownList;
+ comboBoxGroupStudents.FormattingEnabled = true;
+ comboBoxGroupStudents.Location = new Point(252, 68);
+ comboBoxGroupStudents.Name = "comboBoxGroupStudents";
+ comboBoxGroupStudents.Size = new Size(218, 28);
+ comboBoxGroupStudents.TabIndex = 1;
+ //
+ // labelDiscipline
+ //
+ labelDiscipline.AutoSize = true;
+ labelDiscipline.Location = new Point(12, 15);
+ labelDiscipline.Name = "labelDiscipline";
+ labelDiscipline.Size = new Size(99, 20);
+ labelDiscipline.TabIndex = 2;
+ labelDiscipline.Text = "Дисциплина:";
+ //
+ // labelGroupStudents
+ //
+ labelGroupStudents.AutoSize = true;
+ labelGroupStudents.Location = new Point(12, 71);
+ labelGroupStudents.Name = "labelGroupStudents";
+ labelGroupStudents.Size = new Size(133, 20);
+ labelGroupStudents.TabIndex = 3;
+ labelGroupStudents.Text = "Группа студентов:";
+ //
+ // labelNameCurriculum
+ //
+ labelNameCurriculum.AutoSize = true;
+ labelNameCurriculum.Location = new Point(12, 130);
+ labelNameCurriculum.Name = "labelNameCurriculum";
+ labelNameCurriculum.Size = new Size(230, 20);
+ labelNameCurriculum.TabIndex = 4;
+ labelNameCurriculum.Text = "Название учебной программы:";
+ //
+ // labelQuantityLectures
+ //
+ labelQuantityLectures.AutoSize = true;
+ labelQuantityLectures.Location = new Point(12, 189);
+ labelQuantityLectures.Name = "labelQuantityLectures";
+ labelQuantityLectures.Size = new Size(147, 20);
+ labelQuantityLectures.TabIndex = 5;
+ labelQuantityLectures.Text = "Количество лекций:";
+ //
+ // labelQuantityPractices
+ //
+ labelQuantityPractices.AutoSize = true;
+ labelQuantityPractices.Location = new Point(12, 236);
+ labelQuantityPractices.Name = "labelQuantityPractices";
+ labelQuantityPractices.Size = new Size(152, 20);
+ labelQuantityPractices.TabIndex = 6;
+ labelQuantityPractices.Text = "Количество практик:";
+ //
+ // labelSemester
+ //
+ labelSemester.AutoSize = true;
+ labelSemester.Location = new Point(12, 278);
+ labelSemester.Name = "labelSemester";
+ labelSemester.Size = new Size(70, 20);
+ labelSemester.TabIndex = 7;
+ labelSemester.Text = "Семестр:";
+ //
+ // textBoxNameCurriculum
+ //
+ textBoxNameCurriculum.Location = new Point(252, 127);
+ textBoxNameCurriculum.Name = "textBoxNameCurriculum";
+ textBoxNameCurriculum.Size = new Size(218, 27);
+ textBoxNameCurriculum.TabIndex = 8;
+ //
+ // numericUpDownQuantityLectures
+ //
+ numericUpDownQuantityLectures.Location = new Point(252, 187);
+ numericUpDownQuantityLectures.Maximum = new decimal(new int[] { 40, 0, 0, 0 });
+ numericUpDownQuantityLectures.Name = "numericUpDownQuantityLectures";
+ numericUpDownQuantityLectures.Size = new Size(218, 27);
+ numericUpDownQuantityLectures.TabIndex = 10;
+ //
+ // numericUpDownQuantityPractices
+ //
+ numericUpDownQuantityPractices.Location = new Point(252, 234);
+ numericUpDownQuantityPractices.Maximum = new decimal(new int[] { 40, 0, 0, 0 });
+ numericUpDownQuantityPractices.Name = "numericUpDownQuantityPractices";
+ numericUpDownQuantityPractices.Size = new Size(218, 27);
+ numericUpDownQuantityPractices.TabIndex = 11;
+ //
+ // buttonSave
+ //
+ buttonSave.Location = new Point(12, 312);
+ buttonSave.Name = "buttonSave";
+ buttonSave.Size = new Size(116, 29);
+ buttonSave.TabIndex = 12;
+ buttonSave.Text = "Сохранить";
+ buttonSave.UseVisualStyleBackColor = true;
+ buttonSave.Click += ButtonSave_Click;
+ //
+ // buttonCancel
+ //
+ buttonCancel.Location = new Point(354, 312);
+ buttonCancel.Name = "buttonCancel";
+ buttonCancel.Size = new Size(116, 29);
+ buttonCancel.TabIndex = 13;
+ buttonCancel.Text = "Отмена";
+ buttonCancel.UseVisualStyleBackColor = true;
+ buttonCancel.Click += ButtonCancel_Click;
+ //
+ // textBoxSemester
+ //
+ textBoxSemester.Location = new Point(252, 275);
+ textBoxSemester.Name = "textBoxSemester";
+ textBoxSemester.Size = new Size(218, 27);
+ textBoxSemester.TabIndex = 15;
+ //
+ // FormCurriculumSupplement
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(482, 353);
+ Controls.Add(textBoxSemester);
+ Controls.Add(buttonCancel);
+ Controls.Add(buttonSave);
+ Controls.Add(numericUpDownQuantityPractices);
+ Controls.Add(numericUpDownQuantityLectures);
+ Controls.Add(textBoxNameCurriculum);
+ Controls.Add(labelSemester);
+ Controls.Add(labelQuantityPractices);
+ Controls.Add(labelQuantityLectures);
+ Controls.Add(labelNameCurriculum);
+ Controls.Add(labelGroupStudents);
+ Controls.Add(labelDiscipline);
+ Controls.Add(comboBoxGroupStudents);
+ Controls.Add(comboBoxDiscipline);
+ Name = "FormCurriculumSupplement";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Дополнение учебного плана";
+ ((System.ComponentModel.ISupportInitialize)numericUpDownQuantityLectures).EndInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownQuantityPractices).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private ComboBox comboBoxDiscipline;
+ private ComboBox comboBoxGroupStudents;
+ private Label labelDiscipline;
+ private Label labelGroupStudents;
+ private Label labelNameCurriculum;
+ private Label labelQuantityLectures;
+ private Label labelQuantityPractices;
+ private Label labelSemester;
+ private TextBox textBoxNameCurriculum;
+ private NumericUpDown numericUpDownQuantityLectures;
+ private NumericUpDown numericUpDownQuantityPractices;
+ private Button buttonSave;
+ private Button buttonCancel;
+ private NumericUpDown numericUpDown;
+ private TextBox textBoxSemester;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.cs b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.cs
new file mode 100644
index 0000000..e671ef4
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.cs
@@ -0,0 +1,51 @@
+using ProjectSchedule.Entities;
+using ProjectSchedule.Repositories;
+
+namespace ProjectSchedule.Forms
+{
+ public partial class FormCurriculumSupplement : Form
+ {
+ private readonly ICurriculumSupplementRepository _curriculumSupplementRepository;
+
+ public FormCurriculumSupplement(ICurriculumSupplementRepository curriculumSupplementRepository,
+ IDisciplineRepository disciplineRepository, IGroupStudentsRepository groupStudentsRepository)
+ {
+ InitializeComponent();
+
+ _curriculumSupplementRepository = curriculumSupplementRepository ??
+ throw new ArgumentNullException(nameof(curriculumSupplementRepository));
+
+ comboBoxDiscipline.DataSource = disciplineRepository.ReadDisciplines();
+ comboBoxDiscipline.DisplayMember = "NameDiscipline";
+ comboBoxDiscipline.ValueMember = "Id";
+
+ comboBoxGroupStudents.DataSource = groupStudentsRepository.ReadGroupsStudents();
+ comboBoxGroupStudents.DisplayMember = "AbbreviationGroup";
+ comboBoxGroupStudents.ValueMember = "Id";
+ }
+
+ private void ButtonSave_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (comboBoxDiscipline.SelectedIndex < 0 || comboBoxGroupStudents.SelectedIndex < 0)
+ {
+ throw new Exception("Имеются незаполненные поля");
+ }
+
+ _curriculumSupplementRepository.CreateCurriculumSupplement(CurriculumSupplement.CreateOperation(0,
+ (int)comboBoxDiscipline.SelectedValue!, (int)comboBoxGroupStudents.SelectedValue!,
+ textBoxNameCurriculum.Text, Convert.ToInt32(numericUpDownQuantityLectures.Value),
+ Convert.ToInt32(numericUpDownQuantityPractices.Value), textBoxSemester.Text));
+
+ 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/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.resx b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplement.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/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.Designer.cs
new file mode 100644
index 0000000..79b0a4c
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.Designer.cs
@@ -0,0 +1,113 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormCurriculumSupplements
+ {
+ ///
+ /// 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()
+ {
+ panel = new Panel();
+ buttonDel = new Button();
+ buttonAdd = new Button();
+ dataGridViewData = new DataGridView();
+ panel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
+ SuspendLayout();
+ //
+ // panel
+ //
+ panel.Controls.Add(buttonDel);
+ panel.Controls.Add(buttonAdd);
+ panel.Dock = DockStyle.Right;
+ panel.Location = new Point(764, 0);
+ panel.Name = "panel";
+ panel.Size = new Size(140, 453);
+ panel.TabIndex = 2;
+ //
+ // buttonDel
+ //
+ buttonDel.BackgroundImage = Properties.Resources.Del;
+ buttonDel.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonDel.Location = new Point(24, 372);
+ buttonDel.Name = "buttonDel";
+ buttonDel.Size = new Size(94, 66);
+ buttonDel.TabIndex = 4;
+ buttonDel.UseVisualStyleBackColor = true;
+ buttonDel.Click += ButtonDel_Click;
+ //
+ // buttonAdd
+ //
+ buttonAdd.BackgroundImage = Properties.Resources.Add;
+ buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonAdd.Location = new Point(24, 12);
+ buttonAdd.Name = "buttonAdd";
+ buttonAdd.Size = new Size(94, 66);
+ buttonAdd.TabIndex = 0;
+ buttonAdd.UseVisualStyleBackColor = true;
+ buttonAdd.Click += ButtonAdd_Click;
+ //
+ // dataGridViewData
+ //
+ dataGridViewData.AllowUserToAddRows = false;
+ dataGridViewData.AllowUserToDeleteRows = false;
+ dataGridViewData.AllowUserToResizeColumns = false;
+ dataGridViewData.AllowUserToResizeRows = false;
+ dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
+ dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridViewData.Dock = DockStyle.Fill;
+ dataGridViewData.Location = new Point(0, 0);
+ dataGridViewData.MultiSelect = false;
+ dataGridViewData.Name = "dataGridViewData";
+ dataGridViewData.ReadOnly = true;
+ dataGridViewData.RowHeadersVisible = false;
+ dataGridViewData.RowHeadersWidth = 51;
+ dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
+ dataGridViewData.Size = new Size(764, 453);
+ dataGridViewData.TabIndex = 3;
+ //
+ // FormCurriculumSupplements
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(904, 453);
+ Controls.Add(dataGridViewData);
+ Controls.Add(panel);
+ Name = "FormCurriculumSupplements";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Дополнения учебного плана";
+ Load += FormCurriculumSupplements_Load;
+ panel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panel;
+ private Button buttonDel;
+ private Button buttonAdd;
+ private DataGridView dataGridViewData;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.cs b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.cs
new file mode 100644
index 0000000..07aa7de
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.cs
@@ -0,0 +1,89 @@
+using ProjectSchedule.Repositories;
+using Unity;
+
+namespace ProjectSchedule.Forms
+{
+ public partial class FormCurriculumSupplements : Form
+ {
+ private readonly IUnityContainer _container;
+
+ private readonly ICurriculumSupplementRepository _curriculumSupplementRepository;
+
+ public FormCurriculumSupplements(IUnityContainer container, ICurriculumSupplementRepository curriculumSupplementRepository)
+ {
+ InitializeComponent();
+
+ _container = container ??
+ throw new ArgumentNullException(nameof(container));
+ _curriculumSupplementRepository = curriculumSupplementRepository ??
+ throw new ArgumentNullException(nameof(curriculumSupplementRepository));
+ }
+
+ private void FormCurriculumSupplements_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
+ {
+ _curriculumSupplementRepository.DeleteCurriculumSupplement(findId);
+ LoadList();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void LoadList()
+ {
+ dataGridViewData.DataSource = _curriculumSupplementRepository.ReadCurriculumSupplements();
+ }
+
+ private bool TryGetIdentifierFromSelectedRow(out int id)
+ {
+ id = 0;
+
+ if (dataGridViewData.SelectedRows.Count < 1)
+ {
+ MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+
+ id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.resx b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormCurriculumSupplements.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/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.Designer.cs
new file mode 100644
index 0000000..b7b81a8
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.Designer.cs
@@ -0,0 +1,96 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormDiscipline
+ {
+ ///
+ /// 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()
+ {
+ textBoxNameDiscipline = new TextBox();
+ labelNameDiscipline = new Label();
+ buttonSave = new Button();
+ buttonCancel = new Button();
+ SuspendLayout();
+ //
+ // textBoxNameDiscipline
+ //
+ textBoxNameDiscipline.Location = new Point(228, 42);
+ textBoxNameDiscipline.Name = "textBoxNameDiscipline";
+ textBoxNameDiscipline.Size = new Size(214, 27);
+ textBoxNameDiscipline.TabIndex = 0;
+ //
+ // labelNameDiscipline
+ //
+ labelNameDiscipline.AutoSize = true;
+ labelNameDiscipline.Location = new Point(25, 45);
+ labelNameDiscipline.Name = "labelNameDiscipline";
+ labelNameDiscipline.Size = new Size(172, 20);
+ labelNameDiscipline.TabIndex = 1;
+ labelNameDiscipline.Text = "Название дисциплины:";
+ //
+ // buttonSave
+ //
+ buttonSave.Location = new Point(25, 131);
+ buttonSave.Name = "buttonSave";
+ buttonSave.Size = new Size(116, 29);
+ buttonSave.TabIndex = 4;
+ buttonSave.Text = "Сохранить";
+ buttonSave.UseVisualStyleBackColor = true;
+ buttonSave.Click += ButtonSave_Click;
+ //
+ // buttonCancel
+ //
+ buttonCancel.Location = new Point(326, 131);
+ buttonCancel.Name = "buttonCancel";
+ buttonCancel.Size = new Size(116, 29);
+ buttonCancel.TabIndex = 5;
+ buttonCancel.Text = "Отмена";
+ buttonCancel.UseVisualStyleBackColor = true;
+ buttonCancel.Click += ButtonCancel_Click;
+ //
+ // FormDiscipline
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(468, 184);
+ Controls.Add(buttonCancel);
+ Controls.Add(buttonSave);
+ Controls.Add(labelNameDiscipline);
+ Controls.Add(textBoxNameDiscipline);
+ Name = "FormDiscipline";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Дисциплина";
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private TextBox textBoxNameDiscipline;
+ private Label labelNameDiscipline;
+ private Button buttonSave;
+ private Button buttonCancel;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.cs b/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.cs
new file mode 100644
index 0000000..a523847
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.cs
@@ -0,0 +1,70 @@
+using ProjectSchedule.Entities;
+using ProjectSchedule.Repositories;
+
+namespace ProjectSchedule.Forms;
+
+public partial class FormDiscipline : Form
+{
+ private readonly IDisciplineRepository _disciplineRepository;
+
+ private int? _disciplineId;
+
+ public int Id
+ {
+ set
+ {
+ try
+ {
+ var discipline = _disciplineRepository.ReadDisciplineById(value);
+ if (discipline == null)
+ {
+ throw new InvalidDataException(nameof(discipline));
+ }
+ textBoxNameDiscipline.Text = discipline.NameDiscipline;
+ _disciplineId = value;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ }
+
+ public FormDiscipline(IDisciplineRepository disciplineRepository)
+ {
+ InitializeComponent();
+ _disciplineRepository = disciplineRepository ??
+ throw new ArgumentNullException(nameof(disciplineRepository));
+ }
+
+ private void ButtonSave_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (string.IsNullOrWhiteSpace(textBoxNameDiscipline.Text))
+ {
+ throw new Exception("Поле 'Название дисциплины' должно быть заполнено.");
+ }
+ if (_disciplineId.HasValue)
+ {
+ _disciplineRepository.UpdateDiscipline(CreateDiscipline(_disciplineId.Value));
+ }
+ else
+ {
+ _disciplineRepository.CreateDiscipline(CreateDiscipline(0));
+ }
+
+ Close();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void ButtonCancel_Click(object sender, EventArgs e) => Close();
+
+ private Discipline CreateDiscipline(int id) =>
+ Discipline.CreateEntity(id, textBoxNameDiscipline.Text);
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.resx b/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormDiscipline.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/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.Designer.cs
new file mode 100644
index 0000000..c5a909f
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.Designer.cs
@@ -0,0 +1,127 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormDisciplines
+ {
+ ///
+ /// 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()
+ {
+ panel = new Panel();
+ buttonDel = new Button();
+ buttonUpd = new Button();
+ buttonAdd = new Button();
+ dataGridViewData = new DataGridView();
+ panel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
+ SuspendLayout();
+ //
+ // panel
+ //
+ panel.Controls.Add(buttonDel);
+ panel.Controls.Add(buttonUpd);
+ panel.Controls.Add(buttonAdd);
+ panel.Dock = DockStyle.Right;
+ panel.Location = new Point(660, 0);
+ panel.Name = "panel";
+ panel.Size = new Size(140, 450);
+ panel.TabIndex = 1;
+ //
+ // buttonDel
+ //
+ buttonDel.BackgroundImage = Properties.Resources.Del;
+ buttonDel.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonDel.Location = new Point(24, 194);
+ buttonDel.Name = "buttonDel";
+ buttonDel.Size = new Size(94, 66);
+ buttonDel.TabIndex = 4;
+ buttonDel.UseVisualStyleBackColor = true;
+ buttonDel.Click += ButtonDel_Click;
+ //
+ // buttonUpd
+ //
+ buttonUpd.BackgroundImage = Properties.Resources.Upd;
+ buttonUpd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonUpd.Location = new Point(24, 106);
+ buttonUpd.Name = "buttonUpd";
+ buttonUpd.Size = new Size(94, 66);
+ buttonUpd.TabIndex = 3;
+ buttonUpd.UseVisualStyleBackColor = true;
+ buttonUpd.Click += ButtonUpd_Click;
+ //
+ // buttonAdd
+ //
+ buttonAdd.BackgroundImage = Properties.Resources.Add;
+ buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonAdd.Location = new Point(24, 12);
+ buttonAdd.Name = "buttonAdd";
+ buttonAdd.Size = new Size(94, 66);
+ buttonAdd.TabIndex = 0;
+ buttonAdd.UseVisualStyleBackColor = true;
+ buttonAdd.Click += ButtonAdd_Click;
+ //
+ // dataGridViewData
+ //
+ dataGridViewData.AllowUserToAddRows = false;
+ dataGridViewData.AllowUserToDeleteRows = false;
+ dataGridViewData.AllowUserToResizeColumns = false;
+ dataGridViewData.AllowUserToResizeRows = false;
+ dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
+ dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridViewData.Dock = DockStyle.Fill;
+ dataGridViewData.Location = new Point(0, 0);
+ dataGridViewData.MultiSelect = false;
+ dataGridViewData.Name = "dataGridViewData";
+ dataGridViewData.ReadOnly = true;
+ dataGridViewData.RowHeadersVisible = false;
+ dataGridViewData.RowHeadersWidth = 51;
+ dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
+ dataGridViewData.Size = new Size(660, 450);
+ dataGridViewData.TabIndex = 2;
+ //
+ // FormDisciplines
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(dataGridViewData);
+ Controls.Add(panel);
+ Name = "FormDisciplines";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Дисциплины";
+ Load += FormDisciplines_Load;
+ panel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panel;
+ private Button buttonDel;
+ private Button buttonUpd;
+ private Button buttonAdd;
+ private DataGridView dataGridViewData;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.cs b/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.cs
new file mode 100644
index 0000000..3211251
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.cs
@@ -0,0 +1,98 @@
+using ProjectSchedule.Repositories;
+using Unity;
+
+namespace ProjectSchedule.Forms
+{
+ public partial class FormDisciplines : Form
+ {
+ private readonly IUnityContainer _container;
+
+ private readonly IDisciplineRepository _disciplineRepository;
+ public FormDisciplines(IUnityContainer container, IDisciplineRepository disciplineRepository)
+ {
+ InitializeComponent();
+ _container = container ??
+ throw new ArgumentNullException(nameof(container));
+ _disciplineRepository = disciplineRepository ??
+ throw new ArgumentNullException(nameof(disciplineRepository));
+ }
+ private void FormDisciplines_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
+ {
+ _disciplineRepository.DeleteDiscipline(findId);
+ LoadList();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void LoadList() => dataGridViewData.DataSource = _disciplineRepository.ReadDisciplines();
+ private bool TryGetIdentifierFromSelectedRow(out int id)
+ {
+ id = 0;
+ if (dataGridViewData.SelectedRows.Count < 1)
+ {
+ MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+
+ id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.resx b/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormDisciplines.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/ProjectSchedule/ProjectSchedule/Forms/FormEducator.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormEducator.Designer.cs
new file mode 100644
index 0000000..ee6c5b4
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormEducator.Designer.cs
@@ -0,0 +1,140 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormEducator
+ {
+ ///
+ /// 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()
+ {
+ labelSurname = new Label();
+ labelName = new Label();
+ labelPatronymic = new Label();
+ textBoxName = new TextBox();
+ textBoxSurname = new TextBox();
+ textBoxPatronymic = new TextBox();
+ buttonSave = new Button();
+ buttonCancel = new Button();
+ SuspendLayout();
+ //
+ // labelSurname
+ //
+ labelSurname.AutoSize = true;
+ labelSurname.Location = new Point(21, 30);
+ labelSurname.Name = "labelSurname";
+ labelSurname.Size = new Size(76, 20);
+ labelSurname.TabIndex = 0;
+ labelSurname.Text = "Фамилия:";
+ //
+ // labelName
+ //
+ labelName.AutoSize = true;
+ labelName.Location = new Point(21, 78);
+ labelName.Name = "labelName";
+ labelName.Size = new Size(42, 20);
+ labelName.TabIndex = 1;
+ labelName.Text = "Имя:";
+ //
+ // labelPatronymic
+ //
+ labelPatronymic.AutoSize = true;
+ labelPatronymic.Location = new Point(21, 133);
+ labelPatronymic.Name = "labelPatronymic";
+ labelPatronymic.Size = new Size(75, 20);
+ labelPatronymic.TabIndex = 2;
+ labelPatronymic.Text = "Отчество:";
+ //
+ // textBoxName
+ //
+ textBoxName.Location = new Point(161, 75);
+ textBoxName.Name = "textBoxName";
+ textBoxName.Size = new Size(232, 27);
+ textBoxName.TabIndex = 3;
+ //
+ // textBoxSurname
+ //
+ textBoxSurname.Location = new Point(161, 27);
+ textBoxSurname.Name = "textBoxSurname";
+ textBoxSurname.Size = new Size(232, 27);
+ textBoxSurname.TabIndex = 4;
+ //
+ // textBoxPatronymic
+ //
+ textBoxPatronymic.Location = new Point(161, 130);
+ textBoxPatronymic.Name = "textBoxPatronymic";
+ textBoxPatronymic.Size = new Size(232, 27);
+ textBoxPatronymic.TabIndex = 5;
+ //
+ // buttonSave
+ //
+ buttonSave.Location = new Point(21, 200);
+ buttonSave.Name = "buttonSave";
+ buttonSave.Size = new Size(116, 29);
+ buttonSave.TabIndex = 6;
+ buttonSave.Text = "Сохранить";
+ buttonSave.UseVisualStyleBackColor = true;
+ buttonSave.Click += ButtonSave_Click;
+ //
+ // buttonCancel
+ //
+ buttonCancel.Location = new Point(277, 200);
+ buttonCancel.Name = "buttonCancel";
+ buttonCancel.Size = new Size(116, 29);
+ buttonCancel.TabIndex = 7;
+ buttonCancel.Text = "Отмена";
+ buttonCancel.UseVisualStyleBackColor = true;
+ buttonCancel.Click += ButtonCancel_Click;
+ //
+ // FormEducator
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(405, 246);
+ Controls.Add(buttonCancel);
+ Controls.Add(buttonSave);
+ Controls.Add(textBoxPatronymic);
+ Controls.Add(textBoxSurname);
+ Controls.Add(textBoxName);
+ Controls.Add(labelPatronymic);
+ Controls.Add(labelName);
+ Controls.Add(labelSurname);
+ Name = "FormEducator";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Преподаватель";
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Label labelSurname;
+ private Label labelName;
+ private Label labelPatronymic;
+ private TextBox textBoxName;
+ private TextBox textBoxSurname;
+ private TextBox textBoxPatronymic;
+ private Button buttonSave;
+ private Button buttonCancel;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormEducator.cs b/ProjectSchedule/ProjectSchedule/Forms/FormEducator.cs
new file mode 100644
index 0000000..8ba5ec6
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormEducator.cs
@@ -0,0 +1,72 @@
+using ProjectSchedule.Entities;
+using ProjectSchedule.Repositories;
+
+namespace ProjectSchedule.Forms;
+
+public partial class FormEducator : Form
+{
+ private readonly IEducatorRepository _educatorRepository;
+
+ private int? _educatorId;
+
+ public int Id
+ {
+ set
+ {
+ try
+ {
+ var educator = _educatorRepository.ReadEducatorById(value);
+ if (educator == null)
+ {
+ throw new InvalidDataException(nameof(educator));
+ }
+ textBoxSurname.Text = educator.Surname;
+ textBoxName.Text = educator.Name;
+ textBoxPatronymic.Text = educator.Patronymic;
+ _educatorId = value;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ }
+
+ public FormEducator(IEducatorRepository educatorRepository)
+ {
+ InitializeComponent();
+ _educatorRepository = educatorRepository ??
+ throw new ArgumentNullException(nameof(educatorRepository));
+ }
+
+ private void ButtonSave_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (string.IsNullOrWhiteSpace(textBoxSurname.Text) || string.IsNullOrWhiteSpace(textBoxName.Text) ||
+ string.IsNullOrWhiteSpace(textBoxPatronymic.Text))
+ {
+ throw new Exception("Имеются незаполненные поля");
+ }
+ if (_educatorId.HasValue)
+ {
+ _educatorRepository.UpdateEducator(CreateEducator(_educatorId.Value));
+ }
+ else
+ {
+ _educatorRepository.CreateEducator(CreateEducator(0));
+ }
+ Close();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void ButtonCancel_Click(object sender, EventArgs e) => Close();
+
+ private Educator CreateEducator(int id) =>
+ Educator.CreateEntity(id, textBoxSurname.Text, textBoxName.Text, textBoxPatronymic.Text);
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormEducator.resx b/ProjectSchedule/ProjectSchedule/Forms/FormEducator.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormEducator.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/ProjectSchedule/ProjectSchedule/Forms/FormEducators.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormEducators.Designer.cs
new file mode 100644
index 0000000..0e44356
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormEducators.Designer.cs
@@ -0,0 +1,127 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormEducators
+ {
+ ///
+ /// 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()
+ {
+ panel = new Panel();
+ buttonDel = new Button();
+ buttonUpd = new Button();
+ buttonAdd = new Button();
+ dataGridViewData = new DataGridView();
+ panel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
+ SuspendLayout();
+ //
+ // panel
+ //
+ panel.Controls.Add(buttonDel);
+ panel.Controls.Add(buttonUpd);
+ panel.Controls.Add(buttonAdd);
+ panel.Dock = DockStyle.Right;
+ panel.Location = new Point(642, 0);
+ panel.Name = "panel";
+ panel.Size = new Size(140, 453);
+ panel.TabIndex = 1;
+ //
+ // buttonDel
+ //
+ buttonDel.BackgroundImage = Properties.Resources.Del;
+ buttonDel.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonDel.Location = new Point(24, 194);
+ buttonDel.Name = "buttonDel";
+ buttonDel.Size = new Size(94, 66);
+ buttonDel.TabIndex = 4;
+ buttonDel.UseVisualStyleBackColor = true;
+ buttonDel.Click += ButtonDel_Click;
+ //
+ // buttonUpd
+ //
+ buttonUpd.BackgroundImage = Properties.Resources.Upd;
+ buttonUpd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonUpd.Location = new Point(24, 106);
+ buttonUpd.Name = "buttonUpd";
+ buttonUpd.Size = new Size(94, 66);
+ buttonUpd.TabIndex = 3;
+ buttonUpd.UseVisualStyleBackColor = true;
+ buttonUpd.Click += ButtonUpd_Click;
+ //
+ // buttonAdd
+ //
+ buttonAdd.BackgroundImage = Properties.Resources.Add;
+ buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonAdd.Location = new Point(24, 12);
+ buttonAdd.Name = "buttonAdd";
+ buttonAdd.Size = new Size(94, 66);
+ buttonAdd.TabIndex = 0;
+ buttonAdd.UseVisualStyleBackColor = true;
+ buttonAdd.Click += ButtonAdd_Click;
+ //
+ // dataGridViewData
+ //
+ dataGridViewData.AllowUserToAddRows = false;
+ dataGridViewData.AllowUserToDeleteRows = false;
+ dataGridViewData.AllowUserToResizeColumns = false;
+ dataGridViewData.AllowUserToResizeRows = false;
+ dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
+ dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridViewData.Dock = DockStyle.Fill;
+ dataGridViewData.Location = new Point(0, 0);
+ dataGridViewData.MultiSelect = false;
+ dataGridViewData.Name = "dataGridViewData";
+ dataGridViewData.ReadOnly = true;
+ dataGridViewData.RowHeadersVisible = false;
+ dataGridViewData.RowHeadersWidth = 51;
+ dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
+ dataGridViewData.Size = new Size(642, 453);
+ dataGridViewData.TabIndex = 2;
+ //
+ // FormEducators
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(782, 453);
+ Controls.Add(dataGridViewData);
+ Controls.Add(panel);
+ Name = "FormEducators";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Преподаватели";
+ Load += FormEducators_Load;
+ panel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panel;
+ private Button buttonDel;
+ private Button buttonUpd;
+ private Button buttonAdd;
+ private DataGridView dataGridViewData;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormEducators.cs b/ProjectSchedule/ProjectSchedule/Forms/FormEducators.cs
new file mode 100644
index 0000000..d233401
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormEducators.cs
@@ -0,0 +1,98 @@
+using ProjectSchedule.Repositories;
+using Unity;
+
+namespace ProjectSchedule.Forms
+{
+ public partial class FormEducators : Form
+ {
+ private readonly IUnityContainer _container;
+
+ private readonly IEducatorRepository _educatorRepository;
+ public FormEducators(IUnityContainer container, IEducatorRepository educatorRepository)
+ {
+ InitializeComponent();
+ _container = container ??
+ throw new ArgumentNullException(nameof(container));
+ _educatorRepository = educatorRepository ??
+ throw new ArgumentNullException(nameof(educatorRepository));
+ }
+ private void FormEducators_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
+ {
+ _educatorRepository.DeleteEducator(findId);
+ LoadList();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void LoadList() => dataGridViewData.DataSource = _educatorRepository.ReadEducators();
+ private bool TryGetIdentifierFromSelectedRow(out int id)
+ {
+ id = 0;
+ if (dataGridViewData.SelectedRows.Count < 1)
+ {
+ MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+
+ id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormEducators.resx b/ProjectSchedule/ProjectSchedule/Forms/FormEducators.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormEducators.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/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.Designer.cs
new file mode 100644
index 0000000..d4979e5
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.Designer.cs
@@ -0,0 +1,143 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormGroupStudents
+ {
+ ///
+ /// 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()
+ {
+ labelAbbreviationGroup = new Label();
+ labelGroupNumber = new Label();
+ labelQuantityStudents = new Label();
+ numericUpDownQuantityStudents = new NumericUpDown();
+ textBoxAbbreviationGroup = new TextBox();
+ textBoxGroupNumber = new TextBox();
+ buttonSave = new Button();
+ buttonCancel = new Button();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownQuantityStudents).BeginInit();
+ SuspendLayout();
+ //
+ // labelAbbreviationGroup
+ //
+ labelAbbreviationGroup.AutoSize = true;
+ labelAbbreviationGroup.Location = new Point(12, 28);
+ labelAbbreviationGroup.Name = "labelAbbreviationGroup";
+ labelAbbreviationGroup.Size = new Size(167, 20);
+ labelAbbreviationGroup.TabIndex = 0;
+ labelAbbreviationGroup.Text = "Аббревиатура группы:";
+ //
+ // labelGroupNumber
+ //
+ labelGroupNumber.AutoSize = true;
+ labelGroupNumber.Location = new Point(12, 74);
+ labelGroupNumber.Name = "labelGroupNumber";
+ labelGroupNumber.Size = new Size(115, 20);
+ labelGroupNumber.TabIndex = 1;
+ labelGroupNumber.Text = "Номер группы:";
+ //
+ // labelQuantityStudents
+ //
+ labelQuantityStudents.AutoSize = true;
+ labelQuantityStudents.Location = new Point(12, 123);
+ labelQuantityStudents.Name = "labelQuantityStudents";
+ labelQuantityStudents.Size = new Size(165, 20);
+ labelQuantityStudents.TabIndex = 2;
+ labelQuantityStudents.Text = "Количество студентов:";
+ //
+ // numericUpDownQuantityStudents
+ //
+ numericUpDownQuantityStudents.Location = new Point(213, 121);
+ numericUpDownQuantityStudents.Maximum = new decimal(new int[] { 66, 0, 0, 0 });
+ numericUpDownQuantityStudents.Name = "numericUpDownQuantityStudents";
+ numericUpDownQuantityStudents.Size = new Size(176, 27);
+ numericUpDownQuantityStudents.TabIndex = 3;
+ //
+ // textBoxAbbreviationGroup
+ //
+ textBoxAbbreviationGroup.Location = new Point(213, 25);
+ textBoxAbbreviationGroup.Name = "textBoxAbbreviationGroup";
+ textBoxAbbreviationGroup.Size = new Size(176, 27);
+ textBoxAbbreviationGroup.TabIndex = 4;
+ //
+ // textBoxGroupNumber
+ //
+ textBoxGroupNumber.Location = new Point(213, 71);
+ textBoxGroupNumber.Name = "textBoxGroupNumber";
+ textBoxGroupNumber.Size = new Size(176, 27);
+ textBoxGroupNumber.TabIndex = 5;
+ //
+ // buttonSave
+ //
+ buttonSave.Location = new Point(12, 189);
+ buttonSave.Name = "buttonSave";
+ buttonSave.Size = new Size(116, 29);
+ buttonSave.TabIndex = 7;
+ buttonSave.Text = "Сохранить";
+ buttonSave.UseVisualStyleBackColor = true;
+ buttonSave.Click += ButtonSave_Click;
+ //
+ // buttonCancel
+ //
+ buttonCancel.Location = new Point(273, 189);
+ buttonCancel.Name = "buttonCancel";
+ buttonCancel.Size = new Size(116, 29);
+ buttonCancel.TabIndex = 8;
+ buttonCancel.Text = "Отмена";
+ buttonCancel.UseVisualStyleBackColor = true;
+ buttonCancel.Click += ButtonCancel_Click;
+ //
+ // FormGroupStudents
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(401, 230);
+ Controls.Add(buttonCancel);
+ Controls.Add(buttonSave);
+ Controls.Add(textBoxGroupNumber);
+ Controls.Add(textBoxAbbreviationGroup);
+ Controls.Add(numericUpDownQuantityStudents);
+ Controls.Add(labelQuantityStudents);
+ Controls.Add(labelGroupNumber);
+ Controls.Add(labelAbbreviationGroup);
+ Name = "FormGroupStudents";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Группа студентов";
+ ((System.ComponentModel.ISupportInitialize)numericUpDownQuantityStudents).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private Label labelAbbreviationGroup;
+ private Label labelGroupNumber;
+ private Label labelQuantityStudents;
+ private NumericUpDown numericUpDownQuantityStudents;
+ private TextBox textBoxAbbreviationGroup;
+ private TextBox textBoxGroupNumber;
+ private Button buttonSave;
+ private Button buttonCancel;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.cs b/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.cs
new file mode 100644
index 0000000..7d8aa92
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.cs
@@ -0,0 +1,75 @@
+using ProjectSchedule.Entities;
+using ProjectSchedule.Repositories;
+
+namespace ProjectSchedule.Forms;
+
+public partial class FormGroupStudents : Form
+{
+ private readonly IGroupStudentsRepository _groupStudentsRepository;
+
+ private int? _groupStudentsId;
+
+ public int Id
+ {
+ set
+ {
+ try
+ {
+ var groupStudents = _groupStudentsRepository.ReadGroupStudentsById(value);
+ if (groupStudents == null)
+ {
+ throw new InvalidDataException(nameof(groupStudents));
+ }
+ textBoxAbbreviationGroup.Text = groupStudents.AbbreviationGroup;
+ textBoxGroupNumber.Text = groupStudents.GroupNumber;
+ numericUpDownQuantityStudents.Value = groupStudents.QuantityStudents;
+ _groupStudentsId = value;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ }
+
+ public FormGroupStudents(IGroupStudentsRepository groupStudentsRepository)
+ {
+ InitializeComponent();
+ _groupStudentsRepository = groupStudentsRepository ??
+ throw new ArgumentNullException(nameof(groupStudentsRepository));
+ }
+
+ private void ButtonSave_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ if (string.IsNullOrWhiteSpace(textBoxAbbreviationGroup.Text) || string.IsNullOrWhiteSpace(textBoxGroupNumber.Text))
+ {
+ throw new Exception("Имеются незаполненные поля");
+ }
+
+ if (_groupStudentsId.HasValue)
+ {
+ _groupStudentsRepository.UpdateGroupStudents(CreateGroupOfStudents(_groupStudentsId.Value));
+ }
+ else
+ {
+ _groupStudentsRepository.CreateGroupStudents(CreateGroupOfStudents(0));
+ }
+
+ Close();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void ButtonCancel_Click(object sender, EventArgs e) => Close();
+
+ private GroupStudents CreateGroupOfStudents(int id)
+ {
+ return GroupStudents.CreateEntity(id, textBoxAbbreviationGroup.Text, textBoxGroupNumber.Text, Convert.ToInt32(numericUpDownQuantityStudents.Value));
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.resx b/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormGroupStudents.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/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.Designer.cs b/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.Designer.cs
new file mode 100644
index 0000000..a2a9805
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.Designer.cs
@@ -0,0 +1,127 @@
+namespace ProjectSchedule.Forms
+{
+ partial class FormGroupsStudents
+ {
+ ///
+ /// 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()
+ {
+ panel = new Panel();
+ buttonDel = new Button();
+ buttonUpd = new Button();
+ buttonAdd = new Button();
+ dataGridViewData = new DataGridView();
+ panel.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
+ SuspendLayout();
+ //
+ // panel
+ //
+ panel.Controls.Add(buttonDel);
+ panel.Controls.Add(buttonUpd);
+ panel.Controls.Add(buttonAdd);
+ panel.Dock = DockStyle.Right;
+ panel.Location = new Point(660, 0);
+ panel.Name = "panel";
+ panel.Size = new Size(140, 450);
+ panel.TabIndex = 2;
+ //
+ // buttonDel
+ //
+ buttonDel.BackgroundImage = Properties.Resources.Del;
+ buttonDel.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonDel.Location = new Point(24, 194);
+ buttonDel.Name = "buttonDel";
+ buttonDel.Size = new Size(94, 66);
+ buttonDel.TabIndex = 4;
+ buttonDel.UseVisualStyleBackColor = true;
+ buttonDel.Click += ButtonDel_Click;
+ //
+ // buttonUpd
+ //
+ buttonUpd.BackgroundImage = Properties.Resources.Upd;
+ buttonUpd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonUpd.Location = new Point(24, 106);
+ buttonUpd.Name = "buttonUpd";
+ buttonUpd.Size = new Size(94, 66);
+ buttonUpd.TabIndex = 3;
+ buttonUpd.UseVisualStyleBackColor = true;
+ buttonUpd.Click += ButtonUpd_Click;
+ //
+ // buttonAdd
+ //
+ buttonAdd.BackgroundImage = Properties.Resources.Add;
+ buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
+ buttonAdd.Location = new Point(24, 12);
+ buttonAdd.Name = "buttonAdd";
+ buttonAdd.Size = new Size(94, 66);
+ buttonAdd.TabIndex = 0;
+ buttonAdd.UseVisualStyleBackColor = true;
+ buttonAdd.Click += ButtonAdd_Click;
+ //
+ // dataGridViewData
+ //
+ dataGridViewData.AllowUserToAddRows = false;
+ dataGridViewData.AllowUserToDeleteRows = false;
+ dataGridViewData.AllowUserToResizeColumns = false;
+ dataGridViewData.AllowUserToResizeRows = false;
+ dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
+ dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridViewData.Dock = DockStyle.Fill;
+ dataGridViewData.Location = new Point(0, 0);
+ dataGridViewData.MultiSelect = false;
+ dataGridViewData.Name = "dataGridViewData";
+ dataGridViewData.ReadOnly = true;
+ dataGridViewData.RowHeadersVisible = false;
+ dataGridViewData.RowHeadersWidth = 51;
+ dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
+ dataGridViewData.Size = new Size(660, 450);
+ dataGridViewData.TabIndex = 3;
+ //
+ // FormGroupsStudents
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(dataGridViewData);
+ Controls.Add(panel);
+ Name = "FormGroupsStudents";
+ StartPosition = FormStartPosition.CenterParent;
+ Text = "Группы студентов";
+ Load += FormGroupsStudents_Load;
+ panel.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private Panel panel;
+ private Button buttonDel;
+ private Button buttonUpd;
+ private Button buttonAdd;
+ private DataGridView dataGridViewData;
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.cs b/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.cs
new file mode 100644
index 0000000..f9eaa89
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.cs
@@ -0,0 +1,98 @@
+using ProjectSchedule.Repositories;
+using Unity;
+
+namespace ProjectSchedule.Forms
+{
+ public partial class FormGroupsStudents : Form
+ {
+ private readonly IUnityContainer _container;
+
+ private readonly IGroupStudentsRepository _groupStudentsRepository;
+ public FormGroupsStudents(IUnityContainer container, IGroupStudentsRepository groupStudentsRepository)
+ {
+ InitializeComponent();
+ _container = container ??
+ throw new ArgumentNullException(nameof(container));
+ _groupStudentsRepository = groupStudentsRepository ??
+ throw new ArgumentNullException(nameof(groupStudentsRepository));
+ }
+ private void FormGroupsStudents_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
+ {
+ _groupStudentsRepository.DeleteGroupStudents(findId);
+ LoadList();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void LoadList() => dataGridViewData.DataSource = _groupStudentsRepository.ReadGroupsStudents();
+ private bool TryGetIdentifierFromSelectedRow(out int id)
+ {
+ id = 0;
+ if (dataGridViewData.SelectedRows.Count < 1)
+ {
+ MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+
+ id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["Id"].Value);
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.resx b/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Forms/FormGroupsStudents.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/ProjectSchedule/ProjectSchedule/Program.cs b/ProjectSchedule/ProjectSchedule/Program.cs
index 4b18fc6..8bcc656 100644
--- a/ProjectSchedule/ProjectSchedule/Program.cs
+++ b/ProjectSchedule/ProjectSchedule/Program.cs
@@ -1,3 +1,8 @@
+using Unity.Lifetime;
+using Unity;
+using ProjectSchedule.Repositories;
+using ProjectSchedule.Repositories.Implementations;
+
namespace ProjectSchedule
{
internal static class Program
@@ -11,7 +16,21 @@ namespace ProjectSchedule
// 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());
+ container.RegisterType(new TransientLifetimeManager());
+
+ return container;
}
}
}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/ProjectSchedule.csproj b/ProjectSchedule/ProjectSchedule/ProjectSchedule.csproj
index 663fdb8..accbdf0 100644
--- a/ProjectSchedule/ProjectSchedule/ProjectSchedule.csproj
+++ b/ProjectSchedule/ProjectSchedule/ProjectSchedule.csproj
@@ -8,4 +8,23 @@
enable
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Properties/Resources.Designer.cs b/ProjectSchedule/ProjectSchedule/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..75c5c3e
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Properties/Resources.Designer.cs
@@ -0,0 +1,103 @@
+//------------------------------------------------------------------------------
+//
+// Этот код создан программой.
+// Исполняемая версия:4.0.30319.42000
+//
+// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+// повторной генерации кода.
+//
+//------------------------------------------------------------------------------
+
+namespace ProjectSchedule.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("ProjectSchedule.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 Add {
+ get {
+ object obj = ResourceManager.GetObject("Add", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Поиск локализованного ресурса типа System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Del {
+ get {
+ object obj = ResourceManager.GetObject("Del", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Поиск локализованного ресурса типа System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap Upd {
+ get {
+ object obj = ResourceManager.GetObject("Upd", 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/ProjectSchedule/ProjectSchedule/Properties/Resources.resx b/ProjectSchedule/ProjectSchedule/Properties/Resources.resx
new file mode 100644
index 0000000..5a91ce7
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Properties/Resources.resx
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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\Upd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Del.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Add.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/IAudienceRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/IAudienceRepository.cs
new file mode 100644
index 0000000..882acd3
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/IAudienceRepository.cs
@@ -0,0 +1,16 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories;
+
+public interface IAudienceRepository
+{
+ IEnumerable ReadAudiences();
+
+ Audience ReadAudienceById(int id);
+
+ void CreateAudience(Audience audience);
+
+ void UpdateAudience(Audience audience);
+
+ void DeleteAudience(int id);
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/ICompilingScheduleRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/ICompilingScheduleRepository.cs
new file mode 100644
index 0000000..02dca44
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/ICompilingScheduleRepository.cs
@@ -0,0 +1,11 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories;
+
+public interface ICompilingScheduleRepository
+{
+ IEnumerable ReadCompilingSchedules(int? educatorId = null, int? disciplineId = null,
+ int? groupStudentsId = null, int? audienceId = null);
+ void CreateCompilingSchedule(CompilingSchedule compilingSchedule);
+ void DeleteCompilingSchedule(int id);
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/ICurriculumSupplementRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/ICurriculumSupplementRepository.cs
new file mode 100644
index 0000000..ce92524
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/ICurriculumSupplementRepository.cs
@@ -0,0 +1,10 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories;
+
+public interface ICurriculumSupplementRepository
+{
+ IEnumerable ReadCurriculumSupplements(int? disciplineId = null, int? groupStudentsId = null);
+ void CreateCurriculumSupplement(CurriculumSupplement curriculumSupplement);
+ void DeleteCurriculumSupplement(int id);
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/IDisciplineRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/IDisciplineRepository.cs
new file mode 100644
index 0000000..92f691f
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/IDisciplineRepository.cs
@@ -0,0 +1,16 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories;
+
+public interface IDisciplineRepository
+{
+ IEnumerable ReadDisciplines();
+
+ Discipline ReadDisciplineById(int id);
+
+ void CreateDiscipline(Discipline discipline);
+
+ void UpdateDiscipline(Discipline discipline);
+
+ void DeleteDiscipline(int id);
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/IEducatorRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/IEducatorRepository.cs
new file mode 100644
index 0000000..19ccac6
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/IEducatorRepository.cs
@@ -0,0 +1,16 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories;
+
+public interface IEducatorRepository
+{
+ IEnumerable ReadEducators();
+
+ Educator ReadEducatorById(int id);
+
+ void CreateEducator(Educator educator);
+
+ void UpdateEducator(Educator educator);
+
+ void DeleteEducator(int id);
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/IGroupStudentsRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/IGroupStudentsRepository.cs
new file mode 100644
index 0000000..4165aff
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/IGroupStudentsRepository.cs
@@ -0,0 +1,16 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories;
+
+public interface IGroupStudentsRepository
+{
+ IEnumerable ReadGroupsStudents();
+
+ GroupStudents ReadGroupStudentsById(int id);
+
+ void CreateGroupStudents(GroupStudents groupStudents);
+
+ void UpdateGroupStudents(GroupStudents groupStudents);
+
+ void DeleteGroupStudents(int id);
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/Implementations/AudienceRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/AudienceRepository.cs
new file mode 100644
index 0000000..0a341ac
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/AudienceRepository.cs
@@ -0,0 +1,29 @@
+using ProjectSchedule.Entities;
+using ProjectSchedule.Entities.Enums;
+
+namespace ProjectSchedule.Repositories.Implementations;
+
+public class AudienceRepository : IAudienceRepository
+{
+ public void CreateAudience(Audience audience)
+ {
+ }
+
+ public void DeleteAudience(int id)
+ {
+ }
+
+ public Audience ReadAudienceById(int id)
+ {
+ return Audience.CreateEntity(0, string.Empty, TypeAudience.None, 0);
+ }
+
+ public IEnumerable ReadAudiences()
+ {
+ return [];
+ }
+
+ public void UpdateAudience(Audience audience)
+ {
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/Implementations/CompilingScheduleRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/CompilingScheduleRepository.cs
new file mode 100644
index 0000000..a2e07df
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/CompilingScheduleRepository.cs
@@ -0,0 +1,20 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories.Implementations;
+
+public class CompilingScheduleRepository : ICompilingScheduleRepository
+{
+ public void CreateCompilingSchedule(CompilingSchedule compilingSchedule)
+ {
+ }
+
+ public void DeleteCompilingSchedule(int id)
+ {
+ }
+
+ public IEnumerable ReadCompilingSchedules(int? educatorId = null, int? disciplineId = null,
+ int? groupStudentsId = null, int? audienceId = null)
+ {
+ return [];
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/Implementations/CurriculumSupplementRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/CurriculumSupplementRepository.cs
new file mode 100644
index 0000000..4934b46
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/CurriculumSupplementRepository.cs
@@ -0,0 +1,19 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories.Implementations;
+
+public class CurriculumSupplementRepository : ICurriculumSupplementRepository
+{
+ public void CreateCurriculumSupplement(CurriculumSupplement curriculumSupplement)
+ {
+ }
+
+ public void DeleteCurriculumSupplement(int id)
+ {
+ }
+
+ public IEnumerable ReadCurriculumSupplements(int? disciplineId = null, int? groupStudentsId = null)
+ {
+ return [];
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/Implementations/DisciplineRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/DisciplineRepository.cs
new file mode 100644
index 0000000..232a8ea
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/DisciplineRepository.cs
@@ -0,0 +1,26 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories.Implementations;
+
+public class DisciplineRepository : IDisciplineRepository
+{
+ public void CreateDiscipline(Discipline discipline)
+ {
+ }
+ public void DeleteDiscipline(int id)
+ {
+ }
+ public Discipline ReadDisciplineById(int id)
+ {
+ return Discipline.CreateEntity(0, string.Empty);
+ }
+
+ public IEnumerable ReadDisciplines()
+ {
+ return [];
+ }
+
+ public void UpdateDiscipline(Discipline discipline)
+ {
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/Implementations/EducatorRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/EducatorRepository.cs
new file mode 100644
index 0000000..f189849
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/EducatorRepository.cs
@@ -0,0 +1,28 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories.Implementations;
+
+public class EducatorRepository : IEducatorRepository
+{
+ public void CreateEducator(Educator educator)
+ {
+ }
+
+ public void DeleteEducator(int id)
+ {
+ }
+
+ public Educator ReadEducatorById(int id)
+ {
+ return Educator.CreateEntity(0, string.Empty, string.Empty, string.Empty);
+ }
+
+ public IEnumerable ReadEducators()
+ {
+ return [];
+ }
+
+ public void UpdateEducator(Educator educator)
+ {
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Repositories/Implementations/GroupStudentsRepository.cs b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/GroupStudentsRepository.cs
new file mode 100644
index 0000000..0a076ee
--- /dev/null
+++ b/ProjectSchedule/ProjectSchedule/Repositories/Implementations/GroupStudentsRepository.cs
@@ -0,0 +1,28 @@
+using ProjectSchedule.Entities;
+
+namespace ProjectSchedule.Repositories.Implementations;
+
+public class GroupStudentsRepository : IGroupStudentsRepository
+{
+ public void CreateGroupStudents(GroupStudents groupStudents)
+ {
+ }
+
+ public void DeleteGroupStudents(int id)
+ {
+ }
+
+ public GroupStudents ReadGroupStudentsById(int id)
+ {
+ return GroupStudents.CreateEntity(0, string.Empty, string.Empty, 0);
+ }
+
+ public IEnumerable ReadGroupsStudents()
+ {
+ return [];
+ }
+
+ public void UpdateGroupStudents(GroupStudents groupStudents)
+ {
+ }
+}
\ No newline at end of file
diff --git a/ProjectSchedule/ProjectSchedule/Resources/Add.jpg b/ProjectSchedule/ProjectSchedule/Resources/Add.jpg
new file mode 100644
index 0000000..5186ab4
Binary files /dev/null and b/ProjectSchedule/ProjectSchedule/Resources/Add.jpg differ
diff --git a/ProjectSchedule/ProjectSchedule/Resources/Del.png b/ProjectSchedule/ProjectSchedule/Resources/Del.png
new file mode 100644
index 0000000..63b9522
Binary files /dev/null and b/ProjectSchedule/ProjectSchedule/Resources/Del.png differ
diff --git a/ProjectSchedule/ProjectSchedule/Resources/Upd.png b/ProjectSchedule/ProjectSchedule/Resources/Upd.png
new file mode 100644
index 0000000..1a5f542
Binary files /dev/null and b/ProjectSchedule/ProjectSchedule/Resources/Upd.png differ
diff --git a/ProjectSchedule/ProjectSchedule/Resources/Расписание на фон.png b/ProjectSchedule/ProjectSchedule/Resources/Расписание на фон.png
new file mode 100644
index 0000000..f5bd8fd
Binary files /dev/null and b/ProjectSchedule/ProjectSchedule/Resources/Расписание на фон.png differ