From fab7c37b854d4138ec52698bf3ab764aa35c3bfb Mon Sep 17 00:00:00 2001 From: rakhaliullov Date: Wed, 6 Nov 2024 20:02:15 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=87=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProjectShedule/Entities/Classroom.cs | 28 +++ .../ProjectShedule/Entities/Curriculum.cs | 21 ++ .../Entities/CurriculumSubject.cs | 26 +++ .../Entities/Enums/ClassType.cs | 14 ++ .../ProjectShedule/Entities/Enums/Course.cs | 16 ++ .../Entities/Enums/PairNumber.cs | 20 ++ .../ProjectShedule/Entities/Group.cs | 30 +++ .../ProjectShedule/Entities/Shedule.cs | 35 +++ .../ProjectShedule/Entities/Subject.cs | 21 ++ .../ProjectShedule/Entities/SubjectSubject.cs | 24 ++ .../ProjectShedule/Entities/Teacher.cs | 23 ++ .../ProjectShedule/Form1.Designer.cs | 39 ---- ProjectShedule/ProjectShedule/Form1.cs | 10 - .../FormSchedulingBureau.Designer.cs | 156 +++++++++++++ .../ProjectShedule/FormSchedulingBureau.cs | 108 +++++++++ .../ProjectShedule/FormSchedulingBureau.resx | 123 ++++++++++ .../Forms/FormClassroom.Designer.cs | 146 ++++++++++++ .../ProjectShedule/Forms/FormClassroom.cs | 83 +++++++ .../{Form1.resx => Forms/FormClassroom.resx} | 50 ++--- .../Forms/FormClassrooms.Designer.cs | 128 +++++++++++ .../ProjectShedule/Forms/FormClassrooms.cs | 99 ++++++++ .../ProjectShedule/Forms/FormClassrooms.resx | 120 ++++++++++ .../Forms/FormCurriculum.Designer.cs | 95 ++++++++ .../ProjectShedule/Forms/FormCurriculum.cs | 67 ++++++ .../ProjectShedule/Forms/FormCurriculum.resx | 120 ++++++++++ .../Forms/FormCurriculumSubject.Designer.cs | 211 ++++++++++++++++++ .../Forms/FormCurriculumSubject.cs | 72 ++++++ .../Forms/FormCurriculumSubject.resx | 132 +++++++++++ .../Forms/FormCurriculumSubjects.Designer.cs | 98 ++++++++ .../Forms/FormCurriculumSubjects.cs | 45 ++++ .../Forms/FormCurriculumSubjects.resx | 120 ++++++++++ .../Forms/FormCurriculums.Designer.cs | 126 +++++++++++ .../ProjectShedule/Forms/FormCurriculums.cs | 109 +++++++++ .../ProjectShedule/Forms/FormCurriculums.resx | 120 ++++++++++ .../Forms/FormGroup.Designer.cs | 167 ++++++++++++++ .../ProjectShedule/Forms/FormGroup.cs | 90 ++++++++ .../ProjectShedule/Forms/FormGroup.resx | 120 ++++++++++ .../Forms/FormGroups.Designer.cs | 126 +++++++++++ .../ProjectShedule/Forms/FormGroups.cs | 111 +++++++++ .../ProjectShedule/Forms/FormGroups.resx | 120 ++++++++++ .../Forms/FormShedule.Designer.cs | 210 +++++++++++++++++ .../ProjectShedule/Forms/FormShedule.cs | 72 ++++++ .../ProjectShedule/Forms/FormShedule.resx | 120 ++++++++++ .../Forms/FormShedules.Designer.cs | 98 ++++++++ .../ProjectShedule/Forms/FormShedules.cs | 49 ++++ .../ProjectShedule/Forms/FormShedules.resx | 120 ++++++++++ .../Forms/FormSubject.Designer.cs | 95 ++++++++ .../ProjectShedule/Forms/FormSubject.cs | 77 +++++++ .../ProjectShedule/Forms/FormSubject.resx | 120 ++++++++++ .../Forms/FormSubjects.Designer.cs | 127 +++++++++++ .../ProjectShedule/Forms/FormSubjects.cs | 109 +++++++++ .../ProjectShedule/Forms/FormSubjects.resx | 120 ++++++++++ .../Forms/FormTeacher.Designer.cs | 120 ++++++++++ .../ProjectShedule/Forms/FormTeacher.cs | 82 +++++++ .../ProjectShedule/Forms/FormTeacher.resx | 120 ++++++++++ .../Forms/FormTeachers.Designer.cs | 126 +++++++++++ .../ProjectShedule/Forms/FormTeachers.cs | 109 +++++++++ .../ProjectShedule/Forms/FormTeachers.resx | 120 ++++++++++ ProjectShedule/ProjectShedule/Program.cs | 20 +- .../ProjectShedule/ProjectShedule.csproj | 19 ++ .../Properties/Resources.Designer.cs | 103 +++++++++ .../ProjectShedule/Properties/Resources.resx | 133 +++++++++++ .../Repositories/IClassroomRepository.cs | 12 + .../Repositories/ICurriculumRepository.cs | 12 + .../ICurriculumSubjectRepository.cs | 9 + .../Repositories/IGroupRepository.cs | 12 + .../Repositories/ISheduleRepository.cs | 11 + .../Repositories/ISubjectRepository.cs | 12 + .../Repositories/ITeacherRepository.cs | 12 + .../Implementations/ClassroomRepository.cs | 28 +++ .../Implementations/CurriculumRepository.cs | 33 +++ .../CurriculumSubjectRepository.cs | 20 ++ .../Implementations/GroupRepository.cs | 33 +++ .../Implementations/SheduleRepository.cs | 28 +++ .../Implementations/SubjectRepository.cs | 33 +++ .../Implementations/TeacherRepository.cs | 33 +++ .../ProjectShedule/Resources/3712684.png | Bin 0 -> 12138 bytes .../Resources/Ambox_plus.svg.png | Bin 0 -> 74829 bytes .../ProjectShedule/Resources/back.jpg | Bin 0 -> 95098 bytes .../ProjectShedule/Resources/minus_PNG39.png | Bin 0 -> 15076 bytes 80 files changed, 5851 insertions(+), 75 deletions(-) create mode 100644 ProjectShedule/ProjectShedule/Entities/Classroom.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/Curriculum.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/CurriculumSubject.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/Enums/ClassType.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/Enums/Course.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/Enums/PairNumber.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/Group.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/Shedule.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/Subject.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/SubjectSubject.cs create mode 100644 ProjectShedule/ProjectShedule/Entities/Teacher.cs delete mode 100644 ProjectShedule/ProjectShedule/Form1.Designer.cs delete mode 100644 ProjectShedule/ProjectShedule/Form1.cs create mode 100644 ProjectShedule/ProjectShedule/FormSchedulingBureau.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/FormSchedulingBureau.cs create mode 100644 ProjectShedule/ProjectShedule/FormSchedulingBureau.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormClassroom.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormClassroom.cs rename ProjectShedule/ProjectShedule/{Form1.resx => Forms/FormClassroom.resx} (93%) create mode 100644 ProjectShedule/ProjectShedule/Forms/FormClassrooms.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormClassrooms.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormClassrooms.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculum.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculum.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculum.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculums.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculums.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormCurriculums.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormGroup.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormGroup.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormGroup.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormGroups.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormGroups.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormGroups.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormShedule.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormShedule.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormShedule.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormShedules.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormShedules.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormShedules.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormSubject.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormSubject.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormSubject.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormSubjects.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormSubjects.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormSubjects.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormTeacher.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormTeacher.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormTeacher.resx create mode 100644 ProjectShedule/ProjectShedule/Forms/FormTeachers.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormTeachers.cs create mode 100644 ProjectShedule/ProjectShedule/Forms/FormTeachers.resx create mode 100644 ProjectShedule/ProjectShedule/Properties/Resources.Designer.cs create mode 100644 ProjectShedule/ProjectShedule/Properties/Resources.resx create mode 100644 ProjectShedule/ProjectShedule/Repositories/IClassroomRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/ICurriculumRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/ICurriculumSubjectRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/IGroupRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/ISheduleRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/ISubjectRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/ITeacherRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/Implementations/ClassroomRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/Implementations/CurriculumRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/Implementations/CurriculumSubjectRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/Implementations/GroupRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/Implementations/SheduleRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/Implementations/SubjectRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Repositories/Implementations/TeacherRepository.cs create mode 100644 ProjectShedule/ProjectShedule/Resources/3712684.png create mode 100644 ProjectShedule/ProjectShedule/Resources/Ambox_plus.svg.png create mode 100644 ProjectShedule/ProjectShedule/Resources/back.jpg create mode 100644 ProjectShedule/ProjectShedule/Resources/minus_PNG39.png diff --git a/ProjectShedule/ProjectShedule/Entities/Classroom.cs b/ProjectShedule/ProjectShedule/Entities/Classroom.cs new file mode 100644 index 0000000..fb4730f --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Classroom.cs @@ -0,0 +1,28 @@ +using ProjectShedule.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + + +namespace ProjectShedule.Entities; + +public class Classroom +{ + public int Id { get;private set; } + public int Size { get; private set; } + public string Name { get; private set; } = String.Empty; + public ClassType ClassType { get; private set; } + + public static Classroom CreateClassroom(int id, int size, string name, ClassType classtype) + { + return new Classroom + { + Id = id, + Size = size, + Name = name, + ClassType = classtype + }; + } +} diff --git a/ProjectShedule/ProjectShedule/Entities/Curriculum.cs b/ProjectShedule/ProjectShedule/Entities/Curriculum.cs new file mode 100644 index 0000000..7e7ec20 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Curriculum.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities; + +public class Curriculum +{ + public int Id { get; private set; } + public string Direction { get; private set; } = string.Empty; + public static Curriculum CreateCurriculum(int id, string direction) + { + return new Curriculum + { + Id = id, + Direction = direction, + }; + } +} diff --git a/ProjectShedule/ProjectShedule/Entities/CurriculumSubject.cs b/ProjectShedule/ProjectShedule/Entities/CurriculumSubject.cs new file mode 100644 index 0000000..b021065 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/CurriculumSubject.cs @@ -0,0 +1,26 @@ +using ProjectShedule.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities; + +public class CurriculumSubject +{ + public int CurriculumId { get; private set; } + public IEnumerable SubjectSubject { get; private set; } = []; + public Course Course { get; private set; } + + public static CurriculumSubject CreateCurriculumSubject(int curriculumId, Course course, IEnumerable subjectSubjects) + { + return new CurriculumSubject() + { + CurriculumId = curriculumId, + Course = course, + SubjectSubject = subjectSubjects + }; + } + +} diff --git a/ProjectShedule/ProjectShedule/Entities/Enums/ClassType.cs b/ProjectShedule/ProjectShedule/Entities/Enums/ClassType.cs new file mode 100644 index 0000000..6300a8f --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Enums/ClassType.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities.Enums; + +public enum ClassType +{ + LectureHall = 1, + + ComputerClass = 2 +} diff --git a/ProjectShedule/ProjectShedule/Entities/Enums/Course.cs b/ProjectShedule/ProjectShedule/Entities/Enums/Course.cs new file mode 100644 index 0000000..4ee2861 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Enums/Course.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities.Enums; + +public enum Course +{ + None = 0, + First = 1, + Second = 2, + Third = 3, + Fourth = 4, +} diff --git a/ProjectShedule/ProjectShedule/Entities/Enums/PairNumber.cs b/ProjectShedule/ProjectShedule/Entities/Enums/PairNumber.cs new file mode 100644 index 0000000..4378958 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Enums/PairNumber.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities.Enums; + +[Flags] +public enum PairNumber +{ + None = 0, + First = 1, + Second = 2, + Third = 4, + Fourth = 8, + Fifth = 16, + Sixth = 32, + Seveth = 64 +} diff --git a/ProjectShedule/ProjectShedule/Entities/Group.cs b/ProjectShedule/ProjectShedule/Entities/Group.cs new file mode 100644 index 0000000..93b3ea0 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Group.cs @@ -0,0 +1,30 @@ +using ProjectShedule.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities; + +public class Group +{ + public int Id { get; private set; } + public int StudentsCount { get; private set; } + public string GroupNumber { get; private set; } = String.Empty; + public Course Course { get; private set; } + public int CurriculumId { get; private set; } + public static Group CreateGroup(int id, int studentsCount, string groupNumber, Course course, int curriculumId) + { + return new Group + { + Id = id, + StudentsCount = studentsCount, + GroupNumber = groupNumber, + Course = course, + CurriculumId = curriculumId + }; + } + + +} diff --git a/ProjectShedule/ProjectShedule/Entities/Shedule.cs b/ProjectShedule/ProjectShedule/Entities/Shedule.cs new file mode 100644 index 0000000..428e327 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Shedule.cs @@ -0,0 +1,35 @@ +using ProjectShedule.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities; + +public class Shedule +{ + public int Id { get; private set; } + public DateTime Date { get; private set; } + public PairNumber PairNumber { get; private set; } + public int GroupId { get; private set; } + public int TeacherId { get; private set; } + public int SubjectId { get; private set; } + public int ClassroomId { get; private set; } + + + public static Shedule CreateOperation(int id, DateTime date, PairNumber pairNumber, int groupId, int teacherId, int subjectId, int classroomId) + { + return new Shedule + { + Id = id, + Date = date, + PairNumber = pairNumber, + GroupId = groupId, + TeacherId = teacherId, + SubjectId = subjectId, + ClassroomId = classroomId + }; + } + +} diff --git a/ProjectShedule/ProjectShedule/Entities/Subject.cs b/ProjectShedule/ProjectShedule/Entities/Subject.cs new file mode 100644 index 0000000..ea6805a --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Subject.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities; + +public class Subject +{ + public int Id { get; private set; } + public string Name { get; private set; } = String.Empty; + public static Subject CreateSubject(int id, string name) + { + return new Subject + { + Id = id, + Name = name + }; + } +} diff --git a/ProjectShedule/ProjectShedule/Entities/SubjectSubject.cs b/ProjectShedule/ProjectShedule/Entities/SubjectSubject.cs new file mode 100644 index 0000000..a3bb02d --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/SubjectSubject.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities; + +public class SubjectSubject +{ + public int Id { get; private set; } + public int SubjectId { get; private set; } + public int LessonsCount { get; private set; } + + public static SubjectSubject CreateOperation(int id, int subjectId, int lessonsCount) + { + return new SubjectSubject + { + Id = id, + SubjectId = subjectId, + LessonsCount = lessonsCount + }; + } +} diff --git a/ProjectShedule/ProjectShedule/Entities/Teacher.cs b/ProjectShedule/ProjectShedule/Entities/Teacher.cs new file mode 100644 index 0000000..630bc54 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Entities/Teacher.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Entities; + +public class Teacher +{ + public int Id { get; private set; } + public string FirstName { get; private set; } = string.Empty; + public string LastName { get; private set; } = string.Empty; + public static Teacher CreateTeacher(int id, string firstName, string lastName) + { + return new Teacher + { + Id = id, + FirstName = firstName, + LastName = lastName + }; + } +} diff --git a/ProjectShedule/ProjectShedule/Form1.Designer.cs b/ProjectShedule/ProjectShedule/Form1.Designer.cs deleted file mode 100644 index b7789ca..0000000 --- a/ProjectShedule/ProjectShedule/Form1.Designer.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace ProjectShedule -{ - 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/ProjectShedule/ProjectShedule/Form1.cs b/ProjectShedule/ProjectShedule/Form1.cs deleted file mode 100644 index 962e363..0000000 --- a/ProjectShedule/ProjectShedule/Form1.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace ProjectShedule -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } - } -} diff --git a/ProjectShedule/ProjectShedule/FormSchedulingBureau.Designer.cs b/ProjectShedule/ProjectShedule/FormSchedulingBureau.Designer.cs new file mode 100644 index 0000000..16658ef --- /dev/null +++ b/ProjectShedule/ProjectShedule/FormSchedulingBureau.Designer.cs @@ -0,0 +1,156 @@ +namespace ProjectShedule +{ + partial class FormSchedulingBureau + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + menuStrip = new MenuStrip(); + справочникиToolStripMenuItem = new ToolStripMenuItem(); + classroomToolStripMenuItem = new ToolStripMenuItem(); + teacherToolStripMenuItem = new ToolStripMenuItem(); + subjectsToolStripMenuItem = new ToolStripMenuItem(); + curriculumsToolStripMenuItem = new ToolStripMenuItem(); + studentGroupsToolStripMenuItem = new ToolStripMenuItem(); + операцииToolStripMenuItem = new ToolStripMenuItem(); + createSheduleToolStripMenuItem = new ToolStripMenuItem(); + createCurriculumToolStripMenuItem = new ToolStripMenuItem(); + отчетыToolStripMenuItem = new ToolStripMenuItem(); + menuStrip.SuspendLayout(); + SuspendLayout(); + // + // menuStrip + // + menuStrip.ImageScalingSize = new Size(20, 20); + menuStrip.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, операцииToolStripMenuItem, отчетыToolStripMenuItem }); + menuStrip.Location = new Point(0, 0); + menuStrip.Name = "menuStrip"; + menuStrip.Size = new Size(800, 28); + menuStrip.TabIndex = 0; + menuStrip.Text = "menuStrip1"; + // + // справочникиToolStripMenuItem + // + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { classroomToolStripMenuItem, teacherToolStripMenuItem, subjectsToolStripMenuItem, curriculumsToolStripMenuItem, studentGroupsToolStripMenuItem }); + справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; + справочникиToolStripMenuItem.Size = new Size(117, 24); + справочникиToolStripMenuItem.Text = "Справочники"; + // + // classroomToolStripMenuItem + // + classroomToolStripMenuItem.Name = "classroomToolStripMenuItem"; + classroomToolStripMenuItem.Size = new Size(224, 26); + classroomToolStripMenuItem.Text = "Аудитории"; + classroomToolStripMenuItem.Click += classroomToolStripMenuItem_Click; + // + // teacherToolStripMenuItem + // + teacherToolStripMenuItem.Name = "teacherToolStripMenuItem"; + teacherToolStripMenuItem.Size = new Size(224, 26); + teacherToolStripMenuItem.Text = "Преподаватели"; + teacherToolStripMenuItem.Click += teacherToolStripMenuItem_Click; + // + // subjectsToolStripMenuItem + // + subjectsToolStripMenuItem.Name = "subjectsToolStripMenuItem"; + subjectsToolStripMenuItem.Size = new Size(224, 26); + subjectsToolStripMenuItem.Text = "Дисциплины"; + subjectsToolStripMenuItem.Click += subjectsToolStripMenuItem_Click; + // + // curriculumsToolStripMenuItem + // + curriculumsToolStripMenuItem.Name = "curriculumsToolStripMenuItem"; + curriculumsToolStripMenuItem.Size = new Size(224, 26); + curriculumsToolStripMenuItem.Text = "Учебные планы"; + curriculumsToolStripMenuItem.Click += curriculumsToolStripMenuItem_Click; + // + // studentGroupsToolStripMenuItem + // + studentGroupsToolStripMenuItem.Name = "studentGroupsToolStripMenuItem"; + studentGroupsToolStripMenuItem.Size = new Size(224, 26); + studentGroupsToolStripMenuItem.Text = "Группы студентов"; + studentGroupsToolStripMenuItem.Click += studentGroupsToolStripMenuItem_Click; + // + // операцииToolStripMenuItem + // + операцииToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { createSheduleToolStripMenuItem, createCurriculumToolStripMenuItem }); + операцииToolStripMenuItem.Name = "операцииToolStripMenuItem"; + операцииToolStripMenuItem.Size = new Size(95, 24); + операцииToolStripMenuItem.Text = "Операции"; + // + // createSheduleToolStripMenuItem + // + createSheduleToolStripMenuItem.Name = "createSheduleToolStripMenuItem"; + createSheduleToolStripMenuItem.Size = new Size(296, 26); + createSheduleToolStripMenuItem.Text = "Составление расписания"; + createSheduleToolStripMenuItem.Click += createSheduleToolStripMenuItem_Click; + // + // createCurriculumToolStripMenuItem + // + createCurriculumToolStripMenuItem.Name = "createCurriculumToolStripMenuItem"; + createCurriculumToolStripMenuItem.Size = new Size(296, 26); + createCurriculumToolStripMenuItem.Text = "Составление учебного плана"; + createCurriculumToolStripMenuItem.Click += createCurriculumToolStripMenuItem_Click; + // + // отчетыToolStripMenuItem + // + отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; + отчетыToolStripMenuItem.Size = new Size(73, 24); + отчетыToolStripMenuItem.Text = "Отчеты"; + // + // FormSchedulingBureau + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = Properties.Resources.back; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(800, 450); + Controls.Add(menuStrip); + MainMenuStrip = menuStrip; + Name = "FormSchedulingBureau"; + StartPosition = FormStartPosition.CenterParent; + Text = "Бюро составления расписаний"; + menuStrip.ResumeLayout(false); + menuStrip.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private MenuStrip menuStrip; + private ToolStripMenuItem справочникиToolStripMenuItem; + private ToolStripMenuItem classroomToolStripMenuItem; + private ToolStripMenuItem teacherToolStripMenuItem; + private ToolStripMenuItem subjectsToolStripMenuItem; + private ToolStripMenuItem curriculumsToolStripMenuItem; + private ToolStripMenuItem studentGroupsToolStripMenuItem; + private ToolStripMenuItem операцииToolStripMenuItem; + private ToolStripMenuItem createSheduleToolStripMenuItem; + private ToolStripMenuItem отчетыToolStripMenuItem; + private ToolStripMenuItem createCurriculumToolStripMenuItem; + } +} diff --git a/ProjectShedule/ProjectShedule/FormSchedulingBureau.cs b/ProjectShedule/ProjectShedule/FormSchedulingBureau.cs new file mode 100644 index 0000000..1ea15a6 --- /dev/null +++ b/ProjectShedule/ProjectShedule/FormSchedulingBureau.cs @@ -0,0 +1,108 @@ +using ProjectShedule.Forms; +using System.ComponentModel; +using Unity; + +namespace ProjectShedule +{ + public partial class FormSchedulingBureau : Form + { + + private readonly IUnityContainer _container; + public FormSchedulingBureau(IUnityContainer container) + { + InitializeComponent(); + _container = container ?? throw new ArgumentNullException(nameof(container)); + } + + private void classroomToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void teacherToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void subjectsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void curriculumsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void studentGroupsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void createSheduleToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void createCurriculumToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/ProjectShedule/ProjectShedule/FormSchedulingBureau.resx b/ProjectShedule/ProjectShedule/FormSchedulingBureau.resx new file mode 100644 index 0000000..6c82d08 --- /dev/null +++ b/ProjectShedule/ProjectShedule/FormSchedulingBureau.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/ProjectShedule/ProjectShedule/Forms/FormClassroom.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormClassroom.Designer.cs new file mode 100644 index 0000000..78c6ef7 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormClassroom.Designer.cs @@ -0,0 +1,146 @@ +namespace ProjectShedule.Forms +{ + partial class FormClassroom + { + /// + /// 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(); + numericUpDownClassroomSize = new NumericUpDown(); + label2 = new Label(); + textBoxClassroomNumber = new TextBox(); + label3 = new Label(); + comboBoxTypeClassroom = new ComboBox(); + buttonSave = new Button(); + buttonCancel = new Button(); + ((System.ComponentModel.ISupportInitialize)numericUpDownClassroomSize).BeginInit(); + SuspendLayout(); + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(47, 63); + label1.Name = "label1"; + label1.Size = new Size(103, 20); + label1.TabIndex = 0; + label1.Text = "Вместимость:"; + // + // numericUpDownClassroomSize + // + numericUpDownClassroomSize.Location = new Point(219, 56); + numericUpDownClassroomSize.Name = "numericUpDownClassroomSize"; + numericUpDownClassroomSize.Size = new Size(150, 27); + numericUpDownClassroomSize.TabIndex = 1; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(47, 109); + label2.Name = "label2"; + label2.Size = new Size(138, 20); + label2.TabIndex = 2; + label2.Text = "Номер аудитории:"; + // + // textBoxClassroomNumber + // + textBoxClassroomNumber.Location = new Point(219, 102); + textBoxClassroomNumber.Name = "textBoxClassroomNumber"; + textBoxClassroomNumber.Size = new Size(150, 27); + textBoxClassroomNumber.TabIndex = 3; + + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(47, 149); + label3.Name = "label3"; + label3.Size = new Size(116, 20); + label3.TabIndex = 4; + label3.Text = "Тип аудитории:"; + // + // comboBoxTypeClassroom + // + comboBoxTypeClassroom.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxTypeClassroom.FormattingEnabled = true; + comboBoxTypeClassroom.Location = new Point(219, 141); + comboBoxTypeClassroom.Name = "comboBoxTypeClassroom"; + comboBoxTypeClassroom.Size = new Size(151, 28); + comboBoxTypeClassroom.TabIndex = 5; + // + // buttonSave + // + buttonSave.Location = new Point(119, 206); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 6; + buttonSave.Text = "Создать"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(219, 206); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 7; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // FormClassroom + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = SystemColors.Menu; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new Size(428, 276); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(comboBoxTypeClassroom); + Controls.Add(label3); + Controls.Add(textBoxClassroomNumber); + Controls.Add(label2); + Controls.Add(numericUpDownClassroomSize); + Controls.Add(label1); + Name = "FormClassroom"; + Text = "Аудитория"; + ((System.ComponentModel.ISupportInitialize)numericUpDownClassroomSize).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private NumericUpDown numericUpDownClassroomSize; + private Label label2; + private TextBox textBoxClassroomNumber; + private Label label3; + private ComboBox comboBoxTypeClassroom; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormClassroom.cs b/ProjectShedule/ProjectShedule/Forms/FormClassroom.cs new file mode 100644 index 0000000..b2461f2 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormClassroom.cs @@ -0,0 +1,83 @@ +using ProjectShedule.Entities; +using ProjectShedule.Entities.Enums; +using ProjectShedule.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 ProjectShedule.Forms +{ + public partial class FormClassroom : Form + { + private readonly IClassroomRepository _classroomRepository; + private int? _classroomId; + + public int Id + { + set + { + try + { + var classroom = _classroomRepository.ReadClassroomById(value); + if (classroom == null) + { + throw new InvalidDataException(nameof(classroom)); + } + numericUpDownClassroomSize.Value = classroom.Size; + textBoxClassroomNumber.Text = classroom.Name; + comboBoxTypeClassroom.SelectedItem = classroom.ClassType; + _classroomId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormClassroom(IClassroomRepository classroomRepository) + { + InitializeComponent(); + _classroomRepository = classroomRepository ?? + throw new ArgumentNullException(nameof(classroomRepository)); + comboBoxTypeClassroom.DataSource = Enum.GetValues(typeof(ClassType)); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxClassroomNumber.Text) || comboBoxTypeClassroom.SelectedIndex < 0) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_classroomId.HasValue) + { + _classroomRepository.UpdateClassroom(CreateClassroom(_classroomId.Value)); + } + else + { + _classroomRepository.UpdateClassroom(CreateClassroom(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + private Classroom CreateClassroom(int id) => Classroom.CreateClassroom( + id, + Convert.ToInt32(numericUpDownClassroomSize.Value), + textBoxClassroomNumber.Text, + (ClassType)comboBoxTypeClassroom.SelectedItem!); + } +} diff --git a/ProjectShedule/ProjectShedule/Form1.resx b/ProjectShedule/ProjectShedule/Forms/FormClassroom.resx similarity index 93% rename from ProjectShedule/ProjectShedule/Form1.resx rename to ProjectShedule/ProjectShedule/Forms/FormClassroom.resx index 1af7de1..af32865 100644 --- a/ProjectShedule/ProjectShedule/Form1.resx +++ b/ProjectShedule/ProjectShedule/Forms/FormClassroom.resx @@ -1,17 +1,17 @@  - diff --git a/ProjectShedule/ProjectShedule/Forms/FormClassrooms.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormClassrooms.Designer.cs new file mode 100644 index 0000000..945497d --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormClassrooms.Designer.cs @@ -0,0 +1,128 @@ +namespace ProjectShedule.Forms +{ + partial class FormClassrooms + { + /// + /// 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(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(663, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 353); + panel1.TabIndex = 0; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.minus_PNG39; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(42, 248); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 93); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += buttonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources._3712684; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(42, 129); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(94, 93); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += buttonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Ambox_plus_svg; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(42, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 93); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(663, 353); + dataGridView.TabIndex = 1; + // + // FormClassrooms + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(841, 353); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormClassrooms"; + StartPosition = FormStartPosition.CenterParent; + Text = "Аудитории"; + Load += FormClassrooms_Load; + Click += FormClassrooms_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormClassrooms.cs b/ProjectShedule/ProjectShedule/Forms/FormClassrooms.cs new file mode 100644 index 0000000..9d0c8b6 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormClassrooms.cs @@ -0,0 +1,99 @@ +using ProjectShedule.Repositories; +using Unity; + +namespace ProjectShedule.Forms +{ + public partial class FormClassrooms : Form + { + private readonly IUnityContainer _container; + private readonly IClassroomRepository _classroomRepository; + public FormClassrooms(IUnityContainer container, IClassroomRepository classroomRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _classroomRepository = classroomRepository ?? + throw new ArgumentNullException(nameof(classroomRepository)); + } + private void FormClassrooms_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 + { + _classroomRepository.DeleteClassroom(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView.DataSource = _classroomRepository.ReadClassroom(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return true; + } + else + { + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[id].Value); + return false; + } + } + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormClassrooms.resx b/ProjectShedule/ProjectShedule/Forms/FormClassrooms.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormClassrooms.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/ProjectShedule/ProjectShedule/Forms/FormCurriculum.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormCurriculum.Designer.cs new file mode 100644 index 0000000..7ac90a5 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculum.Designer.cs @@ -0,0 +1,95 @@ +namespace ProjectShedule.Forms +{ + partial class FormCurriculum + { + /// + /// 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() + { + buttonCancel = new Button(); + buttonSave = new Button(); + label2 = new Label(); + textBoxCurriculumName = new TextBox(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Location = new Point(239, 104); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 15; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // buttonSave + // + buttonSave.Location = new Point(117, 104); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 14; + buttonSave.Text = "Создать"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(34, 54); + label2.Name = "label2"; + label2.Size = new Size(177, 20); + label2.TabIndex = 10; + label2.Text = "Название направления:"; + // + // textBoxCurriculumName + // + textBoxCurriculumName.Location = new Point(239, 51); + textBoxCurriculumName.Name = "textBoxCurriculumName"; + textBoxCurriculumName.Size = new Size(150, 27); + textBoxCurriculumName.TabIndex = 11; + // + // FormCurriculum + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(441, 167); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxCurriculumName); + Controls.Add(label2); + Name = "FormCurriculum"; + Text = "Учебный план(дисциплина)"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonCancel; + private Button buttonSave; + private Label label2; + private TextBox textBoxCurriculumName; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculum.cs b/ProjectShedule/ProjectShedule/Forms/FormCurriculum.cs new file mode 100644 index 0000000..a0c89c4 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculum.cs @@ -0,0 +1,67 @@ +using ProjectShedule.Entities; +using ProjectShedule.Repositories; + +namespace ProjectShedule.Forms +{ + public partial class FormCurriculum : Form + { + private readonly ICurriculumRepository _curriculumRepository; + private int? _curriculumId; + public int Id + { + set + { + try + { + var curriculum = _curriculumRepository.ReadCurriculumById(value); + if (curriculum == null) + { + throw new InvalidDataException(nameof(curriculum)); + } + textBoxCurriculumName.Text = curriculum.Direction; + _curriculumId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormCurriculum(ICurriculumRepository curriculumRepository) + { + InitializeComponent(); + _curriculumRepository = curriculumRepository ?? + throw new ArgumentNullException(nameof(curriculumRepository)); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxCurriculumName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_curriculumId.HasValue) + { + _curriculumRepository.UpdateCurriculum(CreateCurriculum(_curriculumId.Value)); + } + else + { + _curriculumRepository.UpdateCurriculum(CreateCurriculum(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + private Curriculum CreateCurriculum(int id) => Curriculum.CreateCurriculum( + id, + textBoxCurriculumName.Text); + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculum.resx b/ProjectShedule/ProjectShedule/Forms/FormCurriculum.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculum.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/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.Designer.cs new file mode 100644 index 0000000..ef6be25 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.Designer.cs @@ -0,0 +1,211 @@ +namespace ProjectShedule.Forms +{ + partial class FormCurriculumSubject + { + /// + /// 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() + { + buttonCancel = new Button(); + buttonSave = new Button(); + label4 = new Label(); + label1 = new Label(); + comboBoxDirection = new ComboBox(); + comboBoxCourse = new ComboBox(); + groupBoxCurriculum = new GroupBox(); + dataGridViewCur = new DataGridView(); + Column1 = new DataGridViewComboBoxColumn(); + Column2 = new DataGridViewTextBoxColumn(); + dataGridView = new DataGridView(); + ColumnSubject = new DataGridViewComboBoxColumn(); + ColumnLessons = new DataGridViewTextBoxColumn(); + groupBoxCurriculum.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridViewCur).BeginInit(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Location = new Point(200, 465); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 19; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // buttonSave + // + buttonSave.Location = new Point(91, 465); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 18; + buttonSave.Text = "Создать"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(115, 96); + label4.Name = "label4"; + label4.Size = new Size(44, 20); + label4.TabIndex = 16; + label4.Text = "Курс:"; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(52, 44); + label1.Name = "label1"; + label1.Size = new Size(107, 20); + label1.TabIndex = 11; + label1.Text = "Направление:"; + // + // comboBoxDirection + // + comboBoxDirection.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxDirection.FormattingEnabled = true; + comboBoxDirection.Location = new Point(165, 36); + comboBoxDirection.Name = "comboBoxDirection"; + comboBoxDirection.Size = new Size(150, 28); + comboBoxDirection.TabIndex = 10; + // + // comboBoxCourse + // + comboBoxCourse.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxCourse.FormattingEnabled = true; + comboBoxCourse.Location = new Point(165, 93); + comboBoxCourse.Name = "comboBoxCourse"; + comboBoxCourse.Size = new Size(150, 28); + comboBoxCourse.TabIndex = 20; + // + // groupBoxCurriculum + // + groupBoxCurriculum.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + groupBoxCurriculum.Controls.Add(dataGridView); + groupBoxCurriculum.Controls.Add(dataGridViewCur); + groupBoxCurriculum.Location = new Point(12, 144); + groupBoxCurriculum.Name = "groupBoxCurriculum"; + groupBoxCurriculum.Size = new Size(360, 315); + groupBoxCurriculum.TabIndex = 21; + groupBoxCurriculum.TabStop = false; + groupBoxCurriculum.Text = "Учбеный план"; + // + // dataGridViewCur + // + dataGridViewCur.AllowUserToResizeColumns = false; + dataGridViewCur.AllowUserToResizeRows = false; + dataGridViewCur.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridViewCur.Columns.AddRange(new DataGridViewColumn[] { Column1, Column2 }); + dataGridViewCur.Dock = DockStyle.Fill; + dataGridViewCur.Location = new Point(3, 23); + dataGridViewCur.Name = "dataGridViewCur"; + dataGridViewCur.RowHeadersWidth = 51; + dataGridViewCur.Size = new Size(354, 289); + dataGridViewCur.TabIndex = 0; + // + // Column1 + // + Column1.HeaderText = "Column1"; + Column1.MinimumWidth = 6; + Column1.Name = "Column1"; + Column1.Width = 125; + // + // Column2 + // + Column2.HeaderText = "Column2"; + Column2.MinimumWidth = 6; + Column2.Name = "Column2"; + Column2.Width = 125; + // + // dataGridView + // + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnSubject, ColumnLessons }); + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(3, 23); + dataGridView.Margin = new Padding(3, 4, 3, 4); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(354, 289); + dataGridView.TabIndex = 1; + // + // ColumnSubject + // + ColumnSubject.HeaderText = "Дисциплина"; + ColumnSubject.MinimumWidth = 6; + ColumnSubject.Name = "ColumnSubject"; + // + // ColumnLessons + // + ColumnLessons.HeaderText = "Кол-во занятий"; + ColumnLessons.MinimumWidth = 6; + ColumnLessons.Name = "ColumnLessons"; + // + // FormCurriculumSubject + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(384, 522); + Controls.Add(groupBoxCurriculum); + Controls.Add(comboBoxCourse); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(label4); + Controls.Add(label1); + Controls.Add(comboBoxDirection); + Name = "FormCurriculumSubject"; + Text = "Составление учебного плана"; + groupBoxCurriculum.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridViewCur).EndInit(); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonCancel; + private Button buttonSave; + private Label label4; + private Label label1; + private ComboBox comboBoxDirection; + private ComboBox comboBoxCourse; + private GroupBox groupBoxCurriculum; + private DataGridView dataGridViewCur; + private DataGridViewComboBoxColumn Column1; + private DataGridViewTextBoxColumn Column2; + private DataGridView dataGridView; + private DataGridViewComboBoxColumn ColumnSubject; + private DataGridViewTextBoxColumn ColumnLessons; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.cs b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.cs new file mode 100644 index 0000000..87ce6c8 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.cs @@ -0,0 +1,72 @@ +using ProjectShedule.Entities; +using ProjectShedule.Entities.Enums; +using ProjectShedule.Repositories; + + +namespace ProjectShedule.Forms +{ + public partial class FormCurriculumSubject : Form + { + private readonly ICurriculumSubjectRepository _curriculumSubjectRepository; + public FormCurriculumSubject(ICurriculumSubjectRepository curriculumSubjectRepository, + ICurriculumRepository curriculumRepository, + ISubjectRepository subjectRepository) + { + InitializeComponent(); + _curriculumSubjectRepository = curriculumSubjectRepository ?? + throw new ArgumentNullException(nameof(curriculumSubjectRepository)); + + comboBoxDirection.DataSource = curriculumRepository.ReadCurriculum(); + comboBoxDirection.DisplayMember = "Direction"; + comboBoxDirection.ValueMember = "Id"; + + comboBoxCourse.DataSource = Enum.GetValues(typeof(Course)); + + ColumnSubject.DataSource = subjectRepository.ReadSubject(); + ColumnSubject.DisplayMember = "Name"; + ColumnSubject.ValueMember = "Id"; + + + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxDirection.SelectedIndex < 0 || + comboBoxCourse.SelectedIndex < 0 || dataGridView.RowCount < 1) + { + throw new Exception("Есть незаполненные поля"); + } + _curriculumSubjectRepository.CreateCurriculumSubject(CurriculumSubject.CreateCurriculumSubject( + (int)comboBoxDirection.SelectedValue!, + (Course)comboBoxCourse.SelectedItem!, CreateListSubjectSubjectFromDataGrid())); + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + private List CreateListSubjectSubjectFromDataGrid() + { + var list = new List(); + foreach (DataGridViewRow row in dataGridView.Rows) + { + if (row.Cells["ColumnSubject"].Value == null || + row.Cells["ColumnLessons"].Value == null) + { + continue; + } + list.Add(SubjectSubject.CreateOperation( + 0, + Convert.ToInt32(row.Cells["ColumnSubject"].Value), + Convert.ToInt32(row.Cells["ColumnLessons"].Value))); + } + return list; + } + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.resx b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.resx new file mode 100644 index 0000000..35196f1 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubject.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.Designer.cs new file mode 100644 index 0000000..ddde3d4 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.Designer.cs @@ -0,0 +1,98 @@ +namespace ProjectShedule.Forms +{ + partial class FormCurriculumSubjects + { + /// + /// 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(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(622, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 352); + panel1.TabIndex = 2; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Ambox_plus_svg; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(42, 125); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 93); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(800, 352); + dataGridView.TabIndex = 3; + // + // FormCurriculumSubjects + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 352); + Controls.Add(panel1); + Controls.Add(dataGridView); + Name = "FormCurriculumSubjects"; + Text = "FormCurriculumSubjects"; + Load += FormCurriculumSubjects_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.cs b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.cs new file mode 100644 index 0000000..89f82bb --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.cs @@ -0,0 +1,45 @@ +using ProjectShedule.Repositories; +using Unity; + +namespace ProjectShedule.Forms +{ + public partial class FormCurriculumSubjects : Form + { + private readonly IUnityContainer _container; + private readonly ICurriculumSubjectRepository _curriculumSubjectRepository; + public FormCurriculumSubjects(IUnityContainer container, ICurriculumSubjectRepository curriculumSubjectRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _curriculumSubjectRepository = curriculumSubjectRepository ?? + throw new ArgumentNullException(nameof(curriculumSubjectRepository)); + } + + private void FormCurriculumSubjects_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() => dataGridView.DataSource = _curriculumSubjectRepository.ReadCurriculumSubject(); + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.resx b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculumSubjects.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/ProjectShedule/ProjectShedule/Forms/FormCurriculums.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormCurriculums.Designer.cs new file mode 100644 index 0000000..2404735 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculums.Designer.cs @@ -0,0 +1,126 @@ +namespace ProjectShedule.Forms +{ + partial class FormCurriculums + { + /// + /// 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(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(622, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 353); + panel1.TabIndex = 2; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.minus_PNG39; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(42, 248); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 93); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += buttonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources._3712684; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(42, 129); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(94, 93); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += buttonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Ambox_plus_svg; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(42, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 93); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(800, 353); + dataGridView.TabIndex = 3; + // + // FormCurriculums + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 353); + Controls.Add(panel1); + Controls.Add(dataGridView); + Name = "FormCurriculums"; + Text = "Учебные планы(дисциплины)"; + Load += FormCurriculums_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculums.cs b/ProjectShedule/ProjectShedule/Forms/FormCurriculums.cs new file mode 100644 index 0000000..6f8b64e --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculums.cs @@ -0,0 +1,109 @@ +using ProjectShedule.Repositories; +using ProjectShedule.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 Unity; + +namespace ProjectShedule.Forms +{ + public partial class FormCurriculums : Form + { + private readonly IUnityContainer _container; + private readonly ICurriculumRepository _curriculumRepository; + public FormCurriculums(IUnityContainer container, ICurriculumRepository curriculumRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _curriculumRepository = curriculumRepository ?? + throw new ArgumentNullException(nameof(curriculumRepository)); + } + private void FormCurriculums_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 + { + _curriculumRepository.DeleteCurriculum(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView.DataSource = _curriculumRepository.ReadCurriculum(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return true; + } + else + { + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[id].Value); + return false; + } + } + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormCurriculums.resx b/ProjectShedule/ProjectShedule/Forms/FormCurriculums.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormCurriculums.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/ProjectShedule/ProjectShedule/Forms/FormGroup.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormGroup.Designer.cs new file mode 100644 index 0000000..4687306 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormGroup.Designer.cs @@ -0,0 +1,167 @@ +namespace ProjectShedule.Forms +{ + partial class FormGroup + { + /// + /// 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() + { + comboBoxCourse = new ComboBox(); + label1 = new Label(); + label2 = new Label(); + numericUpDownStudentsCount = new NumericUpDown(); + label3 = new Label(); + textBoxGroupName = new TextBox(); + label4 = new Label(); + comboBoxCurriculum = new ComboBox(); + buttonSave = new Button(); + buttonCancel = new Button(); + ((System.ComponentModel.ISupportInitialize)numericUpDownStudentsCount).BeginInit(); + SuspendLayout(); + // + // comboBoxCourse + // + comboBoxCourse.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxCourse.FormattingEnabled = true; + comboBoxCourse.Location = new Point(179, 142); + comboBoxCourse.Name = "comboBoxCourse"; + comboBoxCourse.Size = new Size(150, 28); + comboBoxCourse.TabIndex = 0; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(40, 42); + label1.Name = "label1"; + label1.Size = new Size(133, 20); + label1.TabIndex = 1; + label1.Text = "Кол-во студентов:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(40, 98); + label2.Name = "label2"; + label2.Size = new Size(135, 20); + label2.TabIndex = 2; + label2.Text = "Название группы:"; + // + // numericUpDownStudentsCount + // + numericUpDownStudentsCount.Location = new Point(179, 35); + numericUpDownStudentsCount.Name = "numericUpDownStudentsCount"; + numericUpDownStudentsCount.Size = new Size(150, 27); + numericUpDownStudentsCount.TabIndex = 3; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(129, 150); + label3.Name = "label3"; + label3.Size = new Size(44, 20); + label3.TabIndex = 4; + label3.Text = "Курс:"; + // + // textBoxGroupName + // + textBoxGroupName.Location = new Point(179, 91); + textBoxGroupName.Name = "textBoxGroupName"; + textBoxGroupName.Size = new Size(150, 27); + textBoxGroupName.TabIndex = 5; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(60, 202); + label4.Name = "label4"; + label4.Size = new Size(113, 20); + label4.TabIndex = 6; + label4.Text = "Учебный план:"; + // + // comboBoxCurriculum + // + comboBoxCurriculum.DropDownStyle = ComboBoxStyle.DropDownList; + comboBoxCurriculum.FormattingEnabled = true; + comboBoxCurriculum.Location = new Point(179, 194); + comboBoxCurriculum.Name = "comboBoxCurriculum"; + comboBoxCurriculum.Size = new Size(150, 28); + comboBoxCurriculum.TabIndex = 7; + // + // buttonSave + // + buttonSave.Location = new Point(97, 250); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 8; + buttonSave.Text = "Создать"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(206, 250); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 9; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // FormGroup + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(397, 313); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(comboBoxCurriculum); + Controls.Add(label4); + Controls.Add(textBoxGroupName); + Controls.Add(label3); + Controls.Add(numericUpDownStudentsCount); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(comboBoxCourse); + Name = "FormGroup"; + Text = "Группа студентов"; + ((System.ComponentModel.ISupportInitialize)numericUpDownStudentsCount).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxCourse; + private Label label1; + private Label label2; + private NumericUpDown numericUpDownStudentsCount; + private Label label3; + private TextBox textBoxGroupName; + private Label label4; + private ComboBox comboBoxCurriculum; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormGroup.cs b/ProjectShedule/ProjectShedule/Forms/FormGroup.cs new file mode 100644 index 0000000..04e6b25 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormGroup.cs @@ -0,0 +1,90 @@ +using ProjectShedule.Entities; +using ProjectShedule.Entities.Enums; +using ProjectShedule.Repositories; +using ProjectShedule.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; + +namespace ProjectShedule.Forms +{ + public partial class FormGroup : Form + { + private readonly IGroupRepository _groupRepository; + private int? _groupId; + public int Id + { + set + { + try + { + var group = _groupRepository.ReadGroupById(value); + if (group == null) + { + throw new InvalidDataException(nameof(group)); + } + numericUpDownStudentsCount.Value = group.StudentsCount; + textBoxGroupName.Text = group.GroupNumber; + comboBoxCourse.SelectedItem = group.Course; + comboBoxCurriculum.SelectedValue = group.CurriculumId; + _groupId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormGroup(IGroupRepository groupRepository, ICurriculumRepository curriculumRepository) + { + InitializeComponent(); + _groupRepository = groupRepository ?? + throw new ArgumentNullException(nameof(groupRepository)); + comboBoxCourse.DataSource = Enum.GetValues(typeof(Course)); + + comboBoxCurriculum.DataSource = curriculumRepository.ReadCurriculum(); + comboBoxCurriculum.DisplayMember = "Direction"; + comboBoxCurriculum.ValueMember = "Id"; + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxGroupName.Text) || comboBoxCourse.SelectedIndex < 1 || + comboBoxCurriculum.SelectedIndex < 1) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_groupId.HasValue) + { + _groupRepository.UpdateGroup(CreateGroup(_groupId.Value)); + } + else + { + _groupRepository.CreateGroup(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.CreateGroup( + id, + Convert.ToInt32(numericUpDownStudentsCount.Value), + textBoxGroupName.Text, + (Course)comboBoxCourse.SelectedItem!, + (int)comboBoxCourse.SelectedValue!); + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormGroup.resx b/ProjectShedule/ProjectShedule/Forms/FormGroup.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormGroup.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/ProjectShedule/ProjectShedule/Forms/FormGroups.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormGroups.Designer.cs new file mode 100644 index 0000000..3aeb5f2 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormGroups.Designer.cs @@ -0,0 +1,126 @@ +namespace ProjectShedule.Forms +{ + partial class FormGroups + { + /// + /// 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(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(622, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 354); + panel1.TabIndex = 4; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.minus_PNG39; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(42, 248); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 93); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += buttonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources._3712684; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(42, 129); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(94, 93); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += buttonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Ambox_plus_svg; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(42, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 93); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(800, 354); + dataGridView.TabIndex = 5; + // + // FormGroups + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 354); + Controls.Add(panel1); + Controls.Add(dataGridView); + Name = "FormGroups"; + Text = "Группы студентов"; + Load += FormGroups_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormGroups.cs b/ProjectShedule/ProjectShedule/Forms/FormGroups.cs new file mode 100644 index 0000000..b048ce5 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormGroups.cs @@ -0,0 +1,111 @@ +using ProjectShedule.Repositories; +using ProjectShedule.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 Unity; + +namespace ProjectShedule.Forms +{ + public partial class FormGroups : Form + { + private readonly IUnityContainer _container; + private readonly IGroupRepository _groupRepository; + public FormGroups(IUnityContainer container, IGroupRepository groupRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _groupRepository = groupRepository ?? + throw new ArgumentNullException(nameof(groupRepository)); + } + private void FormGroups_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() => dataGridView.DataSource = _groupRepository.ReadGroup(); + + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return true; + } + else + { + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[id].Value); + + return false; + } + } + + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormGroups.resx b/ProjectShedule/ProjectShedule/Forms/FormGroups.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormGroups.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/ProjectShedule/ProjectShedule/Forms/FormShedule.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormShedule.Designer.cs new file mode 100644 index 0000000..2a3a366 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormShedule.Designer.cs @@ -0,0 +1,210 @@ +namespace ProjectShedule.Forms +{ + partial class FormShedule + { + /// + /// 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() + { + dateTimePicker = new DateTimePicker(); + labelData = new Label(); + comboBoxClassroom = new ComboBox(); + comboBoxTeacher = new ComboBox(); + comboBoxGroup = new ComboBox(); + comboBoxSubject = new ComboBox(); + checkedListBox = new CheckedListBox(); + label1 = new Label(); + label2 = new Label(); + label3 = new Label(); + label4 = new Label(); + label5 = new Label(); + buttonCancel = new Button(); + buttonSave = new Button(); + SuspendLayout(); + // + // dateTimePicker + // + dateTimePicker.Location = new Point(163, 37); + dateTimePicker.Name = "dateTimePicker"; + dateTimePicker.Size = new Size(159, 27); + dateTimePicker.TabIndex = 0; + // + // labelData + // + labelData.AutoSize = true; + labelData.Location = new Point(103, 44); + labelData.Name = "labelData"; + labelData.Size = new Size(44, 20); + labelData.TabIndex = 1; + labelData.Text = "Дата:"; + // + // comboBoxClassroom + // + comboBoxClassroom.FormattingEnabled = true; + comboBoxClassroom.Location = new Point(163, 252); + comboBoxClassroom.Name = "comboBoxClassroom"; + comboBoxClassroom.Size = new Size(159, 28); + comboBoxClassroom.TabIndex = 3; + // + // comboBoxTeacher + // + comboBoxTeacher.FormattingEnabled = true; + comboBoxTeacher.Location = new Point(163, 147); + comboBoxTeacher.Name = "comboBoxTeacher"; + comboBoxTeacher.Size = new Size(159, 28); + comboBoxTeacher.TabIndex = 4; + // + // comboBoxGroup + // + comboBoxGroup.FormattingEnabled = true; + comboBoxGroup.Location = new Point(163, 91); + comboBoxGroup.Name = "comboBoxGroup"; + comboBoxGroup.Size = new Size(159, 28); + comboBoxGroup.TabIndex = 5; + // + // comboBoxSubject + // + comboBoxSubject.FormattingEnabled = true; + comboBoxSubject.Location = new Point(163, 200); + comboBoxSubject.Name = "comboBoxSubject"; + comboBoxSubject.Size = new Size(159, 28); + comboBoxSubject.TabIndex = 6; + // + // checkedListBox + // + checkedListBox.FormattingEnabled = true; + checkedListBox.Location = new Point(455, 37); + checkedListBox.Name = "checkedListBox"; + checkedListBox.Size = new Size(150, 246); + checkedListBox.TabIndex = 7; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(27, 155); + label1.Name = "label1"; + label1.Size = new Size(120, 20); + label1.TabIndex = 8; + label1.Text = "Преподаватель:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(86, 99); + label2.Name = "label2"; + label2.Size = new Size(61, 20); + label2.TabIndex = 9; + label2.Text = "Группа:"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(74, 208); + label3.Name = "label3"; + label3.Size = new Size(73, 20); + label3.TabIndex = 10; + label3.Text = "Предмет:"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(63, 260); + label4.Name = "label4"; + label4.Size = new Size(84, 20); + label4.TabIndex = 11; + label4.Text = "Аудитория"; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new Point(370, 44); + label5.Name = "label5"; + label5.Size = new Size(69, 20); + label5.TabIndex = 12; + label5.Text = "Пара(ы):"; + // + // buttonCancel + // + buttonCancel.Location = new Point(323, 315); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 14; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // buttonSave + // + buttonSave.Location = new Point(223, 315); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 13; + buttonSave.Text = "Создать"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // FormShedule + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(642, 368); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(label5); + Controls.Add(label4); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(checkedListBox); + Controls.Add(comboBoxSubject); + Controls.Add(comboBoxGroup); + Controls.Add(comboBoxTeacher); + Controls.Add(comboBoxClassroom); + Controls.Add(labelData); + Controls.Add(dateTimePicker); + Name = "FormShedule"; + Text = "Составление расписания"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private DateTimePicker dateTimePicker; + private Label labelData; + private ComboBox comboBoxClassroom; + private ComboBox comboBoxTeacher; + private ComboBox comboBoxGroup; + private ComboBox comboBoxSubject; + private CheckedListBox checkedListBox; + private Label label1; + private Label label2; + private Label label3; + private Label label4; + private Label label5; + private Button buttonCancel; + private Button buttonSave; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormShedule.cs b/ProjectShedule/ProjectShedule/Forms/FormShedule.cs new file mode 100644 index 0000000..57b35a3 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormShedule.cs @@ -0,0 +1,72 @@ +using ProjectShedule.Entities; +using ProjectShedule.Entities.Enums; +using ProjectShedule.Repositories; +using System.Diagnostics.Contracts; +using System.Windows.Forms; + +namespace ProjectShedule.Forms +{ + public partial class FormShedule : Form + { + private readonly ISheduleRepository _sheduleRepository; + public FormShedule(ISheduleRepository sheduleRepository, IGroupRepository groupRepository, ITeacherRepository teacherRepository, + ISubjectRepository subjectRepository, IClassroomRepository classroomRepository) + { + InitializeComponent(); + _sheduleRepository = sheduleRepository ?? + throw new ArgumentNullException(nameof(sheduleRepository)); + foreach (PairNumber pairNumber in Enum.GetValues(typeof(PairNumber))) + { + if (pairNumber == PairNumber.None) continue; + checkedListBox.Items.Add(pairNumber); + } + comboBoxGroup.DataSource = groupRepository.ReadGroup(); + comboBoxGroup.DisplayMember = "GroupNumber"; + comboBoxGroup.ValueMember = "Id"; + + comboBoxTeacher.DataSource = teacherRepository.ReadTeacher(); + comboBoxTeacher.DisplayMember = "LastName"; + comboBoxTeacher.ValueMember = "Id"; + + comboBoxSubject.DataSource = subjectRepository.ReadSubject(); + comboBoxSubject.DisplayMember = "Name"; + comboBoxSubject.ValueMember = "Id"; + + comboBoxClassroom.DataSource = classroomRepository.ReadClassroom(); + comboBoxClassroom.DisplayMember = "Name"; + comboBoxClassroom.ValueMember = "Id"; + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (comboBoxGroup.SelectedIndex < 0 || comboBoxTeacher.SelectedIndex < 0 || comboBoxSubject.SelectedIndex < 0 || + comboBoxClassroom.SelectedIndex < 0 || checkedListBox.CheckedItems.Count == 0) + { + throw new Exception("Имеются незаполненные поля"); + } + PairNumber pairNumber = PairNumber.None; + foreach (var elem in checkedListBox.CheckedItems) + { + pairNumber |= (PairNumber)elem; + } + _sheduleRepository.CreateShedule(Shedule.CreateOperation(0, + dateTimePicker.Value, + pairNumber, + (int)comboBoxGroup.SelectedValue!, + (int)comboBoxTeacher.SelectedValue!, + (int)comboBoxSubject.SelectedValue!, + (int)comboBoxClassroom.SelectedValue!)); + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormShedule.resx b/ProjectShedule/ProjectShedule/Forms/FormShedule.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormShedule.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/ProjectShedule/ProjectShedule/Forms/FormShedules.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormShedules.Designer.cs new file mode 100644 index 0000000..b0d43be --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormShedules.Designer.cs @@ -0,0 +1,98 @@ +namespace ProjectShedule.Forms +{ + partial class FormShedules + { + /// + /// 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() + { + dataGridView = new DataGridView(); + buttonAdd = new Button(); + panel1 = new Panel(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(622, 315); + dataGridView.TabIndex = 5; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Ambox_plus_svg; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(48, 112); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 93); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // panel1 + // + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(622, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 315); + panel1.TabIndex = 4; + // + // FormShedules + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 315); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormShedules"; + Text = "Расписании"; + Load += FormShedules_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView; + private Button buttonAdd; + private Panel panel1; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormShedules.cs b/ProjectShedule/ProjectShedule/Forms/FormShedules.cs new file mode 100644 index 0000000..9444ef1 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormShedules.cs @@ -0,0 +1,49 @@ + +using ProjectShedule.Repositories; +using ProjectShedule.Repositories.Implementations; +using Unity; + +namespace ProjectShedule.Forms +{ + + public partial class FormShedules : Form + { + private readonly IUnityContainer _container; + private readonly ISheduleRepository _sheduleRepository; + + public FormShedules(IUnityContainer container, ISheduleRepository sheduleRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _sheduleRepository = sheduleRepository ?? + throw new ArgumentNullException(nameof(sheduleRepository)); + } + + 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 FormShedules_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView.DataSource = _sheduleRepository.ReadShedule(); + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormShedules.resx b/ProjectShedule/ProjectShedule/Forms/FormShedules.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormShedules.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/ProjectShedule/ProjectShedule/Forms/FormSubject.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormSubject.Designer.cs new file mode 100644 index 0000000..db82d08 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormSubject.Designer.cs @@ -0,0 +1,95 @@ +namespace ProjectShedule.Forms +{ + partial class FormSubject + { + /// + /// 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() + { + buttonCancel = new Button(); + buttonSave = new Button(); + textBoxSubjectName = new TextBox(); + label2 = new Label(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Location = new Point(251, 136); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 15; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // buttonSave + // + buttonSave.Location = new Point(96, 136); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 14; + buttonSave.Text = "Создать"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // textBoxSubjectName + // + textBoxSubjectName.Location = new Point(216, 63); + textBoxSubjectName.Name = "textBoxSubjectName"; + textBoxSubjectName.Size = new Size(150, 27); + textBoxSubjectName.TabIndex = 11; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(57, 66); + label2.Name = "label2"; + label2.Size = new Size(151, 20); + label2.TabIndex = 10; + label2.Text = "Название предмета:"; + // + // FormSubject + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(445, 210); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxSubjectName); + Controls.Add(label2); + Name = "FormSubject"; + Text = "Дициплина"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonCancel; + private Button buttonSave; + private TextBox textBoxSubjectName; + private Label label2; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormSubject.cs b/ProjectShedule/ProjectShedule/Forms/FormSubject.cs new file mode 100644 index 0000000..f07f7d5 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormSubject.cs @@ -0,0 +1,77 @@ +using ProjectShedule.Entities.Enums; +using ProjectShedule.Entities; +using ProjectShedule.Repositories; +using ProjectShedule.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; + +namespace ProjectShedule.Forms; + +public partial class FormSubject : Form +{ + private readonly ISubjectRepository _subjectRepository; + private int? _subjectId; + public int Id + { + set + { + try + { + var subject = _subjectRepository.ReadSubjectById(value); + if (subject == null) + { + throw new InvalidDataException(nameof(subject)); + } + textBoxSubjectName.Text = subject.Name; + _subjectId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormSubject(ISubjectRepository subjectRepository) + { + InitializeComponent(); + _subjectRepository = subjectRepository ?? + throw new ArgumentNullException(nameof(subjectRepository)); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxSubjectName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_subjectId.HasValue) + { + _subjectRepository.UpdateSubject(CreateSubject(_subjectId.Value)); + } + else + { + _subjectRepository.UpdateSubject(CreateSubject(0)); + } + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) => Close(); + private Subject CreateSubject(int id) => Subject.CreateSubject( + id, + textBoxSubjectName.Text); +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormSubject.resx b/ProjectShedule/ProjectShedule/Forms/FormSubject.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormSubject.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/ProjectShedule/ProjectShedule/Forms/FormSubjects.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormSubjects.Designer.cs new file mode 100644 index 0000000..ab0ff91 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormSubjects.Designer.cs @@ -0,0 +1,127 @@ +namespace ProjectShedule.Forms +{ + partial class FormSubjects + { + /// + /// 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(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(622, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 354); + panel1.TabIndex = 2; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.minus_PNG39; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(42, 248); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 93); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += buttonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources._3712684; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(42, 129); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(94, 93); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += buttonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Ambox_plus_svg; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(42, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 93); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(800, 354); + dataGridView.TabIndex = 3; + // + // FormSubjects + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 354); + Controls.Add(panel1); + Controls.Add(dataGridView); + Name = "FormSubjects"; + StartPosition = FormStartPosition.CenterParent; + Text = "Дисциплины"; + Load += FormSubjects_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormSubjects.cs b/ProjectShedule/ProjectShedule/Forms/FormSubjects.cs new file mode 100644 index 0000000..391075a --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormSubjects.cs @@ -0,0 +1,109 @@ +using ProjectShedule.Repositories; +using ProjectShedule.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 Unity; + +namespace ProjectShedule.Forms +{ + public partial class FormSubjects : Form + { + private readonly IUnityContainer _container; + private readonly ISubjectRepository _subjectRepository; + public FormSubjects(IUnityContainer container, ISubjectRepository subjectRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _subjectRepository = subjectRepository ?? + throw new ArgumentNullException(nameof(subjectRepository)); + } + private void FormSubjects_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 + { + _subjectRepository.DeleteSubject(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView.DataSource = _subjectRepository.ReadSubject(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return true; + } + else + { + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[id].Value); + return false; + } + } + } +} + diff --git a/ProjectShedule/ProjectShedule/Forms/FormSubjects.resx b/ProjectShedule/ProjectShedule/Forms/FormSubjects.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormSubjects.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/ProjectShedule/ProjectShedule/Forms/FormTeacher.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormTeacher.Designer.cs new file mode 100644 index 0000000..558bc5a --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormTeacher.Designer.cs @@ -0,0 +1,120 @@ +namespace ProjectShedule.Forms +{ + partial class FormTeacher + { + /// + /// 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() + { + buttonCancel = new Button(); + buttonSave = new Button(); + label3 = new Label(); + textBoxFirstName = new TextBox(); + label2 = new Label(); + textBoxLastName = new TextBox(); + SuspendLayout(); + // + // buttonCancel + // + buttonCancel.Location = new Point(223, 146); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(94, 29); + buttonCancel.TabIndex = 15; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // buttonSave + // + buttonSave.Location = new Point(94, 146); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(94, 29); + buttonSave.TabIndex = 14; + buttonSave.Text = "Создать"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(50, 98); + label3.Name = "label3"; + label3.Size = new Size(76, 20); + label3.TabIndex = 12; + label3.Text = "Фамилия:"; + // + // textBoxFirstName + // + textBoxFirstName.Location = new Point(223, 49); + textBoxFirstName.Name = "textBoxFirstName"; + textBoxFirstName.Size = new Size(150, 27); + textBoxFirstName.TabIndex = 11; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(50, 56); + label2.Name = "label2"; + label2.Size = new Size(42, 20); + label2.TabIndex = 10; + label2.Text = "Имя:"; + // + // textBoxLastName + // + textBoxLastName.Location = new Point(223, 91); + textBoxLastName.Name = "textBoxLastName"; + textBoxLastName.Size = new Size(150, 27); + textBoxLastName.TabIndex = 16; + // + // FormTeacher + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(411, 203); + Controls.Add(textBoxLastName); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(label3); + Controls.Add(textBoxFirstName); + Controls.Add(label2); + Name = "FormTeacher"; + Text = "Преподаватель"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonCancel; + private Button buttonSave; + private ComboBox comboBoxTypeClassroom; + private Label label3; + private TextBox textBoxFirstName; + private Label label2; + private TextBox textBoxLastName; + private NumericUpDown numericUpDownClassroomSize; + private Label label1; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormTeacher.cs b/ProjectShedule/ProjectShedule/Forms/FormTeacher.cs new file mode 100644 index 0000000..646a3de --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormTeacher.cs @@ -0,0 +1,82 @@ +using ProjectShedule.Entities; +using ProjectShedule.Repositories; +using ProjectShedule.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; + +namespace ProjectShedule.Forms +{ + public partial class FormTeacher : Form + { + private readonly ITeacherRepository _teacherRepository; + private int? _teacherId; + public int Id + { + set + { + try + { + var teacher = _teacherRepository.ReadTeacherById(value); + if (teacher == null) + { + throw new InvalidDataException(nameof(teacher)); + } + textBoxFirstName.Text = teacher.FirstName; + textBoxLastName.Text = teacher.LastName; + _teacherId = value; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + } + } + public FormTeacher(ITeacherRepository teacherRepository) + { + InitializeComponent(); + _teacherRepository = teacherRepository ?? + throw new ArgumentNullException(nameof(teacherRepository)); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxFirstName.Text) || + string.IsNullOrWhiteSpace(textBoxLastName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + if (_teacherId.HasValue) + { + _teacherRepository.UpdateTeacher(CreateTeacher(_teacherId.Value)); + } + else + { + _teacherRepository.UpdateTeacher(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.CreateTeacher( + id, + textBoxFirstName.Text, + textBoxLastName.Text); + + + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormTeacher.resx b/ProjectShedule/ProjectShedule/Forms/FormTeacher.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormTeacher.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/ProjectShedule/ProjectShedule/Forms/FormTeachers.Designer.cs b/ProjectShedule/ProjectShedule/Forms/FormTeachers.Designer.cs new file mode 100644 index 0000000..a5cf6ef --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormTeachers.Designer.cs @@ -0,0 +1,126 @@ +namespace ProjectShedule.Forms +{ + partial class FormTeachers + { + /// + /// 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(); + dataGridView = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(buttonDel); + panel1.Controls.Add(buttonUpd); + panel1.Controls.Add(buttonAdd); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(622, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(178, 353); + panel1.TabIndex = 2; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.minus_PNG39; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(42, 248); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(94, 93); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += buttonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources._3712684; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(42, 129); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(94, 93); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += buttonUpd_Click; + // + // buttonAdd + // + buttonAdd.BackgroundImage = Properties.Resources.Ambox_plus_svg; + buttonAdd.BackgroundImageLayout = ImageLayout.Stretch; + buttonAdd.Location = new Point(42, 12); + buttonAdd.Name = "buttonAdd"; + buttonAdd.Size = new Size(94, 93); + buttonAdd.TabIndex = 0; + buttonAdd.UseVisualStyleBackColor = true; + buttonAdd.Click += buttonAdd_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Fill; + dataGridView.Location = new Point(0, 0); + dataGridView.MultiSelect = false; + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(800, 353); + dataGridView.TabIndex = 3; + // + // FormTeachers + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 353); + Controls.Add(panel1); + Controls.Add(dataGridView); + Name = "FormTeachers"; + Text = "Преподаватели"; + Load += FormTeachers_Load; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Forms/FormTeachers.cs b/ProjectShedule/ProjectShedule/Forms/FormTeachers.cs new file mode 100644 index 0000000..61fac0d --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormTeachers.cs @@ -0,0 +1,109 @@ +using ProjectShedule.Repositories; +using ProjectShedule.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 Unity; + +namespace ProjectShedule.Forms +{ + public partial class FormTeachers : Form + { + private readonly IUnityContainer _container; + private readonly ITeacherRepository _teacherRepository; + public FormTeachers(IUnityContainer container, ITeacherRepository teacherRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _teacherRepository = teacherRepository ?? + throw new ArgumentNullException(nameof(teacherRepository)); + } + private void FormTeachers_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() => dataGridView.DataSource = _teacherRepository.ReadTeacher(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return true; + } + else + { + id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[id].Value); + return false; + } + } + + } +} diff --git a/ProjectShedule/ProjectShedule/Forms/FormTeachers.resx b/ProjectShedule/ProjectShedule/Forms/FormTeachers.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Forms/FormTeachers.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/ProjectShedule/ProjectShedule/Program.cs b/ProjectShedule/ProjectShedule/Program.cs index aa9eae2..820317e 100644 --- a/ProjectShedule/ProjectShedule/Program.cs +++ b/ProjectShedule/ProjectShedule/Program.cs @@ -1,3 +1,7 @@ +using ProjectShedule.Repositories; +using ProjectShedule.Repositories.Implementations; +using Unity; + namespace ProjectShedule { internal static class Program @@ -11,7 +15,21 @@ namespace ProjectShedule // 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(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + container.RegisterType(); + + return container; } } } \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/ProjectShedule.csproj b/ProjectShedule/ProjectShedule/ProjectShedule.csproj index 663fdb8..accbdf0 100644 --- a/ProjectShedule/ProjectShedule/ProjectShedule.csproj +++ b/ProjectShedule/ProjectShedule/ProjectShedule.csproj @@ -8,4 +8,23 @@ enable + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Properties/Resources.Designer.cs b/ProjectShedule/ProjectShedule/Properties/Resources.Designer.cs new file mode 100644 index 0000000..df37251 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace ProjectShedule.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("ProjectShedule.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 _3712684 { + get { + object obj = ResourceManager.GetObject("3712684", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Ambox_plus_svg { + get { + object obj = ResourceManager.GetObject("Ambox_plus.svg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap back { + get { + object obj = ResourceManager.GetObject("back", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap minus_PNG39 { + get { + object obj = ResourceManager.GetObject("minus_PNG39", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/ProjectShedule/ProjectShedule/Properties/Resources.resx b/ProjectShedule/ProjectShedule/Properties/Resources.resx new file mode 100644 index 0000000..7f29c79 --- /dev/null +++ b/ProjectShedule/ProjectShedule/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\back.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\3712684.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Ambox_plus.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\minus_PNG39.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Repositories/IClassroomRepository.cs b/ProjectShedule/ProjectShedule/Repositories/IClassroomRepository.cs new file mode 100644 index 0000000..a459b04 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/IClassroomRepository.cs @@ -0,0 +1,12 @@ +using ProjectShedule.Entities; + +namespace ProjectShedule.Repositories; + +public interface IClassroomRepository +{ + IEnumerable ReadClassroom(); + Classroom ReadClassroomById(int id); + void CreateClassroom(Classroom classroom); + void UpdateClassroom(Classroom classroom); + void DeleteClassroom(int id); +} diff --git a/ProjectShedule/ProjectShedule/Repositories/ICurriculumRepository.cs b/ProjectShedule/ProjectShedule/Repositories/ICurriculumRepository.cs new file mode 100644 index 0000000..1acbc44 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/ICurriculumRepository.cs @@ -0,0 +1,12 @@ +using ProjectShedule.Entities; + +namespace ProjectShedule.Repositories; + +public interface ICurriculumRepository +{ + IEnumerable ReadCurriculum(); + Curriculum ReadCurriculumById(int id); + void CreateCurriculum(Curriculum curriculum); + void UpdateCurriculum(Curriculum curriculum); + void DeleteCurriculum(int id); +} \ No newline at end of file diff --git a/ProjectShedule/ProjectShedule/Repositories/ICurriculumSubjectRepository.cs b/ProjectShedule/ProjectShedule/Repositories/ICurriculumSubjectRepository.cs new file mode 100644 index 0000000..36af6d7 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/ICurriculumSubjectRepository.cs @@ -0,0 +1,9 @@ +using ProjectShedule.Entities; + +namespace ProjectShedule.Repositories; + +public interface ICurriculumSubjectRepository +{ + IEnumerable ReadCurriculumSubject(); + void CreateCurriculumSubject(CurriculumSubject curriculumSubject); +} diff --git a/ProjectShedule/ProjectShedule/Repositories/IGroupRepository.cs b/ProjectShedule/ProjectShedule/Repositories/IGroupRepository.cs new file mode 100644 index 0000000..1dbb0e5 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/IGroupRepository.cs @@ -0,0 +1,12 @@ +using ProjectShedule.Entities; + +namespace ProjectShedule.Repositories; + +public interface IGroupRepository +{ + IEnumerable ReadGroup(); + Group ReadGroupById(int id); + void CreateGroup(Group group); + void UpdateGroup(Group group); + void DeleteGroup(int id); +} diff --git a/ProjectShedule/ProjectShedule/Repositories/ISheduleRepository.cs b/ProjectShedule/ProjectShedule/Repositories/ISheduleRepository.cs new file mode 100644 index 0000000..bd2f01b --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/ISheduleRepository.cs @@ -0,0 +1,11 @@ +using ProjectShedule.Entities; + +namespace ProjectShedule.Repositories; + +public interface ISheduleRepository +{ + IEnumerable ReadShedule(DateTime? dateTime = null, int? groupId = null); + void CreateShedule(Shedule shedule); + void UpdateShedule(Shedule shedule); + void DeleteShedule(int id); +} diff --git a/ProjectShedule/ProjectShedule/Repositories/ISubjectRepository.cs b/ProjectShedule/ProjectShedule/Repositories/ISubjectRepository.cs new file mode 100644 index 0000000..c068c67 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/ISubjectRepository.cs @@ -0,0 +1,12 @@ +using ProjectShedule.Entities; + +namespace ProjectShedule.Repositories; + +public interface ISubjectRepository +{ + IEnumerable ReadSubject(); + Subject ReadSubjectById(int id); + void CreateSubject(Subject subject); + void UpdateSubject(Subject subject); + void DeleteSubject(int id); +} diff --git a/ProjectShedule/ProjectShedule/Repositories/ITeacherRepository.cs b/ProjectShedule/ProjectShedule/Repositories/ITeacherRepository.cs new file mode 100644 index 0000000..6a61495 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/ITeacherRepository.cs @@ -0,0 +1,12 @@ +using ProjectShedule.Entities; + +namespace ProjectShedule.Repositories; + +public interface ITeacherRepository +{ + IEnumerable ReadTeacher(); + Teacher ReadTeacherById(int id); + void CreateTeacher(Teacher teacher); + void UpdateTeacher(Teacher teacher); + void DeleteTeacher(int id); +} diff --git a/ProjectShedule/ProjectShedule/Repositories/Implementations/ClassroomRepository.cs b/ProjectShedule/ProjectShedule/Repositories/Implementations/ClassroomRepository.cs new file mode 100644 index 0000000..c733ac7 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/Implementations/ClassroomRepository.cs @@ -0,0 +1,28 @@ +using ProjectShedule.Entities; + +namespace ProjectShedule.Repositories.Implementations; + +public class ClassroomRepository : IClassroomRepository +{ + public void CreateClassroom(Classroom classroom) + { + } + + public void DeleteClassroom(int id) + { + } + + public IEnumerable ReadClassroom() + { + return []; + } + + public Classroom ReadClassroomById(int id) + { + return Classroom.CreateClassroom(0, 0, string.Empty, 0); + } + + public void UpdateClassroom(Classroom classroom) + { + } +} diff --git a/ProjectShedule/ProjectShedule/Repositories/Implementations/CurriculumRepository.cs b/ProjectShedule/ProjectShedule/Repositories/Implementations/CurriculumRepository.cs new file mode 100644 index 0000000..59935bc --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/Implementations/CurriculumRepository.cs @@ -0,0 +1,33 @@ +using ProjectShedule.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Repositories.Implementations; + +public class CurriculumRepository : ICurriculumRepository +{ + public void CreateCurriculum(Curriculum curriculum) + { + } + + public void DeleteCurriculum(int id) + { + } + + public IEnumerable ReadCurriculum() + { + return []; + } + + public Curriculum ReadCurriculumById(int id) + { + return Curriculum.CreateCurriculum(0, string.Empty); + } + + public void UpdateCurriculum(Curriculum curriculum) + { + } +} diff --git a/ProjectShedule/ProjectShedule/Repositories/Implementations/CurriculumSubjectRepository.cs b/ProjectShedule/ProjectShedule/Repositories/Implementations/CurriculumSubjectRepository.cs new file mode 100644 index 0000000..67bc64c --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/Implementations/CurriculumSubjectRepository.cs @@ -0,0 +1,20 @@ +using ProjectShedule.Entities; +using ProjectShedule.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Repositories.Implementations; + +public class CurriculumSubjectRepository : ICurriculumSubjectRepository +{ + public void CreateCurriculumSubject(CurriculumSubject curriculumSubject) + { + } + public IEnumerable ReadCurriculumSubject() + { + return []; + } +} diff --git a/ProjectShedule/ProjectShedule/Repositories/Implementations/GroupRepository.cs b/ProjectShedule/ProjectShedule/Repositories/Implementations/GroupRepository.cs new file mode 100644 index 0000000..30f3c2e --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/Implementations/GroupRepository.cs @@ -0,0 +1,33 @@ +using ProjectShedule.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Repositories.Implementations; + +public class GroupRepository : IGroupRepository +{ + public void CreateGroup(Group group) + { + } + + public void DeleteGroup(int id) + { + } + + public IEnumerable ReadGroup() + { + return []; + } + + public Group ReadGroupById(int id) + { + return Group.CreateGroup(0, 0, string.Empty, 0, 0); + } + + public void UpdateGroup(Group group) + { + } +} diff --git a/ProjectShedule/ProjectShedule/Repositories/Implementations/SheduleRepository.cs b/ProjectShedule/ProjectShedule/Repositories/Implementations/SheduleRepository.cs new file mode 100644 index 0000000..429b15b --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/Implementations/SheduleRepository.cs @@ -0,0 +1,28 @@ +using ProjectShedule.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Repositories.Implementations; +public class SheduleRepository : ISheduleRepository +{ + public void CreateShedule(Shedule shedule) + { + } + + public void DeleteShedule(int id) + { + } + + public IEnumerable ReadShedule(DateTime? dateTime = null, int? groupId = null) + { + return []; + } + + public void UpdateShedule(Shedule shedule) + { + } +} + diff --git a/ProjectShedule/ProjectShedule/Repositories/Implementations/SubjectRepository.cs b/ProjectShedule/ProjectShedule/Repositories/Implementations/SubjectRepository.cs new file mode 100644 index 0000000..751a977 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/Implementations/SubjectRepository.cs @@ -0,0 +1,33 @@ +using ProjectShedule.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Repositories.Implementations; + +public class SubjectRepository : ISubjectRepository +{ + public void CreateSubject(Subject subject) + { + } + + public void DeleteSubject(int id) + { + } + + public IEnumerable ReadSubject() + { + return []; + } + + public Subject ReadSubjectById(int id) + { + return Subject.CreateSubject(0,string.Empty); + } + + public void UpdateSubject(Subject subject) + { + } +} diff --git a/ProjectShedule/ProjectShedule/Repositories/Implementations/TeacherRepository.cs b/ProjectShedule/ProjectShedule/Repositories/Implementations/TeacherRepository.cs new file mode 100644 index 0000000..37b3861 --- /dev/null +++ b/ProjectShedule/ProjectShedule/Repositories/Implementations/TeacherRepository.cs @@ -0,0 +1,33 @@ +using ProjectShedule.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectShedule.Repositories.Implementations; + +public class TeacherRepository : ITeacherRepository +{ + public void CreateTeacher(Teacher teacher) + { + } + + public void DeleteTeacher(int id) + { + } + + public IEnumerable ReadTeacher() + { + return []; + } + + public Teacher ReadTeacherById(int id) + { + return Teacher.CreateTeacher(0,string.Empty,string.Empty); + } + + public void UpdateTeacher(Teacher teacher) + { + } +} diff --git a/ProjectShedule/ProjectShedule/Resources/3712684.png b/ProjectShedule/ProjectShedule/Resources/3712684.png new file mode 100644 index 0000000000000000000000000000000000000000..14175b5e6a80d3c271ae8f8a2597f5ce951db2a2 GIT binary patch literal 12138 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 ZOQ3|iW1uzZ4~zl;riSJQ1qU3j{U1kA2!;Rv literal 0 HcmV?d00001 diff --git a/ProjectShedule/ProjectShedule/Resources/Ambox_plus.svg.png b/ProjectShedule/ProjectShedule/Resources/Ambox_plus.svg.png new file mode 100644 index 0000000000000000000000000000000000000000..41673a11e0c6f5c25914ac1033bf1eada52ded7f GIT binary patch literal 74829 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�|@uXebJAlqJX0y08UCu=+$mc@q+qn{d zN1K;j^0Zp6s;a69J~%H(9da}qAW>l~3hI1E^fCumXa~^RvzkK~%At z#b(#~d_o}n1EGnpjdsEaZgoVwd=}`mePKikKH@j>aN<@Wc$l z+^40yiu|Lg3WBEEd9Sj^9cz)zUy~bX*{X03h+Y7GNxSQw1P| zBlKL=cE;cFED`vF_qRKTZ`(Mq1?B}ghxS+WkOTT+@B<9!De4eGd|X~yIzBsVp6Sni zWKXt3INe@Whu3lVI(M%m)>gp2KTEnoT^@L4Pp9M5h*W%A%U5FqBGEy zRsRQ1V0Z%livZ%2$#dV+uQ7*q4uOYZ-^2pla2jj2635g&`#?(CA1U*!QLPt|}G zWh~0-zSzT5l%o`W{rk*s(D5jvQS0jJs;3#gFu-UDT2?4}R(zc2eJ8xpRON3gl8hoR zED8u>188`Du%NXosgDEhiy%bcdT(7DkFdM$(bV$RD&za&Br;_Y>+S7q&#S41-r*|S z8STMWP`;Z;y3V=M($bpXBVNE-2N{-kgQW}5!(x_Y{Jpa+DXCb=ADKvy-L^}0zH?Q8 z^u*Wd8+OIuuI0NED=%L}_76cDp?40kzlC{t^>>!f?A;rSM@|#`Yt#Nz(9z7(qoz|12hs$gq(o#Y=*39?=%iPX?&KnB-K1!Sn}Tjk z37k}LVkz2ZLB|1ij#3B#RIT$T!@THWEfx5#b=OB%dfwgxtbv0pBOkk=G+3>Z73bhh zihwO_CzRKc;zIc|TjsM-$C|eQYlMol-3b=QYe7~9!7Dx-_GK70jbfo(;{owTTrP%|k_(7gdWcz^gb2~v53rU%@-k+#*U zbF!1NMLI7QxMut}C(XsbejCpECw!?y8o|?vXe_eVlzF-M0AVi}Uz$5@x+yZK41Z60 z;*Hz#$V{4ap+QphuD43o86@muSj$T=kk>SzF)KiwuHu13z~JA%FPy;)^)lQu;BfkV z(3~7Z9-NSrOirqbT{tK^O&GfEY(UD!3qMDEEOV9$2Y%Tk<3Xkp5{UZk+qZ6n>64Jp zG7tCl#ZLXlEIe;&%G8sG$Ay`sW9*;*gq|(H37hq-2t(`$V57j|a?hKKc(801}D^3Q0KfnvDe&iMai%LkRv8cku56IfJrahE1P6U9-mi9`|hg z`HrLro*k*cDLEcg@WLtmhz%b=V*FR|cA^`!E#A@FySC7T(tWD^Sw@#ntP=Z^iD_mB zO=9!u_~RxQT0wvvVInnkSEb;O21wJre`&>$aw=#f2M!$^$ToWj^z7f5Si~g#3}(6b zA)kSrW7jVJhV3$xGBn3$Le6LBPCF8ukD_~7AD@&dUIbPQJM*214jGmwP*J$C3a^~< z$z%G-0+5=zjF*;=p|@dnKKmg4{Bi>g$9y%Y+W9>JK-_}1yMW^E>~HDa)k#<==B-uN zzI&kW(j7tEa_m`&ABtfzKWxTe{K*Y@EEMS9{YGBwcCUAynyz)WE;I3Kuv`MBC4uhl zgMH>IYLJz4c6#OI<-b5wtaYZP2>s6Xg!0<@)c7G*R}Sa%u=#uYm1cYatJ!g~&e6FO zlC;;f;3W_izOe7D(*rGkl5ehnA!B*OPk^R!n?H+yBX5-)9nU>!hABn?$vl8*P5&GW9CikdFvK7WO|qE>H`nZgMTyr?xt;RN zV~3jF<3(Sr*8}Ih<6RO+1s9ms>OCS!Bk9qTWcp%;Eg0|okzD4kXvO)TN=d!n{PF2V zR8x`4Vj|&2@Y}0vw}-2>WF+scnX1_;u6VGcRvP*7-Tf z5Q^guPwQ@%MRCfNne#GaXB)Npoi<%2`hP^X+%(B}~G~^kO8FZ_D$6zOpfIC>F~`Tn8hjI$K#h~gEay=BP%tJUl9`>`i`x10geD1 zq`}`_LFL?+9w*?3AnkKa7Xip z)jF8{sr*4_A6~Pc)RHXJ=i_)`vwa?JhVfLQ{;iBKiqp*9+t7ABSOJ9wNX(Req?A*1i5;O)#$hg`4_XZwdHqhG|V z<)U14C_MU3X1Zon#6Azz{hn;~oV+~__5PNKasXfZJ73yHV$d@HM4tHPwL%5hLIBH2 zh2GBerAobOO~XO)`Yu87=1K6zl?^Pqed$h)D+valh-A9c6wSNlU~^D`$fG#Z8}^(| z%};wm~WN!N|9SRj)nRv4D-0Q7P2+DM5bTNx5K zcdgYLiEOUqyfX5dGv4HwdFqRZzrf0UoiyZ? z=er|$hcAu#U&43Kb>`dm`Qf5|8wUrGKP%WjS%tml1MQbStm%{GEHLV`RPI_DWQ_6P zjrQ=KR<1WI@`5*)AOMLEvP+kYCzld(s3C&24Ms)x9)LsmZV2=C@r{f^_hFeV5ogD} zkl=5q=s=WUr^*AXGBuh|`)kKvNZo>KJs=$FEm&pdo(IuKon)TooKy4sx^>W>nt_+i z&)hNML0~_EA{mm5T^7;wl) zeEuz|>x=8rj1STo;ZFx`V|Wz*A5Nf;)IT;R51>_d8FoD#JBVccP3TIZf0tyF$|KJz zJZOc=EC$;lp9~GEMva>GunR<8(nN~+qYr3QJQ0@=|Gkl39&_a017L{0}|P8}#7 zgC6ID-E}AlY-+u-#}*zQLn!HBygOWP%W?MoO2sDz_5CD>Brp_z0JC`eXS{Z%{#t#^ z%->&`*NHVkgP42bg^lK6iy~h8cuJCMgh02)7qc6BoH~eGH%a8u&*Jt13bY_iY(4}u z@8_~y5-s~WQM=*~_qVgt1gwuRR~IE?EHrrfc+r(ZvhSk!+0LfW=QlLvpG+q6*T4K5zx{FprZ_?e zSvYm8AP4ju!kD3m20+4LJ8M5Ga!tx=T??t5k)&<-XiIn|$|;1`Qj>Rf4aqC-BtmfG zQfdkUuoqW!>%BpY`g;Q)5!wwSn@e5=c6L=og@u{9m*+lZS~cl3;jmrQyZYYIF}8=LfO~UZ!MMR*WQ9Oo~>p!}=;#T>0Q8kW^=J^YW@$0*(GF zXb^}5CvWFmwLNPX$wMiBEH`;apEvbF^+-)}wG@E=B*DZLxLp7}t>6o!X-RuAH}DW4ewVZ_RFm;*CnvSN9{yeKLt;>qP%E1o^s@&U?EIi z*r21)=KHF35;iSTe*@x^&N3*=UU>ryh_6?{-QuA9e^V|;ehn*itzrq8`64L#gDwAS z6Jxh}ar^va-_DjGbWK?UIMCVRwY z0xIkR9w_iKQFxldfb{o$)lmb6xwiC~$#Nn~%VrejP9|qmiv!iP(#3zBWFC0e)=F4p zb2+d?gdSQ5Jo)d*&rx3u7#Yx+ea$xx;CIZfn1ncX3GZma#dl{%Mjk2&+IEKc|CCru3iIaUrG(P%XbCM4@IxcjL+;lhR$l|9)!l0R?F*rcIcu1@-}*UUNfMVY%*;GbWc2MgOf*t1ktV}^)0!hd({O3#ROM@z^TmZrhWLAtl> zpOitOJ9NNYFRIKLDx!u~6_kSs@o8x<04g>nNpL~sr z)|0#_vuzf@ZL6E<3ew<6T4z;E_-Fxj)_bM10v0oeEStoaX@wpo1DLUCD=~7nY ze~8xc7JPrQ+ST*LXq#A_9FJBZ?+wTdJ;Kl(x_g$woC*)?GTZbH7M422`kJuhP} z^HPV$yfM@+F^+v>7?UFXKBeoxU&(JFMwm@5_8^X{7;=c4*)>+xDT&RyJWQ9DVkj6W z6daCPLn1UZ`~8t}J7bn+TQpk>NBfbh+*>bb&3il#UU31sc)*)Wm@W6@p`+Q6<dbce>|%INg7i8SbZ)0(Wc?sbs!&Ty%l?&+sP?OU7&The91$3cI;qgj z-~Tl*sv>M}g)WYp^<=D0UR|$^Ws|-_h9<{!#saVEk8?Y!19X7>yguF0H}8VUvG}3B zgg?64RuGrk$R>hgx_I9d8d0}i3FTQ=l!8%;Zh>J20l+<0N%`4blkkza&&N?z~k@o&initfV9%a#}DE(8WKVvpp)KB5{F z)7SeC8aS$@@Yt;Z^+H#~E!y-^^7bv)zQgbfEN4-`xEWtF73fk5LqFrc25>LBtd_{E zP919B)jElGX?A+KY1GWJ%kj+(@lA3FL_PY@ma(}Hi989rYV`H)v!CM_0Q#my{aT~X zu)@^t)tQu*7?zBT_pI?k=R%~El*B>9;S%VDL5%F7HN`O>E! zL&Yv(xwb`*GbYMY&shXi6a~+SOl1Z*7F|l7-o4i=aCKt>r{b2OoOfA=;(}c~U8iK^ zT?E)}U4tKPvo7Df6y77B_@KmCN1t0g+Or9*qNg0V1yR~DZ3%Yp$KU%FM}4^@DpLL# z|1cw*pa8fs`xm2|PHo#~6m_TM>zUt~rOs2eF{`T%)bIF6i`B0}4E$1Gzmn~= z`o)>@^E#3N^Oskvr$-l0ytjs?p;!HFPM51_^;Yf*+~or8c~u~0GGrq@ylvEocBI7Hybf8qUYKA#5*@a zP^&uW>|K#v#=ikFicU^!-f9qTb(x}&7}9s!oG-uO=^^b{kYd=yv3s&}M7&6DzG;D9 zzob#jGP1;JW!-s74x9~FcctS%c!2ybJj|J!^+3#fKDi<+i`b;M9zKl^O|=d@&*?th zS-MZyzFH+6=zLT+?RUR%_jKKYy4vR18`Y+*kErr!J1!MC{}<~D;odG5m}>m`E>M>e zdj0yf_|kw0Mfl?rGibNiOl^lk6q*GuRCRI4iJdVFemiYDT^epDJqD}XI*{BBx<6;6I zp||et`%-Jro(Ido3yP0{)=^YJ`bqZewfAS6NRJP}h+P(bf`iiXsqZF}DbS)@tQUF6UIV}JT$ zm60edFc`rfR78`cyTokp89n>Z)=QDJ8xPbF5OI42BKe^DC89*tJu&-A58q-wc@;Uv zitOOBsMEWsZ>XjZN;?H574~yU2m#CSy|I8GUtraCaiHS#wV~+q(;>ank3!mC!J&}b zNO6USl(OvY?a@D{{he*^B2^L;zc#ogcxFUILs&ZvhL zJV~L>5+MT)3Ul_S-+l9C)acE17*_&i^YK)w;`Ja1-LKooS&fM1RPQ=G&yPwsB_C*L_O z%p7?$Jx-_w*@;+ch23{=42aT*%d#>{Todoc8X@hyQ#az-q}R`bZ-0pq{3)zM9T%=} zUx!E#x9G&g#l4b(f=W=7Tf6~~3loRWC<#t8&BTp1%Pn7tk9^hIc(mOVG%4=A;eI~-kOmAyVjBjIvZnLa0G6r`_T18YwhyV3j>Fp#jBazI5LgaJA@ zy3|xyJ}u(s>2@pQcFUf%>(M*qtLkL)JB&v}!OMfMP7TjNU=X^Ijlr##W5;CoaHb+} zN~o)UfGOVJ?0~I_ojtq&r2PKR{(iZ$tNG1HzC+VK^8L^;S7BZpp=}Mx-YvuSD4BlL zTF#6f5k3l03j+y(1DXpQ0i{qruo39c?*KDEP$u58A&_-; z3Nn!4eNl6vE3I0)3OEaTv$rFpDTx63l`HY|3qSeFK-InPd#uw*rXES#6Zk9;M zN%Ms(E1wup65#xKE5YN&_D+3Ibv(#lWk~ z?TT%+Iu_16p!liy5W^Dm2br3?KP$FUBDU2zU^&f1<{Y4 z^*Q4Qy`wrB5d3^;Z~qH|^Z8o;{(Z9S3D9~mh@BxeEIZS(v)_)DTj|32ORo84OI4rN zC(L-y^Qr8sF!$v6PVS$~{0uuME;~{oJ6Q;wM9+zOF&ueNUtojhMf_X~WSyw@1wTO$0RuOVnFVYr@Qr%IZp3XU_$%*dp)X z^DY(B>7kfRPgi}u@vAesaHf=@w^Vj|s;RQ!;8LDGSAvAKJz!9e7I~wSa8o7EJAq%H z0(q9CIG#xSMI5U<-LBGMktvt;Z>D=6@$(lHT!822;>{l*Ht1w$@ITj&Ceh$Pgw0j1 z!xE(2aDT2z`Z%{%T>Cgi+x>H}!Lm@AH6UX9XQQ{=>?fVxDHt+;q9(7q3nI+Da zzvI6ulOI;~*;Xez1pLsTO=pF+XA>r`(4Y&sNMWMmCu%>ZP0 zAs{hFA_9Nc$jvQ$(+wK5tf-av9S9|O5>+CTBeyDZmU=1FBwF5uYB0{;YAUy0`AnH? zD9VdE+f{IC2OINGWyu_93EY>#^4sZ2b`9YubV}-DW&>9T-EgQp)mNdTn5&6QvShpJ zC?mc{%R9+xZegAbjFjlkws*FnHmP#n;0qy0xk7>3&ZZnTl6Ko_L-)V+nq9$Mva|mP zDA?=vTFYaP7Cbj1WmB~h!f=gmJb_+M5y8#HHT8nD9c1G*q8MU;Ti8W_76%IbOt4UR zrvcDNmS2vbC_NfHovqJN*{KLPG0#wzMUg|aWmmbNOt8~29#gD3r42_`C)l0n|9@95 zb~V(^MuJ>=-HHcylG22@9?~Y~O=OxjZk*uhYs>hs^!V+bDxx_u$(!%lJEeFj=!+pt zmLcY7+N1xiE-5^_Z(uPhbyvoD_tv4jcEgzZ^qIfBrpKq5T84M|thqN%L%|+w`H}JP zUuq}@j;P)R(jQmij`#B9N!9XvmdEy!;a^Ins2SdUDkEfgQX;Qs6ic=D2@Ne;dEie; zm@?e4%p!3wbl}O)>3~8+N8dg_nJRGLrG~t4adG)k7|aA2lZW$b!S5r@%#tB|TnSoB zLN&t9vl3Ynlt{vn9Pl9jl#fddZTrUY>RUTX2%MI+u(@20h<~N+ObfYrPn#rBLVccQDV}rYk8d#fBmE?D+kAEKaHymBhx>n)Z&o|DZX1<0OgE#*6bvx;w{?-Ha(4C`2ezfCLK{Boc>af+*@lU1 z(xnvW&Q0zMbfn!7a?SC9TIID7&!cM<*f{Vu`&8)V{ubJ&*qiHCKTP`${~UhjakD=f zt9trDim>l2Qhc(Cw2K#ms$oO`38*0D9YNf4sPdx8mXf!Vlh{P86$T!%E=IaUbVV$d zXk4<30dwx}&3FOk(WF~QVw`jec3r0%c(4@7FGO%GeDf_P5<&W=0x#EG1`R_e80obB z+Wv2;F4=GUtjUc~<`HChbjnP7bSq%4>6FOi)?sxZ@!(|Izg1wg|KMbAofz8~CQ{JR zVk%l-_!8D^t|IrEP4i{3vFIaDPh)^(chfB*eI{+0Wo{=9yTzfQSMhmwo|OSuWsT)e*Wd_ICiKr4GE#B1Gx**(qJ7b~O;Sk~Hh-89u+L^Pci4;^jAc?IG zx}VtC*zys1tq+!PnviJ-sdNTNy(KMx;c2CL_8e-pP_B?o~NN%of?!N(yo%t)@nY#fL3RM(LWc=;^I3J+&8XivL!wSK3{^|a z!Ffx#;H@cf(@&>L)(fL}C=5KIYS_bXv+Oegc?k6veG$JDULRfzztiV;6THVu1q5X5 z!8DKrbAKfy0+~dLmCMElyqaBzP5K=jEOlbG?Og?iVjFWBOx8n>#QzowQJEp?+qgR9csQPakV|Md zl-Q!<1>Ju3!+0r?%l;K_N=`jCt^a;ydR7=z^UM34eBklU_si^DG91CMbzzsL&FeLG z-3-7S6o{~+`S{GA3ls>Y7(R;U2PFsuQNY3gxq38yL8Z5R)-l)TS%BedfY2E_qJ2e1FdSp#UgR7ZJsBFlG(v7KHI2W{}kaZ|UoA?B276g3qRT4iPNruJ; zF`1IXYJTlZu8z%p-*^K}Ugx2>8)XMa$Tu!??Zm`H&DhdIV#otxPW9m0)xXe)SLfxr zgf_e2{4r9O9K4x@Q-<=X{bHID3^SgUG3z)yif1xk50`p-x!_!vSzZmB_A4P+93ZI~Qfcj}Jo1g$U;f6Bta~j8|aI9HWij*4)|~QI0AF zuNn|APMe%8|8*qV`-=~Kg2AcS#8pNDs-uYf-a`7L<8=+HjVGeThE3n^$K=;BLi#X$!ttdSdr2mH*iVlrY9=^2TKs7gLF8m4wb%GanIH|? zMjy4wO3{8`&o8(DvksisOlwjYi&^py!!UG%uGX@x|LM~&Pvh+NH)LJy*UmDg9$W84 zt+TKAK%1;ECewhybUo;p9&B|c&HLuMn4nYd-No1Xd4E8m+C{A%edERA9cLGpt67bg z=rqWB8H%3B87=AB#QzsEH(XG0*6Z@+sOU-=q2Y?o<>J0ysy{}>t3a$E%z=u1K>ZR* z7=$rmQ8^G5X|ayNw(guWPW{MJ?^>^kCADsjJNkt2Syn5|v!8gyzvq+^8U~&|#ks9R z%GQ>B@a8*4It2?+tm^X10&u7;&$UlDIRypLt=3bQ>OeKfbTXnCjHlKBBt6eqlp0*m z-m(uL3{a^-k~4P}*Wb9FO({9`_fs}g?pMEi%lWbDfkBMh=1i|#f|+nbvPlG{8iMEI%>ndyI;zS|=y8#G1GVVM&J%=+CzX4v-U$!#1Q`(6 zQ;Caby0q6}G5N(av9T^N#W!FxLv)tTuD>y8qSoYuH1vb`RLUq%|K^2T;zLJ#5a&Hm zY{Y`CxsMz;%7%ndZ*yr!MbBIoI`-R7J~=$&*XnY3GB>QWogCaFrd?|so?YWT)m(w9 zYVpFa0s?|ljW#ez8LTvo=IBoOkGZ5dvBFzUt&816{5;9l?76xQ2=h;T@QTBE(}0sp zbsHN68Hqe^7D&q0;*>z!b)O^Wr8l&3bpyqWert}r&Z`!&2UiR2sLWNLCm)wjlLT?G zH3DXhjgdTlc60Zh%IIXUOw+=bS!Bh<5Rzt;2U73ITFOHW%EVyyvX`J(p`;E0)d099(&=OJB`?Jx zr0xdjdWzx{V;8gPUa0@=_0aW|Bj*7 z`qh$7gCRY<<_Xux6KlJ(b;wEP2>+}!`}N=RrW$fBax8chJRHGCkkr-)kNyk-r2s*t z&oqv)IZtKi1+=s^?L;a zyi6fuEK5dhmxzfdHdx4ow|4E|VC2cv@_h$kSrTX{+2`P1gZXE`$qoYX9REus0s@!~ zr9ko4dRmli+{-`!rMOntY8%$a^v4?EMSy6>|Fki-A zG_$q9bH5IN6EG;`l zyfQ8n3JD{6jiBMi6&d{*=fR_a)|2W@<^CFu(Eu!4i1?KYh@|71zrw4*kG5H<;i4+E zImFq!0D^z9d6&GjXo%&X_}8#i|G(Qt`IQz7iGE!4L*n*oC(exLYq?3c9(+tWJwbw| z)n?V=T>EENR^ZimiEu$?+*NfJRMb-ZVUyI!Sm}p1wt7{WiTtBZ3~njC;lgjc7;T*X zIze=1O$aV0F0~75dK0sz_mc=Mvt>gilC@1T4*EZxkQ|8do|y-fu_kGkXRMn?zQi7PC*zLyKH!HQ>zv9-IR zd|_o14LTPHyY&K5@u74qA4aZIPtUV}knS;m4}|n?EqrRw#d!W#McmP=@7)`cKeYJ(@X2cJ9?fzoCK6`t94*bZSbJ_{oN6cz2}HaTo*6WXD4tkLnZ*~_*i}> z?#0O==X${|&xYtZXl{@Kk1g&NlbUxlb>?I4VC94E)FSNDszYLP_Y9bIV~l^?64FdiUQ=)cWXIGpWai zK_GX~>KATd;e65JC2z!sL?VRfAdt)iYQlxJ`Q17{b+hRCpX0)<+PyWAYLG0Z=kFnG zf4v5|`nFd=xROSn=5s{%M`mjL(W8`;YOh^}yNq{T=f4?dm>04Pwh+dwl`3a90n42m z^7w>SxUDO7x~DSWuSHh>mt>BLd|*+`U3qv1{R9DPL0(SOy%cM$j%Ib^lHm!axUKAQ z@1;e2wmJ=1|3C!7t&rzbBvP9j7#4hBCaeeuwaOi`DW&y(`YX{uddPP%PE1X8)J1CT zGyzpf4yTu*%z$wPmuL31F)vE?V|Q3;YceCuR;0UW%%zT5zN>L}xVe_%(BQLkofeLG z_H?OJtp4cwu?RH-Q>sFfMLg7pn-yEI#wryoE45VE|7l5;An`6OO>K{JRFTPAHBvl+3lkLZ_~iJ=imM&O{*ocF2E}_iiYQ6pM-bHB z;h%lg#&eC72&z^?ofXBp)mi zGtG16FM8D9?n+&YlYxGdQ3x#`Qb8wrtA|^?bzrgPbxta|j>&o^8L%?oxi=Er zij(rAt>&YI8K|`Wrd#e2%$Ybj>wRYT_>3JN;F$LnoOl@Djod9IZ@8G_{pyu^w+U0T zf@Mr6e{zC{sDqX2<_1rgse{*+jS0Oq+QYZ6*N?edoKv}D9X*}$LLdrY4=|_s9Q0g3 zzsUg}+{$>5$|YXbcO!crg!E$XwecU>3H)$sR2WWIP?NDXD)U64N-n8{Mq^mh$6`#~ zyTR{4V_+P$f$_fu1}5KnAGs4Q~dA=_@dBce==%wc2d<*Y0k0Unp^Ov)H z3ppWjq!0EG;j*EY?roD|;*$%v%1xZBZ&9_qTsJ@_UkUI>wmp1L8~Z^(ldkeEP3`ja zrM}okdrB?FtnaRWjqb_4T~E838xax=mlf1-w*sI+)kAG6fRiJN!@X|^16r;eTM~>E zqHSJ!#Clr6*$r?y75Q9qIQ*h83JtDU@3E2?o-ObV@SXfuUzp6=OkGFU0sPy>RzgJc7EGdQE^8` zXuD^u6A4uprc!~EU%Grx7Y1}#BGz>lR1SMYq#)e8$9%b8r40#XpQ?qs)E}_j;iHRa z3@R#sKq?K^aKY}gm{1+1`7_sew*ru!Nt+2bFq$iZ!N(6@$(5P7{~2xCi{ULgU~hMu z1#?hi$Zag=Mnl-=#ov(_ij_VPUPXV#!hiK4bh9CBXgodtoUKFf(e{g_-$$yS0~e_v z6H?~C#l8eSp75tFQaC;QBX+1^bK51-Kc}Q2R?Pk@dC0+~^*2Q&lD8JTr49e{ypfk{ z8_uMd_Pjw_>r;K5Ye8L*3@cMVyy8m+=&?(_3AET`Qo%FocHGoJw}{k{|(WgF{kpTg0Y96qN9R__wJ_$8Keer-4itr32jaH zKjII=`i`}cnZ}L(|6r12+sfg6rkD+GULU~PT_1D?q$X?;3uI*jNe$y^oT1-4;=aF^ zoDFsD(_BB07Iu!3xk@u`FiH%^j4e>fp)Gk202b@7duvztZG7C60&>S7St}Ou{Fg0d znhx{vo|cwcLLW*!UZ1{9TAYn+3JfbejpcZ$W5j2AUZ)3bCH*E@B&yN%4sP2&xzL)y z)$~1<0ihwY$By7sL%{s0nyse0hNw;vjajOLuAuD6yj+!p2Vv8|k!B|DHKd{8(1iT? zZ|HH(1xkj&#A~JDxo3Oon671`>OU%&e|i6r=P}dV?qTT= zNT^KW6N*fpe(@Y7dtnQ8?Jv3<->*i~JbwSt1fYwlU}FeUiF{5 zwcu~oruZpY{dg+98JLJjh`s{XHGL!TW!8q*25g1(cmvW~G-jj(ICQA&>9*}(Yfo4K z*s8!%<}8j00o#Lyc|-3JDovv;RTZMn9?!Y2w;?p_pIT3^VZPQdh?~ungZ0QZW-COeHen-STqDfF-`M!@RTSm>P`O-w(6j&lgG_{~Vj>FLt{ER@tq4T(=b-pbtu8i=q) zgW4%e#{;ppm#?qhkG-jLL02PGHddAIWEq0QBlrq)g&ri=plWdU0&Uqw$*Dbnz(D8no)4Z+t^3%yAtJ=PC`p& zIHu6+>Hdd=bL#QWBYA_W01k^GS1#?cMGK#ALmrf-A30|KvdiAaIdf+uNPO3$&dd=1 zihNzv$RFf$ctYI!L4-Z;FgE%&d{zaXaJ5sLMb=SC?DT4Nin8!otD^aXgAqr2#0&qffLjCD20107jF|FyqiBWwlyOYVV7F?OR8=7h}nrl!ld9`@;KeCI=v`PccOL+>2W&a)}(b1gK}2AZ612Zy!5vD0Wp@3 z;uPjj+x8~bTO-4P720J#Tcb%2gwzN`fNi*-}n$cxgvR^?+UJF$O?iPme}^}G$ANpTrB zuQNL~G+JabJnV&C;y!7J{+(O?rYPTbw@dG+Y^X0%sqJCWL8SfEHt$EsqcQ{PMBT+N z2DE0Zy=KnuZ$k+K51$|)s4#6MMBvsv?x#PZ52kIP5f$|%MJlCm2=4hmUtfqLG;p^A z&Y!fj0+kHaDbvzlUPS zz@#!AYp>yZ^9_)xq}VtuwCSY+?43an+yuK{CeiETKyAc)%;DP%5_ z0(-94@*q!?&I|U%3>Y;v((zJ!t?W0>+w9f(t$EGR4d7o}@9pGleG&&t*uF1t=G939(OYt{!)vXRK%(BoG%PXNU-N&NzjEt zA`p)tO#*~Iag(cicNX;;Yp>TGQdpjz%>1~h=&|fNQ=FUh^xtQBRBq)|gkR_MuUx}Q z8?~3%AIm`TIfwoM-b9`=VarPnY_Qtkm>qw46A$l|HM6MQjtSkWLsWYFE=SHjap^ov zbJI&6Z`q95IB;D*Vb7r%x##h6%dN<(@)iUAb#@!e`QJ>)!bm?SWSh@=Y)2}2dtwT& zt^_3Z5dz}y&(>T1YM0PF#&>O-mY~t!7Dfn z0T^S@eF3Hg)n#R2p<<5k3N%=|x;-{KXmRBn#|!3O8{Y@7x`xD~qoys_fhc0R zQ$-C;Q_5~TGroL^rgaUut6S|U3u{O%>Sw(XX^xBl*L!88V1Wmy+|Q%J!itZ7h|Gs_1`YNsk^qy5zez6IsB!|NXYB z^ORTcM0=Bfz5~-f5PF${O~0TTwv*(rmme;DZlA~K*`8r^LLx#(1Ivb*6_zMPyhA7b zdW?QS#OWmqm-65VE>(C)-_461=bvPFGKN^P7y`}BNH%KtZ`niOA5?hZr+E#S=H7!O z=qr}b?N}f7u}~%+*3dUpAC8H!+K9NcQOPdm1UBm&)dBmQnx+o}qOwoZSz@IJ8I7`R z7jyk5Bufg993(j;m{c zfIxbdnJTnNp&)l#MiWqQq64j*WNjF$&Wy))W8l`{pTRhXUeCfA(REoBwEh(hM2w3$ zLMTjmg=;b!RV6O`IKlJ*#YVK-M#G?nrgZS*(QH_2Ze{QprP?Dm%dl#q0Zpu%NAu;< zu1H1KzJ`~2jBq0d_QfH}K6aRS&#gNgp;A*GWbB|Lm>4!>40>{Z{dbX{55u4tDQa}fxIERrHbzMl{n|H;?-lD zqWTw%UTZbQ)aO(lpILaK-+Y6$gnNq$x20G2fX0z7$hqAG8S&wl-5oRmG{ZlbinIe| z&!@{2KFA}-K3TWlH|Zf7(VsJZ*})Pu!q2PV`PHd4?7_l&JZhQ^7Dx`wIj}tf;bYTE z8+rCP`)}6$x|F)Dm$Y3EXpcwhGVEVO5F2kMVC~D^am;(Zwh)r$fuCUr1voees|}|& zRH|Z15)}!xXowk(MwNN=i+IKf%$$&){T(FC6>u-;5hZ zR6JiagMKwdyb4h+SzWUOtBYSrKB@{>lrVi)Ju1)Z%ZsXvC;NEpv&q&hbCz5iUp43S zROofcg4pQRD@pDYP#c#Qn;lf1-=o6mYtTdN?%lsHL+*YKj_j@919^JQ z-WCgF#JC@gN~B~-c-q_1pey)mNJpE`gND_Tv0i zEwX#HsgbcU1JW97xM>yBgpMVYFoq~G9du+cMrb*q8b1`@JN~#co;&%9w7$e}JZe4` znS0Ete3?Zqq5Uo*CJ~S*ckz~g)9m>4rvKP637MJ!fOB2jB%j&rhY9`m`r0f1X%-*u zaP@{R?x8c;+k|5PBwixo^O(zA>Er}0dEle(F_n`nb!8<^J9Z7h^2O^4>vjD=1}gAh z;(icgn;!UPb)vRX1>zcd5Hl^HL>n%9nl0}u(iErTpYEpvC1lo{w1 ztG$a#!teeP9}8V2C+205XI|AFO*|>(x!;Uqur%jJd1g}2d(qWuq=zdVu1Nb;G4rxf z5_C_QG>|fkM3UUhr!*0EK@>bDtz5MVlucBgZaRhN|5DkrBf*wB*j21^N zQ73T3LWO{4IXz59LZ+iX1IlrT zrp7fXiJ?Ml_{NYXT`t;++}9$)bu4)NEwwTFWbCR#j&#k_7+zJJnhO2Rtg{JforpJ~ zngN-hL1{i^RciEIpFLm9XJ7EAg&Ab7=hv7F#f#1(RAtt?fxDq<)4s}QODVV%2ANY% z?#Mgj6yRPVQXOQF)~ze$N(271@ctQ~8104HOw3FctIkuYcR8OUHO4 zpR29e@NTXAzx>EaQALakoCY<2IrD4GFNkcG;A4Z=YguPu zm_y#Oh-r&ki{-;khkTA}X7|29GlswCQyeav_U+yA9>Abv`Ah}+JOPx7a^V9;FmPs!>IESq>C74o zublxoh?9vY?xZ@VJlp$HQ|Dj*F}R*b6^DID&&P31**?20ub~{|;QCI0Ec3bzt=2ZA z9=;)CTq}5zfeezNWNS7xM~QhM6-{ciq)`Gj*``rS!gv+Hd19U!17Yw zudix}CWT-Wa*GpmPkq%+DTpo}0RE9j;o=dL-|US7-`u!D4B6ojQ}`?6uMmh&QlS*n zv#06l91&bJVw)LF!8%9#sf~^l%B++gr^(&D&Z(@@M|SA~|7dfV?XWU+&RnTO7AmI# z!8sEQ586^Cu3l%^in>D2<B#xrAOS?ydaX(A1bFKouVW~t*y zuQmyp60hUf#!uu1`72%#pzFlSKA`4tg*8h-nw70w3xSQyO{|v{{hRqWZ#d<+#@+<= zRW0ZJ4LyG*vW+*aXMK-4`pf4_WRJ}5$Oa~Ib%|}X4q&lMmjBQV(^DtUcUOwzKC13^|k!iCeO)matE$xHxh#U4=V6aZY5l$K@_77?L^Gy&RPgV5)mUqO!# zG9GTpD1fsm0t|r~Fea_tMn5Ti>ixSBy!FqezYE8t>}q}uG}dXZnF~GE=0Gd!)AI>L za!MOSgCdr?8LwO@HNdv4ZT3;cD~LW`tYoWyIg= zC8_Wc%EaczwCJ}6o4^_|>a=3Wd>-z>VrfVE>P{hX84Xj@xqvzC?|<4o4POrjWdT2q zA_zGYg2T%Q=NrFIubO;-v7lN}Wq!PNK=(WJ$H}Oy?}^C|&Ps<5i`vsJ%ma-T?JuAB zzx#Mj<>9|5`2O@Jjt}m92O-&p%{r^_79UduBAY+h8h?-fyFw^Cw95=141&B4SZ2Vf%a z<9&cUi78r&-kM1(ldZ%kKSmx3Z5`3{g==qo+d!OE??j0U% z?$*Dm^Y*_YRdAunG`j2dnTtd$KskTkBdJf%|^;rv(cr~S+hh} zAHdG9ThH|5MA7rDM7>Xa*5JJ{Df4x?5}mbYJlyc9O?>TACd5iEtmK07!!sy>aL$%6 z4&lefs%U1n@-y2{p-Y2)dNcjsY}M$*mPv1CRIGPPeQrwP??;2#!uL0r&Ufh-Ta)5_ zFEm-+J*b2qFyQVh$I{%Z)Udn?|EULQzI%u#&N05-_=bgieOL@klJhKWY;sn-=@oEo ztzv)L-rm!k7E5frf#nY?k&~0zC~cdX3cR8eXzTdfZhNqCQrX$A9YKA=67fbA{sDq_ zhu`?KToLP9;C&`k{H5eMy8#Yui>FxA0@c1d#x~OrL9rmw4uM3M=TR zmOuQpX3ltppcb-3B&fhO0`}z?h7xtFhWywvO};NMu$tz9abA4ep>gcQOJ>)Xgo^5sJE2)Qtt|q=jOggf8A;V zhL<5moC#7TDX|9-dgXD&-{jh&rGl|q!;>NQ@7w-Aw+&ur^0Zxq=|FD$X}X*yQcN(G z1?r_EcR9OMlpV9WDt7!1_N(~UZP?8e+&z9fYk8m?Q;MnOh?>#-MfJ>c%&N-ePf$kK zD7Qgc2T^VNT9`83ud`QB8)1}f#Eh-g|Y`!o#HwFduDy4^)Rr4 z>M$%e*W|ou+K4?Y@fP>yMLz*68uHT_y#OoUk`7ESbm$pa6K9tj*Wkh_2yo29) z-*f2=>O7TVDl2zFT~O>rj_=GmM_FMl^_O>BvtGwFhxB!!MN}(_?o;9Vj2&v3Mh2X9 zRxSAU%AqaZ+c;khpd?}6lShXHIc1o+NOJTcU*`nS^L^15lwzuCY@z-CCL16G1cWc(M8>p z%Q?F(?sSNRaOJf^D7{gHayQQHOthZm%!d4v3&<=ilKXvBl`+WVRE3fPdDy!&x&qp| zxO;y#RPP{ELYx({+89E|Y4uJzK2h`X2E%!HPWT-eE2J?ay9rshr1>QX1Yc@uv%J>VSazsoz!<@Wn4Jr7KI z1o_&Jc9ib1!-4w@%NMg|q5I69$~`n#cKD_x$p3J@pU764vopmGjdgQ`Ki|egIy=XP z5)X(h-Aq zmxopce3Fy-V&c*3= zj3>A%%=Jt-&lK;ctOZNU`L{C0SWNA_c{ZzN&p(yFG$qE`>U^hl%k5tKY{avBjbs`9 zZI@JZ#PNeOTx-1bygaElm<~T2d6%;I)<7xtGINZ;n~LG-iF`FIGGii08c<~kJnC(R_8J}wF&&`nb{(K$zFr~dz5T_R z_j!py28VOPw!f2{tMiMsK1qEq6reC09ht;f`$4NkFwHw(2b1C}SqB=Ae#MZdhudee ztm!gu-kokXGbGc|pr^Go`BrQ2frtU)%Hgk7W2V#BG^h@HNzinIy)cBcVy0x*>Nl13Bdk6q{BA=Ql~){x2s%|RjCg=F58^iM<$AUs@pF0LyQ$C1qntp zYn;`*O5(>Q28X)Sr5ff*sNtgH`=mS^&Eg~*xl`xRIHSkegRe(~9UY>9e!_~e*k)`M zqiN<>Hy&s@o#vZv4rTtor+r*i9^#xU_P8s}BM~zu>_{{V?+vg2P}6wBpoAOV;+1^y zN(@sF`-%6|-Iyt!XZPzciQWj8$J;If_Tyf(F$LzWm2QKL=CPS!Eva+0)4ky3wO;mt zUNt2_($;j2`lknX_r35=SW#{tzG66q;^tHRk*8Orb~{jMOGkszmNt*L+<^?u=cNTj zXhZ=m4<@Lt3{;`L+st84ULYB5Zm7q<;ZSBjKwAGi6;`|QFtHIrgy9F)XM}PrtFn_i zM5WBf{pEx9+wN|F6;lGGXB{o1Vc!d59#u6AG_qx_oP=vf+Lc(Y2YS1W8Yc1yhJ8G^LcSpyc z-SA7tJ1!>`ZY#s$|9g94rcwxqM#`q8o7=0T&bjCfb{JLYlgo?ujEBRO7(={A@acgf zxaQ~sA}!2h0ILG`sx*65n$=hcUT49NYcl3KN$s0!C7dHWPyV^kI+^L_gmv!X#0=dL zA7@>QI8@`s#l`T1aW^x|-=1;E-7D9mtF;!P%)M12<={Mq2rN-bdvkfD z+MvWp_4}xDM!`yTf2*7(zsT1)m2{Q}?;E$dA49OK8_^WYmASUNwNrP@$F5(ty_)pd z_WDSJ)8kxt zwzW+i`c59iZ?o+l8YPk}I!xONX~S`&WA01z>_brH?|~3_mKQ8W`_0M?k{dLu{Xfp6 z-hWrELOuII!4n~Cp#itOmPxGKOjga9x_h_(^S3#ScA~T%Bo?A5X{^f2La3a1_(FEK_&6+a+C(C^&&=dQ%=~ zbTx+eTGp`_T`&y3!r6o zVA5J;y{g+16qC+8?Pmsd�?B2W!4mqW|xS2lb#oJbDz_sj;AJ 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 B{x1Lk literal 0 HcmV?d00001 diff --git a/ProjectShedule/ProjectShedule/Resources/back.jpg b/ProjectShedule/ProjectShedule/Resources/back.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb7d7885be49a1832da0c61ee2c5cf0dcf4e2ba1 GIT binary patch literal 95098 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