From 9fec913bf6ebb23c7ba8305431b8c7fcb878fab0 Mon Sep 17 00:00:00 2001 From: Kudyaeva Date: Sun, 10 Nov 2024 17:15:11 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=20=E2=84=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Entities/AddMark.cs | 31 +++ .../Entities/Discipline.cs | 27 +++ .../Entities/Enums/Course.cs | 17 ++ .../Entities/Enums/GroupType.cs | 14 ++ .../Entities/Enums/Mark.cs | 17 ++ .../SessionResults_Kudyaeva/Entities/Group.cs | 25 ++ .../Entities/Student.cs | 29 +++ .../Entities/Teacher.cs | 28 +++ .../SessionResults_Kudyaeva/Form1.Designer.cs | 39 ---- .../SessionResults_Kudyaeva/Form1.cs | 10 - .../FormSessionResults.Designer.cs | 137 +++++++++++ .../FormSessionResults.cs | 84 +++++++ .../FormSessionResults.resx | 123 ++++++++++ .../Forms/AddMarkForm.Designer.cs | 218 ++++++++++++++++++ .../Forms/AddMarkForm.cs | 86 +++++++ .../Forms/AddMarkForm.resx | 120 ++++++++++ .../Forms/AddMarkListForm.Designer.cs | 97 ++++++++ .../Forms/AddMarkListForm.cs | 45 ++++ .../AddMarkListForm.resx} | 50 ++-- .../Forms/DisciplineForm.Designer.cs | 141 +++++++++++ .../Forms/DisciplineForm.cs | 102 ++++++++ .../Forms/DisciplineForm.resx | 120 ++++++++++ .../Forms/DisciplineListForm.Designer.cs | 125 ++++++++++ .../Forms/DisciplineListForm.cs | 107 +++++++++ .../Forms/DisciplineListForm.resx | 120 ++++++++++ .../Forms/GroupForm.Designer.cs | 119 ++++++++++ .../Forms/GroupForm.cs | 84 +++++++ .../Forms/GroupForm.resx | 120 ++++++++++ .../Forms/GroupsListForm.Designer.cs | 125 ++++++++++ .../Forms/GroupsListForm.cs | 109 +++++++++ .../Forms/GroupsListForm.resx | 120 ++++++++++ .../Forms/StudentForm.Designer.cs | 163 +++++++++++++ .../Forms/StudentForm.cs | 90 ++++++++ .../Forms/StudentForm.resx | 120 ++++++++++ .../Forms/StudentsList.Designer.cs | 126 ++++++++++ .../Forms/StudentsList.cs | 108 +++++++++ .../Forms/StudentsList.resx | 120 ++++++++++ .../Forms/TeacherForm.Designer.cs | 161 +++++++++++++ .../Forms/TeacherForm.cs | 88 +++++++ .../Forms/TeacherForm.resx | 120 ++++++++++ .../Forms/TeachersList.Designer.cs | 125 ++++++++++ .../Forms/TeachersList.cs | 106 +++++++++ .../Forms/TeachersList.resx | 120 ++++++++++ .../SessionResults_Kudyaeva/Program.cs | 22 +- .../Properties/Resources.Designer.cs | 103 +++++++++ .../Properties/Resources.resx | 133 +++++++++++ .../Repositories/IAddMarkRepository.cs | 17 ++ .../Repositories/IDisciplineRepository.cs | 17 ++ .../Repositories/IGroupRepository.cs | 17 ++ .../Repositories/IStudentRepository.cs | 17 ++ .../Repositories/ITeacherRepository.cs | 17 ++ .../Implementations/AddMarkRepository.cs | 39 ++++ .../Implementations/DisciplineRepository.cs | 38 +++ .../Implementations/GroupRepository.cs | 38 +++ .../Implementations/StudentRepository.cs | 39 ++++ .../Implementations/TeacherRepository.cs | 40 ++++ .../SessionResults_Kudyaeva/Resources/Add.png | Bin 0 -> 14601 bytes .../SessionResults_Kudyaeva/Resources/Del.png | Bin 0 -> 16895 bytes .../SessionResults_Kudyaeva/Resources/Upd.png | Bin 0 -> 12849 bytes .../Resources/фон.jpg | Bin 0 -> 105849 bytes .../SessionResults_Kudyaeva.csproj | 19 ++ 61 files changed, 4517 insertions(+), 75 deletions(-) create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/AddMark.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Discipline.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/Course.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/GroupType.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/Mark.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Group.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Student.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Teacher.cs delete mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.Designer.cs delete mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.cs rename SessionResults_Kudyaeva/SessionResults_Kudyaeva/{Form1.resx => Forms/AddMarkListForm.resx} (93%) create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Properties/Resources.Designer.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Properties/Resources.resx create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IAddMarkRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IDisciplineRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IGroupRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IStudentRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/ITeacherRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/AddMarkRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/DisciplineRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/GroupRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StudentRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/TeacherRepository.cs create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Add.png create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Del.png create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Upd.png create mode 100644 SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/фон.jpg diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/AddMark.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/AddMark.cs new file mode 100644 index 0000000..f3507da --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/AddMark.cs @@ -0,0 +1,31 @@ +using SessionResults_Kudyaeva.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Entities; + +public class AddMark +{ + public int Id { get; private set; } + public int StudentId { get; private set; } + public int GroupId { get; private set; } + public int DisciplineId { get; private set; } + public Mark? Mark { get; private set; } // Оставляем тип Mark + public DateTime Date { get; private set; } + + public static AddMark CreateOperation(int id, int studentId, int groupId, int disciplineId, Mark mark) + { + return new AddMark + { + Id = id, + StudentId = studentId, + GroupId = groupId, + DisciplineId = disciplineId, + Mark = mark, // Если `Mark` имеет значение по умолчанию, его можно обработать + Date = DateTime.Now + }; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Discipline.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Discipline.cs new file mode 100644 index 0000000..4e9b0e3 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Discipline.cs @@ -0,0 +1,27 @@ +using SessionResults_Kudyaeva.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Entities; + +public class Discipline +{ + public int ID { get; private set; } + public string Name { get; private set; } = string.Empty; + public string Description { get; private set; } = string.Empty; + public Course Courses { get; private set; } + + public static Discipline Create(int id, string name, string description, Course courses) + { + return new Discipline + { + ID = id, + Name = name, + Description = description, + Courses = courses + }; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/Course.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/Course.cs new file mode 100644 index 0000000..a074d75 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/Course.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Entities.Enums; + +[Flags] +public enum Course +{ + None = 0, + First = 1, // 1 курс + Second = 2, // 2 курс + Third = 4, // 3 курс + Fourth = 8 // 4 курс +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/GroupType.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/GroupType.cs new file mode 100644 index 0000000..4e13716 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/GroupType.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Entities.Enums; + +public enum GroupType +{ + Daytime, // Дневная + Evening, // Вечерняя + FullTimeDistance // Очно-заочная +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/Mark.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/Mark.cs new file mode 100644 index 0000000..d368eee --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Enums/Mark.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Entities.Enums; + +public enum Mark +{ + None, + One = 1, + Two = 2, + Three = 3, + Four = 4, + Five = 5 +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Group.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Group.cs new file mode 100644 index 0000000..a8a64d1 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Group.cs @@ -0,0 +1,25 @@ +using SessionResults_Kudyaeva.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Entities; + +public class Group +{ + public int ID { get; private set; } + public string Name { get; private set; } = string.Empty; + public GroupType Type { get; private set; } + + public static Group Create(int id, string name, GroupType type) + { + return new Group + { + ID = id, + Name = name, + Type = type + }; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Student.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Student.cs new file mode 100644 index 0000000..44add56 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Student.cs @@ -0,0 +1,29 @@ +using SessionResults_Kudyaeva.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Entities; + +public class Student +{ + public int ID { get; private set; } + public string Surname { get; private set; } = string.Empty; + public string Name { get; private set; } = string.Empty; + public string MiddleName { get; private set; } = string.Empty; + public int GroupID { get; private set; } + + public static Student Create(int id, string surname, string name, string middleName, int groupID) + { + return new Student + { + ID = id, + Surname = surname, + Name = name, + MiddleName = middleName, + GroupID = groupID + }; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Teacher.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Teacher.cs new file mode 100644 index 0000000..06b9fbe --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Entities/Teacher.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Entities; + +public class Teacher +{ + public int ID { get; private set; } + public string Surname { get; private set; } = string.Empty; + public string Name { get; private set; } = string.Empty; + public string MiddleName { get; private set; } = string.Empty; + public int DisciplineID { get; private set; } + + public static Teacher Create(int id, string surname, string name, string middleName, int disciplineID) + { + return new Teacher + { + ID = id, + Surname = surname, + Name = name, + MiddleName = middleName, + DisciplineID = disciplineID + }; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.Designer.cs deleted file mode 100644 index 5f50fde..0000000 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace SessionResults_Kudyaeva -{ - 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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.cs deleted file mode 100644 index ad0be2c..0000000 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace SessionResults_Kudyaeva -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.Designer.cs new file mode 100644 index 0000000..2681e00 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.Designer.cs @@ -0,0 +1,137 @@ +namespace SessionResults_Kudyaeva +{ + partial class FormSessionResults + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + menuStrip1 = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + StudentsToolStripMenuItem = new ToolStripMenuItem(); + GroupsToolStripMenuItem = new ToolStripMenuItem(); + TeachersToolStripMenuItem = new ToolStripMenuItem(); + DisciplinesToolStripMenuItem = new ToolStripMenuItem(); + опереToolStripMenuItem = new ToolStripMenuItem(); + AddMarksToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, опереToolStripMenuItem, отчетыToolStripMenuItem }); + menuStrip1.Location = new Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new Size(784, 24); + menuStrip1.TabIndex = 0; + menuStrip1.Text = "menuStrip1"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { StudentsToolStripMenuItem, GroupsToolStripMenuItem, TeachersToolStripMenuItem, DisciplinesToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(94, 20); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // StudentsToolStripMenuItem + // + StudentsToolStripMenuItem.Name = "StudentsToolStripMenuItem"; + StudentsToolStripMenuItem.Size = new Size(159, 22); + StudentsToolStripMenuItem.Text = "Студенты"; + StudentsToolStripMenuItem.Click += StudentsToolStripMenuItem_Click; + // + // GroupsToolStripMenuItem + // + GroupsToolStripMenuItem.Name = "GroupsToolStripMenuItem"; + GroupsToolStripMenuItem.Size = new Size(159, 22); + GroupsToolStripMenuItem.Text = "Группы"; + GroupsToolStripMenuItem.Click += GroupsToolStripMenuItem_Click; + // + // TeachersToolStripMenuItem + // + TeachersToolStripMenuItem.Name = "TeachersToolStripMenuItem"; + TeachersToolStripMenuItem.Size = new Size(159, 22); + TeachersToolStripMenuItem.Text = "Преподаватели"; + TeachersToolStripMenuItem.Click += TeachersToolStripMenuItem_Click; + // + // DisciplinesToolStripMenuItem + // + DisciplinesToolStripMenuItem.Name = "DisciplinesToolStripMenuItem"; + DisciplinesToolStripMenuItem.Size = new Size(159, 22); + DisciplinesToolStripMenuItem.Text = "Дисциплины"; + DisciplinesToolStripMenuItem.Click += DisciplinesToolStripMenuItem_Click; + // + // опереToolStripMenuItem + // + опереToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { AddMarksToolStripMenuItem }); + опереToolStripMenuItem.Name = "опереToolStripMenuItem"; + опереToolStripMenuItem.Size = new Size(75, 20); + опереToolStripMenuItem.Text = "Операции"; + // + // AddMarksToolStripMenuItem + // + AddMarksToolStripMenuItem.Name = "AddMarksToolStripMenuItem"; + AddMarksToolStripMenuItem.Size = new Size(184, 22); + AddMarksToolStripMenuItem.Text = "Добавление оценки"; + AddMarksToolStripMenuItem.Click += AddMarksToolStripMenuItem_Click; + // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(60, 20); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // FormSessionResults + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.фон; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(784, 411); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Name = "FormSessionResults"; + StartPosition = FormStartPosition.CenterParent; + Text = "Ведомость"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip1; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem StudentsToolStripMenuItem; + private ToolStripMenuItem GroupsToolStripMenuItem; + private ToolStripMenuItem TeachersToolStripMenuItem; + private ToolStripMenuItem DisciplinesToolStripMenuItem; + private ToolStripMenuItem опереToolStripMenuItem; + private ToolStripMenuItem отчетыToolStripMenuItem; + private ToolStripMenuItem AddMarksToolStripMenuItem; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.cs new file mode 100644 index 0000000..a494cd8 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.cs @@ -0,0 +1,84 @@ +using SessionResults_Kudyaeva.Forms; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace SessionResults_Kudyaeva; + +public partial class FormSessionResults : Form +{ + private readonly IUnityContainer _container; + + public FormSessionResults(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + + private void StudentsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void GroupsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void TeachersToolStripMenuItem_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 AddMarksToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.resx new file mode 100644 index 0000000..b48baf1 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/FormSessionResults.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.Designer.cs new file mode 100644 index 0000000..5ce10af --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.Designer.cs @@ -0,0 +1,218 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class AddMarkForm + { + /// + /// 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() + { + label1 = new Label(); + label2 = new Label(); + label3 = new Label(); + label4 = new Label(); + label5 = new Label(); + label6 = new Label(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + comboBoxDiscipline = new ComboBox(); + comboBoxTeacher = new ComboBox(); + comboBoxStudent = new ComboBox(); + comboBoxGroup = new ComboBox(); + comboBoxMark = new ComboBox(); + dateTimePickerDate = new DateTimePicker(); + SuspendLayout(); + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(40, 42); + label1.Name = "label1"; + label1.Size = new Size(55, 15); + label1.TabIndex = 0; + label1.Text = "Предмет"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(40, 73); + label2.Name = "label2"; + label2.Size = new Size(91, 15); + label2.TabIndex = 1; + label2.Text = "Преподаватель"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(40, 105); + label3.Name = "label3"; + label3.Size = new Size(50, 15); + label3.TabIndex = 2; + label3.Text = "Студент"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(40, 137); + label4.Name = "label4"; + label4.Size = new Size(46, 15); + label4.TabIndex = 3; + label4.Text = "Группа"; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(40, 195); + label5.Name = "label5"; + label5.Size = new Size(48, 15); + label5.TabIndex = 4; + label5.Text = "Оценка"; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new Point(40, 233); + label6.Name = "label6"; + label6.Size = new Size(32, 15); + label6.TabIndex = 5; + label6.Text = "Дата"; + // + // ButtonSave + // + ButtonSave.Location = new Point(61, 284); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(96, 23); + ButtonSave.TabIndex = 10; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(234, 284); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(96, 23); + ButtonCancel.TabIndex = 11; + ButtonCancel.Text = "Отменить"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // comboBoxDiscipline + // + comboBoxDiscipline.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxDiscipline.FormattingEnabled = true; + comboBoxDiscipline.Location = new Point(186, 39); + comboBoxDiscipline.Name = "comboBoxDiscipline"; + comboBoxDiscipline.Size = new Size(175, 23); + comboBoxDiscipline.TabIndex = 12; + // + // comboBoxTeacher + // + comboBoxTeacher.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxTeacher.FormattingEnabled = true; + comboBoxTeacher.Location = new Point(186, 70); + comboBoxTeacher.Name = "comboBoxTeacher"; + comboBoxTeacher.Size = new Size(175, 23); + comboBoxTeacher.TabIndex = 13; + // + // comboBoxStudent + // + comboBoxStudent.BackColor = Color.White; + comboBoxStudent.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxStudent.FormattingEnabled = true; + comboBoxStudent.Location = new Point(186, 102); + comboBoxStudent.Name = "comboBoxStudent"; + comboBoxStudent.Size = new Size(175, 23); + comboBoxStudent.TabIndex = 14; + // + // comboBoxGroup + // + comboBoxGroup.BackColor = Color.White; + comboBoxGroup.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxGroup.FormattingEnabled = true; + comboBoxGroup.Location = new Point(186, 134); + comboBoxGroup.Name = "comboBoxGroup"; + comboBoxGroup.Size = new Size(175, 23); + comboBoxGroup.TabIndex = 15; + // + // comboBoxMark + // + comboBoxMark.BackColor = Color.White; + comboBoxMark.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxMark.FormattingEnabled = true; + comboBoxMark.Location = new Point(186, 192); + comboBoxMark.Name = "comboBoxMark"; + comboBoxMark.Size = new Size(175, 23); + comboBoxMark.TabIndex = 16; + // + // dateTimePickerDate + // + dateTimePickerDate.Location = new Point(186, 227); + dateTimePickerDate.Name = "dateTimePickerDate"; + dateTimePickerDate.Size = new Size(175, 23); + dateTimePickerDate.TabIndex = 17; + // + // AddMarkForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(407, 342); + Controls.Add(dateTimePickerDate); + Controls.Add(comboBoxMark); + Controls.Add(comboBoxGroup); + Controls.Add(comboBoxStudent); + Controls.Add(comboBoxTeacher); + Controls.Add(comboBoxDiscipline); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(label6); + Controls.Add(label5); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Name = "AddMarkForm"; + Text = "Добавить оценку"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private Label label2; + private Label label3; + private Label label4; + private Label label5; + private Label label6; + private Button ButtonSave; + private Button ButtonCancel; + private ComboBox comboBoxDiscipline; + private ComboBox comboBoxTeacher; + private ComboBox comboBoxStudent; + private ComboBox comboBoxGroup; + private ComboBox comboBoxMark; + private DateTimePicker dateTimePickerDate; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.cs new file mode 100644 index 0000000..a54866d --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.cs @@ -0,0 +1,86 @@ +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Entities.Enums; +using SessionResults_Kudyaeva.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SessionResults_Kudyaeva.Forms; + + +public partial class AddMarkForm : Form +{ + private readonly IAddMarkRepository _addMarkRepository; + private readonly IStudentRepository _studentRepository; + private readonly IGroupRepository _groupRepository; + private readonly ITeacherRepository _teacherRepository; + private readonly IDisciplineRepository _disciplineRepository; + + public AddMarkForm(IAddMarkRepository addMarkRepository, IStudentRepository studentRepository, IGroupRepository groupRepository, ITeacherRepository teacherRepository, IDisciplineRepository disciplineRepository) + { + InitializeComponent(); + + _addMarkRepository = addMarkRepository ?? throw new ArgumentNullException(nameof(addMarkRepository)); + _studentRepository = studentRepository ?? throw new ArgumentNullException(nameof(studentRepository)); + _groupRepository = groupRepository ?? throw new ArgumentNullException(nameof(groupRepository)); + _teacherRepository = teacherRepository ?? throw new ArgumentNullException(nameof(teacherRepository)); + _disciplineRepository = disciplineRepository ?? throw new ArgumentNullException(nameof(disciplineRepository)); + + + comboBoxStudent.DataSource = _studentRepository.GetAllStudents(); + comboBoxStudent.DisplayMember = "Name"; + comboBoxStudent.ValueMember = "Id"; + + comboBoxGroup.DataSource = _groupRepository.GetAllGroups(); + comboBoxGroup.DisplayMember = "Name"; + comboBoxGroup.ValueMember = "Id"; + + comboBoxTeacher.DataSource = _teacherRepository.GetAllTeachers(); + comboBoxTeacher.DisplayMember = "Name"; + comboBoxTeacher.ValueMember = "Id"; + + comboBoxDiscipline.DataSource = _disciplineRepository.GetAllDisciplines(); + comboBoxDiscipline.DisplayMember = "Name"; + comboBoxDiscipline.ValueMember = "Id"; + + comboBoxMark.DataSource = Enum.GetValues(typeof(Mark)); + + + dateTimePickerDate.Enabled = false; + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxStudent.SelectedIndex < 0 || + comboBoxGroup.SelectedIndex < 0 || + comboBoxTeacher.SelectedIndex < 0 || + comboBoxDiscipline.SelectedIndex < 0 || + comboBoxMark.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + _addMarkRepository.CreateMark(AddMark.CreateOperation(0, + (int)comboBoxStudent.SelectedValue!, + (int)comboBoxGroup.SelectedValue!, + (int)comboBoxDiscipline.SelectedValue!, + (Mark)comboBoxMark.SelectedItem!)); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkForm.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.Designer.cs new file mode 100644 index 0000000..d9ff92c --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.Designer.cs @@ -0,0 +1,97 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class AddMarkListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + ButtonAdd = new Button(); + dataGridViewData = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(845, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(114, 449); + panel1.TabIndex = 0; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Add; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(6, 43); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(100, 100); + ButtonAdd.TabIndex = 3; + 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.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewData.Size = new Size(845, 449); + dataGridViewData.TabIndex = 4; + // + // AddMarkListForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(959, 449); + Controls.Add(dataGridViewData); + Controls.Add(panel1); + Name = "AddMarkListForm"; + Text = "Добавление оценок"; + Load += AddMarkListForm_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonAdd; + private DataGridView dataGridViewData; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.cs new file mode 100644 index 0000000..a8f3bd1 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.cs @@ -0,0 +1,45 @@ +using SessionResults_Kudyaeva.Repositories; +using Unity; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class AddMarkListForm : Form +{ + private readonly IUnityContainer _container; + private readonly IAddMarkRepository _addMarkRepository; + + public AddMarkListForm(IUnityContainer container, IAddMarkRepository addMarkRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _addMarkRepository = addMarkRepository ?? throw new ArgumentNullException(nameof(addMarkRepository)); + } + + private void AddMarkListForm_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 LoadList() => dataGridViewData.DataSource = _addMarkRepository.GetAllMarks(); + +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.resx similarity index 93% rename from SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.resx rename to SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.resx index 1af7de1..af32865 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Form1.resx +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/AddMarkListForm.resx @@ -1,17 +1,17 @@  - diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.Designer.cs new file mode 100644 index 0000000..3f94ba8 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.Designer.cs @@ -0,0 +1,141 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class DisciplineForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + labelName = new Label(); + labelDescription = new Label(); + labelDisciplineType = new Label(); + textBoxName = new TextBox(); + textBoxDescription = new TextBox(); + checkedListBoxCourse = new CheckedListBox(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + SuspendLayout(); + // + // labelName + // + labelName.AutoSize = true; + labelName.Location = new Point(41, 36); + labelName.Name = "labelName"; + labelName.Size = new Size(59, 15); + labelName.TabIndex = 0; + labelName.Text = "Название"; + // + // labelDescription + // + labelDescription.AutoSize = true; + labelDescription.Location = new Point(41, 74); + labelDescription.Name = "labelDescription"; + labelDescription.Size = new Size(62, 15); + labelDescription.TabIndex = 1; + labelDescription.Text = "Описание"; + // + // labelDisciplineType + // + labelDisciplineType.AutoSize = true; + labelDisciplineType.Location = new Point(41, 174); + labelDisciplineType.Name = "labelDisciplineType"; + labelDisciplineType.Size = new Size(78, 15); + labelDisciplineType.TabIndex = 2; + labelDisciplineType.Text = "Выбор курса"; + // + // textBoxName + // + textBoxName.Location = new Point(147, 33); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(184, 23); + textBoxName.TabIndex = 3; + // + // textBoxDescription + // + textBoxDescription.Location = new Point(147, 71); + textBoxDescription.Multiline = true; + textBoxDescription.Name = "textBoxDescription"; + textBoxDescription.Size = new Size(184, 85); + textBoxDescription.TabIndex = 4; + // + // checkedListBoxCourse + // + checkedListBoxCourse.FormattingEnabled = true; + checkedListBoxCourse.Location = new Point(147, 174); + checkedListBoxCourse.Name = "checkedListBoxCourse"; + checkedListBoxCourse.Size = new Size(184, 94); + checkedListBoxCourse.TabIndex = 5; + // + // ButtonSave + // + ButtonSave.Location = new Point(54, 298); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(96, 23); + ButtonSave.TabIndex = 10; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(210, 298); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(96, 23); + ButtonCancel.TabIndex = 11; + ButtonCancel.Text = "Отменить"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // DisciplineForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(372, 347); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(checkedListBoxCourse); + Controls.Add(textBoxDescription); + Controls.Add(textBoxName); + Controls.Add(labelDisciplineType); + Controls.Add(labelDescription); + Controls.Add(labelName); + Name = "DisciplineForm"; + Text = "Дисциплина"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label labelName; + private Label labelDescription; + private Label labelDisciplineType; + private TextBox textBoxName; + private TextBox textBoxDescription; + private CheckedListBox checkedListBoxCourse; + private Button ButtonSave; + private Button ButtonCancel; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.cs new file mode 100644 index 0000000..4ee81a1 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.cs @@ -0,0 +1,102 @@ +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Repositories; +using SessionResults_Kudyaeva.Entities.Enums; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class DisciplineForm : Form +{ + private readonly IDisciplineRepository _disciplineRepository; + private int? _disciplineId; + + public int Id + { + set + { + try + { + var discipline = _disciplineRepository.GetDisciplineById(value); + if (discipline == null) + { + throw new InvalidDataException(nameof(discipline)); + } + foreach (Course elem in Enum.GetValues(typeof(Course))) + { + if ((elem & discipline.Courses) != 0) + { + checkedListBoxCourse.SetItemChecked(checkedListBoxCourse.Items.IndexOf(elem), true); + } + } + textBoxName.Text = discipline.Name; + textBoxDescription.Text = discipline.Description; + _disciplineId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public DisciplineForm(IDisciplineRepository disciplineRepository) + { + InitializeComponent(); + + _disciplineRepository = disciplineRepository ?? throw new ArgumentNullException(nameof(disciplineRepository)); + + foreach (var elem in Enum.GetValues(typeof(Course))) + { + checkedListBoxCourse.Items.Add(elem); + } + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) || + string.IsNullOrWhiteSpace(textBoxDescription.Text) || + checkedListBoxCourse.CheckedItems.Count == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_disciplineId.HasValue) + { + _disciplineRepository.UpdateDiscipline(CreateDiscipline(_disciplineId.Value)); + } + else + { + _disciplineRepository.AddDiscipline(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) + { + Course course = Course.None; + foreach (var elem in checkedListBoxCourse.CheckedItems) + { + course |= (Course)elem; + } + return Discipline.Create(id, textBoxName.Text, textBoxDescription.Text, course); + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineForm.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.Designer.cs new file mode 100644 index 0000000..52b5042 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.Designer.cs @@ -0,0 +1,125 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class DisciplineListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + dataGridViewDisciplines = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewDisciplines).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(800, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(134, 429); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Del; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(13, 270); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(101, 100); + ButtonDel.TabIndex = 4; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.Upd; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(13, 164); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(100, 100); + ButtonUpd.TabIndex = 3; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Add; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(13, 58); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(100, 100); + ButtonAdd.TabIndex = 2; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridViewDisciplines + // + dataGridViewDisciplines.AllowUserToAddRows = false; + dataGridViewDisciplines.AllowUserToDeleteRows = false; + dataGridViewDisciplines.AllowUserToResizeColumns = false; + dataGridViewDisciplines.AllowUserToResizeRows = false; + dataGridViewDisciplines.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewDisciplines.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewDisciplines.Dock = DockStyle.Fill; + dataGridViewDisciplines.Location = new Point(0, 0); + dataGridViewDisciplines.MultiSelect = false; + dataGridViewDisciplines.Name = "dataGridViewDisciplines"; + dataGridViewDisciplines.ReadOnly = true; + dataGridViewDisciplines.RowHeadersVisible = false; + dataGridViewDisciplines.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewDisciplines.Size = new Size(800, 429); + dataGridViewDisciplines.TabIndex = 3; + // + // DisciplineListForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(934, 429); + Controls.Add(dataGridViewDisciplines); + Controls.Add(panel1); + Name = "DisciplineListForm"; + Text = "Дисциплины"; + Load += DisciplineListForm_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewDisciplines).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonAdd; + private Button ButtonUpd; + private Button ButtonDel; + private DataGridView dataGridViewDisciplines; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.cs new file mode 100644 index 0000000..b06d3cb --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.cs @@ -0,0 +1,107 @@ +using SessionResults_Kudyaeva.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class DisciplineListForm : Form +{ + + private readonly IUnityContainer _container; + private readonly IDisciplineRepository _disciplineRepository; + + public DisciplineListForm(IUnityContainer container, IDisciplineRepository disciplineRepository) + { + InitializeComponent(); + + _container = container ?? throw new ArgumentNullException(nameof(container)); + _disciplineRepository = disciplineRepository ?? throw new ArgumentNullException(nameof(disciplineRepository)); + } + + private void DisciplineListForm_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() => dataGridViewDisciplines.DataSource = _disciplineRepository.GetAllDisciplines(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewDisciplines.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridViewDisciplines.SelectedRows[0].Cells["ID"].Value); + return true; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/DisciplineListForm.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.Designer.cs new file mode 100644 index 0000000..1c8d33b --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.Designer.cs @@ -0,0 +1,119 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class GroupForm + { + /// + /// 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() + { + label1 = new Label(); + label2 = new Label(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + textBoxName = new TextBox(); + comboBoxType = new ComboBox(); + SuspendLayout(); + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(38, 38); + label1.Name = "label1"; + label1.Size = new Size(46, 15); + label1.TabIndex = 0; + label1.Text = "Группа"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(38, 68); + label2.Name = "label2"; + label2.Size = new Size(83, 15); + label2.TabIndex = 1; + label2.Text = "Тип обучения"; + // + // ButtonSave + // + ButtonSave.Location = new Point(53, 108); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(96, 23); + ButtonSave.TabIndex = 9; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(206, 108); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(96, 23); + ButtonCancel.TabIndex = 10; + ButtonCancel.Text = "Отменить"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // textBoxName + // + textBoxName.Location = new Point(154, 36); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(159, 23); + textBoxName.TabIndex = 11; + // + // comboBoxType + // + comboBoxType.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxType.FormattingEnabled = true; + comboBoxType.Location = new Point(155, 65); + comboBoxType.Name = "comboBoxType"; + comboBoxType.Size = new Size(159, 23); + comboBoxType.TabIndex = 12; + // + // GroupForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(360, 157); + Controls.Add(comboBoxType); + Controls.Add(textBoxName); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(label2); + Controls.Add(label1); + Name = "GroupForm"; + Text = "Группа"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private Label label2; + private Button ButtonSave; + private Button ButtonCancel; + private TextBox textBoxName; + private ComboBox comboBoxType; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.cs new file mode 100644 index 0000000..02681d8 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.cs @@ -0,0 +1,84 @@ +using SessionResults_Kudyaeva.Entities.Enums; +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class GroupForm : Form +{ + private readonly IGroupRepository _groupRepository; + private int? _groupId; + + public int Id + { + set + { + try + { + var group = _groupRepository.GetGroupById(value); + if (group == null) + { + throw new InvalidDataException(nameof(group)); + } + textBoxName.Text = group.Name; + comboBoxType.SelectedItem = group.Type; + _groupId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public GroupForm(IGroupRepository groupRepository) + { + InitializeComponent(); + _groupRepository = groupRepository ?? + throw new ArgumentNullException(nameof(groupRepository)); + + comboBoxType.DataSource = Enum.GetValues(typeof(GroupType)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) || comboBoxType.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_groupId.HasValue) + { + _groupRepository.UpdateGroup(CreateGroup(_groupId.Value)); + } + else + { + _groupRepository.AddGroup(CreateGroup(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Group CreateGroup(int id) => Group. + Create(id, textBoxName.Text, + (GroupType)comboBoxType.SelectedItem!); +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupForm.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.Designer.cs new file mode 100644 index 0000000..79b6468 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.Designer.cs @@ -0,0 +1,125 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class GroupsListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + dataGridViewGroups = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewGroups).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(828, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(125, 439); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Del; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(13, 278); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(101, 100); + ButtonDel.TabIndex = 3; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.Upd; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(13, 172); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(100, 100); + ButtonUpd.TabIndex = 2; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Add; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(13, 66); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(100, 100); + ButtonAdd.TabIndex = 1; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridViewGroups + // + dataGridViewGroups.AllowUserToAddRows = false; + dataGridViewGroups.AllowUserToDeleteRows = false; + dataGridViewGroups.AllowUserToResizeColumns = false; + dataGridViewGroups.AllowUserToResizeRows = false; + dataGridViewGroups.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewGroups.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewGroups.Dock = DockStyle.Fill; + dataGridViewGroups.Location = new Point(0, 0); + dataGridViewGroups.MultiSelect = false; + dataGridViewGroups.Name = "dataGridViewGroups"; + dataGridViewGroups.ReadOnly = true; + dataGridViewGroups.RowHeadersVisible = false; + dataGridViewGroups.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewGroups.Size = new Size(828, 439); + dataGridViewGroups.TabIndex = 2; + // + // GroupsListForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(953, 439); + Controls.Add(dataGridViewGroups); + Controls.Add(panel1); + Name = "GroupsListForm"; + Text = "Группы"; + Load += GroupList_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewGroups).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonAdd; + private Button ButtonUpd; + private Button ButtonDel; + private DataGridView dataGridViewGroups; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.cs new file mode 100644 index 0000000..467dcab --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.cs @@ -0,0 +1,109 @@ +using SessionResults_Kudyaeva.Repositories; +using SessionResults_Kudyaeva.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using Unity; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class GroupsListForm : Form +{ + + private readonly IUnityContainer _container; + private readonly IGroupRepository _groupRepository; + + public GroupsListForm(IUnityContainer container, IGroupRepository groupRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _groupRepository = groupRepository ?? throw new ArgumentNullException(nameof(groupRepository)); + } + + private void GroupList_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 + { + _groupRepository.DeleteGroup(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewGroups.DataSource = _groupRepository.GetAllGroups(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewGroups.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridViewGroups.SelectedRows[0].Cells["ID"].Value); + return true; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/GroupsListForm.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.Designer.cs new file mode 100644 index 0000000..110afe0 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.Designer.cs @@ -0,0 +1,163 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class StudentForm + { + /// + /// 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() + { + lblSurname = new Label(); + lblName = new Label(); + lblMiddleName = new Label(); + lblGroup = new Label(); + textBoxSurname = new TextBox(); + textBoxName = new TextBox(); + textBoxMiddleName = new TextBox(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + comboBoxGroup = new ComboBox(); + SuspendLayout(); + // + // lblSurname + // + lblSurname.AutoSize = true; + lblSurname.Location = new Point(38, 39); + lblSurname.Name = "lblSurname"; + lblSurname.Size = new Size(61, 15); + lblSurname.TabIndex = 0; + lblSurname.Text = "Фамилия "; + // + // lblName + // + lblName.AutoSize = true; + lblName.Location = new Point(38, 69); + lblName.Name = "lblName"; + lblName.Size = new Size(31, 15); + lblName.TabIndex = 1; + lblName.Text = "Имя"; + // + // lblMiddleName + // + lblMiddleName.AutoSize = true; + lblMiddleName.Location = new Point(38, 98); + lblMiddleName.Name = "lblMiddleName"; + lblMiddleName.Size = new Size(58, 15); + lblMiddleName.TabIndex = 2; + lblMiddleName.Text = "Отчество"; + // + // lblGroup + // + lblGroup.AutoSize = true; + lblGroup.Location = new Point(38, 127); + lblGroup.Name = "lblGroup"; + lblGroup.Size = new Size(46, 15); + lblGroup.TabIndex = 3; + lblGroup.Text = "Группа"; + // + // textBoxSurname + // + textBoxSurname.Location = new Point(149, 36); + textBoxSurname.Name = "textBoxSurname"; + textBoxSurname.Size = new Size(141, 23); + textBoxSurname.TabIndex = 4; + // + // textBoxName + // + textBoxName.Location = new Point(149, 66); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(141, 23); + textBoxName.TabIndex = 5; + // + // textBoxMiddleName + // + textBoxMiddleName.Location = new Point(149, 95); + textBoxMiddleName.Name = "textBoxMiddleName"; + textBoxMiddleName.Size = new Size(141, 23); + textBoxMiddleName.TabIndex = 6; + // + // ButtonSave + // + ButtonSave.Location = new Point(49, 176); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(96, 23); + ButtonSave.TabIndex = 8; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(183, 176); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(96, 23); + ButtonCancel.TabIndex = 9; + ButtonCancel.Text = "Отменить"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // comboBoxGroup + // + comboBoxGroup.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxGroup.FormattingEnabled = true; + comboBoxGroup.Location = new Point(149, 124); + comboBoxGroup.Name = "comboBoxGroup"; + comboBoxGroup.Size = new Size(141, 23); + comboBoxGroup.TabIndex = 10; + // + // StudentForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(331, 224); + Controls.Add(comboBoxGroup); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(textBoxMiddleName); + Controls.Add(textBoxName); + Controls.Add(textBoxSurname); + Controls.Add(lblGroup); + Controls.Add(lblMiddleName); + Controls.Add(lblName); + Controls.Add(lblSurname); + Name = "StudentForm"; + Text = "StudentForm"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label lblSurname; + private Label lblName; + private Label lblMiddleName; + private Label lblGroup; + private TextBox textBoxSurname; + private TextBox textBoxName; + private TextBox textBoxMiddleName; + private Button ButtonSave; + private Button ButtonCancel; + private ComboBox comboBoxGroup; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.cs new file mode 100644 index 0000000..bd8fa45 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.cs @@ -0,0 +1,90 @@ +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class StudentForm : Form +{ + private readonly IStudentRepository _studentRepository; + private int? _studentId; + + public int Id + { + set + { + try + { + var student = _studentRepository.GetStudentById(value); + if (student == null) + { + throw new InvalidDataException(nameof(student)); + } + textBoxSurname.Text = student.Surname; + textBoxName.Text = student.Name; + textBoxMiddleName.Text = student.MiddleName; + comboBoxGroup.SelectedValue = student.GroupID; + _studentId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public StudentForm(IStudentRepository studentRepository) + { + InitializeComponent(); + _studentRepository = studentRepository ?? + throw new ArgumentNullException(nameof(studentRepository)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxSurname.Text) || + string.IsNullOrWhiteSpace(textBoxName.Text) || + string.IsNullOrWhiteSpace(textBoxMiddleName.Text) || + comboBoxGroup.SelectedItem == null) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_studentId.HasValue) + { + _studentRepository.UpdateStudent(CreateStudent(_studentId.Value)); + } + else + { + _studentRepository.AddStudent(CreateStudent(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Student CreateStudent(int id) => Student.Create( + id, + textBoxSurname.Text, + textBoxName.Text, + textBoxMiddleName.Text, + (int)comboBoxGroup.SelectedValue!); +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentForm.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.Designer.cs new file mode 100644 index 0000000..b2327ef --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.Designer.cs @@ -0,0 +1,126 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class StudentsList + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + dataGridViewStudents = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewStudents).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(840, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(126, 452); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Del; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(12, 266); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(101, 100); + ButtonDel.TabIndex = 2; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.Upd; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(13, 160); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(100, 100); + ButtonUpd.TabIndex = 1; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Add; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(13, 54); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(100, 100); + ButtonAdd.TabIndex = 0; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridViewStudents + // + dataGridViewStudents.AllowUserToAddRows = false; + dataGridViewStudents.AllowUserToDeleteRows = false; + dataGridViewStudents.AllowUserToResizeColumns = false; + dataGridViewStudents.AllowUserToResizeRows = false; + dataGridViewStudents.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewStudents.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewStudents.Dock = DockStyle.Fill; + dataGridViewStudents.Location = new Point(0, 0); + dataGridViewStudents.MultiSelect = false; + dataGridViewStudents.Name = "dataGridViewStudents"; + dataGridViewStudents.ReadOnly = true; + dataGridViewStudents.RowHeadersVisible = false; + dataGridViewStudents.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewStudents.Size = new Size(840, 452); + dataGridViewStudents.TabIndex = 1; + // + // StudentsList + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(966, 452); + Controls.Add(dataGridViewStudents); + Controls.Add(panel1); + Name = "StudentsList"; + StartPosition = FormStartPosition.CenterParent; + Text = "Студенты"; + Load += StudentsList_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewStudents).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonDel; + private Button ButtonUpd; + private Button ButtonAdd; + private DataGridView dataGridViewStudents; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.cs new file mode 100644 index 0000000..a31f17f --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.cs @@ -0,0 +1,108 @@ +using SessionResults_Kudyaeva.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class StudentsList : Form +{ + private readonly IUnityContainer _container; + private readonly IStudentRepository _studentRepository; + + public StudentsList(IUnityContainer container, IStudentRepository studentRepository) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + _studentRepository = studentRepository ?? throw new ArgumentNullException(nameof(studentRepository)); + } + + + private void StudentsList_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 + { + _studentRepository.DeleteStudent(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewStudents.DataSource = _studentRepository.GetAllStudents(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewStudents.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridViewStudents.SelectedRows[0].Cells["ID"].Value); + return true; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/StudentsList.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.Designer.cs new file mode 100644 index 0000000..ff22ac4 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.Designer.cs @@ -0,0 +1,161 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class TeacherForm + { + /// + /// 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() + { + ButtonSave = new Button(); + ButtonCancel = new Button(); + labelSurname = new Label(); + label2 = new Label(); + label3 = new Label(); + label4 = new Label(); + textBoxSurname = new TextBox(); + textBoxName = new TextBox(); + textBoxMiddleName = new TextBox(); + comboBoxDiscipline = new ComboBox(); + SuspendLayout(); + // + // ButtonSave + // + ButtonSave.Location = new Point(75, 195); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(96, 23); + ButtonSave.TabIndex = 9; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(223, 195); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(96, 23); + ButtonCancel.TabIndex = 10; + ButtonCancel.Text = "Отменить"; + ButtonCancel.UseVisualStyleBackColor = true; + // + // labelSurname + // + labelSurname.AutoSize = true; + labelSurname.Location = new Point(56, 55); + labelSurname.Name = "labelSurname"; + labelSurname.Size = new Size(58, 15); + labelSurname.TabIndex = 11; + labelSurname.Text = "Фамилия"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(56, 86); + label2.Name = "label2"; + label2.Size = new Size(31, 15); + label2.TabIndex = 12; + label2.Text = "Имя"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(56, 115); + label3.Name = "label3"; + label3.Size = new Size(58, 15); + label3.TabIndex = 13; + label3.Text = "Отчество"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(56, 144); + label4.Name = "label4"; + label4.Size = new Size(76, 15); + label4.TabIndex = 14; + label4.Text = "Дисциплина"; + // + // textBoxSurname + // + textBoxSurname.Location = new Point(200, 52); + textBoxSurname.Name = "textBoxSurname"; + textBoxSurname.Size = new Size(145, 23); + textBoxSurname.TabIndex = 15; + // + // textBoxName + // + textBoxName.Location = new Point(200, 83); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(145, 23); + textBoxName.TabIndex = 16; + // + // textBoxMiddleName + // + textBoxMiddleName.Location = new Point(200, 112); + textBoxMiddleName.Name = "textBoxMiddleName"; + textBoxMiddleName.Size = new Size(145, 23); + textBoxMiddleName.TabIndex = 17; + // + // comboBoxDiscipline + // + comboBoxDiscipline.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxDiscipline.FormattingEnabled = true; + comboBoxDiscipline.Location = new Point(200, 141); + comboBoxDiscipline.Name = "comboBoxDiscipline"; + comboBoxDiscipline.Size = new Size(145, 23); + comboBoxDiscipline.TabIndex = 18; + // + // TeacherForm + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(388, 249); + Controls.Add(comboBoxDiscipline); + Controls.Add(textBoxMiddleName); + Controls.Add(textBoxName); + Controls.Add(textBoxSurname); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(labelSurname); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Name = "TeacherForm"; + Text = "Преподаватель"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button ButtonSave; + private Button ButtonCancel; + private Label labelSurname; + private Label label2; + private Label label3; + private Label label4; + private TextBox textBoxSurname; + private TextBox textBoxName; + private TextBox textBoxMiddleName; + private ComboBox comboBoxDiscipline; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.cs new file mode 100644 index 0000000..51ed66f --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.cs @@ -0,0 +1,88 @@ +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class TeacherForm : Form +{ + + private readonly ITeacherRepository _teacherRepository; + private int? _teacherId; + + public int Id + { + set + { + try + { + var teacher = _teacherRepository.GetTeacherById(value); + if (teacher == null) + { + throw new InvalidDataException(nameof(teacher)); + } + textBoxSurname.Text = teacher.Surname; + textBoxName.Text = teacher.Name; + textBoxMiddleName.Text = teacher.MiddleName; + comboBoxDiscipline.SelectedValue = teacher.DisciplineID; + _teacherId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + + public TeacherForm(ITeacherRepository teacherRepository) + { + InitializeComponent(); + _teacherRepository = teacherRepository ?? throw new ArgumentNullException(nameof(teacherRepository)); + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxSurname.Text) || + string.IsNullOrWhiteSpace(textBoxName.Text) || + string.IsNullOrWhiteSpace(textBoxMiddleName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_teacherId.HasValue) + { + _teacherRepository.UpdateTeacher(CreateTeacher(_teacherId.Value)); + } + else + { + _teacherRepository.AddTeacher(CreateTeacher(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) => Close(); + + private Teacher CreateTeacher(int id) => Teacher.Create( + id, + textBoxSurname.Text, + textBoxName.Text, + textBoxMiddleName.Text, + (int)comboBoxDiscipline.SelectedValue!); +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeacherForm.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.Designer.cs new file mode 100644 index 0000000..b586c93 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.Designer.cs @@ -0,0 +1,125 @@ +namespace SessionResults_Kudyaeva.Forms +{ + partial class TeachersList + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1 = new Panel(); + ButtonDel = new Button(); + ButtonUpd = new Button(); + ButtonAdd = new Button(); + dataGridViewTeachers = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewTeachers).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(ButtonDel); + panel1.Controls.Add(ButtonUpd); + panel1.Controls.Add(ButtonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(836, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(125, 431); + panel1.TabIndex = 0; + // + // ButtonDel + // + ButtonDel.BackgroundImage = Properties.Resources.Del; + ButtonDel.BackgroundImageLayout = ImageLayout.Stretch; + ButtonDel.Location = new Point(13, 266); + ButtonDel.Name = "ButtonDel"; + ButtonDel.Size = new Size(101, 100); + ButtonDel.TabIndex = 4; + ButtonDel.UseVisualStyleBackColor = true; + ButtonDel.Click += ButtonDel_Click; + // + // ButtonUpd + // + ButtonUpd.BackgroundImage = Properties.Resources.Upd; + ButtonUpd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonUpd.Location = new Point(13, 160); + ButtonUpd.Name = "ButtonUpd"; + ButtonUpd.Size = new Size(100, 100); + ButtonUpd.TabIndex = 3; + ButtonUpd.UseVisualStyleBackColor = true; + ButtonUpd.Click += ButtonUpd_Click; + // + // ButtonAdd + // + ButtonAdd.BackgroundImage = Properties.Resources.Add; + ButtonAdd.BackgroundImageLayout = ImageLayout.Stretch; + ButtonAdd.Location = new Point(13, 54); + ButtonAdd.Name = "ButtonAdd"; + ButtonAdd.Size = new Size(100, 100); + ButtonAdd.TabIndex = 2; + ButtonAdd.UseVisualStyleBackColor = true; + ButtonAdd.Click += ButtonAdd_Click; + // + // dataGridViewTeachers + // + dataGridViewTeachers.AllowUserToAddRows = false; + dataGridViewTeachers.AllowUserToDeleteRows = false; + dataGridViewTeachers.AllowUserToResizeColumns = false; + dataGridViewTeachers.AllowUserToResizeRows = false; + dataGridViewTeachers.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridViewTeachers.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewTeachers.Dock = DockStyle.Fill; + dataGridViewTeachers.Location = new Point(0, 0); + dataGridViewTeachers.MultiSelect = false; + dataGridViewTeachers.Name = "dataGridViewTeachers"; + dataGridViewTeachers.ReadOnly = true; + dataGridViewTeachers.RowHeadersVisible = false; + dataGridViewTeachers.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridViewTeachers.Size = new Size(836, 431); + dataGridViewTeachers.TabIndex = 3; + // + // TeachersList + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(961, 431); + Controls.Add(dataGridViewTeachers); + Controls.Add(panel1); + Name = "TeachersList"; + Text = "Преподаватели"; + Load += TeachersList_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewTeachers).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button ButtonAdd; + private Button ButtonUpd; + private Button ButtonDel; + private DataGridView dataGridViewTeachers; + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.cs new file mode 100644 index 0000000..6c8688a --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.cs @@ -0,0 +1,106 @@ +using SessionResults_Kudyaeva.Repositories; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Unity; + +namespace SessionResults_Kudyaeva.Forms; + +public partial class TeachersList : Form +{ + private readonly IUnityContainer _container; + private readonly ITeacherRepository _teacherRepository; + + public TeachersList(IUnityContainer container, ITeacherRepository teacherRepository) + { + InitializeComponent(); + + _container = container ?? throw new ArgumentNullException(nameof(container)); + _teacherRepository = teacherRepository ?? throw new ArgumentNullException(nameof(teacherRepository)); + } + + private void TeachersList_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 + { + _teacherRepository.DeleteTeacher(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void LoadList() => dataGridViewTeachers.DataSource = _teacherRepository.GetAllTeachers(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridViewTeachers.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = Convert.ToInt32(dataGridViewTeachers.SelectedRows[0].Cells["ID"].Value); + return true; + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Forms/TeachersList.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Program.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Program.cs index d2e7923..fa75fdf 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Program.cs +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Program.cs @@ -1,3 +1,9 @@ +using SessionResults_Kudyaeva.Repositories.Implementations; +using SessionResults_Kudyaeva.Repositories; +using Unity.Lifetime; +using Unity; +using System.ComponentModel; + namespace SessionResults_Kudyaeva { internal static class Program @@ -11,7 +17,21 @@ namespace SessionResults_Kudyaeva // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new Form1()); + Application.Run(CreateContainer().Resolve()); + } + + private static IUnityContainer CreateContainer() + { + var container = new UnityContainer(); + + // + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + container.RegisterType(new TransientLifetimeManager()); + + return container; } } } \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Properties/Resources.Designer.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Properties/Resources.Designer.cs new file mode 100644 index 0000000..18c2a5a --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace SessionResults_Kudyaeva.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("SessionResults_Kudyaeva.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/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Properties/Resources.resx b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Properties/Resources.resx new file mode 100644 index 0000000..f317a2a --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/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\Add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\фон.jpg;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\Upd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IAddMarkRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IAddMarkRepository.cs new file mode 100644 index 0000000..e9be827 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IAddMarkRepository.cs @@ -0,0 +1,17 @@ +using SessionResults_Kudyaeva.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Repositories; + +public interface IAddMarkRepository +{ + void CreateMark(AddMark addMark); + void UpdateMark(AddMark addMark); + void DeleteMark(int id); + AddMark GetMarkById(int id); + IEnumerable GetAllMarks(); +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IDisciplineRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IDisciplineRepository.cs new file mode 100644 index 0000000..cfc43f2 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IDisciplineRepository.cs @@ -0,0 +1,17 @@ +using SessionResults_Kudyaeva.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Repositories; + +public interface IDisciplineRepository +{ + IEnumerable GetAllDisciplines(); + Discipline GetDisciplineById(int id); + void AddDiscipline(Discipline discipline); + void UpdateDiscipline(Discipline discipline); + void DeleteDiscipline(int id); +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IGroupRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IGroupRepository.cs new file mode 100644 index 0000000..fba796e --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IGroupRepository.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SessionResults_Kudyaeva.Entities; + +namespace SessionResults_Kudyaeva.Repositories; + +public interface IGroupRepository +{ + IEnumerable GetAllGroups(); + Group GetGroupById(int id); + void AddGroup(Group group); + void UpdateGroup(Group group); + void DeleteGroup(int id); +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IStudentRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IStudentRepository.cs new file mode 100644 index 0000000..d19df37 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/IStudentRepository.cs @@ -0,0 +1,17 @@ +using SessionResults_Kudyaeva.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Repositories; + +public interface IStudentRepository +{ + IEnumerable GetAllStudents(); + Student GetStudentById(int id); + void AddStudent(Student student); + void UpdateStudent(Student student); + void DeleteStudent(int id); +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/ITeacherRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/ITeacherRepository.cs new file mode 100644 index 0000000..c04c5d7 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/ITeacherRepository.cs @@ -0,0 +1,17 @@ +using SessionResults_Kudyaeva.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Repositories; + +public interface ITeacherRepository +{ + IEnumerable GetAllTeachers(); + Teacher GetTeacherById(int id); + void AddTeacher(Teacher teacher); + void UpdateTeacher(Teacher teacher); + void DeleteTeacher(int id); +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/AddMarkRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/AddMarkRepository.cs new file mode 100644 index 0000000..d328f58 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/AddMarkRepository.cs @@ -0,0 +1,39 @@ +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SessionResults_Kudyaeva.Repositories.Implementations; + +public class AddMarkRepository : IAddMarkRepository +{ + public void CreateMark(AddMark addMark) + { + // Заглушка + } + + public void UpdateMark(AddMark addMark) + { + // Заглушка + } + + public void DeleteMark(int id) + { + // Заглушка + } + + public AddMark GetMarkById(int id) + { + // Возвращаем объект с фиктивными данными, убедившись, что Mark.One существует + return AddMark.CreateOperation(0, 0, 0, 0, Mark.One); // Убедитесь, что Mark.One определен + } + + public IEnumerable GetAllMarks() + { + // Заглушка + return new List(); + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/DisciplineRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/DisciplineRepository.cs new file mode 100644 index 0000000..c911c37 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/DisciplineRepository.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Entities.Enums; + +namespace SessionResults_Kudyaeva.Repositories.Implementations; + + +public class DisciplineRepository : IDisciplineRepository +{ + public void AddDiscipline(Discipline discipline) + { + // Заглушка + } + + public void DeleteDiscipline(int id) + { + // Заглушка + } + + public IEnumerable GetAllDisciplines() + { + return new List(); + } + + public Discipline GetDisciplineById(int id) + { + return Discipline.Create(0, string.Empty, string.Empty, Course.None); + } + + public void UpdateDiscipline(Discipline discipline) + { + // Заглушка + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/GroupRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/GroupRepository.cs new file mode 100644 index 0000000..cd69813 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/GroupRepository.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Entities.Enums; + +namespace SessionResults_Kudyaeva.Repositories.Implementations; + + +public class GroupRepository : IGroupRepository +{ + public void AddGroup(Group group) + { + // Заглушка + } + + public void DeleteGroup(int id) + { + // Заглушка + } + + public IEnumerable GetAllGroups() + { + return new List(); + } + + public Group GetGroupById(int id) + { + return Group.Create(0, string.Empty, GroupType.Daytime); + } + + public void UpdateGroup(Group group) + { + // Заглушка + } +} diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StudentRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StudentRepository.cs new file mode 100644 index 0000000..1eeaf6f --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/StudentRepository.cs @@ -0,0 +1,39 @@ +using SessionResults_Kudyaeva.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SessionResults_Kudyaeva.Entities.Enums; + +namespace SessionResults_Kudyaeva.Repositories.Implementations; + +using System.Collections.Generic; + +public class StudentRepository : IStudentRepository +{ + public void AddStudent(Student student) + { + // Заглушка + } + + public void DeleteStudent(int id) + { + // Заглушка + } + + public IEnumerable GetAllStudents() + { + return new List(); + } + + public Student GetStudentById(int id) + { + return Student.Create(0, string.Empty, string.Empty, string.Empty, 0); + } + + public void UpdateStudent(Student student) + { + // Заглушка + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/TeacherRepository.cs b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/TeacherRepository.cs new file mode 100644 index 0000000..ea25683 --- /dev/null +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Repositories/Implementations/TeacherRepository.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SessionResults_Kudyaeva.Entities; +using SessionResults_Kudyaeva.Entities.Enums; + +namespace SessionResults_Kudyaeva.Repositories.Implementations; + + +using System.Collections.Generic; + +public class TeacherRepository : ITeacherRepository +{ + public void AddTeacher(Teacher teacher) + { + // Заглушка + } + + public void DeleteTeacher(int id) + { + // Заглушка + } + + public IEnumerable GetAllTeachers() + { + return new List(); + } + + public Teacher GetTeacherById(int id) + { + return Teacher.Create(0, string.Empty, string.Empty, string.Empty, 0); + } + + public void UpdateTeacher(Teacher teacher) + { + // Заглушка + } +} \ No newline at end of file diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Add.png b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Add.png new file mode 100644 index 0000000000000000000000000000000000000000..079cda019f1118f5671d84910becfc5dde2479a1 GIT binary patch literal 14601 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 literal 0 HcmV?d00001 diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Del.png b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Del.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4c3568f247b4dfde2a07949312bc9c55bec95d GIT binary patch literal 16895 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 Vy%ao^3KC7wH8pK~uB!FZ{{w8S7&-s| literal 0 HcmV?d00001 diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Upd.png b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/Resources/Upd.png new file mode 100644 index 0000000000000000000000000000000000000000..79dd85fda304e67d00c86fe621ec827b2d59f7f7 GIT binary patch literal 12849 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
d`z9(W{wIMpjBj{3(Y`B_WS?5oy4; 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 Xo8%07VaTykzbo5zMLYx|%z^(0`wYKR literal 0 HcmV?d00001 diff --git a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/SessionResults_Kudyaeva.csproj b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/SessionResults_Kudyaeva.csproj index 663fdb8..accbdf0 100644 --- a/SessionResults_Kudyaeva/SessionResults_Kudyaeva/SessionResults_Kudyaeva.csproj +++ b/SessionResults_Kudyaeva/SessionResults_Kudyaeva/SessionResults_Kudyaeva.csproj @@ -8,4 +8,23 @@ enable + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file