From c015aab0799a33812ec62334962577151c436f8b Mon Sep 17 00:00:00 2001 From: Anastasia Yazykova Date: Wed, 4 Dec 2024 04:31:30 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BE=D1=87=D1=82=D0=B8=20=D1=81=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Academic_Performance/Entities/Mark.cs | 2 +- .../Academic_Performance/Entities/Order.cs | 4 +- .../Entities/Statement.cs | 4 +- .../Academic_Performance/Entities/Subject.cs | 2 +- .../Academic_Performance/Form1.Designer.cs | 8 +- .../Forms/FormMark.Designer.cs | 39 +++++ .../Academic_Performance/Forms/FormMark.cs | 20 +++ .../Academic_Performance/Forms/FormMark.resx | 120 ++++++++++++++ .../Forms/FormOrder.Designer.cs | 151 ++++++++++++++++++ .../Academic_Performance/Forms/FormOrder.cs | 93 +++++++++++ .../Academic_Performance/Forms/FormOrder.resx | 120 ++++++++++++++ .../Forms/FormOrders.Designer.cs | 125 +++++++++++++++ .../Academic_Performance/Forms/FormOrders.cs | 112 +++++++++++++ .../Forms/FormOrders.resx | 120 ++++++++++++++ .../Forms/FormStudents.Designer.cs | 15 +- .../Forms/FormStudents.cs | 12 +- .../Forms/FormSubject.Designer.cs | 96 +++++++++++ .../Academic_Performance/Forms/FormSubject.cs | 95 +++++++++++ .../Forms/FormSubject.resx | 120 ++++++++++++++ .../Forms/FormSubjects.Designer.cs | 125 +++++++++++++++ .../Forms/FormSubjects.cs | 126 +++++++++++++++ .../Forms/FormSubjects.resx | 120 ++++++++++++++ .../Forms/FormTeacher.Designer.cs | 95 +++++++++++ .../Academic_Performance/Forms/FormTeacher.cs | 86 ++++++++++ .../Forms/FormTeacher.resx | 120 ++++++++++++++ .../Forms/FormTeachers.Designer.cs | 125 +++++++++++++++ .../Forms/FormTeachers.cs | 118 ++++++++++++++ .../Forms/FormTeachers.resx | 120 ++++++++++++++ .../Properties/Resources.Designer.cs | 30 ++++ .../Properties/Resources.resx | 9 ++ .../Repositories/IOrderRepository.cs | 2 +- .../Repositories/IStudentRepository.cs | 2 +- .../Repositories/ISubjectRepository.cs | 2 +- .../Repositories/ITeacherRepository.cs | 4 +- .../Implementations/MarkRepository.cs | 10 +- .../Implementations/OrderRepository.cs | 10 +- .../Implementations/StudentRepository.cs | 8 +- .../Implementations/SubjectRepository.cs | 15 +- .../Implementations/TeacherRepository.cs | 10 +- .../Academic_Performance/Resources/Add.png | Bin 0 -> 70959 bytes .../Academic_Performance/Resources/Del.png | Bin 0 -> 5800 bytes .../Academic_Performance/Resources/Upd.png | Bin 0 -> 17850 bytes 42 files changed, 2347 insertions(+), 48 deletions(-) create mode 100644 Academic_Performance/Academic_Performance/Forms/FormMark.Designer.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormMark.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormMark.resx create mode 100644 Academic_Performance/Academic_Performance/Forms/FormOrder.Designer.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormOrder.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormOrder.resx create mode 100644 Academic_Performance/Academic_Performance/Forms/FormOrders.Designer.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormOrders.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormOrders.resx create mode 100644 Academic_Performance/Academic_Performance/Forms/FormSubject.Designer.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormSubject.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormSubject.resx create mode 100644 Academic_Performance/Academic_Performance/Forms/FormSubjects.Designer.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormSubjects.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormSubjects.resx create mode 100644 Academic_Performance/Academic_Performance/Forms/FormTeacher.Designer.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormTeacher.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormTeacher.resx create mode 100644 Academic_Performance/Academic_Performance/Forms/FormTeachers.Designer.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormTeachers.cs create mode 100644 Academic_Performance/Academic_Performance/Forms/FormTeachers.resx create mode 100644 Academic_Performance/Academic_Performance/Resources/Add.png create mode 100644 Academic_Performance/Academic_Performance/Resources/Del.png create mode 100644 Academic_Performance/Academic_Performance/Resources/Upd.png diff --git a/Academic_Performance/Academic_Performance/Entities/Mark.cs b/Academic_Performance/Academic_Performance/Entities/Mark.cs index 4b4a0f1..42618f6 100644 --- a/Academic_Performance/Academic_Performance/Entities/Mark.cs +++ b/Academic_Performance/Academic_Performance/Entities/Mark.cs @@ -16,7 +16,7 @@ namespace Academic_Performance.Entities public Value? Value { get; private set; } public DateTime Date { get; private set; } - public static Mark CreateOperation(int id, int studentId, int statmentSubjectId, int statmentTeacherId, Value value) + public static Mark CreateEntity(int id, int studentId, int statmentSubjectId, int statmentTeacherId, Value value) { return new Mark { diff --git a/Academic_Performance/Academic_Performance/Entities/Order.cs b/Academic_Performance/Academic_Performance/Entities/Order.cs index d5f1db4..1ff709d 100644 --- a/Academic_Performance/Academic_Performance/Entities/Order.cs +++ b/Academic_Performance/Academic_Performance/Entities/Order.cs @@ -11,12 +11,12 @@ namespace Academic_Performance.Entities { public int Id { get; private set; } public int StudentId { get; private set; } - public string Information { get; private set; } + public string Information { get; private set; } = string.Empty; public TypeS? TypeS { get; private set; } public DateTime Date { get; private set; } - public static Order CreateOperation(int id, int studentId, string information,TypeS types) + public static Order CreateEntity(int id, int studentId, string information,TypeS types) { return new Order { diff --git a/Academic_Performance/Academic_Performance/Entities/Statement.cs b/Academic_Performance/Academic_Performance/Entities/Statement.cs index 56831f0..b63ec34 100644 --- a/Academic_Performance/Academic_Performance/Entities/Statement.cs +++ b/Academic_Performance/Academic_Performance/Entities/Statement.cs @@ -1,6 +1,7 @@ using Academic_Performance.Entities.Enums; using System; using System.Collections.Generic; +using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -14,7 +15,8 @@ namespace Academic_Performance.Entities public int TeacherId{ get; private set; } public DateTime Date { get; private set; } - + + public static Statement CreateOperation(int id, int subjecttId, int teacherId) { return new Statement diff --git a/Academic_Performance/Academic_Performance/Entities/Subject.cs b/Academic_Performance/Academic_Performance/Entities/Subject.cs index ff8c74b..4935a50 100644 --- a/Academic_Performance/Academic_Performance/Entities/Subject.cs +++ b/Academic_Performance/Academic_Performance/Entities/Subject.cs @@ -11,7 +11,7 @@ public class Subject { public int Id { get; private set; } public string Name { get; private set; } = string.Empty; - public static Subject Create(int id, string name) + public static Subject CreateEntity(int id, string name) { return new Subject { diff --git a/Academic_Performance/Academic_Performance/Form1.Designer.cs b/Academic_Performance/Academic_Performance/Form1.Designer.cs index e6a3eb3..15da984 100644 --- a/Academic_Performance/Academic_Performance/Form1.Designer.cs +++ b/Academic_Performance/Academic_Performance/Form1.Designer.cs @@ -81,7 +81,7 @@ // оценкиToolStripMenuItem.Name = "оценкиToolStripMenuItem"; оценкиToolStripMenuItem.Size = new Size(270, 34); - оценкиToolStripMenuItem.Text = "Оценки"; + оценкиToolStripMenuItem.Text = "Приказ"; // // операцииToolStripMenuItem // @@ -93,13 +93,13 @@ // добавлениеToolStripMenuItem // добавлениеToolStripMenuItem.Name = "добавлениеToolStripMenuItem"; - добавлениеToolStripMenuItem.Size = new Size(202, 34); - добавлениеToolStripMenuItem.Text = "Приказ"; + добавлениеToolStripMenuItem.Size = new Size(270, 34); + добавлениеToolStripMenuItem.Text = "Оценка"; // // ведомостьToolStripMenuItem // ведомостьToolStripMenuItem.Name = "ведомостьToolStripMenuItem"; - ведомостьToolStripMenuItem.Size = new Size(202, 34); + ведомостьToolStripMenuItem.Size = new Size(270, 34); ведомостьToolStripMenuItem.Text = "Ведомость"; // // отчетыToolStripMenuItem diff --git a/Academic_Performance/Academic_Performance/Forms/FormMark.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormMark.Designer.cs new file mode 100644 index 0000000..4038bab --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormMark.Designer.cs @@ -0,0 +1,39 @@ +namespace Academic_Performance.Forms +{ + partial class FormMark + { + /// + /// 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 = "FormMark"; + } + + #endregion + } +} \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormMark.cs b/Academic_Performance/Academic_Performance/Forms/FormMark.cs new file mode 100644 index 0000000..5a89553 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormMark.cs @@ -0,0 +1,20 @@ +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 Academic_Performance.Forms +{ + public partial class FormMark : Form + { + public FormMark() + { + InitializeComponent(); + } + } +} diff --git a/Academic_Performance/Academic_Performance/Forms/FormMark.resx b/Academic_Performance/Academic_Performance/Forms/FormMark.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormMark.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/Academic_Performance/Academic_Performance/Forms/FormOrder.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormOrder.Designer.cs new file mode 100644 index 0000000..d478c05 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormOrder.Designer.cs @@ -0,0 +1,151 @@ +namespace Academic_Performance.Forms +{ + partial class FormOrder + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + buttonSave = new Button(); + buttonEx = new Button(); + label1 = new Label(); + label2 = new Label(); + label3 = new Label(); + dateTimePicker1 = new DateTimePicker(); + comboBoxType = new ComboBox(); + textBoxInf = new TextBox(); + comboBoxIdStudent = new ComboBox(); + SuspendLayout(); + // + // buttonSave + // + buttonSave.Location = new Point(80, 404); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(112, 34); + buttonSave.TabIndex = 1; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // buttonEx + // + buttonEx.Location = new Point(572, 404); + buttonEx.Name = "buttonEx"; + buttonEx.Size = new Size(112, 34); + buttonEx.TabIndex = 2; + buttonEx.Text = "Отмена"; + buttonEx.UseVisualStyleBackColor = true; + buttonEx.Click += buttonEx_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(62, 31); + label1.Name = "label1"; + label1.Size = new Size(49, 25); + label1.TabIndex = 3; + label1.Text = "Дата"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(70, 104); + label2.Name = "label2"; + label2.Size = new Size(41, 25); + label2.TabIndex = 4; + label2.Text = "Тип"; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(28, 187); + label3.Name = "label3"; + label3.Size = new Size(121, 25); + label3.TabIndex = 5; + label3.Text = "Информация"; + // + // dateTimePicker1 + // + dateTimePicker1.Location = new Point(184, 26); + dateTimePicker1.Name = "dateTimePicker1"; + dateTimePicker1.Size = new Size(300, 31); + dateTimePicker1.TabIndex = 6; + // + // comboBoxType + // + comboBoxType.FormattingEnabled = true; + comboBoxType.Location = new Point(184, 104); + comboBoxType.Name = "comboBoxType"; + comboBoxType.Size = new Size(516, 33); + comboBoxType.TabIndex = 7; + // + // textBoxInf + // + textBoxInf.Location = new Point(175, 192); + textBoxInf.Name = "textBoxInf"; + textBoxInf.Size = new Size(525, 31); + textBoxInf.TabIndex = 8; + // + // comboBoxIdStudent + // + comboBoxIdStudent.FormattingEnabled = true; + comboBoxIdStudent.Location = new Point(175, 268); + comboBoxIdStudent.Name = "comboBoxIdStudent"; + comboBoxIdStudent.Size = new Size(182, 33); + comboBoxIdStudent.TabIndex = 9; + // + // FormOrder + // + AutoScaleDimensions = new SizeF(10F, 25F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(comboBoxIdStudent); + Controls.Add(textBoxInf); + Controls.Add(comboBoxType); + Controls.Add(dateTimePicker1); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(buttonEx); + Controls.Add(buttonSave); + Name = "FormOrder"; + Text = "FormOrder"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonSave; + private Button buttonEx; + private Label label1; + private Label label2; + private Label label3; + private DateTimePicker dateTimePicker1; + private ComboBox comboBoxType; + private TextBox textBoxInf; + private ComboBox comboBoxIdStudent; + } +} \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormOrder.cs b/Academic_Performance/Academic_Performance/Forms/FormOrder.cs new file mode 100644 index 0000000..d6c4800 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormOrder.cs @@ -0,0 +1,93 @@ +using Academic_Performance.Entities; +using Academic_Performance.Entities.Enums; +using Academic_Performance.Repositories; +using Academic_Performance.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 Academic_Performance.Forms +{ + public partial class FormOrder : Form + { + private readonly IOrderRepository _orderRepository; + + private int? _orderId; + + public int Id + { + set + { + try + { + var order = _orderRepository.GetOrderById(value); + if (order == null) + { + throw new InvalidDataException(nameof(order)); + } + textBoxInf.Text = order.Information; + _orderId = value; + comboBoxType.SelectedItem = + order.TypeS; + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + + } + } + } + public FormOrder(IOrderRepository orderRepository, IStudentRepository studentRepository) + { + InitializeComponent(); + + _orderRepository = orderRepository ?? + throw new + ArgumentNullException(nameof(orderRepository)); + comboBoxType.DataSource = + Enum.GetValues(typeof(TypeS)); + comboBoxIdStudent.DataSource = studentRepository.ReadStudent(); + comboBoxIdStudent.DisplayMember = "Name"; + comboBoxIdStudent.ValueMember = "Id"; + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxInf.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_orderId.HasValue) + { + _orderRepository.UpdateOrder(CreateOrder(_orderId.Value)); + } + else + { + _orderRepository.AddOrder(CreateOrder(0)); + } + + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonEx_Click(object sender, EventArgs e) => Close(); + private Order CreateOrder(int id) => Order.CreateEntity(id, (int)comboBoxIdStudent.SelectedValue!, textBoxInf.Text, + (TypeS)comboBoxType.SelectedItem!); + } +} diff --git a/Academic_Performance/Academic_Performance/Forms/FormOrder.resx b/Academic_Performance/Academic_Performance/Forms/FormOrder.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormOrder.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/Academic_Performance/Academic_Performance/Forms/FormOrders.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormOrders.Designer.cs new file mode 100644 index 0000000..dbf57fc --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormOrders.Designer.cs @@ -0,0 +1,125 @@ +namespace Academic_Performance.Forms +{ + partial class FormOrders + { + /// + /// 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(); + buttonSave = 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(buttonSave); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(591, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(209, 450); + panel1.TabIndex = 1; + // + // buttonDel + // + buttonDel.BackgroundImage = Properties.Resources.Del; + buttonDel.BackgroundImageLayout = ImageLayout.Stretch; + buttonDel.Location = new Point(52, 324); + buttonDel.Name = "buttonDel"; + buttonDel.Size = new Size(112, 98); + buttonDel.TabIndex = 2; + buttonDel.UseVisualStyleBackColor = true; + buttonDel.Click += buttonDel_Click; + // + // buttonUpd + // + buttonUpd.BackgroundImage = Properties.Resources.Upd; + buttonUpd.BackgroundImageLayout = ImageLayout.Stretch; + buttonUpd.Location = new Point(52, 173); + buttonUpd.Name = "buttonUpd"; + buttonUpd.Size = new Size(112, 96); + buttonUpd.TabIndex = 1; + buttonUpd.UseVisualStyleBackColor = true; + buttonUpd.Click += buttonUpd_Click; + // + // buttonSave + // + buttonSave.BackgroundImage = Properties.Resources.Add; + buttonSave.BackgroundImageLayout = ImageLayout.Stretch; + buttonSave.Location = new Point(52, 28); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(112, 93); + buttonSave.TabIndex = 0; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_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 = 62; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(591, 450); + dataGridView.TabIndex = 2; + // + // FormOrders + // + AutoScaleDimensions = new SizeF(10F, 25F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView); + Controls.Add(panel1); + Name = "FormOrders"; + Text = "FormOrders"; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button buttonDel; + private Button buttonUpd; + private Button buttonSave; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormOrders.cs b/Academic_Performance/Academic_Performance/Forms/FormOrders.cs new file mode 100644 index 0000000..53d9761 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormOrders.cs @@ -0,0 +1,112 @@ +using Academic_Performance.Repositories; +using Academic_Performance.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 Academic_Performance.Forms +{ + public partial class FormOrders : Form + { + private readonly IUnityContainer _container; + + private readonly IOrderRepository _orderRepository; + public FormOrders(IUnityContainer container, IOrderRepository orderRepository) + { + InitializeComponent(); + _container = container ?? + throw new ArgumentNullException(nameof(container)); + _orderRepository = orderRepository ?? + throw new ArgumentNullException(nameof(orderRepository)); + } + private void FormRoutes_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void buttonSave_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 + { + _orderRepository.DeleteOrder(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView.DataSource = _orderRepository.ReadOrder(); + private bool TryGetIdentifierFromSelectedRow(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; + } + } +} diff --git a/Academic_Performance/Academic_Performance/Forms/FormOrders.resx b/Academic_Performance/Academic_Performance/Forms/FormOrders.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormOrders.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/Academic_Performance/Academic_Performance/Forms/FormStudents.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormStudents.Designer.cs index 7f6e408..6a930d2 100644 --- a/Academic_Performance/Academic_Performance/Forms/FormStudents.Designer.cs +++ b/Academic_Performance/Academic_Performance/Forms/FormStudents.Designer.cs @@ -50,31 +50,34 @@ // // button3 // + button3.BackgroundImage = Properties.Resources.Del; + button3.BackgroundImageLayout = ImageLayout.Stretch; button3.Location = new Point(52, 324); button3.Name = "button3"; - button3.Size = new Size(112, 34); + button3.Size = new Size(112, 98); button3.TabIndex = 2; - button3.Text = "button3"; button3.UseVisualStyleBackColor = true; button3.Click += button3_Click; // // button2 // + button2.BackgroundImage = Properties.Resources.Upd; + button2.BackgroundImageLayout = ImageLayout.Stretch; button2.Location = new Point(52, 173); button2.Name = "button2"; - button2.Size = new Size(112, 34); + button2.Size = new Size(112, 96); button2.TabIndex = 1; - button2.Text = "button2"; button2.UseVisualStyleBackColor = true; button2.Click += button2_Click; // // button1 // + button1.BackgroundImage = Properties.Resources.Add; + button1.BackgroundImageLayout = ImageLayout.Stretch; button1.Location = new Point(52, 28); button1.Name = "button1"; - button1.Size = new Size(112, 34); + button1.Size = new Size(112, 93); button1.TabIndex = 0; - button1.Text = "button1"; button1.UseVisualStyleBackColor = true; button1.Click += button1_Click; // diff --git a/Academic_Performance/Academic_Performance/Forms/FormStudents.cs b/Academic_Performance/Academic_Performance/Forms/FormStudents.cs index b5c6407..ec97936 100644 --- a/Academic_Performance/Academic_Performance/Forms/FormStudents.cs +++ b/Academic_Performance/Academic_Performance/Forms/FormStudents.cs @@ -36,7 +36,7 @@ namespace Academic_Performance.Forms MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - private void LoadList() => dataGridView1.DataSource = _studentRepository.GetAllStudents(); + private void LoadList() => dataGridView1.DataSource = _studentRepository.ReadStudent(); private void button2_Click(object sender, EventArgs e) { @@ -79,7 +79,15 @@ namespace Academic_Performance.Forms { return; } - + try + { + _studentRepository.DeleteStudent(findId); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } } private void StudentsList_Load(object sender, EventArgs e) diff --git a/Academic_Performance/Academic_Performance/Forms/FormSubject.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormSubject.Designer.cs new file mode 100644 index 0000000..03b7b8d --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormSubject.Designer.cs @@ -0,0 +1,96 @@ +namespace Academic_Performance.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() + { + buttonSave = new Button(); + buttonEx = new Button(); + label1 = new Label(); + textBoxName = new TextBox(); + SuspendLayout(); + // + // buttonSave + // + buttonSave.Location = new Point(73, 404); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(112, 34); + buttonSave.TabIndex = 1; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // buttonEx + // + buttonEx.Location = new Point(513, 404); + buttonEx.Name = "buttonEx"; + buttonEx.Size = new Size(112, 34); + buttonEx.TabIndex = 2; + buttonEx.Text = "Отмена"; + buttonEx.UseVisualStyleBackColor = true; + buttonEx.Click += buttonEx_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(12, 172); + label1.Name = "label1"; + label1.Size = new Size(173, 25); + label1.TabIndex = 3; + label1.Text = "Название предмета"; + label1.Click += label1_Click; + // + // textBoxName + // + textBoxName.Location = new Point(295, 169); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(241, 31); + textBoxName.TabIndex = 4; + // + // FormSubject + // + AutoScaleDimensions = new SizeF(10F, 25F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(textBoxName); + Controls.Add(label1); + Controls.Add(buttonEx); + Controls.Add(buttonSave); + Name = "FormSubject"; + Text = "FormSubject"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonSave; + private Button buttonEx; + private Label label1; + private TextBox textBoxName; + } +} \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormSubject.cs b/Academic_Performance/Academic_Performance/Forms/FormSubject.cs new file mode 100644 index 0000000..8a4de6b --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormSubject.cs @@ -0,0 +1,95 @@ +using Academic_Performance.Entities; +using Academic_Performance.Repositories; +using Academic_Performance.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 static System.Windows.Forms.VisualStyles.VisualStyleElement; + +namespace Academic_Performance.Forms +{ + public partial class FormSubject : Form + { + private readonly ISubjectRepository _subjectRepository; + private int? _subjectId; + + public int Id + { + set + { + try + { + var student = _subjectRepository.GetSubjectById(value); + if (student == null) + { + throw new InvalidDataException(nameof(student)); + } + textBoxName.Text = student.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 label1_Click(object sender, EventArgs e) + { + + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text) ) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_subjectId.HasValue) + { + _subjectRepository.UpdateSubject(CreateSubject(_subjectId.Value)); + } + else + { + _subjectRepository.AddSubject(CreateSubject(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private Subject CreateSubject(int id) => Subject.CreateEntity( + id, + textBoxName.Text + ); + + private void buttonEx_Click(object sender, EventArgs e) => Close(); + + + + } +} diff --git a/Academic_Performance/Academic_Performance/Forms/FormSubject.resx b/Academic_Performance/Academic_Performance/Forms/FormSubject.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/Academic_Performance/Academic_Performance/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/Academic_Performance/Academic_Performance/Forms/FormSubjects.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormSubjects.Designer.cs new file mode 100644 index 0000000..f62dc8b --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormSubjects.Designer.cs @@ -0,0 +1,125 @@ +namespace Academic_Performance.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(); + button3 = new Button(); + button2 = new Button(); + button1 = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(button3); + panel1.Controls.Add(button2); + panel1.Controls.Add(button1); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(591, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(209, 450); + panel1.TabIndex = 1; + // + // button3 + // + button3.BackgroundImage = Properties.Resources.Del; + button3.BackgroundImageLayout = ImageLayout.Stretch; + button3.Location = new Point(52, 324); + button3.Name = "button3"; + button3.Size = new Size(112, 98); + button3.TabIndex = 2; + button3.UseVisualStyleBackColor = true; + button3.Click += button3_Click; + // + // button2 + // + button2.BackgroundImage = Properties.Resources.Upd; + button2.BackgroundImageLayout = ImageLayout.Stretch; + button2.Location = new Point(52, 173); + button2.Name = "button2"; + button2.Size = new Size(112, 96); + button2.TabIndex = 1; + button2.UseVisualStyleBackColor = true; + button2.Click += button2_Click; + // + // button1 + // + button1.BackgroundImage = Properties.Resources.Add; + button1.BackgroundImageLayout = ImageLayout.Stretch; + button1.Location = new Point(52, 28); + button1.Name = "button1"; + button1.Size = new Size(112, 93); + button1.TabIndex = 0; + button1.UseVisualStyleBackColor = true; + button1.Click += button1_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 62; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(591, 450); + dataGridView1.TabIndex = 2; + // + // FormSubjects + // + AutoScaleDimensions = new SizeF(10F, 25F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormSubjects"; + Text = "FormSubjects"; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button button3; + private Button button2; + private Button button1; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormSubjects.cs b/Academic_Performance/Academic_Performance/Forms/FormSubjects.cs new file mode 100644 index 0000000..7ee30fa --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormSubjects.cs @@ -0,0 +1,126 @@ +using Academic_Performance.Repositories; +using Academic_Performance.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using Unity; + +namespace Academic_Performance.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 FormSubject_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void button1_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void button2_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 button3_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 SubjectList_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + private void LoadList() => dataGridView1.DataSource = _subjectRepository.ReadSubject(); + private bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + id = + Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + + } +} diff --git a/Academic_Performance/Academic_Performance/Forms/FormSubjects.resx b/Academic_Performance/Academic_Performance/Forms/FormSubjects.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/Academic_Performance/Academic_Performance/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/Academic_Performance/Academic_Performance/Forms/FormTeacher.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormTeacher.Designer.cs new file mode 100644 index 0000000..63cb131 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormTeacher.Designer.cs @@ -0,0 +1,95 @@ +namespace Academic_Performance.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() + { + buttonSave = new Button(); + buttonEx = new Button(); + label1 = new Label(); + textBoxName = new TextBox(); + SuspendLayout(); + // + // buttonSave + // + buttonSave.Location = new Point(75, 253); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(112, 34); + buttonSave.TabIndex = 0; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // buttonEx + // + buttonEx.Location = new Point(241, 253); + buttonEx.Name = "buttonEx"; + buttonEx.Size = new Size(112, 34); + buttonEx.TabIndex = 1; + buttonEx.Text = "Отмена"; + buttonEx.UseVisualStyleBackColor = true; + buttonEx.Click += buttonEx_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(4, 91); + label1.Name = "label1"; + label1.Size = new Size(183, 25); + label1.TabIndex = 2; + label1.Text = "ФИО Преподавателя"; + // + // textBoxName + // + textBoxName.Location = new Point(218, 88); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(241, 31); + textBoxName.TabIndex = 3; + // + // FormTeacher + // + AutoScaleDimensions = new SizeF(10F, 25F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(489, 315); + Controls.Add(textBoxName); + Controls.Add(label1); + Controls.Add(buttonEx); + Controls.Add(buttonSave); + Name = "FormTeacher"; + Text = "FormTeacher"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Button buttonSave; + private Button buttonEx; + private Label label1; + private TextBox textBoxName; + } +} \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormTeacher.cs b/Academic_Performance/Academic_Performance/Forms/FormTeacher.cs new file mode 100644 index 0000000..b341ff5 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormTeacher.cs @@ -0,0 +1,86 @@ +using Academic_Performance.Repositories; +using Academic_Performance.Entities; +using Academic_Performance.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 Academic_Performance.Forms +{ + public partial class FormTeacher : Form + { + + private readonly ITeacherRepository _teacherRepository; + + private int? _teacherId; + + public int Id + { + set + { + try + { + var teacher = _teacherRepository.GetTeacherById(value); + if (teacher == null) + { + throw new InvalidOperationException(nameof(teacher)); + } + + textBoxName.Text = teacher.Name; + _teacherId = value; + + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + public FormTeacher(ITeacherRepository teacherRepository) + { + InitializeComponent(); + _teacherRepository = teacherRepository ?? + throw new ArgumentNullException(nameof(teacherRepository)); + + + } + + private void buttonSave_Click(object sender, EventArgs e) + { + try + { + if (string.IsNullOrWhiteSpace(textBoxName.Text)) + { + throw new Exception("Имеются незаполненные поля"); + } + + if (_teacherId.HasValue) + { + _teacherRepository.UpdateTeacher(CreateTeacher(_teacherId.Value)); + } + else + { + _teacherRepository.CreateTeacher(CreateTeacher(0)); + } + + Close(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private Teacher CreateTeacher(int id) => + Teacher.CreateEntity(id, textBoxName.Text); + + private void buttonEx_Click(object sender, EventArgs e) => Close(); + + } +} diff --git a/Academic_Performance/Academic_Performance/Forms/FormTeacher.resx b/Academic_Performance/Academic_Performance/Forms/FormTeacher.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/Academic_Performance/Academic_Performance/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/Academic_Performance/Academic_Performance/Forms/FormTeachers.Designer.cs b/Academic_Performance/Academic_Performance/Forms/FormTeachers.Designer.cs new file mode 100644 index 0000000..6459d3d --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormTeachers.Designer.cs @@ -0,0 +1,125 @@ +namespace Academic_Performance.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(); + button3 = new Button(); + button2 = new Button(); + button1 = new Button(); + dataGridView1 = new DataGridView(); + panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // panel1 + // + panel1.Controls.Add(button3); + panel1.Controls.Add(button2); + panel1.Controls.Add(button1); + panel1.Dock = DockStyle.Right; + panel1.Location = new Point(591, 0); + panel1.Name = "panel1"; + panel1.Size = new Size(209, 450); + panel1.TabIndex = 1; + // + // button3 + // + button3.BackgroundImage = Properties.Resources.Del; + button3.BackgroundImageLayout = ImageLayout.Stretch; + button3.Location = new Point(52, 324); + button3.Name = "button3"; + button3.Size = new Size(112, 98); + button3.TabIndex = 2; + button3.UseVisualStyleBackColor = true; + button3.Click += button3_Click; + // + // button2 + // + button2.BackgroundImage = Properties.Resources.Upd; + button2.BackgroundImageLayout = ImageLayout.Stretch; + button2.Location = new Point(52, 173); + button2.Name = "button2"; + button2.Size = new Size(112, 96); + button2.TabIndex = 1; + button2.UseVisualStyleBackColor = true; + button2.Click += button2_Click; + // + // button1 + // + button1.BackgroundImage = Properties.Resources.Add; + button1.BackgroundImageLayout = ImageLayout.Stretch; + button1.Location = new Point(52, 28); + button1.Name = "button1"; + button1.Size = new Size(112, 93); + button1.TabIndex = 0; + button1.UseVisualStyleBackColor = true; + button1.Click += button1_Click; + // + // dataGridView1 + // + dataGridView1.AllowUserToAddRows = false; + dataGridView1.AllowUserToDeleteRows = false; + dataGridView1.AllowUserToResizeColumns = false; + dataGridView1.AllowUserToResizeRows = false; + dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new Point(0, 0); + dataGridView1.MultiSelect = false; + dataGridView1.Name = "dataGridView1"; + dataGridView1.ReadOnly = true; + dataGridView1.RowHeadersVisible = false; + dataGridView1.RowHeadersWidth = 62; + dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView1.Size = new Size(591, 450); + dataGridView1.TabIndex = 2; + // + // FormTeachers + // + AutoScaleDimensions = new SizeF(10F, 25F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView1); + Controls.Add(panel1); + Name = "FormTeachers"; + Text = "FormTeachers"; + panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Panel panel1; + private Button button3; + private Button button2; + private Button button1; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Forms/FormTeachers.cs b/Academic_Performance/Academic_Performance/Forms/FormTeachers.cs new file mode 100644 index 0000000..ec3bc77 --- /dev/null +++ b/Academic_Performance/Academic_Performance/Forms/FormTeachers.cs @@ -0,0 +1,118 @@ +using Academic_Performance.Repositories; +using Academic_Performance.Repositories.Implementations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml.Linq; +using Unity; + +namespace Academic_Performance.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 button1_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void FormTeachers_Load(object sender, EventArgs e) + { + try + { + LoadList(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void LoadList() => dataGridView1.DataSource = _teacherRepository.ReadTeachers(); + private void button2_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 button3_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 bool TryGetIdentifierFromSelectedRow(out int id) + { + id = 0; + if (dataGridView1.SelectedRows.Count < 1) + { + MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return false; + } + + id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["Id"].Value); + return true; + } + + + + + + + } +} diff --git a/Academic_Performance/Academic_Performance/Forms/FormTeachers.resx b/Academic_Performance/Academic_Performance/Forms/FormTeachers.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/Academic_Performance/Academic_Performance/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/Academic_Performance/Academic_Performance/Properties/Resources.Designer.cs b/Academic_Performance/Academic_Performance/Properties/Resources.Designer.cs index 34b368d..4786d70 100644 --- a/Academic_Performance/Academic_Performance/Properties/Resources.Designer.cs +++ b/Academic_Performance/Academic_Performance/Properties/Resources.Designer.cs @@ -60,6 +60,26 @@ namespace Academic_Performance.Properties { } } + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Add { + get { + object obj = ResourceManager.GetObject("Add", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Del { + get { + object obj = ResourceManager.GetObject("Del", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Поиск локализованного ресурса типа System.Drawing.Bitmap. /// @@ -69,5 +89,15 @@ namespace Academic_Performance.Properties { return ((System.Drawing.Bitmap)(obj)); } } + + /// + /// Поиск локализованного ресурса типа System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Upd { + get { + object obj = ResourceManager.GetObject("Upd", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/Academic_Performance/Academic_Performance/Properties/Resources.resx b/Academic_Performance/Academic_Performance/Properties/Resources.resx index 1ab58a0..d1ec82c 100644 --- a/Academic_Performance/Academic_Performance/Properties/Resources.resx +++ b/Academic_Performance/Academic_Performance/Properties/Resources.resx @@ -118,7 +118,16 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\Del.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\unnamed.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Upd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Academic_Performance/Academic_Performance/Repositories/IOrderRepository.cs b/Academic_Performance/Academic_Performance/Repositories/IOrderRepository.cs index 3518d82..c576945 100644 --- a/Academic_Performance/Academic_Performance/Repositories/IOrderRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/IOrderRepository.cs @@ -9,7 +9,7 @@ namespace Academic_Performance.Repositories { public interface IOrderRepository { - IEnumerable GetAllOrders(); + IEnumerable ReadOrder(); Order GetOrderById(int id); void AddOrder(Order order); void UpdateOrder(Order order); diff --git a/Academic_Performance/Academic_Performance/Repositories/IStudentRepository.cs b/Academic_Performance/Academic_Performance/Repositories/IStudentRepository.cs index edd939b..6026f5d 100644 --- a/Academic_Performance/Academic_Performance/Repositories/IStudentRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/IStudentRepository.cs @@ -9,7 +9,7 @@ namespace Academic_Performance.Repositories { public interface IStudentRepository { - IEnumerable GetAllStudents(); + IEnumerable ReadStudent(); Student GetStudentById(int id); void AddStudent(Student student); void UpdateStudent(Student student); diff --git a/Academic_Performance/Academic_Performance/Repositories/ISubjectRepository.cs b/Academic_Performance/Academic_Performance/Repositories/ISubjectRepository.cs index 7c01890..c1fa5a7 100644 --- a/Academic_Performance/Academic_Performance/Repositories/ISubjectRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/ISubjectRepository.cs @@ -9,7 +9,7 @@ namespace Academic_Performance.Repositories { public interface ISubjectRepository { - IEnumerable GetAllSubjects(); + IEnumerable ReadSubject(); Subject GetSubjectById(int id); void AddSubject(Subject subject); void UpdateSubject(Subject subject); diff --git a/Academic_Performance/Academic_Performance/Repositories/ITeacherRepository.cs b/Academic_Performance/Academic_Performance/Repositories/ITeacherRepository.cs index c609dbc..9ab7d1e 100644 --- a/Academic_Performance/Academic_Performance/Repositories/ITeacherRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/ITeacherRepository.cs @@ -9,9 +9,9 @@ namespace Academic_Performance.Repositories { public interface ITeacherRepository { - IEnumerable GetAllTeachers(); + IEnumerable ReadTeachers(); Teacher GetTeacherById(int id); - void AddTeacher(Teacher teacher); + void CreateTeacher(Teacher teacher); void UpdateTeacher(Teacher teacher); void DeleteTeacher(int id); } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/MarkRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/MarkRepository.cs index 6cf2602..8f964bd 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/MarkRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/MarkRepository.cs @@ -13,33 +13,29 @@ namespace Academic_Performance.Repositories.Implementations { public void CreateMark(Mark Mark) { - // Заглушка } public void UpdateMark(Mark Mark) { - // Заглушка } public void DeleteMark(int id) { - // Заглушка } public Mark GetMarkById(int id) { - // Возвращаем объект с фиктивными данными, убедившись, что Mark.One существует - return Mark.CreateOperation(0, 0, 0, 0, Value.One); // Убедитесь, что Mark.One определен + return Mark.CreateEntity(0, 0, 0, 0, Value.One); } public IEnumerable GetAllMarks() { - // Заглушка + return new List(); } public void AddMark(Mark mark) { - // Заглушка + } } } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/OrderRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/OrderRepository.cs index 4be2da7..630e143 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/OrderRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/OrderRepository.cs @@ -12,12 +12,10 @@ namespace Academic_Performance.Repositories.Implementations { public void AddOrder(Order order) { - // Заглушка } public void DeleteOrder(int id) { - // Заглушка } public IEnumerable GetAllOrders() @@ -27,12 +25,16 @@ namespace Academic_Performance.Repositories.Implementations public Order GetOrderById(int id) { - return Order.CreateOperation(0,0, string.Empty,TypeS.None); + return Order.CreateEntity(0,0, string.Empty,TypeS.None); } public void UpdateOrder(Order order) { - // Заглушка + } + + IEnumerable IOrderRepository.ReadOrder() + { + return []; } } } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/StudentRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/StudentRepository.cs index 0916be7..f95c1e2 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/StudentRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/StudentRepository.cs @@ -12,12 +12,10 @@ namespace Academic_Performance.Repositories.Implementations { public void AddStudent(Student subject) { - // Заглушка } public void DeleteStudent(int id) { - // Заглушка } public IEnumerable GetAllStudents() @@ -32,7 +30,11 @@ namespace Academic_Performance.Repositories.Implementations public void UpdateStudent(Student student) { - // Заглушка + } + + IEnumerable IStudentRepository.ReadStudent() + { + return []; } } } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/SubjectRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/SubjectRepository.cs index 9459100..08145de 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/SubjectRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/SubjectRepository.cs @@ -12,27 +12,26 @@ namespace Academic_Performance.Repositories.Implementations { public void AddSubject(Subject subject) { - // Заглушка } public void DeleteSubject(int id) { - // Заглушка } - public IEnumerable GetAllSubjects() - { - return new List(); - } + public Subject GetSubjectById(int id) { - return Subject.Create(0, string.Empty); + return Subject.CreateEntity(0, string.Empty); } public void UpdateSubject(Subject subject) { - // Заглушка + } + + IEnumerable ISubjectRepository.ReadSubject() + { + return []; } } } diff --git a/Academic_Performance/Academic_Performance/Repositories/Implementations/TeacherRepository.cs b/Academic_Performance/Academic_Performance/Repositories/Implementations/TeacherRepository.cs index 4e72f49..c862858 100644 --- a/Academic_Performance/Academic_Performance/Repositories/Implementations/TeacherRepository.cs +++ b/Academic_Performance/Academic_Performance/Repositories/Implementations/TeacherRepository.cs @@ -9,14 +9,12 @@ namespace Academic_Performance.Repositories.Implementations { public class TeacherRepository : ITeacherRepository { - public void AddTeacher(Teacher teacher) + public void CreateTeacher(Teacher teacher) { - // Заглушка } public void DeleteTeacher(int id) { - // Заглушка } public IEnumerable GetAllTeachers() @@ -29,9 +27,13 @@ namespace Academic_Performance.Repositories.Implementations return Teacher.CreateEntity(0, string.Empty); } + public IEnumerable ReadTeachers() + { + return []; + } + public void UpdateTeacher(Teacher teacher) { - // Заглушка } } } diff --git a/Academic_Performance/Academic_Performance/Resources/Add.png b/Academic_Performance/Academic_Performance/Resources/Add.png new file mode 100644 index 0000000000000000000000000000000000000000..95bb2f368bc264f7f73f2ef96222c45cf07d8c86 GIT binary patch literal 70959 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%0AVQeM!F-d4AC2UGnJd* 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 literal 0 HcmV?d00001 diff --git a/Academic_Performance/Academic_Performance/Resources/Del.png b/Academic_Performance/Academic_Performance/Resources/Del.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7ad924a96314c5a1d5c5eec8453bc89ebdd36b GIT binary patch literal 5800 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 literal 0 HcmV?d00001 diff --git a/Academic_Performance/Academic_Performance/Resources/Upd.png b/Academic_Performance/Academic_Performance/Resources/Upd.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e363edf5291eb34ab34007a66b2f132ec6ffdb GIT binary patch literal 17850 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 N*3;F`Wt~$(69BmW>$?B| literal 0 HcmV?d00001