From 3f76f7590eeb959ec257b184226475e77ea08026 Mon Sep 17 00:00:00 2001 From: funa4i Date: Mon, 2 Dec 2024 20:25:45 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=20=D0=BB=D0=B0=D0=B1=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StudentProgressRecord/Entity/Marks.cs | 12 +++++-- StudentProgressRecord/Entity/Statement.cs | 16 +++++++++ StudentProgressRecord/Entity/Student.cs | 5 +++ .../Entity/StudentTransition.cs | 9 +++++ StudentProgressRecord/Entity/Subject.cs | 5 +++ StudentProgressRecord/Entity/Teacher.cs | 3 ++ StudentProgressRecord/Entity/TempStatement.cs | 7 ++++ .../FormViewEntities/FormViewStatement.cs | 1 + .../FormViewStudentTransition.cs | 13 +------ .../FormViewEntities/FormViewStudents.cs | 1 + .../FormViewEntities/FormViewSubjects.cs | 1 + .../FormViewEntities/FormViewTeachers.cs | 1 + .../RepositoryImp/QueryBuilder.cs | 34 +++++++++++++++++++ .../RepositoryImp/StatementRepository.cs | 12 ++++--- .../StudentTransitionRepository.cs | 3 +- 15 files changed, 104 insertions(+), 19 deletions(-) create mode 100644 StudentProgressRecord/RepositoryImp/QueryBuilder.cs diff --git a/StudentProgressRecord/Entity/Marks.cs b/StudentProgressRecord/Entity/Marks.cs index 641d923..5eaca43 100644 --- a/StudentProgressRecord/Entity/Marks.cs +++ b/StudentProgressRecord/Entity/Marks.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,19 +9,26 @@ namespace StudentProgressRecord.Entity { public class Marks { + + public long StatementId { get; set; } + [Browsable(false)] public long StudentId { get; set; } public int Mark { get; set; } - public static Marks CreateElement(long statementId, long studentId, int mark) + public string StudentName { get; set; } = string.Empty; + + + public static Marks CreateElement(long statementId, long studentId, int mark, string studentName="") { return new Marks { StatementId = statementId, StudentId = studentId, - Mark = mark + Mark = mark, + StudentName = studentName }; } diff --git a/StudentProgressRecord/Entity/Statement.cs b/StudentProgressRecord/Entity/Statement.cs index 1d8f2a8..bedf569 100644 --- a/StudentProgressRecord/Entity/Statement.cs +++ b/StudentProgressRecord/Entity/Statement.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; @@ -11,14 +12,27 @@ namespace StudentProgressRecord.Entity { public long Id { get; set; } + [Browsable(false)] public long SubjectId { get; set; } + [Browsable(false)] public long TeacherId { get; set; } + [DisplayName("Дата")] public DateTime Date { get; set; } + [DisplayName("Название предмета")] + public string SubjectName { get; set; } = string.Empty; + + [DisplayName("Преподователь")] + public string TeacherName { get; set; } = string.Empty; + + [Browsable(false)] public IEnumerable Marks { get; set; } = []; + [DisplayName("Оценки")] + public string Mark => Marks != null ? string.Join(", ", Marks.Select(x => $"{x.StudentName} {x.Mark}")) : string.Empty; + public static Statement CreateOperation(long id, long subjectId, long teacherId, DateTime timeStamp, IEnumerable marks) { @@ -39,6 +53,8 @@ namespace StudentProgressRecord.Entity Id = statement.Id, SubjectId = statement.SubjectId, TeacherId = statement.TeacherId, + SubjectName = statement.SubjectName, + TeacherName = statement.TeacherName, Date = statement.Date, Marks = marks }; diff --git a/StudentProgressRecord/Entity/Student.cs b/StudentProgressRecord/Entity/Student.cs index ba2ed2c..9f00cf0 100644 --- a/StudentProgressRecord/Entity/Student.cs +++ b/StudentProgressRecord/Entity/Student.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,10 +12,14 @@ namespace StudentProgressRecord.Entity public long Id { get; set; } + [DisplayName("Имя")] public string Name { get; set; } + [DisplayName("Семейное положение")] public bool FamilyPos { get; set; } + + [DisplayName("Общажитие")] public bool Domitory { get; set; } diff --git a/StudentProgressRecord/Entity/StudentTransition.cs b/StudentProgressRecord/Entity/StudentTransition.cs index 5e69af6..6dc3da7 100644 --- a/StudentProgressRecord/Entity/StudentTransition.cs +++ b/StudentProgressRecord/Entity/StudentTransition.cs @@ -1,6 +1,7 @@ using StudentProgressRecord.Entity.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,10 +13,18 @@ namespace StudentProgressRecord.Entity public long Id { get; set; } + [Browsable(false)] public long StudentId { get; set; } + [DisplayName("Студент")] + public string StudentName { get; set; } = string.Empty; + + [DisplayName("Тип операции")] public Operations Operation { get; set; } + + + [DisplayName("Дата")] public DateTime Date { get; set; } public static StudentTransition CreateOperation(long id, long studentId, Operations operation, DateTime time) diff --git a/StudentProgressRecord/Entity/Subject.cs b/StudentProgressRecord/Entity/Subject.cs index 16598d6..d0c509c 100644 --- a/StudentProgressRecord/Entity/Subject.cs +++ b/StudentProgressRecord/Entity/Subject.cs @@ -1,6 +1,7 @@ using StudentProgressRecord.Entity.Enums; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,8 +12,12 @@ namespace StudentProgressRecord.Entity { public long Id { get; set; } + + [DisplayName("Название")] public string Name { get; set; } + + [DisplayName("Направление")] public Direction direction { get; set; } public static Subject CreateEntity(long id, string name, Direction direction) diff --git a/StudentProgressRecord/Entity/Teacher.cs b/StudentProgressRecord/Entity/Teacher.cs index 410b19f..1049fdc 100644 --- a/StudentProgressRecord/Entity/Teacher.cs +++ b/StudentProgressRecord/Entity/Teacher.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,6 +11,8 @@ namespace StudentProgressRecord.Entity { public long Id { get; set; } + + [DisplayName("Имя")] public string Name { get; set; } public static Teacher CreateEntity(long id, string name) diff --git a/StudentProgressRecord/Entity/TempStatement.cs b/StudentProgressRecord/Entity/TempStatement.cs index 2ad2cfc..673c473 100644 --- a/StudentProgressRecord/Entity/TempStatement.cs +++ b/StudentProgressRecord/Entity/TempStatement.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,12 +13,18 @@ namespace StudentProgressRecord.Entity public long SubjectId { get; set; } + public string SubjectName { get; set; } + public long TeacherId { get; set; } + public string TeacherName { get; set; } + public DateTime Date { get; set; } public long StudentId { get; set; } public int Mark { get; set; } + + public string StudentName { get; set; } } } diff --git a/StudentProgressRecord/Forms/FormViewEntities/FormViewStatement.cs b/StudentProgressRecord/Forms/FormViewEntities/FormViewStatement.cs index ec13869..89d8897 100644 --- a/StudentProgressRecord/Forms/FormViewEntities/FormViewStatement.cs +++ b/StudentProgressRecord/Forms/FormViewEntities/FormViewStatement.cs @@ -78,6 +78,7 @@ namespace StudentProgressRecord.Forms.FormViewEntities private void LoadList() { dataGridView.DataSource = _statementRepository.ReadStatements(); + dataGridView.Columns["Id"].Visible = false; } private bool TryGetIdFromSelectesRow(out int id) diff --git a/StudentProgressRecord/Forms/FormViewEntities/FormViewStudentTransition.cs b/StudentProgressRecord/Forms/FormViewEntities/FormViewStudentTransition.cs index 9f80bf7..7a8e250 100644 --- a/StudentProgressRecord/Forms/FormViewEntities/FormViewStudentTransition.cs +++ b/StudentProgressRecord/Forms/FormViewEntities/FormViewStudentTransition.cs @@ -57,18 +57,7 @@ namespace StudentProgressRecord.Forms.FormViewEntities private void LoadList() { dataGridView.DataSource = _studentTransitionRepository.ReadStudentTransitions(); - } - - private bool TryGetIdFromSelectesRow(out int id) - { - id = 0; - if (dataGridView.SelectedRows.Count < 1) - { - MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - return false; - } - id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - return true; + dataGridView.Columns["Id"].Visible = false; } } } diff --git a/StudentProgressRecord/Forms/FormViewEntities/FormViewStudents.cs b/StudentProgressRecord/Forms/FormViewEntities/FormViewStudents.cs index 9761ff6..3c10b25 100644 --- a/StudentProgressRecord/Forms/FormViewEntities/FormViewStudents.cs +++ b/StudentProgressRecord/Forms/FormViewEntities/FormViewStudents.cs @@ -98,6 +98,7 @@ namespace StudentProgressRecord.Forms.FormViewEntities private void LoadList() { dataGridView.DataSource = _studentRepository.ReadStudents(); + dataGridView.Columns["Id"].Visible = false; } private bool TryGetIdFromSelectesRow(out int id) diff --git a/StudentProgressRecord/Forms/FormViewEntities/FormViewSubjects.cs b/StudentProgressRecord/Forms/FormViewEntities/FormViewSubjects.cs index 914c8af..cb1657b 100644 --- a/StudentProgressRecord/Forms/FormViewEntities/FormViewSubjects.cs +++ b/StudentProgressRecord/Forms/FormViewEntities/FormViewSubjects.cs @@ -96,6 +96,7 @@ namespace StudentProgressRecord.Forms.FormViewEntities private void LoadList() { dataGridView.DataSource = _subjectRepository.ReadSubjects(); + dataGridView.Columns["Id"].Visible = false; } private bool TryGetIdFromSelectesRow(out int id) diff --git a/StudentProgressRecord/Forms/FormViewEntities/FormViewTeachers.cs b/StudentProgressRecord/Forms/FormViewEntities/FormViewTeachers.cs index a4c34d4..8c07e47 100644 --- a/StudentProgressRecord/Forms/FormViewEntities/FormViewTeachers.cs +++ b/StudentProgressRecord/Forms/FormViewEntities/FormViewTeachers.cs @@ -98,6 +98,7 @@ namespace StudentProgressRecord.Forms.FormViewEntities private void LoadList() { dataGridView.DataSource = _teacherRepository.ReadTeachers(); + dataGridView.Columns["Id"].Visible = false; } private bool TryGetIdFromSelectesRow(out int id) diff --git a/StudentProgressRecord/RepositoryImp/QueryBuilder.cs b/StudentProgressRecord/RepositoryImp/QueryBuilder.cs new file mode 100644 index 0000000..3b55103 --- /dev/null +++ b/StudentProgressRecord/RepositoryImp/QueryBuilder.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StudentProgressRecord.RepositoryImp +{ + public class QueryBuilder + { + private readonly StringBuilder _builder; + public QueryBuilder() + { + _builder = new(); + } + public QueryBuilder AddCondition(string condition) + { + if (_builder.Length > 0) + { + _builder.Append(" AND "); + } + _builder.Append(condition); + return this; + } + public string Build() + { + if (_builder.Length == 0) + { + return string.Empty; + } + return $"WHERE {_builder}"; + } + } +} diff --git a/StudentProgressRecord/RepositoryImp/StatementRepository.cs b/StudentProgressRecord/RepositoryImp/StatementRepository.cs index 267c628..146b6af 100644 --- a/StudentProgressRecord/RepositoryImp/StatementRepository.cs +++ b/StudentProgressRecord/RepositoryImp/StatementRepository.cs @@ -88,18 +88,22 @@ namespace StudentProgressRecord.RepositoryImp _logger.LogInformation("Получение всех объектов"); try { - using var connection = new NpgsqlConnection(_connectionString.GetConnectionString()); var querySelect = - @"SELECT st.*, m.StudentId, m.Mark FROM Statement st - JOIN Marks m ON m.statementid = st.id"; + @"SELECT + st.*, s.Name as SubjectName, t.Name as TeacherName, m.Mark, Student.Name as StudentName FROM Statement st + JOIN Subject s ON s.id = st.SubjectId + JOIN Teacher t ON t.id = st.TeacherId + JOIN Marks m ON m.statementId = st.id + LEFT JOIN Student on Student.id = m.studentId + "; var objs = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(objs)); return objs.GroupBy(x => x.Id, y => y, (key, value) => - Statement.CreateOperation(value.First(), value.Select(z => Marks.CreateElement(0, z.StudentId, z.Mark)))).ToList(); + Statement.CreateOperation(value.First(), value.Select(z => Marks.CreateElement(0, z.StudentId, z.Mark, z.StudentName)))).ToList(); } catch (Exception ex) { diff --git a/StudentProgressRecord/RepositoryImp/StudentTransitionRepository.cs b/StudentProgressRecord/RepositoryImp/StudentTransitionRepository.cs index d54c6f6..4447514 100644 --- a/StudentProgressRecord/RepositoryImp/StudentTransitionRepository.cs +++ b/StudentProgressRecord/RepositoryImp/StudentTransitionRepository.cs @@ -85,7 +85,8 @@ namespace StudentProgressRecord.RepositoryImp try { using var connection = new NpgsqlConnection(_connectionString.GetConnectionString()); - var querySelect = "SELECT * FROM StudentTransition"; + var querySelect = @"SELECT st.*, s.Name as StudentName FROM StudentTransition st + JOIN Student s ON s.id = st.StudentId"; var objs = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(objs));