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