diff --git a/SUBD_Car_rent/Forms/FormMain.Designer.cs b/SUBD_Car_rent/Forms/FormMain.Designer.cs new file mode 100644 index 0000000..27eae93 --- /dev/null +++ b/SUBD_Car_rent/Forms/FormMain.Designer.cs @@ -0,0 +1,73 @@ +namespace Forms +{ + partial class FormMain + { + /// + /// 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() + { + button1 = new Button(); + dataGridView1 = new DataGridView(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + SuspendLayout(); + // + // button1 + // + button1.Location = new Point(12, 12); + button1.Name = "button1"; + button1.Size = new Size(75, 23); + button1.TabIndex = 0; + button1.Text = "button1"; + button1.UseVisualStyleBackColor = true; + button1.Click += button1_Click; + // + // dataGridView1 + // + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView1.Location = new Point(12, 41); + dataGridView1.Name = "dataGridView1"; + dataGridView1.RowTemplate.Height = 25; + dataGridView1.Size = new Size(776, 397); + dataGridView1.TabIndex = 1; + // + // FormMain + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(dataGridView1); + Controls.Add(button1); + Name = "FormMain"; + Text = "FormMain"; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + ResumeLayout(false); + } + + #endregion + + private Button button1; + private DataGridView dataGridView1; + } +} \ No newline at end of file diff --git a/SUBD_Car_rent/Forms/FormMain.cs b/SUBD_Car_rent/Forms/FormMain.cs new file mode 100644 index 0000000..bc81e5a --- /dev/null +++ b/SUBD_Car_rent/Forms/FormMain.cs @@ -0,0 +1,40 @@ +using database; + +namespace Forms +{ + public partial class FormMain : Form + { + + public FormMain() + { + InitializeComponent(); + } + + /* + private Abstractions bd = new Implementation(); + private void button1_Click(object sender, EventArgs e) + { + List branches = bd.GetBranches(); + + // Очищаем dataGridView1 перед заполнением новыми данными + dataGridView1.Rows.Clear(); + + // Предварительно определяем столбцы, если это не было сделано ранее + if (dataGridView1.ColumnCount == 0) + { + dataGridView1.Columns.Add("Id", "ID"); + dataGridView1.Columns.Add("Name", "Name"); + dataGridView1.Columns.Add("Address", "Address"); + dataGridView1.Columns.Add("Phone", "Phone"); + dataGridView1.Columns.Add("WorkingHours", "Working Hours"); + } + + // Заполняем dataGridView1 данными из списка branches + foreach (Branch branch in branches) + { + dataGridView1.Rows.Add(branch.Id, branch.Name, branch.Address, branch.Phone, branch.WorkingHours); + } + } + */ + } +} diff --git a/SUBD_Car_rent/Forms/FormMain.resx b/SUBD_Car_rent/Forms/FormMain.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/SUBD_Car_rent/Forms/FormMain.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/SUBD_Car_rent/Forms/Forms.csproj b/SUBD_Car_rent/Forms/Forms.csproj new file mode 100644 index 0000000..f2ca8eb --- /dev/null +++ b/SUBD_Car_rent/Forms/Forms.csproj @@ -0,0 +1,15 @@ + + + + WinExe + net6.0-windows + enable + true + enable + + + + + + + \ No newline at end of file diff --git a/SUBD_Car_rent/Forms/Program.cs b/SUBD_Car_rent/Forms/Program.cs new file mode 100644 index 0000000..db0074d --- /dev/null +++ b/SUBD_Car_rent/Forms/Program.cs @@ -0,0 +1,17 @@ +namespace Forms +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + ApplicationConfiguration.Initialize(); + Application.Run(new FormMain()); + } + } +} \ No newline at end of file diff --git a/SUBD_Car_rent/SUBD_Car_rent.sln b/SUBD_Car_rent/SUBD_Car_rent.sln new file mode 100644 index 0000000..fcf9603 --- /dev/null +++ b/SUBD_Car_rent/SUBD_Car_rent.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34309.116 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "database", "databaseAbstractions\database.csproj", "{874A3D9B-6051-4823-9A3B-725C71FDC245}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Forms", "Forms\Forms.csproj", "{318E26AF-A4DC-4863-B829-DBD4B63DC0D7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {874A3D9B-6051-4823-9A3B-725C71FDC245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {874A3D9B-6051-4823-9A3B-725C71FDC245}.Debug|Any CPU.Build.0 = Debug|Any CPU + {874A3D9B-6051-4823-9A3B-725C71FDC245}.Release|Any CPU.ActiveCfg = Release|Any CPU + {874A3D9B-6051-4823-9A3B-725C71FDC245}.Release|Any CPU.Build.0 = Release|Any CPU + {318E26AF-A4DC-4863-B829-DBD4B63DC0D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {318E26AF-A4DC-4863-B829-DBD4B63DC0D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {318E26AF-A4DC-4863-B829-DBD4B63DC0D7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {318E26AF-A4DC-4863-B829-DBD4B63DC0D7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C9647B13-C74A-4FAE-A110-8C99AF4E3DEC} + EndGlobalSection +EndGlobal diff --git a/SUBD_Car_rent/databaseAbstractions/Abstractions.cs b/SUBD_Car_rent/databaseAbstractions/Abstractions.cs new file mode 100644 index 0000000..8b961df --- /dev/null +++ b/SUBD_Car_rent/databaseAbstractions/Abstractions.cs @@ -0,0 +1,43 @@ +namespace database +{ + public abstract class Abstractions + { + + // CDUD операции для каждой сущности + + // Car + public abstract void AddCar(Car car); + public abstract List GetCars(); + public abstract Car GetCarById(int id); + public abstract void UpdateCar(Car car); + public abstract void DeleteCar(int id); + + // Client + public abstract void AddClient(Client client); + public abstract Client GetClientById(int id); + public abstract List GetClients(); + public abstract void UpdateClient(Client client); + public abstract void DeleteClient(int id); + + // Rental + public abstract void AddRental(Rental rental); + public abstract Rental GetRentalById(int id); + public abstract List GetRentals(); + public abstract void UpdateRental(Rental rental); + public abstract void DeleteRental(int id); + + // CarModel + public abstract void AddCarModel(CarModel carModel); + public abstract CarModel GetCarModelById(int id); + public abstract List GetCarModels(); + public abstract void UpdateCarModel(CarModel carModel); + public abstract void DeleteCarModel(int id); + + // Branch + public abstract void AddBranch(Branch branch); + public abstract Branch GetBranchById(int id); + public abstract List GetBranches(); + public abstract void UpdateBranch(Branch branch); + public abstract void DeleteBranch(int id); + } +} diff --git a/SUBD_Car_rent/databaseAbstractions/Implementation.cs b/SUBD_Car_rent/databaseAbstractions/Implementation.cs new file mode 100644 index 0000000..bb03394 --- /dev/null +++ b/SUBD_Car_rent/databaseAbstractions/Implementation.cs @@ -0,0 +1,351 @@ +using Npgsql; + +namespace database +{ + public class Implementation : Abstractions + { + private NpgsqlConnection GetConnection() + { + return new NpgsqlConnection("Host=172.18.241.131;Username=tim;Database=carrent;"); + } + + // CDUD операции для каждой сущности + + // Car + public override void AddCar(Car car) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"INSERT INTO car (id, model_id, branch_id, year, mileage, status_id) VALUES ({car.Id}, {car.ModelId}, {car.BranchId}, {car.Year}, {car.Mileage}, {car.StatusId})", conn); + cmd.ExecuteNonQuery(); + } + + public override List GetCars() + { + var cars = new List(); + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand("SELECT * FROM car", conn); + using var reader = cmd.ExecuteReader(); + while (reader.Read()) + { + cars.Add(new Car + { + Id = reader.GetInt32(0), + ModelId = reader.GetInt32(1), + BranchId = reader.GetInt32(2), + Year = reader.GetInt32(3), + Mileage = reader.GetInt32(4), + StatusId = reader.GetInt32(5) + }); + } + return cars; + } + + public override Car GetCarById(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"SELECT * FROM car WHERE id = {id}", conn); + using var reader = cmd.ExecuteReader(); + if (reader.Read()) + { + return new Car + { + Id = reader.GetInt32(0), + ModelId = reader.GetInt32(1), + BranchId = reader.GetInt32(2), + Year = reader.GetInt32(3), + Mileage = reader.GetInt32(4), + StatusId = reader.GetInt32(5) + }; + } + return null; + } + + public override void UpdateCar(Car car) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"UPDATE car SET model_id = {car.ModelId}, branch_id = {car.BranchId}, year = {car.Year}, mileage = {car.Mileage}, status_id = {car.StatusId} WHERE id = {car.Id}", conn); + cmd.ExecuteNonQuery(); + } + + public override void DeleteCar(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"DELETE FROM car WHERE id = {id}", conn); + cmd.ExecuteNonQuery(); + } + + // Client + public override void AddClient(Client client) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"INSERT INTO client (id, name, surname, address, phone, email) VALUES ({client.Id}, '{client.Name}', '{client.Surname}', '{client.Address}', '{client.Phone}', '{client.Email}')", conn); + cmd.ExecuteNonQuery(); + } + + public override List GetClients() + { + var clients = new List(); + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand("SELECT * FROM client", conn); + using var reader = cmd.ExecuteReader(); + while (reader.Read()) + { + clients.Add(new Client + { + Id = reader.GetInt32(0), + Name = reader.GetString(1), + Surname = reader.GetString(2), + Address = reader.GetString(3), + Phone = reader.GetString(4), + Email = reader.GetString(5) + }); + } + return clients; + } + + public override Client GetClientById(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"SELECT * FROM client WHERE id = {id}", conn); + using var reader = cmd.ExecuteReader(); + if (reader.Read()) + { + return new Client + { + Id = reader.GetInt32(0), + Name = reader.GetString(1), + Surname = reader.GetString(2), + Address = reader.GetString(3), + Phone = reader.GetString(4), + Email = reader.GetString(5) + }; + } + return null; + } + + public override void UpdateClient(Client client) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"UPDATE client SET name = '{client.Name}', surname = '{client.Surname}', address = '{client.Address}', phone = '{client.Phone}', email = '{client.Email}' WHERE id = {client.Id}", conn); + cmd.ExecuteNonQuery(); + } + + public override void DeleteClient(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"DELETE FROM client WHERE id = {id}", conn); + cmd.ExecuteNonQuery(); + } + + // Rental + public override void AddRental(Rental rental) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"INSERT INTO rental (id, car_id, client_id, start_date, end_date, cost) VALUES ({rental.Id}, {rental.CarId}, {rental.ClientId}, '{rental.StartDate}', '{rental.EndDate}', {rental.Cost})", conn); + cmd.ExecuteNonQuery(); + } + + public override List GetRentals() + { + var rentals = new List(); + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand("SELECT * FROM rental", conn); + using var reader = cmd.ExecuteReader(); + while (reader.Read()) + { + rentals.Add(new Rental + { + Id = reader.GetInt32(0), + CarId = reader.GetInt32(1), + ClientId = reader.GetInt32(2), + StartDate = reader.GetDateTime(3), + EndDate = reader.GetDateTime(4), + Cost = reader.GetDecimal(5) + }); + } + return rentals; + } + + public override Rental GetRentalById(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"SELECT * FROM rental WHERE id = {id}", conn); + using var reader = cmd.ExecuteReader(); + if (reader.Read()) + { + return new Rental + { + Id = reader.GetInt32(0), + CarId = reader.GetInt32(1), + ClientId = reader.GetInt32(2), + StartDate = reader.GetDateTime(3), + EndDate = reader.GetDateTime(4), + Cost = reader.GetDecimal(5) + }; + } + return null; + } + + public override void UpdateRental(Rental rental) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"UPDATE rental SET car_id = {rental.CarId}, client_id = {rental.ClientId}, start_date = '{rental.StartDate}', end_date = '{rental.EndDate}', cost = {rental.Cost} WHERE id = {rental.Id}", conn); + cmd.ExecuteNonQuery(); + } + + public override void DeleteRental(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"DELETE FROM rental WHERE id = {id}", conn); + cmd.ExecuteNonQuery(); + } + + // CarModel + public override void AddCarModel(CarModel carModel) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"INSERT INTO car_model (id, brand, model, year, body_type_id, seats) VALUES ({carModel.Id}, '{carModel.Brand}', '{carModel.Model}', {carModel.Year}, {carModel.BodyTypeId}, {carModel.Seats})", conn); + cmd.ExecuteNonQuery(); + } + + public override List GetCarModels() + { + var carModels = new List(); + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand("SELECT * FROM car_model", conn); + using var reader = cmd.ExecuteReader(); + while (reader.Read()) + { + carModels.Add(new CarModel + { + Id = reader.GetInt32(0), + Brand = reader.GetString(1), + Model = reader.GetString(2), + Year = reader.GetInt32(3), + BodyTypeId = reader.GetInt32(4), + Seats = reader.GetInt32(5) + }); + } + return carModels; + } + + public override CarModel GetCarModelById(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"SELECT * FROM car_model WHERE id = {id}", conn); + using var reader = cmd.ExecuteReader(); + if (reader.Read()) + { + return new CarModel + { + Id = reader.GetInt32(0), + Brand = reader.GetString(1), + Model = reader.GetString(2), + Year = reader.GetInt32(3), + BodyTypeId = reader.GetInt32(4), + Seats = reader.GetInt32(5) + }; + } + return null; + } + public override void UpdateCarModel(CarModel carModel) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"UPDATE car_model SET brand = '{carModel.Brand}', model = '{carModel.Model}', year = {carModel.Year}, body_type_id = {carModel.BodyTypeId}, seats = {carModel.Seats} WHERE id = {carModel.Id}", conn); + cmd.ExecuteNonQuery(); + } + + public override void DeleteCarModel(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"DELETE FROM car_model WHERE id = {id}", conn); + cmd.ExecuteNonQuery(); + } + + // Branch + public override void AddBranch(Branch branch) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"INSERT INTO branch (id, name, address, phone, working_hours) VALUES ({branch.Id}, '{branch.Name}', '{branch.Address}', '{branch.Phone}', '{branch.WorkingHours}')", conn); + cmd.ExecuteNonQuery(); + } + + public override List GetBranches() + { + var branches = new List(); + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand("SELECT * FROM branch", conn); + using var reader = cmd.ExecuteReader(); + while (reader.Read()) + { + branches.Add(new Branch + { + Id = reader.GetInt32(0), + Name = reader.GetString(1), + Address = reader.GetString(2), + Phone = reader.GetString(3), + WorkingHours = reader.GetString(4) + }); + } + return branches; + } + + public override Branch GetBranchById(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"SELECT * FROM branch WHERE id = {id}", conn); + using var reader = cmd.ExecuteReader(); + if (reader.Read()) + { + return new Branch + { + Id = reader.GetInt32(0), + Name = reader.GetString(1), + Address = reader.GetString(2), + Phone = reader.GetString(3), + WorkingHours = reader.GetString(4) + }; + } + return null; + } + + public override void UpdateBranch(Branch branch) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"UPDATE branch SET name = '{branch.Name}', address = '{branch.Address}', phone = '{branch.Phone}', working_hours = '{branch.WorkingHours}' WHERE id = {branch.Id}", conn); + cmd.ExecuteNonQuery(); + } + + public override void DeleteBranch(int id) + { + using var conn = GetConnection(); + conn.Open(); + using var cmd = new NpgsqlCommand($"DELETE FROM branch WHERE id = {id}", conn); + cmd.ExecuteNonQuery(); + } + } +} diff --git a/SUBD_Car_rent/databaseAbstractions/database.csproj b/SUBD_Car_rent/databaseAbstractions/database.csproj new file mode 100644 index 0000000..715d83b --- /dev/null +++ b/SUBD_Car_rent/databaseAbstractions/database.csproj @@ -0,0 +1,13 @@ + + + + net6.0 + enable + enable + + + + + + + diff --git a/SUBD_Car_rent/databaseAbstractions/models.cs b/SUBD_Car_rent/databaseAbstractions/models.cs new file mode 100644 index 0000000..959eb24 --- /dev/null +++ b/SUBD_Car_rent/databaseAbstractions/models.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace database +{ + // Определение моделей данных + + public class Car + { + public int Id { get; set; } + public int ModelId { get; set; } + public int BranchId { get; set; } + public int Year { get; set; } + public int Mileage { get; set; } + public int StatusId { get; set; } + } + + public class Client + { + public int Id { get; set; } + public string Name { get; set; } + public string Surname { get; set; } + public string Address { get; set; } + public string Phone { get; set; } + public string Email { get; set; } + } + + public class Rental + { + public int Id { get; set; } + public int CarId { get; set; } + public int ClientId { get; set; } + public DateTime StartDate { get; set; } + public DateTime EndDate { get; set; } + public decimal Cost { get; set; } + } + + public class CarModel + { + public int Id { get; set; } + public string Brand { get; set; } + public string Model { get; set; } + public int Year { get; set; } + public int BodyTypeId { get; set; } + public int Seats { get; set; } + } + + public class Branch + { + public int Id { get; set; } + public string Name { get; set; } + public string Address { get; set; } + public string Phone { get; set; } + public string WorkingHours { get; set; } + } +}