From 42dd04d96634019db945637a218850d9d990be67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=BB=D1=8C=D1=8F?= <Илья@WIN-RANNDDD> Date: Wed, 8 May 2024 02:57:19 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D1=81=D1=87=D0=B5=D1=82=20=D0=B2=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BB=D0=BE?= =?UTF-8?q?=D0=B6=D0=BD=D1=8B=D1=85=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B2=205=20=D0=BB=D0=B0=D0=B1=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WorkAbstractions/IComplexQueriesWork.cs | 9 +++ .../WorkImplementation/ComplexQueriesWork.cs | 24 +++++++ .../ElectronicDiaryView/FormMain.Designer.cs | 72 +++++++++++++------ .../ElectronicDiaryView/FormMain.cs | 28 +++++++- .../ElectronicDiaryView/Program.cs | 1 + 5 files changed, 112 insertions(+), 22 deletions(-) create mode 100644 ElectronicDiary/ElectronicDiaryAbstractions/WorkAbstractions/IComplexQueriesWork.cs create mode 100644 ElectronicDiary/ElectronicDiaryPostgresImplementation/WorkImplementation/ComplexQueriesWork.cs diff --git a/ElectronicDiary/ElectronicDiaryAbstractions/WorkAbstractions/IComplexQueriesWork.cs b/ElectronicDiary/ElectronicDiaryAbstractions/WorkAbstractions/IComplexQueriesWork.cs new file mode 100644 index 0000000..5c50d0b --- /dev/null +++ b/ElectronicDiary/ElectronicDiaryAbstractions/WorkAbstractions/IComplexQueriesWork.cs @@ -0,0 +1,9 @@ +namespace ElectronicDiaryAbstractions.WorkAbstractions +{ + public interface IComplexQueriesWork + { + void ExecuteFirstQuery(); + + void ExecuteSecondQuery(); + } +} diff --git a/ElectronicDiary/ElectronicDiaryPostgresImplementation/WorkImplementation/ComplexQueriesWork.cs b/ElectronicDiary/ElectronicDiaryPostgresImplementation/WorkImplementation/ComplexQueriesWork.cs new file mode 100644 index 0000000..ed860e8 --- /dev/null +++ b/ElectronicDiary/ElectronicDiaryPostgresImplementation/WorkImplementation/ComplexQueriesWork.cs @@ -0,0 +1,24 @@ +using ElectronicDiaryAbstractions.WorkAbstractions; +using Npgsql; + +namespace ElectronicDiaryPostgresImplementation.WorkImplementation +{ + public class ComplexQueriesWork : IComplexQueriesWork + { + public void ExecuteFirstQuery() + { + using var con = SqlConnection.GetConnection(); + con.Open(); + using var cmd = new NpgsqlCommand("SELECT * FROM student JOIN lesson ON lesson.fk_student_id = student.student_id JOIN grade ON student.fk_grade_id = grade.grade_id JOIN user_info ON student.fk_user_id = user_info.user_id JOIN teacher ON grade.fk_teacher_id = teacher.teacher_id JOIN homework ON lesson.fk_homework_id = homework.homework_id JOIN mark ON lesson.fk_mark_id = mark.mark_id JOIN subject ON lesson.fk_subject_id = subject.subject_id JOIN teacher_subject ON teacher_subject.fk_teacher_id = teacher.teacher_id AND teacher_subject.fk_subject_id = subject.subject_id JOIN study_area ON lesson.fk_study_area_id = study_area.study_area_id JOIN subject_student ON subject_student.fk_student_id = student.student_id AND subject_student.fk_subject_id = subject.subject_id", con); + cmd.ExecuteNonQuery(); + } + + public void ExecuteSecondQuery() + { + using var con = SqlConnection.GetConnection(); + con.Open(); + using var cmd = new NpgsqlCommand("SELECT study_area.study_area_name, COUNT(lesson.lesson_id) AS total_lessons FROM lesson JOIN study_area ON lesson.fk_study_area_id = study_area.study_area_id GROUP BY study_area.study_area_name", con); + cmd.ExecuteNonQuery(); + } + } +} diff --git a/ElectronicDiary/ElectronicDiaryView/FormMain.Designer.cs b/ElectronicDiary/ElectronicDiaryView/FormMain.Designer.cs index e84bd15..85d2f58 100644 --- a/ElectronicDiary/ElectronicDiaryView/FormMain.Designer.cs +++ b/ElectronicDiary/ElectronicDiaryView/FormMain.Designer.cs @@ -44,16 +44,21 @@ получение1000ЗаписейToolStripMenuItem = new ToolStripMenuItem(); обновление1000ЗаписейToolStripMenuItem = new ToolStripMenuItem(); удаление1000ЗаписейToolStripMenuItem = new ToolStripMenuItem(); + замерыСложныхЗапросовToolStripMenuItem = new ToolStripMenuItem(); + первыйЗапросToolStripMenuItem = new ToolStripMenuItem(); + второйЗапросToolStripMenuItem1 = new ToolStripMenuItem(); labelTest = new Label(); menuStrip1.SuspendLayout(); SuspendLayout(); // // menuStrip1 // - menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, замерВремениToolStripMenuItem }); + menuStrip1.ImageScalingSize = new Size(20, 20); + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, замерВремениToolStripMenuItem, замерыСложныхЗапросовToolStripMenuItem }); menuStrip1.Location = new Point(0, 0); menuStrip1.Name = "menuStrip1"; - menuStrip1.Size = new Size(554, 24); + menuStrip1.Padding = new Padding(7, 3, 0, 3); + menuStrip1.Size = new Size(633, 30); menuStrip1.TabIndex = 0; menuStrip1.Text = "menuStrip1"; // @@ -61,69 +66,69 @@ // справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { предметыToolStripMenuItem, классыToolStripMenuItem, ученикиToolStripMenuItem, учителяToolStripMenuItem, домашниеЗаданияToolStripMenuItem, урокиToolStripMenuItem, оценкиToolStripMenuItem, пользователиToolStripMenuItem, учебныеПомещенияToolStripMenuItem }); справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; - справочникиToolStripMenuItem.Size = new Size(94, 20); + справочникиToolStripMenuItem.Size = new Size(117, 24); справочникиToolStripMenuItem.Text = "Справочники"; // // предметыToolStripMenuItem // предметыToolStripMenuItem.Name = "предметыToolStripMenuItem"; - предметыToolStripMenuItem.Size = new Size(192, 22); + предметыToolStripMenuItem.Size = new Size(241, 26); предметыToolStripMenuItem.Text = "Предметы"; предметыToolStripMenuItem.Click += ПредметыToolStripMenuItem_Click; // // классыToolStripMenuItem // классыToolStripMenuItem.Name = "классыToolStripMenuItem"; - классыToolStripMenuItem.Size = new Size(192, 22); + классыToolStripMenuItem.Size = new Size(241, 26); классыToolStripMenuItem.Text = "Классы"; классыToolStripMenuItem.Click += КлассыToolStripMenuItem_Click; // // ученикиToolStripMenuItem // ученикиToolStripMenuItem.Name = "ученикиToolStripMenuItem"; - ученикиToolStripMenuItem.Size = new Size(192, 22); + ученикиToolStripMenuItem.Size = new Size(241, 26); ученикиToolStripMenuItem.Text = "Ученики"; ученикиToolStripMenuItem.Click += УченикиToolStripMenuItem_Click; // // учителяToolStripMenuItem // учителяToolStripMenuItem.Name = "учителяToolStripMenuItem"; - учителяToolStripMenuItem.Size = new Size(192, 22); + учителяToolStripMenuItem.Size = new Size(241, 26); учителяToolStripMenuItem.Text = "Учителя"; учителяToolStripMenuItem.Click += УчителяToolStripMenuItem_Click; // // домашниеЗаданияToolStripMenuItem // домашниеЗаданияToolStripMenuItem.Name = "домашниеЗаданияToolStripMenuItem"; - домашниеЗаданияToolStripMenuItem.Size = new Size(192, 22); + домашниеЗаданияToolStripMenuItem.Size = new Size(241, 26); домашниеЗаданияToolStripMenuItem.Text = "Домашние задания"; домашниеЗаданияToolStripMenuItem.Click += ДомашниеЗаданияToolStripMenuItem_Click; // // урокиToolStripMenuItem // урокиToolStripMenuItem.Name = "урокиToolStripMenuItem"; - урокиToolStripMenuItem.Size = new Size(192, 22); + урокиToolStripMenuItem.Size = new Size(241, 26); урокиToolStripMenuItem.Text = "Уроки"; урокиToolStripMenuItem.Click += УрокиToolStripMenuItem_Click; // // оценкиToolStripMenuItem // оценкиToolStripMenuItem.Name = "оценкиToolStripMenuItem"; - оценкиToolStripMenuItem.Size = new Size(192, 22); + оценкиToolStripMenuItem.Size = new Size(241, 26); оценкиToolStripMenuItem.Text = "Оценки"; оценкиToolStripMenuItem.Click += ОценкиToolStripMenuItem_Click; // // пользователиToolStripMenuItem // пользователиToolStripMenuItem.Name = "пользователиToolStripMenuItem"; - пользователиToolStripMenuItem.Size = new Size(192, 22); + пользователиToolStripMenuItem.Size = new Size(241, 26); пользователиToolStripMenuItem.Text = "Пользователи"; пользователиToolStripMenuItem.Click += ПользователиToolStripMenuItem_Click; // // учебныеПомещенияToolStripMenuItem // учебныеПомещенияToolStripMenuItem.Name = "учебныеПомещенияToolStripMenuItem"; - учебныеПомещенияToolStripMenuItem.Size = new Size(192, 22); + учебныеПомещенияToolStripMenuItem.Size = new Size(241, 26); учебныеПомещенияToolStripMenuItem.Text = "Учебные помещения"; учебныеПомещенияToolStripMenuItem.Click += УчебныеПомещенияToolStripMenuItem_Click; // @@ -131,54 +136,76 @@ // замерВремениToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { добавление1000ЗаписейToolStripMenuItem, получение1000ЗаписейToolStripMenuItem, обновление1000ЗаписейToolStripMenuItem, удаление1000ЗаписейToolStripMenuItem }); замерВремениToolStripMenuItem.Name = "замерВремениToolStripMenuItem"; - замерВремениToolStripMenuItem.Size = new Size(114, 20); + замерВремениToolStripMenuItem.Size = new Size(144, 24); замерВремениToolStripMenuItem.Text = "Замеры времени"; // // добавление1000ЗаписейToolStripMenuItem // добавление1000ЗаписейToolStripMenuItem.Name = "добавление1000ЗаписейToolStripMenuItem"; - добавление1000ЗаписейToolStripMenuItem.Size = new Size(217, 22); + добавление1000ЗаписейToolStripMenuItem.Size = new Size(277, 26); добавление1000ЗаписейToolStripMenuItem.Text = "Добавление 1000 записей"; добавление1000ЗаписейToolStripMenuItem.Click += Добавление1000ЗаписейToolStripMenuItem_Click; // // получение1000ЗаписейToolStripMenuItem // получение1000ЗаписейToolStripMenuItem.Name = "получение1000ЗаписейToolStripMenuItem"; - получение1000ЗаписейToolStripMenuItem.Size = new Size(217, 22); + получение1000ЗаписейToolStripMenuItem.Size = new Size(277, 26); получение1000ЗаписейToolStripMenuItem.Text = "Получение 1000 записей"; получение1000ЗаписейToolStripMenuItem.Click += Получение1000ЗаписейToolStripMenuItem_Click; // // обновление1000ЗаписейToolStripMenuItem // обновление1000ЗаписейToolStripMenuItem.Name = "обновление1000ЗаписейToolStripMenuItem"; - обновление1000ЗаписейToolStripMenuItem.Size = new Size(217, 22); + обновление1000ЗаписейToolStripMenuItem.Size = new Size(277, 26); обновление1000ЗаписейToolStripMenuItem.Text = "Обновление 1000 записей"; обновление1000ЗаписейToolStripMenuItem.Click += Обновление1000ЗаписейToolStripMenuItem_Click; // // удаление1000ЗаписейToolStripMenuItem // удаление1000ЗаписейToolStripMenuItem.Name = "удаление1000ЗаписейToolStripMenuItem"; - удаление1000ЗаписейToolStripMenuItem.Size = new Size(217, 22); + удаление1000ЗаписейToolStripMenuItem.Size = new Size(277, 26); удаление1000ЗаписейToolStripMenuItem.Text = "Удаление 1000 записей"; удаление1000ЗаписейToolStripMenuItem.Click += Удаление1000ЗаписейToolStripMenuItem_Click; // + // замерыСложныхЗапросовToolStripMenuItem + // + замерыСложныхЗапросовToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { первыйЗапросToolStripMenuItem, второйЗапросToolStripMenuItem1 }); + замерыСложныхЗапросовToolStripMenuItem.Name = "замерыСложныхЗапросовToolStripMenuItem"; + замерыСложныхЗапросовToolStripMenuItem.Size = new Size(214, 24); + замерыСложныхЗапросовToolStripMenuItem.Text = "Замеры сложных запросов"; + // + // первыйЗапросToolStripMenuItem + // + первыйЗапросToolStripMenuItem.Name = "первыйЗапросToolStripMenuItem"; + первыйЗапросToolStripMenuItem.Size = new Size(224, 26); + первыйЗапросToolStripMenuItem.Text = "1 запрос"; + первыйЗапросToolStripMenuItem.Click += ПервыйЗапросToolStripMenuItem_Click; + // + // второйЗапросToolStripMenuItem1 + // + второйЗапросToolStripMenuItem1.Name = "второйЗапросToolStripMenuItem1"; + второйЗапросToolStripMenuItem1.Size = new Size(224, 26); + второйЗапросToolStripMenuItem1.Text = "2 запрос"; + второйЗапросToolStripMenuItem1.Click += ВторойЗапросToolStripMenuItem1_Click; + // // labelTest // labelTest.BorderStyle = BorderStyle.FixedSingle; - labelTest.Location = new Point(156, 82); + labelTest.Location = new Point(178, 109); labelTest.Name = "labelTest"; - labelTest.Size = new Size(250, 100); + labelTest.Size = new Size(285, 133); labelTest.TabIndex = 3; labelTest.TextAlign = ContentAlignment.MiddleCenter; // // FormMain // - AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(554, 261); + ClientSize = new Size(633, 348); Controls.Add(labelTest); Controls.Add(menuStrip1); MainMenuStrip = menuStrip1; + Margin = new Padding(3, 4, 3, 4); Name = "FormMain"; StartPosition = FormStartPosition.CenterScreen; Text = "Электронный дневник"; @@ -207,5 +234,8 @@ private ToolStripMenuItem получение1000ЗаписейToolStripMenuItem; private ToolStripMenuItem обновление1000ЗаписейToolStripMenuItem; private ToolStripMenuItem удаление1000ЗаписейToolStripMenuItem; + private ToolStripMenuItem замерыСложныхЗапросовToolStripMenuItem; + private ToolStripMenuItem первыйЗапросToolStripMenuItem; + private ToolStripMenuItem второйЗапросToolStripMenuItem1; } } \ No newline at end of file diff --git a/ElectronicDiary/ElectronicDiaryView/FormMain.cs b/ElectronicDiary/ElectronicDiaryView/FormMain.cs index 6ce8af0..17e1e5e 100644 --- a/ElectronicDiary/ElectronicDiaryView/FormMain.cs +++ b/ElectronicDiary/ElectronicDiaryView/FormMain.cs @@ -1,11 +1,11 @@ using ElectronicDiaryAbstractions.Models; using ElectronicDiaryAbstractions.WorkAbstractions; +using ElectronicDiaryPostgresImplementation.WorkImplementation; namespace ElectronicDiaryView { public partial class FormMain : Form { - public FormMain() { InitializeComponent(); @@ -165,5 +165,31 @@ namespace ElectronicDiaryView labelTest.Text = $"Удаление 1000 строк выполнено за {(endTime - startTime).TotalMilliseconds} миллисекунд"; } } + + private void ПервыйЗапросToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(IComplexQueriesWork)); + if (service is IComplexQueriesWork work) + { + DateTime startTime = DateTime.Now; + work.ExecuteFirstQuery(); + DateTime endTime = DateTime.Now; + + labelTest.Text = $"Первый сложный запрос (вывод всех полей БД) выполнился за {(endTime - startTime).TotalMilliseconds} миллисекунд"; + } + } + + private void ВторойЗапросToolStripMenuItem1_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(IComplexQueriesWork)); + if (service is IComplexQueriesWork work) + { + DateTime startTime = DateTime.Now; + work.ExecuteSecondQuery(); + DateTime endTime = DateTime.Now; + + labelTest.Text = $"Второй сложный запрос (подсчет уроков по помещениям) выполнился за {(endTime - startTime).TotalMilliseconds} миллисекунд"; + } + } } } diff --git a/ElectronicDiary/ElectronicDiaryView/Program.cs b/ElectronicDiary/ElectronicDiaryView/Program.cs index 7a7dae1..6bd9832 100644 --- a/ElectronicDiary/ElectronicDiaryView/Program.cs +++ b/ElectronicDiary/ElectronicDiaryView/Program.cs @@ -33,6 +33,7 @@ namespace ElectronicDiaryView services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient();