From a6cf93fed063c9d6dbfee2c7bb64f24f444f17ff Mon Sep 17 00:00:00 2001 From: Artem Darius Weber Date: Fri, 24 May 2024 12:49:01 +0300 Subject: [PATCH] lab: 9 --- db_lab/BuildingRepository.Designer.cs | 39 ++++ db_lab/BuildingRepository.cs | 85 +++++++ db_lab/CRUDForm.Designer.cs | 221 ++++++++++++++++++ db_lab/CRUDForm.cs | 107 +++++++++ db_lab/CRUDForm.resx | 120 ++++++++++ db_lab/DepartmentForm.Designer.cs | 137 +++++++++++ db_lab/DepartmentForm.cs | 79 +++++++ db_lab/DepartmentForm.resx | 120 ++++++++++ db_lab/DepartmentRepository.cs | 84 +++++++ db_lab/EditDepartmentForm.Designer.cs | 171 ++++++++++++++ db_lab/EditDepartmentForm.cs | 61 +++++ db_lab/EditDepartmentForm.resx | 120 ++++++++++ db_lab/EditEquipmentForm.Designer.cs | 149 ++++++++++++ db_lab/EditEquipmentForm.cs | 59 +++++ db_lab/EditEquipmentForm.resx | 120 ++++++++++ db_lab/EditFormBuilding.Designer.cs | 149 ++++++++++++ db_lab/EditFormBuilding.cs | 59 +++++ db_lab/EditFormBuilding.resx | 120 ++++++++++ db_lab/EditRoomForm.Designer.cs | 193 +++++++++++++++ db_lab/EditRoomForm.cs | 63 +++++ db_lab/EditRoomForm.resx | 120 ++++++++++ db_lab/EquipmentForm.Designer.cs | 137 +++++++++++ db_lab/EquipmentForm.cs | 79 +++++++ db_lab/EquipmentForm.resx | 120 ++++++++++ db_lab/EquipmentRepository.cs | 82 +++++++ db_lab/Form1.Designer.cs | 48 +++- db_lab/Form1.cs | 14 +- db_lab/RoomForm.Designer.cs | 137 +++++++++++ db_lab/RoomForm.cs | 79 +++++++ db_lab/RoomForm.resx | 120 ++++++++++ db_lab/RoomRepository.cs | 86 +++++++ db_lab/bin/Debug/db_lab.exe | Bin 16896 -> 48128 bytes db_lab/bin/Debug/db_lab.pdb | Bin 54784 -> 146944 bytes db_lab/db_lab.csproj | 81 +++++++ db_lab/obj/Debug/db_lab.CRUDForm.resources | Bin 0 -> 180 bytes .../obj/Debug/db_lab.DepartmentForm.resources | Bin 0 -> 180 bytes .../Debug/db_lab.EditDepartmentForm.resources | Bin 0 -> 180 bytes .../Debug/db_lab.EditEquipmentForm.resources | Bin 0 -> 180 bytes .../Debug/db_lab.EditFormBuilding.resources | Bin 0 -> 180 bytes .../obj/Debug/db_lab.EditRoomForm.resources | Bin 0 -> 180 bytes .../obj/Debug/db_lab.EquipmentForm.resources | Bin 0 -> 180 bytes db_lab/obj/Debug/db_lab.RoomForm.resources | Bin 0 -> 180 bytes .../db_lab.csproj.CoreCompileInputs.cache | 2 +- .../Debug/db_lab.csproj.FileListAbsolute.txt | 8 + .../db_lab.csproj.GenerateResource.cache | Bin 174 -> 694 bytes db_lab/obj/Debug/db_lab.exe | Bin 16896 -> 48128 bytes db_lab/obj/Debug/db_lab.pdb | Bin 54784 -> 146944 bytes 47 files changed, 3356 insertions(+), 13 deletions(-) create mode 100644 db_lab/BuildingRepository.Designer.cs create mode 100644 db_lab/BuildingRepository.cs create mode 100644 db_lab/CRUDForm.Designer.cs create mode 100644 db_lab/CRUDForm.cs create mode 100644 db_lab/CRUDForm.resx create mode 100644 db_lab/DepartmentForm.Designer.cs create mode 100644 db_lab/DepartmentForm.cs create mode 100644 db_lab/DepartmentForm.resx create mode 100644 db_lab/DepartmentRepository.cs create mode 100644 db_lab/EditDepartmentForm.Designer.cs create mode 100644 db_lab/EditDepartmentForm.cs create mode 100644 db_lab/EditDepartmentForm.resx create mode 100644 db_lab/EditEquipmentForm.Designer.cs create mode 100644 db_lab/EditEquipmentForm.cs create mode 100644 db_lab/EditEquipmentForm.resx create mode 100644 db_lab/EditFormBuilding.Designer.cs create mode 100644 db_lab/EditFormBuilding.cs create mode 100644 db_lab/EditFormBuilding.resx create mode 100644 db_lab/EditRoomForm.Designer.cs create mode 100644 db_lab/EditRoomForm.cs create mode 100644 db_lab/EditRoomForm.resx create mode 100644 db_lab/EquipmentForm.Designer.cs create mode 100644 db_lab/EquipmentForm.cs create mode 100644 db_lab/EquipmentForm.resx create mode 100644 db_lab/EquipmentRepository.cs create mode 100644 db_lab/RoomForm.Designer.cs create mode 100644 db_lab/RoomForm.cs create mode 100644 db_lab/RoomForm.resx create mode 100644 db_lab/RoomRepository.cs create mode 100644 db_lab/obj/Debug/db_lab.CRUDForm.resources create mode 100644 db_lab/obj/Debug/db_lab.DepartmentForm.resources create mode 100644 db_lab/obj/Debug/db_lab.EditDepartmentForm.resources create mode 100644 db_lab/obj/Debug/db_lab.EditEquipmentForm.resources create mode 100644 db_lab/obj/Debug/db_lab.EditFormBuilding.resources create mode 100644 db_lab/obj/Debug/db_lab.EditRoomForm.resources create mode 100644 db_lab/obj/Debug/db_lab.EquipmentForm.resources create mode 100644 db_lab/obj/Debug/db_lab.RoomForm.resources diff --git a/db_lab/BuildingRepository.Designer.cs b/db_lab/BuildingRepository.Designer.cs new file mode 100644 index 0000000..9c30805 --- /dev/null +++ b/db_lab/BuildingRepository.Designer.cs @@ -0,0 +1,39 @@ +namespace db_lab +{ + partial class BuildingRepository + { + /// + /// 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 = "BuildingRepository"; + } + + #endregion + } +} \ No newline at end of file diff --git a/db_lab/BuildingRepository.cs b/db_lab/BuildingRepository.cs new file mode 100644 index 0000000..c530300 --- /dev/null +++ b/db_lab/BuildingRepository.cs @@ -0,0 +1,85 @@ +using Npgsql; +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 db_lab +{ + public partial class BuildingRepository : Form + { + private NpgsqlConnection connection; + + public BuildingRepository(string connectionString) + { + this.connection = new NpgsqlConnection(connectionString); + } + + public DataTable ReadBuildings(int pageSize, int pageNumber) + { + string query = $"SELECT * FROM Building ORDER BY id LIMIT {pageSize} OFFSET {(pageNumber - 1) * pageSize}"; + NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection); + DataTable dt = new DataTable(); + da.Fill(dt); + return dt; + } + + public void DeleteBuilding(int id) + { + string query = $"DELETE FROM Building WHERE id = {id}"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public void AddBuilding(int floorCount, string address, int creatingUserId, string buildingType) + { + string query = "INSERT INTO Building (floor_count, address, creating_user_id, building_type) VALUES (@floor_count, @address, @creating_user_id, @building_type)"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + cmd.Parameters.AddWithValue("floor_count", floorCount); + cmd.Parameters.AddWithValue("address", address); + cmd.Parameters.AddWithValue("creating_user_id", creatingUserId); + cmd.Parameters.AddWithValue("building_type", buildingType); + + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public void UpdateBuilding(int id, int floorCount, string address, int creatingUserId, string buildingType) + { + string query = "UPDATE Building SET floor_count = @floor_count, address = @address, creating_user_id = @creating_user_id, building_type = @building_type WHERE id = @id"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + cmd.Parameters.AddWithValue("floor_count", floorCount); + cmd.Parameters.AddWithValue("address", address); + cmd.Parameters.AddWithValue("creating_user_id", creatingUserId); + cmd.Parameters.AddWithValue("building_type", buildingType); + cmd.Parameters.AddWithValue("id", id); + + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public DataRow GetBuildingById(int id) + { + string query = $"SELECT * FROM Building WHERE id = {id}"; + NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection); + DataTable dt = new DataTable(); + da.Fill(dt); + return dt.Rows.Count > 0 ? dt.Rows[0] : null; + } + } +} diff --git a/db_lab/CRUDForm.Designer.cs b/db_lab/CRUDForm.Designer.cs new file mode 100644 index 0000000..eac88e9 --- /dev/null +++ b/db_lab/CRUDForm.Designer.cs @@ -0,0 +1,221 @@ +namespace db_lab +{ + partial class CRUDForm + { + /// + /// 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.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.buildingBtn = new System.Windows.Forms.Button(); + this.DepartmentBtn = new System.Windows.Forms.Button(); + this.RoomsBtn = new System.Windows.Forms.Button(); + this.EquipmentBtn = new System.Windows.Forms.Button(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.tableLayoutPanel1.SuspendLayout(); + this.flowLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.buildingBtn); + this.flowLayoutPanel1.Controls.Add(this.DepartmentBtn); + this.flowLayoutPanel1.Controls.Add(this.RoomsBtn); + this.flowLayoutPanel1.Controls.Add(this.EquipmentBtn); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Left; + this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(200, 450); + this.flowLayoutPanel1.TabIndex = 0; + // + // buildingBtn + // + this.buildingBtn.Location = new System.Drawing.Point(3, 3); + this.buildingBtn.Name = "buildingBtn"; + this.buildingBtn.Size = new System.Drawing.Size(75, 23); + this.buildingBtn.TabIndex = 0; + this.buildingBtn.Text = "Building"; + this.buildingBtn.UseVisualStyleBackColor = true; + this.buildingBtn.Click += new System.EventHandler(this.buildingBtn_Click); + // + // DepartmentBtn + // + this.DepartmentBtn.Location = new System.Drawing.Point(84, 3); + this.DepartmentBtn.Name = "DepartmentBtn"; + this.DepartmentBtn.Size = new System.Drawing.Size(75, 23); + this.DepartmentBtn.TabIndex = 1; + this.DepartmentBtn.Text = "Department"; + this.DepartmentBtn.UseVisualStyleBackColor = true; + this.DepartmentBtn.Click += new System.EventHandler(this.DepartmentBtn_Click); + // + // RoomsBtn + // + this.RoomsBtn.Location = new System.Drawing.Point(3, 32); + this.RoomsBtn.Name = "RoomsBtn"; + this.RoomsBtn.Size = new System.Drawing.Size(75, 23); + this.RoomsBtn.TabIndex = 2; + this.RoomsBtn.Text = "Rooms"; + this.RoomsBtn.UseVisualStyleBackColor = true; + this.RoomsBtn.Click += new System.EventHandler(this.RoomsBtn_Click); + // + // EquipmentBtn + // + this.EquipmentBtn.Location = new System.Drawing.Point(84, 32); + this.EquipmentBtn.Name = "EquipmentBtn"; + this.EquipmentBtn.Size = new System.Drawing.Size(75, 23); + this.EquipmentBtn.TabIndex = 3; + this.EquipmentBtn.Text = "Equipment"; + this.EquipmentBtn.UseVisualStyleBackColor = true; + this.EquipmentBtn.Click += new System.EventHandler(this.EquipmentBtn_Click); + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Location = new System.Drawing.Point(3, 3); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.Size = new System.Drawing.Size(511, 411); + this.dataGridView1.TabIndex = 4; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 86.16666F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 13.83333F)); + this.tableLayoutPanel1.Controls.Add(this.dataGridView1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel2, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(200, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 92.88889F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 7.111111F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(600, 450); + this.tableLayoutPanel1.TabIndex = 1; + // + // flowLayoutPanel2 + // + this.flowLayoutPanel2.Controls.Add(this.button1); + this.flowLayoutPanel2.Controls.Add(this.button2); + this.flowLayoutPanel2.Controls.Add(this.button3); + this.flowLayoutPanel2.Controls.Add(this.button4); + this.flowLayoutPanel2.Controls.Add(this.button5); + this.flowLayoutPanel2.Location = new System.Drawing.Point(520, 3); + this.flowLayoutPanel2.Name = "flowLayoutPanel2"; + this.flowLayoutPanel2.Size = new System.Drawing.Size(77, 411); + this.flowLayoutPanel2.TabIndex = 6; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(3, 3); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 5; + this.button1.Text = "Next"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.btnNext_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(3, 32); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 6; + this.button2.Text = "Prev"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.btnPrev_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(3, 61); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 7; + this.button3.Text = "Delete"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.btnDelete_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(3, 90); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 8; + this.button4.Text = "Add"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.btnAdd_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(3, 119); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(75, 23); + this.button5.TabIndex = 9; + this.button5.Text = "Edit"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.btnEdit_Click); + // + // CRUDForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.tableLayoutPanel1); + this.Controls.Add(this.flowLayoutPanel1); + this.Name = "CRUDForm"; + this.Text = "CRUDForm"; + this.flowLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.tableLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Button buildingBtn; + private System.Windows.Forms.Button DepartmentBtn; + private System.Windows.Forms.Button RoomsBtn; + private System.Windows.Forms.Button EquipmentBtn; + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + } +} \ No newline at end of file diff --git a/db_lab/CRUDForm.cs b/db_lab/CRUDForm.cs new file mode 100644 index 0000000..3e3aab3 --- /dev/null +++ b/db_lab/CRUDForm.cs @@ -0,0 +1,107 @@ +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 db_lab +{ + public partial class CRUDForm : Form + { + private BuildingRepository buildingRepository; + private int pageSize = 10; + private int currentPage = 1; + private string connectionString; + + public CRUDForm(string connectionString) + { + InitializeComponent(); + this.connectionString = connectionString; + buildingRepository = new BuildingRepository(connectionString); // Инициализация BuildingRepository + LoadData(); + } + + private void LoadData() + { + DataTable dt = buildingRepository.ReadBuildings(pageSize, currentPage); + dataGridView1.DataSource = dt; + } + + private void btnNext_Click(object sender, EventArgs e) + { + currentPage++; + LoadData(); + } + + private void btnPrev_Click(object sender, EventArgs e) + { + if (currentPage > 1) + { + currentPage--; + LoadData(); + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow row in dataGridView1.SelectedRows) + { + int id = Convert.ToInt32(row.Cells["id"].Value); + buildingRepository.DeleteBuilding(id); + } + LoadData(); + } + + private void btnAdd_Click(object sender, EventArgs e) + { + EditFormBuilding editForm = new EditFormBuilding(buildingRepository); + editForm.ShowDialog(); + LoadData(); + } + + private void btnEdit_Click(object sender, EventArgs e) + { + if (dataGridView1.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["id"].Value); + EditFormBuilding editForm = new EditFormBuilding(buildingRepository, id); + editForm.ShowDialog(); + LoadData(); + } + else + { + MessageBox.Show("Please select a single row to edit."); + } + } + + // another + + private void buildingBtn_Click(object sender, EventArgs e) + { + var crudForm = new CRUDForm(this.connectionString); + crudForm.Show(); + } + + private void DepartmentBtn_Click(object sender, EventArgs e) + { + var form = new DepartmentForm(this.connectionString); + form.Show(); + } + + private void RoomsBtn_Click(object sender, EventArgs e) + { + var form = new RoomForm(this.connectionString); + form.Show(); + } + + private void EquipmentBtn_Click(object sender, EventArgs e) + { + var form = new EquipmentForm(this.connectionString); + form.Show(); + } + } +} diff --git a/db_lab/CRUDForm.resx b/db_lab/CRUDForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/db_lab/CRUDForm.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/db_lab/DepartmentForm.Designer.cs b/db_lab/DepartmentForm.Designer.cs new file mode 100644 index 0000000..237e9e9 --- /dev/null +++ b/db_lab/DepartmentForm.Designer.cs @@ -0,0 +1,137 @@ +namespace db_lab +{ + partial class DepartmentForm + { + /// + /// 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.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.button1); + this.flowLayoutPanel1.Controls.Add(this.button2); + this.flowLayoutPanel1.Controls.Add(this.button3); + this.flowLayoutPanel1.Controls.Add(this.button4); + this.flowLayoutPanel1.Controls.Add(this.button5); + this.flowLayoutPanel1.Location = new System.Drawing.Point(588, 12); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(200, 426); + this.flowLayoutPanel1.TabIndex = 0; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(3, 3); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Next"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.btnNext_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(84, 3); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 1; + this.button2.Text = "Prev"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.btnPrev_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(3, 32); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 2; + this.button3.Text = "Delete"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.btnDelete_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(84, 32); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 3; + this.button4.Text = "Add"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.btnAdd_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(3, 61); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(75, 23); + this.button5.TabIndex = 4; + this.button5.Text = "Edit"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.btnEdit_Click); + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Location = new System.Drawing.Point(12, 12); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.Size = new System.Drawing.Size(570, 426); + this.dataGridView1.TabIndex = 1; + // + // DepartmentForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.dataGridView1); + this.Controls.Add(this.flowLayoutPanel1); + this.Name = "DepartmentForm"; + this.Text = "DepartmentForm"; + this.flowLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/db_lab/DepartmentForm.cs b/db_lab/DepartmentForm.cs new file mode 100644 index 0000000..7f1a6f3 --- /dev/null +++ b/db_lab/DepartmentForm.cs @@ -0,0 +1,79 @@ +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 db_lab +{ + public partial class DepartmentForm : Form + { + private DepartmentRepository departmentRepository; + private int pageSize = 10; + private int currentPage = 1; + + public DepartmentForm(string connectionString) + { + InitializeComponent(); + departmentRepository = new DepartmentRepository(connectionString); + LoadData(); + } + + private void LoadData() + { + DataTable dt = departmentRepository.ReadDepartments(pageSize, currentPage); + dataGridView1.DataSource = dt; + } + + private void btnNext_Click(object sender, EventArgs e) + { + currentPage++; + LoadData(); + } + + private void btnPrev_Click(object sender, EventArgs e) + { + if (currentPage > 1) + { + currentPage--; + LoadData(); + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow row in dataGridView1.SelectedRows) + { + int code = Convert.ToInt32(row.Cells["code"].Value); + departmentRepository.DeleteDepartment(code); + } + LoadData(); + } + + private void btnAdd_Click(object sender, EventArgs e) + { + EditDepartmentForm editForm = new EditDepartmentForm(departmentRepository); + editForm.ShowDialog(); + LoadData(); + } + + private void btnEdit_Click(object sender, EventArgs e) + { + if (dataGridView1.SelectedRows.Count == 1) + { + int code = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["code"].Value); + EditDepartmentForm editForm = new EditDepartmentForm(departmentRepository, code); + editForm.ShowDialog(); + LoadData(); + } + else + { + MessageBox.Show("Please select a single row to edit."); + } + } + } +} diff --git a/db_lab/DepartmentForm.resx b/db_lab/DepartmentForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/db_lab/DepartmentForm.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/db_lab/DepartmentRepository.cs b/db_lab/DepartmentRepository.cs new file mode 100644 index 0000000..d2c26ca --- /dev/null +++ b/db_lab/DepartmentRepository.cs @@ -0,0 +1,84 @@ +using Npgsql; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using Npgsql; +using System.Threading.Tasks; + +namespace db_lab +{ + public class DepartmentRepository + { + private NpgsqlConnection connection; + + public DepartmentRepository(string connectionString) + { + this.connection = new NpgsqlConnection(connectionString); + } + + public DataTable ReadDepartments(int pageSize, int pageNumber) + { + string query = $"SELECT * FROM Department ORDER BY code LIMIT {pageSize} OFFSET {(pageNumber - 1) * pageSize}"; + NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection); + DataTable dt = new DataTable(); + da.Fill(dt); + return dt; + } + + public void DeleteDepartment(int code) + { + string query = $"DELETE FROM Department WHERE code = {code}"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public void AddDepartment(int code, string name, int floor, int creatingUserId, int buildingId) + { + string query = "INSERT INTO Department (code, name, floor, creating_user_id, building_id) VALUES (@code, @name, @floor, @creating_user_id, @building_id)"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + cmd.Parameters.AddWithValue("code", code); + cmd.Parameters.AddWithValue("name", name); + cmd.Parameters.AddWithValue("floor", floor); + cmd.Parameters.AddWithValue("creating_user_id", creatingUserId); + cmd.Parameters.AddWithValue("building_id", buildingId); + + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public void UpdateDepartment(int code, string name, int floor, int creatingUserId, int buildingId) + { + string query = "UPDATE Department SET name = @name, floor = @floor, creating_user_id = @creating_user_id, building_id = @building_id WHERE code = @code"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + cmd.Parameters.AddWithValue("code", code); + cmd.Parameters.AddWithValue("name", name); + cmd.Parameters.AddWithValue("floor", floor); + cmd.Parameters.AddWithValue("creating_user_id", creatingUserId); + cmd.Parameters.AddWithValue("building_id", buildingId); + + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public DataRow GetDepartmentByCode(int code) + { + string query = $"SELECT * FROM Department WHERE code = {code}"; + NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection); + DataTable dt = new DataTable(); + da.Fill(dt); + return dt.Rows.Count > 0 ? dt.Rows[0] : null; + } + } +} diff --git a/db_lab/EditDepartmentForm.Designer.cs b/db_lab/EditDepartmentForm.Designer.cs new file mode 100644 index 0000000..6f5f5e6 --- /dev/null +++ b/db_lab/EditDepartmentForm.Designer.cs @@ -0,0 +1,171 @@ +namespace db_lab +{ + partial class EditDepartmentForm + { + /// + /// 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.textBoxCode = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxFloor = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBoxCreatingUserId = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.textBoxBuildingId = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxCode + // + this.textBoxCode.Location = new System.Drawing.Point(13, 13); + this.textBoxCode.Name = "textBoxCode"; + this.textBoxCode.Size = new System.Drawing.Size(100, 20); + this.textBoxCode.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(129, 19); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(67, 13); + this.label1.TabIndex = 1; + this.label1.Text = "textBoxCode"; + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(13, 40); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(100, 20); + this.textBoxName.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(132, 46); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(70, 13); + this.label2.TabIndex = 3; + this.label2.Text = "textBoxName"; + // + // textBoxFloor + // + this.textBoxFloor.Location = new System.Drawing.Point(13, 67); + this.textBoxFloor.Name = "textBoxFloor"; + this.textBoxFloor.Size = new System.Drawing.Size(100, 20); + this.textBoxFloor.TabIndex = 4; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(132, 73); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(65, 13); + this.label3.TabIndex = 5; + this.label3.Text = "textBoxFloor"; + // + // textBoxCreatingUserId + // + this.textBoxCreatingUserId.Location = new System.Drawing.Point(13, 94); + this.textBoxCreatingUserId.Name = "textBoxCreatingUserId"; + this.textBoxCreatingUserId.Size = new System.Drawing.Size(100, 20); + this.textBoxCreatingUserId.TabIndex = 6; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(135, 100); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(112, 13); + this.label4.TabIndex = 7; + this.label4.Text = "textBoxCreatingUserId"; + // + // textBoxBuildingId + // + this.textBoxBuildingId.Location = new System.Drawing.Point(13, 121); + this.textBoxBuildingId.Name = "textBoxBuildingId"; + this.textBoxBuildingId.Size = new System.Drawing.Size(100, 20); + this.textBoxBuildingId.TabIndex = 8; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(132, 127); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(88, 13); + this.label5.TabIndex = 9; + this.label5.Text = "textBoxBuildingId"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(13, 148); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(234, 62); + this.button1.TabIndex = 10; + this.button1.Text = "Save"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.btnSave_Click); + // + // EditDepartmentForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(256, 218); + this.Controls.Add(this.button1); + this.Controls.Add(this.label5); + this.Controls.Add(this.textBoxBuildingId); + this.Controls.Add(this.label4); + this.Controls.Add(this.textBoxCreatingUserId); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBoxFloor); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxCode); + this.Name = "EditDepartmentForm"; + this.Text = "EditDepartmentForm"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxCode; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBoxFloor; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBoxCreatingUserId; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox textBoxBuildingId; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/db_lab/EditDepartmentForm.cs b/db_lab/EditDepartmentForm.cs new file mode 100644 index 0000000..bf66eab --- /dev/null +++ b/db_lab/EditDepartmentForm.cs @@ -0,0 +1,61 @@ +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 db_lab +{ + public partial class EditDepartmentForm : Form + { + private DepartmentRepository departmentRepository; + private int? departmentCode; + + public EditDepartmentForm(DepartmentRepository departmentRepository, int? departmentCode = null) + { + InitializeComponent(); + this.departmentRepository = departmentRepository; + this.departmentCode = departmentCode; + if (departmentCode.HasValue) + { + LoadRecordData(departmentCode.Value); + } + } + + private void LoadRecordData(int code) + { + DataRow row = departmentRepository.GetDepartmentByCode(code); + if (row != null) + { + textBoxCode.Text = row["code"].ToString(); + textBoxName.Text = row["name"].ToString(); + textBoxFloor.Text = row["floor"].ToString(); + textBoxCreatingUserId.Text = row["creating_user_id"].ToString(); + textBoxBuildingId.Text = row["building_id"].ToString(); + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + int code = int.Parse(textBoxCode.Text); + string name = textBoxName.Text; + int floor = int.Parse(textBoxFloor.Text); + int creatingUserId = int.Parse(textBoxCreatingUserId.Text); + int buildingId = int.Parse(textBoxBuildingId.Text); + + if (departmentCode.HasValue) + { + departmentRepository.UpdateDepartment(code, name, floor, creatingUserId, buildingId); + } + else + { + departmentRepository.AddDepartment(code, name, floor, creatingUserId, buildingId); + } + this.Close(); + } + } +} diff --git a/db_lab/EditDepartmentForm.resx b/db_lab/EditDepartmentForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/db_lab/EditDepartmentForm.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/db_lab/EditEquipmentForm.Designer.cs b/db_lab/EditEquipmentForm.Designer.cs new file mode 100644 index 0000000..1b42c85 --- /dev/null +++ b/db_lab/EditEquipmentForm.Designer.cs @@ -0,0 +1,149 @@ +namespace db_lab +{ + partial class EditEquipmentForm + { + /// + /// 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.textBoxIpAddress = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxSshSettings = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBoxRoomId = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxIpAddress + // + this.textBoxIpAddress.Location = new System.Drawing.Point(12, 12); + this.textBoxIpAddress.Name = "textBoxIpAddress"; + this.textBoxIpAddress.Size = new System.Drawing.Size(100, 20); + this.textBoxIpAddress.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(128, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(89, 13); + this.label1.TabIndex = 1; + this.label1.Text = "textBoxIpAddress"; + // + // textBoxSshSettings + // + this.textBoxSshSettings.Location = new System.Drawing.Point(13, 39); + this.textBoxSshSettings.Name = "textBoxSshSettings"; + this.textBoxSshSettings.Size = new System.Drawing.Size(100, 20); + this.textBoxSshSettings.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(131, 45); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(98, 13); + this.label2.TabIndex = 3; + this.label2.Text = "textBoxSshSettings"; + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(13, 66); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(100, 20); + this.textBoxName.TabIndex = 4; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(134, 72); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(70, 13); + this.label3.TabIndex = 5; + this.label3.Text = "textBoxName"; + // + // textBoxRoomId + // + this.textBoxRoomId.Location = new System.Drawing.Point(12, 93); + this.textBoxRoomId.Name = "textBoxRoomId"; + this.textBoxRoomId.Size = new System.Drawing.Size(100, 20); + this.textBoxRoomId.TabIndex = 6; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(134, 99); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(79, 13); + this.label4.TabIndex = 7; + this.label4.Text = "textBoxRoomId"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(13, 120); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(216, 58); + this.button1.TabIndex = 8; + this.button1.Text = "Save"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.btnSave_Click); + // + // EditEquipmentForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(229, 183); + this.Controls.Add(this.button1); + this.Controls.Add(this.label4); + this.Controls.Add(this.textBoxRoomId); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBoxSshSettings); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxIpAddress); + this.Name = "EditEquipmentForm"; + this.Text = "EditEquipmentForm"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxIpAddress; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBoxSshSettings; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBoxRoomId; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/db_lab/EditEquipmentForm.cs b/db_lab/EditEquipmentForm.cs new file mode 100644 index 0000000..1a4dc35 --- /dev/null +++ b/db_lab/EditEquipmentForm.cs @@ -0,0 +1,59 @@ +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 db_lab +{ + public partial class EditEquipmentForm : Form + { + private EquipmentRepository equipmentRepository; + private int? equipmentId; + + public EditEquipmentForm(EquipmentRepository equipmentRepository, int? equipmentId = null) + { + InitializeComponent(); + this.equipmentRepository = equipmentRepository; + this.equipmentId = equipmentId; + if (equipmentId.HasValue) + { + LoadRecordData(equipmentId.Value); + } + } + + private void LoadRecordData(int id) + { + DataRow row = equipmentRepository.GetEquipmentById(id); + if (row != null) + { + textBoxIpAddress.Text = row["ip_address"].ToString(); + textBoxSshSettings.Text = row["ssh_settings"].ToString(); + textBoxName.Text = row["name"].ToString(); + textBoxRoomId.Text = row["room_id"].ToString(); + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + string ipAddress = textBoxIpAddress.Text; + string sshSettings = textBoxSshSettings.Text; + string name = textBoxName.Text; + int roomId = int.Parse(textBoxRoomId.Text); + + if (equipmentId.HasValue) + { + equipmentRepository.UpdateEquipment(equipmentId.Value, ipAddress, sshSettings, name, roomId); + } + else + { + equipmentRepository.AddEquipment(ipAddress, sshSettings, name, roomId); + } + this.Close(); + } + } +} diff --git a/db_lab/EditEquipmentForm.resx b/db_lab/EditEquipmentForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/db_lab/EditEquipmentForm.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/db_lab/EditFormBuilding.Designer.cs b/db_lab/EditFormBuilding.Designer.cs new file mode 100644 index 0000000..39881dc --- /dev/null +++ b/db_lab/EditFormBuilding.Designer.cs @@ -0,0 +1,149 @@ +namespace db_lab +{ + partial class EditFormBuilding + { + /// + /// 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.textBoxFloorCount = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxAddress = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxCreatingUserId = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBoxBuildingType = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxFloorCount + // + this.textBoxFloorCount.Location = new System.Drawing.Point(12, 12); + this.textBoxFloorCount.Name = "textBoxFloorCount"; + this.textBoxFloorCount.Size = new System.Drawing.Size(100, 20); + this.textBoxFloorCount.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(133, 18); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(93, 13); + this.label1.TabIndex = 1; + this.label1.Text = "textBoxFloorCount"; + // + // textBoxAddress + // + this.textBoxAddress.Location = new System.Drawing.Point(13, 39); + this.textBoxAddress.Name = "textBoxAddress"; + this.textBoxAddress.Size = new System.Drawing.Size(100, 20); + this.textBoxAddress.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(136, 45); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(80, 13); + this.label2.TabIndex = 3; + this.label2.Text = "textBoxAddress"; + // + // textBoxCreatingUserId + // + this.textBoxCreatingUserId.Location = new System.Drawing.Point(13, 66); + this.textBoxCreatingUserId.Name = "textBoxCreatingUserId"; + this.textBoxCreatingUserId.Size = new System.Drawing.Size(100, 20); + this.textBoxCreatingUserId.TabIndex = 4; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(139, 72); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(112, 13); + this.label3.TabIndex = 5; + this.label3.Text = "textBoxCreatingUserId"; + // + // textBoxBuildingType + // + this.textBoxBuildingType.Location = new System.Drawing.Point(13, 93); + this.textBoxBuildingType.Name = "textBoxBuildingType"; + this.textBoxBuildingType.Size = new System.Drawing.Size(100, 20); + this.textBoxBuildingType.TabIndex = 6; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(139, 99); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(103, 13); + this.label4.TabIndex = 7; + this.label4.Text = "textBoxBuildingType"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(13, 120); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(238, 80); + this.button1.TabIndex = 8; + this.button1.Text = "Save"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.btnSave_Click); + // + // EditFormBuilding + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(263, 214); + this.Controls.Add(this.button1); + this.Controls.Add(this.label4); + this.Controls.Add(this.textBoxBuildingType); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBoxCreatingUserId); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBoxAddress); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxFloorCount); + this.Name = "EditFormBuilding"; + this.Text = "EditFormBuilding"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxFloorCount; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBoxAddress; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBoxCreatingUserId; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBoxBuildingType; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/db_lab/EditFormBuilding.cs b/db_lab/EditFormBuilding.cs new file mode 100644 index 0000000..da501e0 --- /dev/null +++ b/db_lab/EditFormBuilding.cs @@ -0,0 +1,59 @@ +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 db_lab +{ + public partial class EditFormBuilding : Form + { + private BuildingRepository buildingRepository; + private int? recordId; + + public EditFormBuilding(BuildingRepository buildingRepository, int? recordId = null) + { + this.buildingRepository = buildingRepository; + this.recordId = recordId; + InitializeComponent(); + if (recordId.HasValue) + { + LoadRecordData(recordId.Value); + } + } + + private void LoadRecordData(int id) + { + DataRow row = buildingRepository.GetBuildingById(id); + if (row != null) + { + textBoxFloorCount.Text = row["floor_count"].ToString(); + textBoxAddress.Text = row["address"].ToString(); + textBoxCreatingUserId.Text = row["creating_user_id"].ToString(); + textBoxBuildingType.Text = row["building_type"].ToString(); + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + int floorCount = int.Parse(textBoxFloorCount.Text); + string address = textBoxAddress.Text; + int creatingUserId = int.Parse(textBoxCreatingUserId.Text); + string buildingType = textBoxBuildingType.Text; + + if (recordId.HasValue) + { + buildingRepository.UpdateBuilding(recordId.Value, floorCount, address, creatingUserId, buildingType); + } + else + { + buildingRepository.AddBuilding(floorCount, address, creatingUserId, buildingType); + } + this.Close(); + } + } +} diff --git a/db_lab/EditFormBuilding.resx b/db_lab/EditFormBuilding.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/db_lab/EditFormBuilding.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/db_lab/EditRoomForm.Designer.cs b/db_lab/EditRoomForm.Designer.cs new file mode 100644 index 0000000..b8f4318 --- /dev/null +++ b/db_lab/EditRoomForm.Designer.cs @@ -0,0 +1,193 @@ +namespace db_lab +{ + partial class EditRoomForm + { + /// + /// 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.textBoxRoomType = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxRoomNumber = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxFloor = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBoxCreatingUserId = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.textBoxBuildingId = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.textBoxRoomName = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxRoomType + // + this.textBoxRoomType.Location = new System.Drawing.Point(13, 13); + this.textBoxRoomType.Name = "textBoxRoomType"; + this.textBoxRoomType.Size = new System.Drawing.Size(100, 20); + this.textBoxRoomType.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(131, 19); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(94, 13); + this.label1.TabIndex = 1; + this.label1.Text = "textBoxRoomType"; + // + // textBoxRoomNumber + // + this.textBoxRoomNumber.Location = new System.Drawing.Point(13, 40); + this.textBoxRoomNumber.Name = "textBoxRoomNumber"; + this.textBoxRoomNumber.Size = new System.Drawing.Size(100, 20); + this.textBoxRoomNumber.TabIndex = 2; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(134, 46); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(107, 13); + this.label2.TabIndex = 3; + this.label2.Text = "textBoxRoomNumber"; + // + // textBoxFloor + // + this.textBoxFloor.Location = new System.Drawing.Point(13, 67); + this.textBoxFloor.Name = "textBoxFloor"; + this.textBoxFloor.Size = new System.Drawing.Size(100, 20); + this.textBoxFloor.TabIndex = 4; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(137, 73); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(65, 13); + this.label3.TabIndex = 5; + this.label3.Text = "textBoxFloor"; + // + // textBoxCreatingUserId + // + this.textBoxCreatingUserId.Location = new System.Drawing.Point(13, 94); + this.textBoxCreatingUserId.Name = "textBoxCreatingUserId"; + this.textBoxCreatingUserId.Size = new System.Drawing.Size(100, 20); + this.textBoxCreatingUserId.TabIndex = 6; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(134, 100); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(112, 13); + this.label4.TabIndex = 7; + this.label4.Text = "textBoxCreatingUserId"; + // + // textBoxBuildingId + // + this.textBoxBuildingId.Location = new System.Drawing.Point(13, 121); + this.textBoxBuildingId.Name = "textBoxBuildingId"; + this.textBoxBuildingId.Size = new System.Drawing.Size(100, 20); + this.textBoxBuildingId.TabIndex = 8; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(134, 127); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(88, 13); + this.label5.TabIndex = 9; + this.label5.Text = "textBoxBuildingId"; + // + // textBoxRoomName + // + this.textBoxRoomName.Location = new System.Drawing.Point(13, 148); + this.textBoxRoomName.Name = "textBoxRoomName"; + this.textBoxRoomName.Size = new System.Drawing.Size(100, 20); + this.textBoxRoomName.TabIndex = 10; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(137, 154); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(98, 13); + this.label6.TabIndex = 11; + this.label6.Text = "textBoxRoomName"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(13, 175); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(233, 58); + this.button1.TabIndex = 12; + this.button1.Text = "Save"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.btnSave_Click); + // + // EditRoomForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(263, 242); + this.Controls.Add(this.button1); + this.Controls.Add(this.label6); + this.Controls.Add(this.textBoxRoomName); + this.Controls.Add(this.label5); + this.Controls.Add(this.textBoxBuildingId); + this.Controls.Add(this.label4); + this.Controls.Add(this.textBoxCreatingUserId); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBoxFloor); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBoxRoomNumber); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxRoomType); + this.Name = "EditRoomForm"; + this.Text = "EditRoomForm"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxRoomType; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBoxRoomNumber; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBoxFloor; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBoxCreatingUserId; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox textBoxBuildingId; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox textBoxRoomName; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/db_lab/EditRoomForm.cs b/db_lab/EditRoomForm.cs new file mode 100644 index 0000000..13ecd3f --- /dev/null +++ b/db_lab/EditRoomForm.cs @@ -0,0 +1,63 @@ +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 db_lab +{ + public partial class EditRoomForm : Form + { + private RoomRepository roomRepository; + private int? roomId; + + public EditRoomForm(RoomRepository roomRepository, int? roomId = null) + { + InitializeComponent(); + this.roomRepository = roomRepository; + this.roomId = roomId; + if (roomId.HasValue) + { + LoadRecordData(roomId.Value); + } + } + + private void LoadRecordData(int id) + { + DataRow row = roomRepository.GetRoomById(id); + if (row != null) + { + textBoxRoomType.Text = row["room_type"].ToString(); + textBoxRoomNumber.Text = row["room_number"].ToString(); + textBoxFloor.Text = row["floor"].ToString(); + textBoxCreatingUserId.Text = row["creating_user_id"].ToString(); + textBoxBuildingId.Text = row["building_id"].ToString(); + textBoxRoomName.Text = row["room_name"].ToString(); + } + } + + private void btnSave_Click(object sender, EventArgs e) + { + string roomType = textBoxRoomType.Text; + int roomNumber = int.Parse(textBoxRoomNumber.Text); + int floor = int.Parse(textBoxFloor.Text); + int creatingUserId = int.Parse(textBoxCreatingUserId.Text); + int buildingId = int.Parse(textBoxBuildingId.Text); + string roomName = textBoxRoomName.Text; + + if (roomId.HasValue) + { + roomRepository.UpdateRoom(roomId.Value, roomType, roomNumber, floor, creatingUserId, buildingId, roomName); + } + else + { + roomRepository.AddRoom(roomType, roomNumber, floor, creatingUserId, buildingId, roomName); + } + this.Close(); + } + } +} diff --git a/db_lab/EditRoomForm.resx b/db_lab/EditRoomForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/db_lab/EditRoomForm.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/db_lab/EquipmentForm.Designer.cs b/db_lab/EquipmentForm.Designer.cs new file mode 100644 index 0000000..c383f41 --- /dev/null +++ b/db_lab/EquipmentForm.Designer.cs @@ -0,0 +1,137 @@ +namespace db_lab +{ + partial class EquipmentForm + { + /// + /// 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.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.button1); + this.flowLayoutPanel1.Controls.Add(this.button2); + this.flowLayoutPanel1.Controls.Add(this.button3); + this.flowLayoutPanel1.Controls.Add(this.button4); + this.flowLayoutPanel1.Controls.Add(this.button5); + this.flowLayoutPanel1.Location = new System.Drawing.Point(688, 12); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(100, 426); + this.flowLayoutPanel1.TabIndex = 0; + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Location = new System.Drawing.Point(13, 13); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.Size = new System.Drawing.Size(655, 425); + this.dataGridView1.TabIndex = 1; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(3, 3); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Next"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.btnNext_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(3, 32); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 1; + this.button2.Text = "Prev"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.btnPrev_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(3, 61); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 2; + this.button3.Text = "Delete"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.btnDelete_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(3, 90); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 3; + this.button4.Text = "Add"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.btnAdd_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(3, 119); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(75, 23); + this.button5.TabIndex = 4; + this.button5.Text = "Edit"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.btnEdit_Click); + // + // EquipmentForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.dataGridView1); + this.Controls.Add(this.flowLayoutPanel1); + this.Name = "EquipmentForm"; + this.Text = "EquipmentForm"; + this.flowLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + } +} \ No newline at end of file diff --git a/db_lab/EquipmentForm.cs b/db_lab/EquipmentForm.cs new file mode 100644 index 0000000..7dcecad --- /dev/null +++ b/db_lab/EquipmentForm.cs @@ -0,0 +1,79 @@ +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 db_lab +{ + public partial class EquipmentForm : Form + { + private EquipmentRepository equipmentRepository; + private int pageSize = 10; + private int currentPage = 1; + + public EquipmentForm(string connectionString) + { + InitializeComponent(); + equipmentRepository = new EquipmentRepository(connectionString); + LoadData(); + } + + private void LoadData() + { + DataTable dt = equipmentRepository.ReadEquipments(pageSize, currentPage); + dataGridView1.DataSource = dt; + } + + private void btnNext_Click(object sender, EventArgs e) + { + currentPage++; + LoadData(); + } + + private void btnPrev_Click(object sender, EventArgs e) + { + if (currentPage > 1) + { + currentPage--; + LoadData(); + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow row in dataGridView1.SelectedRows) + { + int id = Convert.ToInt32(row.Cells["id"].Value); + equipmentRepository.DeleteEquipment(id); + } + LoadData(); + } + + private void btnAdd_Click(object sender, EventArgs e) + { + EditEquipmentForm editForm = new EditEquipmentForm(equipmentRepository); + editForm.ShowDialog(); + LoadData(); + } + + private void btnEdit_Click(object sender, EventArgs e) + { + if (dataGridView1.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["id"].Value); + EditEquipmentForm editForm = new EditEquipmentForm(equipmentRepository, id); + editForm.ShowDialog(); + LoadData(); + } + else + { + MessageBox.Show("Please select a single row to edit."); + } + } + } +} diff --git a/db_lab/EquipmentForm.resx b/db_lab/EquipmentForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/db_lab/EquipmentForm.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/db_lab/EquipmentRepository.cs b/db_lab/EquipmentRepository.cs new file mode 100644 index 0000000..d01cd1d --- /dev/null +++ b/db_lab/EquipmentRepository.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Npgsql; + +namespace db_lab +{ + public class EquipmentRepository + { + private NpgsqlConnection connection; + + public EquipmentRepository(string connectionString) + { + this.connection = new NpgsqlConnection(connectionString); + } + + public DataTable ReadEquipments(int pageSize, int pageNumber) + { + string query = $"SELECT * FROM Equipment ORDER BY id LIMIT {pageSize} OFFSET {(pageNumber - 1) * pageSize}"; + NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection); + DataTable dt = new DataTable(); + da.Fill(dt); + return dt; + } + + public void DeleteEquipment(int id) + { + string query = $"DELETE FROM Equipment WHERE id = {id}"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public void AddEquipment(string ipAddress, string sshSettings, string name, int roomId) + { + string query = "INSERT INTO Equipment (ip_address, ssh_settings, name, room_id) VALUES (@ip_address, @ssh_settings, @name, @room_id)"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + cmd.Parameters.AddWithValue("ip_address", ipAddress); + cmd.Parameters.AddWithValue("ssh_settings", sshSettings ?? (object)DBNull.Value); + cmd.Parameters.AddWithValue("name", name); + cmd.Parameters.AddWithValue("room_id", roomId); + + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public void UpdateEquipment(int id, string ipAddress, string sshSettings, string name, int roomId) + { + string query = "UPDATE Equipment SET ip_address = @ip_address, ssh_settings = @ssh_settings, name = @name, room_id = @room_id WHERE id = @id"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + cmd.Parameters.AddWithValue("ip_address", ipAddress); + cmd.Parameters.AddWithValue("ssh_settings", sshSettings ?? (object)DBNull.Value); + cmd.Parameters.AddWithValue("name", name); + cmd.Parameters.AddWithValue("room_id", roomId); + cmd.Parameters.AddWithValue("id", id); + + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public DataRow GetEquipmentById(int id) + { + string query = $"SELECT * FROM Equipment WHERE id = {id}"; + NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection); + DataTable dt = new DataTable(); + da.Fill(dt); + return dt.Rows.Count > 0 ? dt.Rows[0] : null; + } + } +} diff --git a/db_lab/Form1.Designer.cs b/db_lab/Form1.Designer.cs index 92a7230..eb0dcae 100644 --- a/db_lab/Form1.Designer.cs +++ b/db_lab/Form1.Designer.cs @@ -33,8 +33,10 @@ this.dataBtn = new System.Windows.Forms.Button(); this.raportBtn = new System.Windows.Forms.Button(); this.aboutBtn = new System.Windows.Forms.Button(); - this.exitBtn = new System.Windows.Forms.Button(); this.dbConnectBtn = new System.Windows.Forms.Button(); + this.exitBtn = new System.Windows.Forms.Button(); + this.buildingButton = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); this.flowLayoutPanel1.SuspendLayout(); this.SuspendLayout(); // @@ -47,6 +49,8 @@ this.flowLayoutPanel1.Controls.Add(this.aboutBtn); this.flowLayoutPanel1.Controls.Add(this.dbConnectBtn); this.flowLayoutPanel1.Controls.Add(this.exitBtn); + this.flowLayoutPanel1.Controls.Add(this.buildingButton); + this.flowLayoutPanel1.Controls.Add(this.button1); this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; @@ -93,16 +97,6 @@ this.aboutBtn.UseVisualStyleBackColor = true; this.aboutBtn.Click += new System.EventHandler(this.aboutBtn_Click); // - // exitBtn - // - this.exitBtn.Location = new System.Drawing.Point(528, 3); - this.exitBtn.Name = "exitBtn"; - this.exitBtn.Size = new System.Drawing.Size(75, 23); - this.exitBtn.TabIndex = 4; - this.exitBtn.Text = "Выход"; - this.exitBtn.UseVisualStyleBackColor = true; - this.exitBtn.Click += new System.EventHandler(this.exitBtn_Click); - // // dbConnectBtn // this.dbConnectBtn.AutoSize = true; @@ -115,6 +109,36 @@ this.dbConnectBtn.UseVisualStyleBackColor = true; this.dbConnectBtn.Click += new System.EventHandler(this.dbConnectBtn_Click); // + // exitBtn + // + this.exitBtn.Location = new System.Drawing.Point(528, 3); + this.exitBtn.Name = "exitBtn"; + this.exitBtn.Size = new System.Drawing.Size(75, 23); + this.exitBtn.TabIndex = 4; + this.exitBtn.Text = "Выход"; + this.exitBtn.UseVisualStyleBackColor = true; + this.exitBtn.Click += new System.EventHandler(this.exitBtn_Click); + // + // buildingButton + // + this.buildingButton.Location = new System.Drawing.Point(609, 3); + this.buildingButton.Name = "buildingButton"; + this.buildingButton.Size = new System.Drawing.Size(75, 23); + this.buildingButton.TabIndex = 6; + this.buildingButton.Text = "CRUD"; + this.buildingButton.UseVisualStyleBackColor = true; + this.buildingButton.Click += new System.EventHandler(this.buildingButton_Click); + this.buildingButton.MouseClick += new System.Windows.Forms.MouseEventHandler(this.buildingButton_MouseClick); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(690, 3); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 7; + this.button1.Text = "Экспорт"; + this.button1.UseVisualStyleBackColor = true; + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -139,6 +163,8 @@ private System.Windows.Forms.Button aboutBtn; private System.Windows.Forms.Button exitBtn; private System.Windows.Forms.Button dbConnectBtn; + private System.Windows.Forms.Button buildingButton; + private System.Windows.Forms.Button button1; } } diff --git a/db_lab/Form1.cs b/db_lab/Form1.cs index e8a5232..c26b39d 100644 --- a/db_lab/Form1.cs +++ b/db_lab/Form1.cs @@ -13,7 +13,7 @@ namespace db_lab { public partial class Form1 : Form { - string connectionString = "Server=192.168.1.218;Port=5432;UserId=postgres;Password=postgres;Database=SQL_Servers;"; + string connectionString = "Server=172.27.128.1;Port=5432;UserId=postgres;Password=postgres;Database=SQL_Servers;"; NpgsqlConnection connection; public Form1() @@ -67,5 +67,17 @@ namespace db_lab MessageBox.Show($"Error! Db connection was fatal! Log: {ex.Message}"); } } + + private void buildingButton_MouseClick(object sender, MouseEventArgs e) + { + var crudForm = new CRUDForm(this.connectionString); + crudForm.Show(); + } + + private void buildingButton_Click(object sender, EventArgs e) + { + var crudForm = new CRUDForm(this.connectionString); + crudForm.Show(); + } } } diff --git a/db_lab/RoomForm.Designer.cs b/db_lab/RoomForm.Designer.cs new file mode 100644 index 0000000..72d9d0f --- /dev/null +++ b/db_lab/RoomForm.Designer.cs @@ -0,0 +1,137 @@ +namespace db_lab +{ + partial class RoomForm + { + /// + /// 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.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.flowLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // dataGridView1 + // + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Location = new System.Drawing.Point(12, 12); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.Size = new System.Drawing.Size(677, 431); + this.dataGridView1.TabIndex = 0; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.button1); + this.flowLayoutPanel1.Controls.Add(this.button2); + this.flowLayoutPanel1.Controls.Add(this.button3); + this.flowLayoutPanel1.Controls.Add(this.button4); + this.flowLayoutPanel1.Controls.Add(this.button5); + this.flowLayoutPanel1.Location = new System.Drawing.Point(695, 12); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(93, 431); + this.flowLayoutPanel1.TabIndex = 1; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(3, 3); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 0; + this.button1.Text = "Next"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.btnNext_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(3, 32); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 23); + this.button2.TabIndex = 1; + this.button2.Text = "Prev"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.btnPrev_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(3, 61); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 2; + this.button3.Text = "Delete"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.btnDelete_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(3, 90); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 3; + this.button4.Text = "Add"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.btnAdd_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(3, 119); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(75, 23); + this.button5.TabIndex = 4; + this.button5.Text = "Edit"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.btnEdit_Click); + // + // RoomForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.flowLayoutPanel1); + this.Controls.Add(this.dataGridView1); + this.Name = "RoomForm"; + this.Text = "RoomForm"; + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.flowLayoutPanel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + } +} \ No newline at end of file diff --git a/db_lab/RoomForm.cs b/db_lab/RoomForm.cs new file mode 100644 index 0000000..16bf08a --- /dev/null +++ b/db_lab/RoomForm.cs @@ -0,0 +1,79 @@ +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 db_lab +{ + public partial class RoomForm : Form + { + private RoomRepository roomRepository; + private int pageSize = 10; + private int currentPage = 1; + + public RoomForm(string connectionString) + { + InitializeComponent(); + roomRepository = new RoomRepository(connectionString); + LoadData(); + } + + private void LoadData() + { + DataTable dt = roomRepository.ReadRooms(pageSize, currentPage); + dataGridView1.DataSource = dt; + } + + private void btnNext_Click(object sender, EventArgs e) + { + currentPage++; + LoadData(); + } + + private void btnPrev_Click(object sender, EventArgs e) + { + if (currentPage > 1) + { + currentPage--; + LoadData(); + } + } + + private void btnDelete_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow row in dataGridView1.SelectedRows) + { + int id = Convert.ToInt32(row.Cells["id"].Value); + roomRepository.DeleteRoom(id); + } + LoadData(); + } + + private void btnAdd_Click(object sender, EventArgs e) + { + EditRoomForm editForm = new EditRoomForm(roomRepository); + editForm.ShowDialog(); + LoadData(); + } + + private void btnEdit_Click(object sender, EventArgs e) + { + if (dataGridView1.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells["id"].Value); + EditRoomForm editForm = new EditRoomForm(roomRepository, id); + editForm.ShowDialog(); + LoadData(); + } + else + { + MessageBox.Show("Please select a single row to edit."); + } + } + } +} diff --git a/db_lab/RoomForm.resx b/db_lab/RoomForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/db_lab/RoomForm.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/db_lab/RoomRepository.cs b/db_lab/RoomRepository.cs new file mode 100644 index 0000000..f2653ca --- /dev/null +++ b/db_lab/RoomRepository.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Npgsql; + +namespace db_lab +{ + public class RoomRepository + { + private NpgsqlConnection connection; + + public RoomRepository(string connectionString) + { + this.connection = new NpgsqlConnection(connectionString); + } + + public DataTable ReadRooms(int pageSize, int pageNumber) + { + string query = $"SELECT * FROM Rooms ORDER BY id LIMIT {pageSize} OFFSET {(pageNumber - 1) * pageSize}"; + NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection); + DataTable dt = new DataTable(); + da.Fill(dt); + return dt; + } + + public void DeleteRoom(int id) + { + string query = $"DELETE FROM Rooms WHERE id = {id}"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public void AddRoom(string roomType, int roomNumber, int floor, int creatingUserId, int buildingId, string roomName) + { + string query = "INSERT INTO Rooms (room_type, room_number, floor, creating_user_id, building_id, room_name) VALUES (@room_type, @room_number, @floor, @creating_user_id, @building_id, @room_name)"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + cmd.Parameters.AddWithValue("room_type", roomType); + cmd.Parameters.AddWithValue("room_number", roomNumber); + cmd.Parameters.AddWithValue("floor", floor); + cmd.Parameters.AddWithValue("creating_user_id", creatingUserId); + cmd.Parameters.AddWithValue("building_id", buildingId); + cmd.Parameters.AddWithValue("room_name", roomName); + + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public void UpdateRoom(int id, string roomType, int roomNumber, int floor, int creatingUserId, int buildingId, string roomName) + { + string query = "UPDATE Rooms SET room_type = @room_type, room_number = @room_number, floor = @floor, creating_user_id = @creating_user_id, building_id = @building_id, room_name = @room_name WHERE id = @id"; + using (var cmd = new NpgsqlCommand(query, connection)) + { + cmd.Parameters.AddWithValue("room_type", roomType); + cmd.Parameters.AddWithValue("room_number", roomNumber); + cmd.Parameters.AddWithValue("floor", floor); + cmd.Parameters.AddWithValue("creating_user_id", creatingUserId); + cmd.Parameters.AddWithValue("building_id", buildingId); + cmd.Parameters.AddWithValue("room_name", roomName); + cmd.Parameters.AddWithValue("id", id); + + connection.Open(); + cmd.ExecuteNonQuery(); + connection.Close(); + } + } + + public DataRow GetRoomById(int id) + { + string query = $"SELECT * FROM Rooms WHERE id = {id}"; + NpgsqlDataAdapter da = new NpgsqlDataAdapter(query, connection); + DataTable dt = new DataTable(); + da.Fill(dt); + return dt.Rows.Count > 0 ? dt.Rows[0] : null; + } + } +} diff --git a/db_lab/bin/Debug/db_lab.exe b/db_lab/bin/Debug/db_lab.exe index 6ed17b1104ee24d19b914001adff5006fac20dd0..4be2479fac7834a26ebe446f441d0053773c0b41 100644 GIT binary patch literal 48128 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 Rz>Bv3an$`u%l|D8{13MgHDCY$ diff --git a/db_lab/bin/Debug/db_lab.pdb b/db_lab/bin/Debug/db_lab.pdb index ffdd71d6c7e898b253f5d784b14a0d97ec12ba42..4b313fea5c067b2c33a4c186d42f4c45b9308784 100644 GIT binary patch literal 146944 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 literal 54784 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 diff --git a/db_lab/db_lab.csproj b/db_lab/db_lab.csproj index eeb78b2..d135228 100644 --- a/db_lab/db_lab.csproj +++ b/db_lab/db_lab.csproj @@ -95,12 +95,62 @@ + + Form + + + BuildingRepository.cs + + + Form + + + CRUDForm.cs + Form DataForm.cs + + Form + + + DepartmentForm.cs + + + + Form + + + EditDepartmentForm.cs + + + Form + + + EditEquipmentForm.cs + + + Form + + + EditFormBuilding.cs + + + Form + + + EditRoomForm.cs + + + Form + + + EquipmentForm.cs + + Form @@ -121,9 +171,37 @@ RaportForm.cs + + Form + + + RoomForm.cs + + + + CRUDForm.cs + DataForm.cs + + DepartmentForm.cs + + + EditDepartmentForm.cs + + + EditEquipmentForm.cs + + + EditFormBuilding.cs + + + EditRoomForm.cs + + + EquipmentForm.cs + Form1.cs @@ -139,6 +217,9 @@ RaportForm.cs + + RoomForm.cs + SettingsSingleFileGenerator diff --git a/db_lab/obj/Debug/db_lab.CRUDForm.resources b/db_lab/obj/Debug/db_lab.CRUDForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/db_lab/obj/Debug/db_lab.DepartmentForm.resources b/db_lab/obj/Debug/db_lab.DepartmentForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/db_lab/obj/Debug/db_lab.EditDepartmentForm.resources b/db_lab/obj/Debug/db_lab.EditDepartmentForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/db_lab/obj/Debug/db_lab.EditEquipmentForm.resources b/db_lab/obj/Debug/db_lab.EditEquipmentForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/db_lab/obj/Debug/db_lab.EditFormBuilding.resources b/db_lab/obj/Debug/db_lab.EditFormBuilding.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/db_lab/obj/Debug/db_lab.EditRoomForm.resources b/db_lab/obj/Debug/db_lab.EditRoomForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/db_lab/obj/Debug/db_lab.EquipmentForm.resources b/db_lab/obj/Debug/db_lab.EquipmentForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/db_lab/obj/Debug/db_lab.RoomForm.resources b/db_lab/obj/Debug/db_lab.RoomForm.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 diff --git a/db_lab/obj/Debug/db_lab.csproj.CoreCompileInputs.cache b/db_lab/obj/Debug/db_lab.csproj.CoreCompileInputs.cache index 8112610..43c87d4 100644 --- a/db_lab/obj/Debug/db_lab.csproj.CoreCompileInputs.cache +++ b/db_lab/obj/Debug/db_lab.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -6cfe98626599e0585a6a4cbde9575a47698b081aa3748f1df4309e2ac8c0a680 +944491e2b148661396206da4f57aa1e690b8d9c434e41ee7e94081a5ed9feabd diff --git a/db_lab/obj/Debug/db_lab.csproj.FileListAbsolute.txt b/db_lab/obj/Debug/db_lab.csproj.FileListAbsolute.txt index 113a2e2..d3bb7d0 100644 --- a/db_lab/obj/Debug/db_lab.csproj.FileListAbsolute.txt +++ b/db_lab/obj/Debug/db_lab.csproj.FileListAbsolute.txt @@ -43,3 +43,11 @@ C:\Users\mit3t\source\repos\db_lab\db_lab\bin\Debug\System.ValueTuple.xml C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.csproj.CopyComplete C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.DataForm.resources C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.RaportForm.resources +C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.CRUDForm.resources +C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.EditFormBuilding.resources +C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.DepartmentForm.resources +C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.EditDepartmentForm.resources +C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.EditRoomForm.resources +C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.RoomForm.resources +C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.EditEquipmentForm.resources +C:\Users\mit3t\source\repos\db_lab\db_lab\obj\Debug\db_lab.EquipmentForm.resources diff --git a/db_lab/obj/Debug/db_lab.csproj.GenerateResource.cache b/db_lab/obj/Debug/db_lab.csproj.GenerateResource.cache index 733ee0f39c4f8271967705c3b64bf9d04975c289..d1353208c804b84f3e4bb8028ff2b58aa619c376 100644 GIT binary patch literal 694 zcmZQ$z2yePm7=aGnP44GrI|S?nR)3*_F|U<=|AE5 zanBvF+l5_H3lfV;a#Qor?ZqYo(i^|&fbBi7UU87!IQ8R_1({*lvGOX!3_*|?LHYT) zXuif22kG-ut)B4+5}R1`@S=!;)ISpN`tT5}UJPW9Yhh_-0T!>~kOY~)dbMsfB>f2C U(v3v|q_gIjq&Gw-ki)@Y*P}n-vt&=G&W%ciZL(%0F4+2(EtDd diff --git a/db_lab/obj/Debug/db_lab.exe b/db_lab/obj/Debug/db_lab.exe index 6ed17b1104ee24d19b914001adff5006fac20dd0..4be2479fac7834a26ebe446f441d0053773c0b41 100644 GIT binary patch literal 48128 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 Rz>Bv3an$`u%l|D8{13MgHDCY$ diff --git a/db_lab/obj/Debug/db_lab.pdb b/db_lab/obj/Debug/db_lab.pdb index ffdd71d6c7e898b253f5d784b14a0d97ec12ba42..4b313fea5c067b2c33a4c186d42f4c45b9308784 100644 GIT binary patch literal 146944 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 literal 54784 zcmeI53w%}8o$vPv5FRQeilT@ZASlm}ga82nLlO{>mpl{^g_Gn2QbH0>4i9Hgk53$5 zgVm|p+Kywf7u(LQpO)#xUY*i@9E%kD@z$w*S&Jj}RTc13FP);^?{Dq3PWA~0$cq}_ zEcoZQ_j<4Y|G(GzueI0OXLfZ(w63A9DwbV3s&x49?AZ&ZWsl3v%R8e--?9ZBF2nry zR&lvGBoEJ9=|lSONx*^KR;J$W&(iJ`Eiqwzw zvIK}Foeg&4uYaEkO&$^y>Jp7$=vTY3>Ex0oD z$)TNZPTK$I@9x|_eEe5teeDmAlr8bTe96HUN z(cOb?zF_s1pM3A~n@aEe!Px`%|9tp05BB@o%57Q4rSj=a+suLXlK-p!qwxHazYgg8 z%+t#Tz45!z%XZ!WLgDYSH^2SBi%ZY$^X5aZwz;C|42}y2+Dra#{`KKE->#hd*sdY# zUw`L`Z3E()zp?kVH-Gco)7uvveE!GJ_=enpzM*^g}Ft!c_YW=7K|P3FdS$v`CqgDqVL_e=eu{+KXu(T{Wkp1UHkrg z`;Mz4AB_F`n}_VXtNX_d9j3wQiX?HMz2twO;Ow2ZzWJxieplOX@%Bki-2JQPKNa6?z z@bCX|djIX;?Jx~aS0sr8?Ir*6SHI#-$X^(_c>ZJFZSOta^Yz-ZuRUx3Ghey?t&Kx& zp55zBF0!xb5uWyWc6eH0wv( zt2<1C(-leLKzqsmg?%$W-EhXVx#zxhZ~ZO9fA;*^n&{5izn@T%_5P<-^T##Zom6Q0 zro(Wcz2sk>_2{CTHvRRS@Sf1FuRNSzv18uW|Mk{2&)(PT3oAaZ{`%hf4%6UtMUpts zUh?1e+;6}9(s|eQykYlwd+*tH&ya6!IrrupuN^yc`PeS+-+W;1Ah`PpPdalvK?xOU=wz^O|3fT4s{8w3Hw> zTUuP}ICdMGrl5Bq2E0n$sl58x$MI3G{wneg>7p+?n4X( zwIC9URoAX)he|cLoLX0>y7DhBEsK<|S+O*C&eVm|P{_!-y6CDASJL%X*VRs1TbRpk zo7^c44UyI5H8)I&#iG^aYhsaxmg%jEsq~Afjl`-F#jH&(CTxodCl%9tO%KT3)p$m2 zRb9*K8j!fFPqoct2m{mm(1rG-(tL0xr_yeL?&rD(xD(t4egHYA=u@D9>^)loeTywE zy`g2$0cdg;&wCO|_rHro3P2^`nP$UQkji1{D_E3@$0UxGT<@Fv3yn6p4#nqFbxC#r#)f467zP0_5#}!vk zn&K)f7*|i6i#xUVyH6>uoxZY}y6_%ePS&CYH#Ec|tG)h>*SV#2H8qin7(-h_?qv}s3)K}~ z-=y%>^>ww8+Su&6%1Djpof!zzL_-xx@{5MoF_0(u&8n`wzG=LLk@Ye814jy6m+2LFojbpH>3c7H|LRv~JUh61#{d5I*5%4` zwpT`&=XHh$;)RaS@i=+i4Jw__(_Myfo;MtS=gx+w*E^n;RW~rbGLOLIW0ge#!LpQJ z=S(l-bTESosJ@eJxy7msZk!M1?>UtFm@9WiZFQ_VTvPpbk7IpkLlp z%9sgFf&6j~5H5YvcqOOtP|opE`Hg_eprue8YORw#jkP)>-pZZkgZZ0{j3-eUQ(M^@- zbaNuP`fUg$+Qty&<=N8CgN15eUn3J^&BcBB4?!k9jeh44?$;+IT`^8+0y06K4|(5;7$_kg)tqBySG5uxa`3UKh#>MOFWvd(Y&=Z5Y4%gSuVa`flmz^cOXcA_p zvFZ!6vs8^>cx7a5q(-xQ{FS$!!(jO8NJB$-Ma1x}qy_zp+OPgaePgIkXig}8PbmJZ z&;JRwe|toQ;oS49YsQ|;?>nCOYajs$__od-8nKwPO6TILZA#xIz!yKctOr-_F>D9& zb^W8Ozs8IZ)5)MLXTc!3V7(dVGIzLoYc(}cYsvC4>U%orl*Yw#b!NOu$WlrD8n>~| zbfUpJi!pK<)19L)%>2EpvsuAwthDMpkNR$hl*Yw#btYM&&L*j?w90JBIF!U^I($F9 zwbg8$7r6?96q@erLD4KkSJU1d;lonHITsz1-+ z@iF=(U6G@YH1d&tt0QUedCpdp*neh2o}OiuKO5R2<;DedQvFXh_0U?t0B|4(#YcjJ zz#=dQgf~Vv=YSV+zXZG(41?0ET5tq-2T0nuWFx)#J}AA}2}*C?0Hrqv!2+;L$kVJX zel94z7z#=+%0TJG6`2_mET8c=e+8tgLAwT98Z1|perDS4Tm%zzZe<@jfdt!dS*vK%6lj@0=fiR09^(tPlYwj zQ+;JHPo;HvD!=QX%b_ul@=?C3o9cfxr1b%}MxZ`@fTeMuc%XHPfu^rJz%xOgVAhTS zv+gcLPrXA>FLYS*Ha#0lp$*VO&{jzElXoBt2`?Kef|f!t=w4_uv;#`JlZOL5YG%zs zI-_?Ja$56GyHkS$lE0fXoNJ%$je(}0i>>{^8NN;J)zpP6mube>_zpmQhT^+8!8MbU zZ9PbHx+2=D{*rOn`_S^m&FS!#DQ2A3jI_RipBMBGSBC3jtbQm=><)&BvurJ(`^_}( zSX9;yB3um4>gmfsWidP_r3=m$irfjh8p?-8 zL8VX*c1BM~_J`&(lM{Zyd5fN(QbI=($Ph`O9-?mr@YJ>=`m=QD50rm?>6gp5wnUdhnwEhgYn z&6~uV0krEvQ1V4qM!uR~O1{%T$(Ol;k#7|!`AUwG@9m)E`_G`{`yEj8qo07{>rPO7 z-3_8Eaq&s>qfbHcwFh+*U-e$52<#6|0DXOs-MIvkoh@5eHtFq<>{W%y29^Ch1Csq4 zv{jvLD*JRXbdizM0m_xm546vo_FBkgL%UJ>gHSL0a-fOOLZ}AX1f^a3azNw1>*rV6 zth)z_=ttl64i6+MK}7%ke@otjIFYIUOT3#lnR(2B8r=nyv)`4Y_l#~2;p}iN?*pQW zsqwc4)I3IMU3~dV=MO^aD?YXPxbc_vB*ta-Ce#zfjBkFOn!iRbUTCb8?q>83#r41_ z5BGj&n{C%=D!@9P_sn4=FhOcpDKAggM46Vi{r#ycH;3m%PJNAY^d*^NT)7w(!E#$N zPOHss?3zgCzAl7#j(sQj=Gp53^cm{QkwIK_8D#npe@)Mg59+IYxrGw)S6=G3<YnZWE2MR|GZW*L z`areEmrd&T!jo-XE(KM`V$jc9^Lziju=4QvoO=DY#O6^7iZ_gWHV>@<^h~@j)_y3t zY)ETt&qDtR9fW!jHUcVxmfLuW+a6BYx#$0o%@BJf;rbx|R}g^F-`U~nT0-=^Dc$ps z;=1sb*!#i#JZ|sK-*TUhrn*kAWrO%_2$}Y9YhGVX*9DHp$mk@Uh>_u$pmb5T8g{UG zSKyD8T4&d~&9KBcr{`c>;Q3q+wg+Htq46ld3GO31XLecLmC#n^K(<<7{wF+LHJ9~4&R7>6^cK^YzZN1fZILGss`7>?;^)6XcU85a}jg=?7C1bYg z5G+^k)#ZZa(*I@t2ERbLWs&-DG`5<3n1PbpQtplv<7iO^0NM@o1VcT%g7`rly+_HFA)|xdO@yPEVL#D4(`}8Qw z)|Jbp9JNojIJS_n#nrC-METltkYjk~>}`0Z%i z_p7q~{wj4I%m+=K;G@aol0+Vjdv}$`+mPfYc{Hs@(B4-)iW7M>?$uBpem{~rk5XHY zGFy+Si9C||;r9or^ML=REi-H$GZT4?P4HCnCI4CeeD*=hhV`H6kmsKDWz;DyMZq!e zHEod2pU!b*MX!p>t52u2e_9m zejP-o;@<|Pi$4Mjz?VU-fBhbmt{nuWYuYy;z3B@|Z-#@?n_>_-$7h4Z;1X~O7zInf z+d#?r5wHw=5|o^O07_;*2PLyVfR}>@z*%4@!|b7mp9#+4{z7mrI1XfOFFqGs2rdT~ zfonkegZQoBRp5i*V(@Vg-o!PpxE6dFybgQ=L`)`4FHZwFU_4}kQq@h8C5;CI1V@TXuD)cmvod>@Q~pMYz?Gtq&y;DsQv zisymoYkU%T1GosJ|B9D`H-UBF&EQ5b&i_ZiTR`m_xE1^%cpLaL@OJRm;2q#T@E^d; zE}nNc*b}@5%mL{S<72`5!0F)q;1cj3!5VNAcoT^3#5aLo0-pdM1h;|@fiHmn1pWg2 zGWa_9F!&z$2>22BDEJrftDxU!Y5i0C1k?v=FMzI{pY|W z7TNt8e#F`+L!6?1tWjKjNXY6Ys-M_v#CT|HL2R zA0gpjcqN=_{a>{4pR@6&z%PXlu>LpL{Qu3SSD&bGN1xbhz2ubNQx>1J>9mJP{(rRj zUTf1YvhhN;K7X|ME|C@g7MpL_rsuge{u+Z6uD(_{$>#Hb%O6kq54HFA+4S0DCjW>n z=SF*fHh%K|i>tQ{*Pb%@PqpDAZ9X^J@L$^aFWK-LYmLF$x)pmsO6P~WAQGo=1MyS( zUJ7dxB{{t!B)NDXoGeTZM95A=QeA^t>OSZK>4V;hYd^eL_eW}CBJMFSQskhzQKxL1 zHgM_tWEA`Sw&AS;vN)p4PU4Q^U#jRqE*>5(8}3{v2g-wF2V;$uhe>=Dd zdJNhEZH4whhoEk>UhhG(p%IYQ548_%9;Cf!DZT| z(12gw*gRZ*q2|bb+{MVCQ{VuBi|_l}_+w<_`|)2k@l#LyU0OemP0IwZZ=haXz2t+3 zE{*Ek)$`L7pp>qD8;rj_G|07!@B7>MObmi;&q&es44Zded1HMlX-kHed{E2f?}z#M z=T&G9)Y$$EugQU{K)uxVL|K)M>Gq(f8Q$TCl3aOyxGgWzSVx`x$?%d71-UeSm`zhf zCEDN)F_xs=iOqp*bWG1tD(7s&ZUlBC-Y3>}NEP=a^;6SNYUlbWy(7r*njFfb<*wiG z!~K3EpT5@h?VYh3>1z%@7#B$E$FXTym~s8|%O-8(LbNN(_qXxsr(Ido(Z3Au=;MeV z$EIb`$CV`=?-JO+>dNx{ZTzCfF+sLPmnLI^?`PwVZ_GPx;vU`(-`~a$H?~9jo4OpM z9ex~}w!E=ksxK$!%|@JH8#3)!mCv~2_$8Yx(~O;mZ>Di+{W!Lq%EmE7cA1~Hal?vB zQafpJInS|%^wf}2fT8b8dYVcZFhy`4ROV}XmSHgFL zx%7TKn;!ehrC$icT=}V9rn&TfJewXHYnZM7uH^J7Uy8Xr{J1s`WHZ+0p*6NZ9TIsQ z>E)Ko&rfIbo1b+%Rjq&Tc=ZAP)ylk)k{R6yx>jrXNk4`=gjo{jy`4c<_ zk@twMN6cF%#q+%}hb4UYdLTvHakpdiqeMSCl_~{M4fHWhVUS`Svq=WEC+RxgDX-^An$?^a}G! z^YRO(FqX?5J?{(5JX`U^k0aOFezh^zjW-S6=<#_)Q^$|z$@bmR%Q?^6ZR5qkW0$kQ zeu&X4EGo^!4v+LBZ(Jh5U}{$Z*k^@gocK!=p!z&#TBAIli(g zoS&Cpl^-5IX0kVKT1nZIf-;6HZ{!bi_dC7}N>P7>$)EQghdG5k4e@^ZFsHDeK|K!( z@#XNFqlCSEl(0V^B~0%?k5r!4pNAizE)xlJ?;L|s)CPSEV4(HXy>q(OIell)Hw{}( z*a925X_(H*Yh72aX_(HuA1O@d*T3K=J1m{fqAxl^*c2-1+TOH0oym6JR%jZg?{6`d z85h(&#nU&lT%JwC^gSzv@|5YcFH-OJ<>*!tPI>Aa%SP)Xo6R|e=?us)>(Mk!=QCVg znuh7@ggcAVG)#MsyW2c54-!u0X-~0xMw^CdkMC(VcGEEJ-E}(AG)&)&a_Q_4W^z$^ z`WBRvdoV16r~V8@K;mx9x>jXaraM1jciv>Fm*|Z7(bc@!KaKK~Lk6iu$|%G8C292z z_s85FfaHpy$MJuSD80c&&^r9`xYv31=6}C6F^naBthY7kD_Zhd?Z9VaT`%6s3YhU- zpPOxdo&6-i4<$E0ZJWN{+x%hz{Av1G-R5V~INZ04KY?_uV^W~@30t6*; zIJ-1lu`=R~s^#Nf4c@4RXvL_Nd`vSEEw8DoSmk?EVLCO8s%YB}0hp{?of9%^RR&e= ztNm?A9sD48tFkdGaH>htFC(-utJZR)zVXZVt*U|l>cX_9wN(gY(PrM#oTGnMzEzD3 z5o@rhyJ-q4SEY9q>78_q6&mf;Hgz2U4ul3lInZF}BIsgB{1^&p zo+EwNTG>b_7a9fSLHUs8?W3VWXbdzK(tJyN)|`dCr`mVQ&N=fvDzmrZQm%`kDbVqB zmmkl}(|LDz4z${{8O`FY1&PY%lqzfB!ordpo>md&xij``;a2)F~_2Uh+@>{&!0Dc6iVB zl7IU5zdO9Bk6J>Nn{{;U5RuUg9&FVesN>hmG}`>!Yalkc}rdp*+U z|I_FH)93#aTen;P;Om8S6US?9?VHH9-hoTsC!;udOPP(=A|Q(+x@=E1aLyWe?luX7 z@sa|}jozW_UAx|a>%I0wNbl(vLd&5VXgzd0v+nT#>YV>+iwdUC|F?yE9V2Zv-F}K;%T&(UhTXVJpa1U|@@nr|q|g5) zb2NSaFPR^@!(21pUe*4|rcPmRLq`hx^HIXm=l^_eiighWI(`1n=SFZ`5?@Z$^MB%o z_5*8=yyjGUpd1)-4YUc;-uUi};|rm$LtWTg-TX6RiL*|vJL#23&Iym^7wR9tYekaQ zRr2#Y?~6HWF>9uB)B2wlH^GZb7a)sTYpLqSfVVVvz=oHRg+h*C27~49J z_IaQG(|NQ?C<0YMn6l=3J}d^iCpp{_iU87ehM#cO}HpLUT@3=L)rs zH5-}(&4uPcS3vWj1(4olEQ0=)=l`yzyd}^z&~=c$+pTvif2;F{D1bVW_17n