diff --git a/Hotel/Hotel.sln b/Hotel/Hotel.sln
new file mode 100644
index 0000000..6332953
--- /dev/null
+++ b/Hotel/Hotel.sln
@@ -0,0 +1,37 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.9.34728.123
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotelAbstractions", "HotelAbstractions\HotelAbstractions.csproj", "{AD9AAD7D-EC52-40B5-A34A-8B80AD8618C8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotelDatabase", "HotelDatabase\HotelDatabase.csproj", "{AB783669-67D3-48DC-9930-D4A59F923E26}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotelView", "HotelView\HotelView.csproj", "{890038F3-3A65-4292-A852-E8536002E78E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AD9AAD7D-EC52-40B5-A34A-8B80AD8618C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AD9AAD7D-EC52-40B5-A34A-8B80AD8618C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AD9AAD7D-EC52-40B5-A34A-8B80AD8618C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AD9AAD7D-EC52-40B5-A34A-8B80AD8618C8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AB783669-67D3-48DC-9930-D4A59F923E26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AB783669-67D3-48DC-9930-D4A59F923E26}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AB783669-67D3-48DC-9930-D4A59F923E26}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AB783669-67D3-48DC-9930-D4A59F923E26}.Release|Any CPU.Build.0 = Release|Any CPU
+ {890038F3-3A65-4292-A852-E8536002E78E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {890038F3-3A65-4292-A852-E8536002E78E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {890038F3-3A65-4292-A852-E8536002E78E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {890038F3-3A65-4292-A852-E8536002E78E}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {B24EC819-5956-474C-AF03-0172E3CA0554}
+ EndGlobalSection
+EndGlobal
diff --git a/Hotel/HotelAbstractions/HotelAbstractions.csproj b/Hotel/HotelAbstractions/HotelAbstractions.csproj
new file mode 100644
index 0000000..132c02c
--- /dev/null
+++ b/Hotel/HotelAbstractions/HotelAbstractions.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/Hotel/HotelAbstractions/Logic/IGuestLogic.cs b/Hotel/HotelAbstractions/Logic/IGuestLogic.cs
new file mode 100644
index 0000000..3fad56b
--- /dev/null
+++ b/Hotel/HotelAbstractions/Logic/IGuestLogic.cs
@@ -0,0 +1,22 @@
+using HotelAbstractions.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Logic
+{
+ public interface IGuestLogic
+ {
+ List GetAll();
+
+ Guest? Get(int id);
+
+ Guest? Create(Guest guest);
+
+ Guest? Update(Guest guest);
+
+ Guest? Delete(int id);
+ }
+}
diff --git a/Hotel/HotelAbstractions/Logic/IHotelLogic.cs b/Hotel/HotelAbstractions/Logic/IHotelLogic.cs
new file mode 100644
index 0000000..869fefc
--- /dev/null
+++ b/Hotel/HotelAbstractions/Logic/IHotelLogic.cs
@@ -0,0 +1,24 @@
+using HotelAbstractions.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Logic
+{
+ public interface IHotelLogic
+ {
+ List GetAll();
+
+ Hotel? Get(int id);
+
+ Hotel? Create(Hotel hotel);
+
+ Hotel? CreateId(Hotel hotel);
+
+ Hotel? Update(Hotel hotel);
+
+ Hotel? Delete(int id);
+ }
+}
diff --git a/Hotel/HotelAbstractions/Logic/IReservationLogic.cs b/Hotel/HotelAbstractions/Logic/IReservationLogic.cs
new file mode 100644
index 0000000..de1068c
--- /dev/null
+++ b/Hotel/HotelAbstractions/Logic/IReservationLogic.cs
@@ -0,0 +1,22 @@
+using HotelAbstractions.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Logic
+{
+ public interface IReservationLogic
+ {
+ List GetAll();
+
+ Reservation? Get(int id);
+
+ Reservation? Create(Reservation reservation);
+
+ Reservation? Update(Reservation reservation);
+
+ Reservation? Delete(int id);
+ }
+}
diff --git a/Hotel/HotelAbstractions/Logic/IRoomLogic.cs b/Hotel/HotelAbstractions/Logic/IRoomLogic.cs
new file mode 100644
index 0000000..f6fc65b
--- /dev/null
+++ b/Hotel/HotelAbstractions/Logic/IRoomLogic.cs
@@ -0,0 +1,22 @@
+using HotelAbstractions.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Logic
+{
+ public interface IRoomLogic
+ {
+ List GetAll();
+
+ Room? Get(int id);
+
+ Room? Create(Room room);
+
+ Room? Update(Room room);
+
+ Room? Delete(int id);
+ }
+}
diff --git a/Hotel/HotelAbstractions/Logic/IServiceCheckLogic.cs b/Hotel/HotelAbstractions/Logic/IServiceCheckLogic.cs
new file mode 100644
index 0000000..635d8b2
--- /dev/null
+++ b/Hotel/HotelAbstractions/Logic/IServiceCheckLogic.cs
@@ -0,0 +1,22 @@
+using HotelAbstractions.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Logic
+{
+ public interface IServiceCheckLogic
+ {
+ List GetAll();
+
+ ServiceCheck? Get(int id);
+
+ ServiceCheck? Create(ServiceCheck serviceCheck);
+
+ ServiceCheck? Update(ServiceCheck serviceCheck);
+
+ ServiceCheck? Delete(int id);
+ }
+}
diff --git a/Hotel/HotelAbstractions/Logic/IServiceLogic.cs b/Hotel/HotelAbstractions/Logic/IServiceLogic.cs
new file mode 100644
index 0000000..4cf8a29
--- /dev/null
+++ b/Hotel/HotelAbstractions/Logic/IServiceLogic.cs
@@ -0,0 +1,22 @@
+using HotelAbstractions.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Logic
+{
+ public interface IServiceLogic
+ {
+ List GetAll();
+
+ Service? Get(int id);
+
+ Service? Create(Service service);
+
+ Service? Update(Service service);
+
+ Service? Delete(int id);
+ }
+}
diff --git a/Hotel/HotelAbstractions/Models/GenderEnum.cs b/Hotel/HotelAbstractions/Models/GenderEnum.cs
new file mode 100644
index 0000000..a65acb8
--- /dev/null
+++ b/Hotel/HotelAbstractions/Models/GenderEnum.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Models
+{
+ public enum GenderEnum
+ {
+ Мужской,
+ Женский,
+ Другое
+ }
+}
diff --git a/Hotel/HotelAbstractions/Models/Guest.cs b/Hotel/HotelAbstractions/Models/Guest.cs
new file mode 100644
index 0000000..462979a
--- /dev/null
+++ b/Hotel/HotelAbstractions/Models/Guest.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Models
+{
+ public class Guest
+ {
+ public int Id { get; set; }
+ public string FIO { get; set; } = string.Empty;
+ public string PhoneNumber { get; set; } = string.Empty;
+ public DateOnly BirthDate { get; set; }
+ public string PassportId { get; set; } = string.Empty;
+ public GenderEnum Gender { get; set; }
+ }
+}
diff --git a/Hotel/HotelAbstractions/Models/Hotel.cs b/Hotel/HotelAbstractions/Models/Hotel.cs
new file mode 100644
index 0000000..a511211
--- /dev/null
+++ b/Hotel/HotelAbstractions/Models/Hotel.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Models
+{
+ public class Hotel
+ {
+ public int Id { get; set; }
+ public string HotelName { get; set; } = string.Empty;
+ public string Address { get; set; } = string.Empty;
+ public int CountStar { get; set; }
+ public int CountRoom { get; set; }
+ }
+}
diff --git a/Hotel/HotelAbstractions/Models/Reservation.cs b/Hotel/HotelAbstractions/Models/Reservation.cs
new file mode 100644
index 0000000..aad8235
--- /dev/null
+++ b/Hotel/HotelAbstractions/Models/Reservation.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Models
+{
+ public class Reservation
+ {
+ public int Id { get; set; }
+ public int GuestId { get; set; }
+ public int RoomId { get; set; }
+ public DateOnly ArrivalDate { get; set; }
+ public DateOnly DepartureDate { get; set; }
+ public double Price { get; set; }
+ }
+}
diff --git a/Hotel/HotelAbstractions/Models/Room.cs b/Hotel/HotelAbstractions/Models/Room.cs
new file mode 100644
index 0000000..1965372
--- /dev/null
+++ b/Hotel/HotelAbstractions/Models/Room.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Models
+{
+ public class Room
+ {
+ public int Id { get; set; }
+
+ public int HotelId { get; set; }
+
+ public string Category { get; set; } = string.Empty;
+
+ public int CountPlace { get; set; }
+
+ public int Flor { get; set; }
+
+ public string Number { get; set; } = string.Empty;
+
+ public double Price { get; set; }
+ }
+}
diff --git a/Hotel/HotelAbstractions/Models/Service.cs b/Hotel/HotelAbstractions/Models/Service.cs
new file mode 100644
index 0000000..790cee5
--- /dev/null
+++ b/Hotel/HotelAbstractions/Models/Service.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Models
+{
+ public class Service
+ {
+ public int Id { get; set; }
+ public string Name { get; set; } = string.Empty;
+ public double Price { get; set; }
+ }
+}
diff --git a/Hotel/HotelAbstractions/Models/ServiceCheck.cs b/Hotel/HotelAbstractions/Models/ServiceCheck.cs
new file mode 100644
index 0000000..3759195
--- /dev/null
+++ b/Hotel/HotelAbstractions/Models/ServiceCheck.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelAbstractions.Models
+{
+ public class ServiceCheck
+ {
+ public int Id { get; set; }
+ public int ReservationId { get; set; }
+ public int ServiceId { get; set; }
+ public int Count { get; set; }
+ public DateTime DateTime { get; set; }
+ }
+}
diff --git a/Hotel/HotelDatabase/HotelDatabase.csproj b/Hotel/HotelDatabase/HotelDatabase.csproj
new file mode 100644
index 0000000..447f582
--- /dev/null
+++ b/Hotel/HotelDatabase/HotelDatabase.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Hotel/HotelDatabase/Implement/GuestImplement.cs b/Hotel/HotelDatabase/Implement/GuestImplement.cs
new file mode 100644
index 0000000..104f661
--- /dev/null
+++ b/Hotel/HotelDatabase/Implement/GuestImplement.cs
@@ -0,0 +1,98 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+using Npgsql;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelDatabase.Implement
+{
+ public class GuestImplement : IGuestLogic
+ {
+ public Guest? Create(Guest guest)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("INSERT INTO guest (full_name, phone_number, birth_date, passport_id, gender) VALUES (@Full_name, @Phone_number, @Birth_date, @Passport_id, @Gender)", con);
+ cmd.Parameters.AddWithValue("@Full_name", guest.FIO);
+ cmd.Parameters.AddWithValue("@Phone_number", guest.PhoneNumber);
+ cmd.Parameters.AddWithValue("@Birth_date", guest.BirthDate);
+ cmd.Parameters.AddWithValue("@Passport_id", guest.PassportId);
+ cmd.Parameters.AddWithValue("@Gender", guest.Gender.ToString());
+ cmd.ExecuteNonQuery();
+ return guest;
+ }
+
+ public Guest? Delete(int id)
+ {
+ var element = Get(id);
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"DELETE FROM guest WHERE guest_id = {id}", con);
+ cmd.ExecuteNonQuery();
+ return element;
+ }
+
+ public Guest? Get(int id)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"SELECT * FROM guest WHERE guest_id = {id}", con);
+ using var reader = cmd.ExecuteReader();
+ if (reader.Read())
+ {
+ return new Guest
+ {
+ Id = reader.GetInt32(0),
+ FIO = reader.GetString(1),
+ PhoneNumber = reader.GetString(2),
+ BirthDate = ToDateOnly(reader.GetDateTime(3)),
+ PassportId = reader.GetString(4),
+ Gender = (GenderEnum)Enum.Parse(typeof(GenderEnum), reader.GetString(5)),
+ };
+ }
+ return null;
+ }
+
+ public List GetAll()
+ {
+ var guests = new List();
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("SELECT * FROM guest order by guest_id", con);
+ using var reader = cmd.ExecuteReader();
+ while (reader.Read())
+ {
+ guests.Add(new Guest
+ {
+ Id = reader.GetInt32(0),
+ FIO = reader.GetString(1),
+ PhoneNumber = reader.GetString(2),
+ BirthDate = ToDateOnly(reader.GetDateTime(3)),
+ PassportId = reader.GetString(4),
+ Gender = (GenderEnum)Enum.Parse(typeof(GenderEnum), reader.GetString(5)),
+ });
+ }
+ return guests;
+ }
+
+ public Guest? Update(Guest guest)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"UPDATE guest SET full_name = '{guest.FIO}', phone_number = '{guest.PhoneNumber}', birth_date = '{guest.BirthDate}', passport_id = '{guest.PassportId}', gender = '{guest.Gender}' WHERE guest_id = '{guest.Id}'", con);
+ cmd.ExecuteNonQuery();
+ var element = Get(guest.Id);
+ return element;
+ }
+
+ public DateOnly ToDateOnly (DateTime dateTime)
+ {
+ var DateTime = dateTime;
+ var Date = new DateOnly(DateTime.Year, DateTime.Month, DateTime.Day);
+ return Date;
+ }
+ }
+}
diff --git a/Hotel/HotelDatabase/Implement/HotelImplement.cs b/Hotel/HotelDatabase/Implement/HotelImplement.cs
new file mode 100644
index 0000000..2db9eef
--- /dev/null
+++ b/Hotel/HotelDatabase/Implement/HotelImplement.cs
@@ -0,0 +1,102 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+using Npgsql;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelDatabase.Implement
+{
+ public class HotelImplement : IHotelLogic
+ {
+ public Hotel? Create(Hotel hotel)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("INSERT INTO hotel (name, address, count_star, count_room) VALUES (@Name, @Address, @Count_star, @Count_room)", con);
+ cmd.Parameters.AddWithValue("@Name", hotel.HotelName);
+ cmd.Parameters.AddWithValue("@Address", hotel.Address);
+ cmd.Parameters.AddWithValue("@Count_star", hotel.CountStar);
+ cmd.Parameters.AddWithValue("@Count_room", hotel.CountRoom);
+ cmd.ExecuteNonQuery();
+ return hotel;
+ }
+
+ public Hotel? CreateId(Hotel hotel)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("INSERT INTO hotel (hotel_id, name, address, count_star, count_room) VALUES (@Hotel_id, @Name, @Address, @Count_star, @Count_room)", con);
+ cmd.Parameters.AddWithValue("@Hotel_id", hotel.Id);
+ cmd.Parameters.AddWithValue("@Name", hotel.HotelName);
+ cmd.Parameters.AddWithValue("@Address", hotel.Address);
+ cmd.Parameters.AddWithValue("@Count_star", hotel.CountStar);
+ cmd.Parameters.AddWithValue("@Count_room", hotel.CountRoom);
+ cmd.ExecuteNonQuery();
+ return hotel;
+ }
+
+ public Hotel? Delete(int id)
+ {
+ var element = Get(id);
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"DELETE FROM hotel WHERE hotel_id = {id}", con);
+ cmd.ExecuteNonQuery();
+ return element;
+ }
+
+ public Hotel? Get(int id)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"SELECT * FROM hotel WHERE hotel_id = {id}", con);
+ using var reader = cmd.ExecuteReader();
+ if (reader.Read())
+ {
+ return new Hotel
+ {
+ Id = reader.GetInt32(0),
+ HotelName = reader.GetString(1),
+ Address = reader.GetString(2),
+ CountStar = reader.GetInt32(3),
+ CountRoom = reader.GetInt32(4),
+ };
+ }
+ return null;
+ }
+
+ public List GetAll()
+ {
+ var hotels = new List();
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("SELECT * FROM hotel order by hotel_id", con);
+ using var reader = cmd.ExecuteReader();
+ while (reader.Read())
+ {
+ hotels.Add(new Hotel
+ {
+ Id = reader.GetInt32(0),
+ HotelName = reader.GetString(1),
+ Address = reader.GetString(2),
+ CountStar = reader.GetInt32(3),
+ CountRoom = reader.GetInt32(4),
+ });
+ }
+ return hotels;
+ }
+
+ public Hotel? Update(Hotel hotel)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"UPDATE hotel SET name = '{hotel.HotelName}', address = '{hotel.Address}', count_star = '{hotel.CountStar}', count_room = '{hotel.CountRoom}' WHERE hotel_id = '{hotel.Id}'", con);
+ cmd.ExecuteNonQuery();
+ var element = Get(hotel.Id);
+ return element;
+ }
+ }
+}
diff --git a/Hotel/HotelDatabase/Implement/ReservationImplement.cs b/Hotel/HotelDatabase/Implement/ReservationImplement.cs
new file mode 100644
index 0000000..f03a02a
--- /dev/null
+++ b/Hotel/HotelDatabase/Implement/ReservationImplement.cs
@@ -0,0 +1,110 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+using Npgsql;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelDatabase.Implement
+{
+ public class ReservationImplement : IReservationLogic
+ {
+ public Reservation? Create(Reservation reservation)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand(
+ "INSERT INTO reservation (fk_room_id, fk_guest_id, arrival_date, departure_date, price)" +
+ " VALUES (@FKRoom_id, @FKGuest_id, @Arrival_date, @Departure_date, @Price)",
+ con
+ );
+ cmd.Parameters.AddWithValue("@FKRoom_id", reservation.RoomId == 0 ? DBNull.Value : reservation.RoomId);
+ cmd.Parameters.AddWithValue("@FKGuest_id", reservation.GuestId == 0 ? DBNull.Value : reservation.GuestId);
+ cmd.Parameters.AddWithValue("@Arrival_date", reservation.ArrivalDate);
+ cmd.Parameters.AddWithValue("@Departure_date", reservation.DepartureDate);
+ cmd.Parameters.AddWithValue("@Price", reservation.Price);
+ cmd.ExecuteNonQuery();
+ return reservation;
+ }
+
+ public Reservation? Delete(int id)
+ {
+ var element = Get(id);
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"DELETE FROM reservation WHERE reservation_id = {id}", con);
+ cmd.ExecuteNonQuery();
+ return element;
+ }
+
+ public Reservation? Get(int id)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"SELECT * FROM reservation WHERE reservation_id = {id}", con);
+ using var reader = cmd.ExecuteReader();
+ if (reader.Read())
+ {
+ return new Reservation
+ {
+ Id = reader.GetInt32(0),
+ RoomId = !reader.IsDBNull(1) ? reader.GetInt32(1) : 0,
+ GuestId = !reader.IsDBNull(2) ? reader.GetInt32(2) : 0,
+ ArrivalDate = ToDateOnly(reader.GetDateTime(3)),
+ DepartureDate = ToDateOnly(reader.GetDateTime(4)),
+ Price = reader.GetDouble(5),
+ };
+ }
+ return null;
+ }
+
+ public List GetAll()
+ {
+ var reservations = new List();
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("SELECT * FROM reservation order by reservation_id", con);
+ using var reader = cmd.ExecuteReader();
+ while (reader.Read())
+ {
+ reservations.Add(new Reservation
+ {
+ Id = reader.GetInt32(0),
+ RoomId = !reader.IsDBNull(1) ? reader.GetInt32(1) : 0,
+ GuestId = !reader.IsDBNull(2) ? reader.GetInt32(2) : 0,
+ ArrivalDate = ToDateOnly(reader.GetDateTime(3)),
+ DepartureDate = ToDateOnly(reader.GetDateTime(4)),
+ Price = reader.GetDouble(5),
+ });
+ }
+ return reservations;
+ }
+
+ public Reservation? Update(Reservation reservation)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"UPDATE reservation SET " +
+ $"fk_room_id = @FKHotel_Id, " +
+ $"fk_guest_id = @FKGuest_Id, " +
+ $"arrival_date = '{reservation.ArrivalDate}', " +
+ $"departure_date = '{reservation.DepartureDate}', " +
+ $"price = '{reservation.Price}' " +
+ $"WHERE reservation_id = {reservation.Id}", con);
+ cmd.Parameters.AddWithValue("@FKRoom_Id", reservation.RoomId == 0 ? DBNull.Value : reservation.RoomId);
+ cmd.Parameters.AddWithValue("@FKGuest_Id", reservation.GuestId == 0 ? DBNull.Value : reservation.GuestId);
+ cmd.ExecuteNonQuery();
+ var element = Get(reservation.Id);
+ return element;
+ }
+
+ public DateOnly ToDateOnly(DateTime dateTime)
+ {
+ var DateTime = dateTime;
+ var Date = new DateOnly(DateTime.Year, DateTime.Month, DateTime.Day);
+ return Date;
+ }
+ }
+}
diff --git a/Hotel/HotelDatabase/Implement/RoomImplement.cs b/Hotel/HotelDatabase/Implement/RoomImplement.cs
new file mode 100644
index 0000000..a974706
--- /dev/null
+++ b/Hotel/HotelDatabase/Implement/RoomImplement.cs
@@ -0,0 +1,106 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+using Npgsql;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelDatabase.Implement
+{
+ public class RoomImplement : IRoomLogic
+ {
+ public Room? Create(Room room)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand(
+ "INSERT INTO room (fk_hotel_id, category, count_place, flor, room_number, price)" +
+ " VALUES (@FKHotel_id, @Category, @Count_place, @Flor, @Room_number, @Price)",
+ con
+ );
+ cmd.Parameters.AddWithValue("@FKHotel_id", room.HotelId == 0 ? DBNull.Value : room.HotelId);
+ cmd.Parameters.AddWithValue("@Category", room.Category);
+ cmd.Parameters.AddWithValue("@Count_place", room.CountPlace);
+ cmd.Parameters.AddWithValue("@Flor", room.Flor);
+ cmd.Parameters.AddWithValue("@Room_number", room.Number);
+ cmd.Parameters.AddWithValue("@Price", room.Price);
+ cmd.ExecuteNonQuery();
+ return room;
+ }
+
+ public Room? Delete(int id)
+ {
+ var element = Get(id);
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"DELETE FROM room WHERE room_id = {id}", con);
+ cmd.ExecuteNonQuery();
+ return element;
+ }
+
+ public Room? Get(int id)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"SELECT * FROM room WHERE room_id = {id}", con);
+ using var reader = cmd.ExecuteReader();
+ if (reader.Read())
+ {
+ return new Room
+ {
+ Id = reader.GetInt32(0),
+ HotelId = !reader.IsDBNull(1) ? reader.GetInt32(1) : 0,
+ Category = reader.GetString(2),
+ CountPlace = reader.GetInt32(3),
+ Flor = reader.GetInt32(4),
+ Number = reader.GetString(5),
+ Price = reader.GetDouble(6),
+ };
+ }
+ return null;
+ }
+
+ public List GetAll()
+ {
+ var rooms = new List();
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("SELECT * FROM room order by room_id", con);
+ using var reader = cmd.ExecuteReader();
+ while (reader.Read())
+ {
+ rooms.Add(new Room
+ {
+ Id = reader.GetInt32(0),
+ HotelId = !reader.IsDBNull(1) ? reader.GetInt32(1) : 0,
+ Category = reader.GetString(2),
+ CountPlace = reader.GetInt32(3),
+ Flor = reader.GetInt32(4),
+ Number = reader.GetString(5),
+ Price = reader.GetDouble(6),
+ });
+ }
+ return rooms;
+ }
+
+ public Room? Update(Room room)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"UPDATE room SET " +
+ $"fk_hotel_id = @FKHotel_Id, " +
+ $"category = '{room.Category}', " +
+ $"count_place = '{room.CountPlace}', " +
+ $"flor = '{room.Flor}', " +
+ $"room_number = '{room.Number}', " +
+ $"price = '{room.Price}' " +
+ $"WHERE room_id = {room.Id}", con);
+ cmd.Parameters.AddWithValue("@FKHotel_Id", room.HotelId == 0 ? DBNull.Value : room.HotelId);
+ cmd.ExecuteNonQuery();
+ var element = Get(room.Id);
+ return element;
+ }
+ }
+}
diff --git a/Hotel/HotelDatabase/Implement/ServiceCheckImplement.cs b/Hotel/HotelDatabase/Implement/ServiceCheckImplement.cs
new file mode 100644
index 0000000..b1fa09b
--- /dev/null
+++ b/Hotel/HotelDatabase/Implement/ServiceCheckImplement.cs
@@ -0,0 +1,99 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+using Npgsql;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelDatabase.Implement
+{
+ public class ServiceCheckImplement : IServiceCheckLogic
+ {
+ public ServiceCheck? Create(ServiceCheck serviceCheck)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand(
+ "INSERT INTO service_check (fk_reservation_id, fk_service_id, count, service_date)" +
+ " VALUES (@FKReservation_id, @FKService_id, @Count, @Service_date)",
+ con
+ );
+ cmd.Parameters.AddWithValue("@FKReservation_id", serviceCheck.ReservationId == 0 ? DBNull.Value : serviceCheck.ReservationId);
+ cmd.Parameters.AddWithValue("@FKService_id", serviceCheck.ServiceId == 0 ? DBNull.Value : serviceCheck.ServiceId);
+ cmd.Parameters.AddWithValue("@Count", serviceCheck.Count);
+ cmd.Parameters.AddWithValue("@Service_date", serviceCheck.DateTime);
+ cmd.ExecuteNonQuery();
+ return serviceCheck;
+ }
+
+ public ServiceCheck? Delete(int id)
+ {
+ var element = Get(id);
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"DELETE FROM service_check WHERE service_check_id = {id}", con);
+ cmd.ExecuteNonQuery();
+ return element;
+ }
+
+ public ServiceCheck? Get(int id)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"SELECT * FROM service_check WHERE service_check_id = {id}", con);
+ using var reader = cmd.ExecuteReader();
+ if (reader.Read())
+ {
+ return new ServiceCheck
+ {
+ Id = reader.GetInt32(0),
+ ReservationId = !reader.IsDBNull(1) ? reader.GetInt32(1) : 0,
+ ServiceId = !reader.IsDBNull(2) ? reader.GetInt32(2) : 0,
+ Count = reader.GetInt32(3),
+ DateTime = reader.GetDateTime(4),
+ };
+ }
+ return null;
+ }
+
+ public List GetAll()
+ {
+ var serviceChecks = new List();
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("SELECT * FROM service_check order by service_check_id", con);
+ using var reader = cmd.ExecuteReader();
+ while (reader.Read())
+ {
+ serviceChecks.Add(new ServiceCheck
+ {
+ Id = reader.GetInt32(0),
+ ReservationId = !reader.IsDBNull(1) ? reader.GetInt32(1) : 0,
+ ServiceId = !reader.IsDBNull(2) ? reader.GetInt32(2) : 0,
+ Count = reader.GetInt32(3),
+ DateTime = reader.GetDateTime(4),
+ });
+ }
+ return serviceChecks;
+ }
+
+ public ServiceCheck? Update(ServiceCheck serviceCheck)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"UPDATE service_check SET " +
+ $"fk_reservation_id = @FKReservation_Id, " +
+ $"fk_service_id = @FKService_Id, " +
+ $"count = '{serviceCheck.Count}', " +
+ $"service_date = '{serviceCheck.DateTime}', " +
+ $"WHERE service_check_id = '{serviceCheck.Id}' ", con);
+ cmd.Parameters.AddWithValue("@FKReservation_Id", serviceCheck.ReservationId == 0 ? DBNull.Value : serviceCheck.ReservationId);
+ cmd.Parameters.AddWithValue("@FKService_Id", serviceCheck.ServiceId == 0 ? DBNull.Value : serviceCheck.ServiceId);
+ cmd.ExecuteNonQuery();
+ var element = Get(serviceCheck.Id);
+ return element;
+ }
+ }
+}
diff --git a/Hotel/HotelDatabase/Implement/ServiceImplement.cs b/Hotel/HotelDatabase/Implement/ServiceImplement.cs
new file mode 100644
index 0000000..df110a9
--- /dev/null
+++ b/Hotel/HotelDatabase/Implement/ServiceImplement.cs
@@ -0,0 +1,82 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+using Npgsql;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HotelDatabase.Implement
+{
+ public class ServiceImplement : IServiceLogic
+ {
+ public Service? Create(Service service)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("INSERT INTO service (name, price) VALUES (@Name, @Price)", con);
+ cmd.Parameters.AddWithValue("@Name", service.Name);
+ cmd.Parameters.AddWithValue("@Price", service.Price);
+ cmd.ExecuteNonQuery();
+ return service;
+ }
+
+ public Service? Delete(int id)
+ {
+ var element = Get(id);
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"DELETE FROM service WHERE service_id = {id}", con);
+ cmd.ExecuteNonQuery();
+ return element;
+ }
+
+ public Service? Get(int id)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"SELECT * FROM service WHERE service_id = {id}", con);
+ using var reader = cmd.ExecuteReader();
+ if (reader.Read())
+ {
+ return new Service
+ {
+ Id = reader.GetInt32(0),
+ Name = reader.GetString(1),
+ Price = reader.GetDouble(2),
+ };
+ }
+ return null;
+ }
+
+ public List GetAll()
+ {
+ var services = new List();
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand("SELECT * FROM service order by service_id", con);
+ using var reader = cmd.ExecuteReader();
+ while (reader.Read())
+ {
+ services.Add(new Service
+ {
+ Id = reader.GetInt32(0),
+ Name = reader.GetString(1),
+ Price = reader.GetDouble(2),
+ });
+ }
+ return services;
+ }
+
+ public Service? Update(Service service)
+ {
+ using var con = SqlConnection.GetConnection();
+ con.Open();
+ using var cmd = new NpgsqlCommand($"UPDATE service SET name = '{service.Name}', price = '{service.Price}' WHERE service_id = {service.Id}", con);
+ cmd.ExecuteNonQuery();
+ var element = Get(service.Id);
+ return element;
+ }
+ }
+}
diff --git a/Hotel/HotelDatabase/SqlConnection.cs b/Hotel/HotelDatabase/SqlConnection.cs
new file mode 100644
index 0000000..8d98a0d
--- /dev/null
+++ b/Hotel/HotelDatabase/SqlConnection.cs
@@ -0,0 +1,12 @@
+using Npgsql;
+
+namespace HotelDatabase
+{
+ public class SqlConnection
+ {
+ public static NpgsqlConnection GetConnection()
+ {
+ return new NpgsqlConnection("Host=192.168.56.105;Port=5432;Username=postgres;Database=Hotel;Password=postgres");
+ }
+ }
+}
diff --git a/Hotel/HotelView/FormGuest.Designer.cs b/Hotel/HotelView/FormGuest.Designer.cs
new file mode 100644
index 0000000..76b4f0f
--- /dev/null
+++ b/Hotel/HotelView/FormGuest.Designer.cs
@@ -0,0 +1,213 @@
+namespace HotelView
+{
+ partial class FormGuest
+ {
+ ///
+ /// 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()
+ {
+ label4 = new Label();
+ label3 = new Label();
+ label2 = new Label();
+ label1 = new Label();
+ textBoxPhone = new TextBox();
+ textBoxName = new TextBox();
+ button3 = new Button();
+ button2 = new Button();
+ button1 = new Button();
+ dataGridView = new DataGridView();
+ comboBox1 = new ComboBox();
+ label5 = new Label();
+ dateTimePicker1 = new DateTimePicker();
+ textBoxPassport = new TextBox();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+ SuspendLayout();
+ //
+ // label4
+ //
+ label4.AutoSize = true;
+ label4.Location = new Point(529, 238);
+ label4.Name = "label4";
+ label4.Size = new Size(173, 20);
+ label4.TabIndex = 23;
+ label4.Text = "Серия номер Паспорта";
+ //
+ // label3
+ //
+ label3.AutoSize = true;
+ label3.Location = new Point(529, 161);
+ label3.Name = "label3";
+ label3.Size = new Size(116, 20);
+ label3.TabIndex = 22;
+ label3.Text = "Дата рождения";
+ label3.Click += label3_Click;
+ //
+ // label2
+ //
+ label2.AutoSize = true;
+ label2.Location = new Point(529, 91);
+ label2.Name = "label2";
+ label2.Size = new Size(127, 20);
+ label2.TabIndex = 21;
+ label2.Text = "Номер телефона";
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(529, 21);
+ label1.Name = "label1";
+ label1.Size = new Size(174, 20);
+ label1.TabIndex = 20;
+ label1.Text = "Фамилия Имя Отчество";
+ //
+ // textBoxPhone
+ //
+ textBoxPhone.Location = new Point(514, 114);
+ textBoxPhone.Name = "textBoxPhone";
+ textBoxPhone.Size = new Size(280, 27);
+ textBoxPhone.TabIndex = 19;
+ //
+ // textBoxName
+ //
+ textBoxName.Location = new Point(514, 44);
+ textBoxName.Name = "textBoxName";
+ textBoxName.Size = new Size(280, 27);
+ textBoxName.TabIndex = 18;
+ //
+ // button3
+ //
+ button3.Location = new Point(700, 410);
+ button3.Name = "button3";
+ button3.Size = new Size(94, 29);
+ button3.TabIndex = 17;
+ button3.Text = "Удалить";
+ button3.UseVisualStyleBackColor = true;
+ button3.Click += ButtonDelete_Click;
+ //
+ // button2
+ //
+ button2.Location = new Point(600, 410);
+ button2.Name = "button2";
+ button2.Size = new Size(94, 29);
+ button2.TabIndex = 16;
+ button2.Text = "Изменить";
+ button2.UseVisualStyleBackColor = true;
+ button2.Click += ButtonUpdate_Click;
+ //
+ // button1
+ //
+ button1.Location = new Point(500, 410);
+ button1.Name = "button1";
+ button1.Size = new Size(94, 29);
+ button1.TabIndex = 15;
+ button1.Text = "Добавить";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += ButtonCreate_Click;
+ //
+ // dataGridView
+ //
+ dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView.Location = new Point(6, 1);
+ dataGridView.Name = "dataGridView";
+ dataGridView.RowHeadersWidth = 51;
+ dataGridView.RowTemplate.Height = 29;
+ dataGridView.Size = new Size(478, 448);
+ dataGridView.TabIndex = 14;
+ //
+ // comboBox1
+ //
+ comboBox1.FormattingEnabled = true;
+ comboBox1.Location = new Point(514, 339);
+ comboBox1.Name = "comboBox1";
+ comboBox1.Size = new Size(280, 28);
+ comboBox1.TabIndex = 26;
+ //
+ // label5
+ //
+ label5.AutoSize = true;
+ label5.Location = new Point(529, 316);
+ label5.Name = "label5";
+ label5.Size = new Size(108, 20);
+ label5.TabIndex = 27;
+ label5.Text = "Выберите пол";
+ //
+ // dateTimePicker1
+ //
+ dateTimePicker1.Location = new Point(514, 184);
+ dateTimePicker1.Name = "dateTimePicker1";
+ dateTimePicker1.Size = new Size(280, 27);
+ dateTimePicker1.TabIndex = 28;
+ //
+ // textBoxPassport
+ //
+ textBoxPassport.Location = new Point(514, 261);
+ textBoxPassport.Name = "textBoxPassport";
+ textBoxPassport.Size = new Size(280, 27);
+ textBoxPassport.TabIndex = 29;
+ //
+ // FormGuest
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(textBoxPassport);
+ Controls.Add(dateTimePicker1);
+ Controls.Add(label5);
+ Controls.Add(comboBox1);
+ Controls.Add(label4);
+ Controls.Add(label3);
+ Controls.Add(label2);
+ Controls.Add(label1);
+ Controls.Add(textBoxPhone);
+ Controls.Add(textBoxName);
+ Controls.Add(button3);
+ Controls.Add(button2);
+ Controls.Add(button1);
+ Controls.Add(dataGridView);
+ Name = "FormGuest";
+ Text = "FormGuest";
+ Load += FormGuest_Load;
+ ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+ private Label label4;
+ private Label label3;
+ private Label label2;
+ private Label label1;
+ private TextBox textBoxPhone;
+ private TextBox textBoxName;
+ private Button button3;
+ private Button button2;
+ private Button button1;
+ private DataGridView dataGridView;
+ private ComboBox comboBox1;
+ private Label label5;
+ private DateTimePicker dateTimePicker1;
+ private TextBox textBoxPassport;
+ }
+}
\ No newline at end of file
diff --git a/Hotel/HotelView/FormGuest.cs b/Hotel/HotelView/FormGuest.cs
new file mode 100644
index 0000000..0854382
--- /dev/null
+++ b/Hotel/HotelView/FormGuest.cs
@@ -0,0 +1,144 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+
+namespace HotelView
+{
+ public partial class FormGuest : Form
+ {
+ private readonly IGuestLogic _guestLogic;
+ public FormGuest(IGuestLogic guestLogic)
+ {
+ InitializeComponent();
+ _guestLogic = guestLogic;
+ }
+
+ private void FormGuest_Load(object sender, EventArgs e)
+ {
+ LoadData();
+ }
+
+ private void ButtonCreate_Click(object sender, EventArgs e)
+ {
+ Guest newGuest = new()
+ {
+ FIO = textBoxName.Text,
+ PhoneNumber = textBoxPhone.Text,
+ BirthDate = ToDateOnly(dateTimePicker1.Value),
+ PassportId = textBoxPassport.Text,
+ Gender = (GenderEnum)Enum.Parse(typeof(GenderEnum), comboBox1.SelectedItem.ToString())
+ };
+
+ _guestLogic.Create(newGuest);
+
+ LoadData();
+ }
+ private void LoadData()
+ {
+ comboBox1.DataSource = Enum.GetValues(typeof(GenderEnum));
+ var guests = _guestLogic.GetAll();
+
+ dataGridView.Rows.Clear();
+
+ if (dataGridView.ColumnCount == 0)
+ {
+ dataGridView.Columns.Add("Id", "ID");
+ dataGridView.Columns.Add("FIO", "ФИО");
+ dataGridView.Columns.Add("PhoneNumber", "Номер телефона");
+ dataGridView.Columns.Add("BirthDate", "Дата рождения");
+ dataGridView.Columns.Add("PassportId", "Паспорт");
+ dataGridView.Columns.Add("Gender", "Пол");
+ }
+
+ dataGridView.Columns["Id"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["FIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["PhoneNumber"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["BirthDate"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["PassportId"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Gender"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+
+ foreach (var guest in guests)
+ {
+ dataGridView.Rows.Add(guest.Id, guest.FIO, guest.PhoneNumber, guest.BirthDate, guest.PassportId, guest.Gender);
+ }
+ }
+
+ private void ButtonUpdate_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int guestId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ Guest updatedGuest = new()
+ {
+ Id = guestId,
+ FIO = textBoxName.Text,
+ PhoneNumber = textBoxPhone.Text,
+ BirthDate = ToDateOnly(dateTimePicker1.Value),
+ PassportId = textBoxPassport.Text,
+ Gender = (GenderEnum)Enum.Parse(typeof(GenderEnum), comboBox1.SelectedItem.ToString())
+ };
+
+ _guestLogic.Update(updatedGuest);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите гостинницу, информацию о которой необходимо обновить");
+ }
+ }
+
+ private void ButtonDelete_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int guestId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ _guestLogic.Delete(guestId);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите гостинницу, информацию о которой необходимо удалить");
+ }
+ }
+
+ private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
+ {
+ if (e.RowIndex >= 0)
+ {
+ DataGridViewRow row = dataGridView.Rows[e.RowIndex];
+ textBoxName.Text = row.Cells["FIO"].Value.ToString();
+ textBoxPhone.Text = row.Cells["PhoneNumber"].Value.ToString();
+ dateTimePicker1.Text = row.Cells["BirthDate"].Value.ToString();
+ textBoxPassport.Text = row.Cells["PassportId"].Value.ToString();
+ comboBox1.Text = row.Cells["Gender"].ToString();
+ }
+ }
+
+ public DateOnly ToDateOnly(DateTime dateTime)
+ {
+ var DateTime = dateTime;
+ var Date = new DateOnly(DateTime.Year, DateTime.Month, DateTime.Day);
+ return Date;
+ }
+
+ private void label3_Click(object sender, EventArgs e)
+ {
+
+ }
+ }
+}
diff --git a/Hotel/HotelView/FormGuest.resx b/Hotel/HotelView/FormGuest.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/Hotel/HotelView/FormGuest.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/Hotel/HotelView/FormHotel.Designer.cs b/Hotel/HotelView/FormHotel.Designer.cs
new file mode 100644
index 0000000..b6762d9
--- /dev/null
+++ b/Hotel/HotelView/FormHotel.Designer.cs
@@ -0,0 +1,194 @@
+namespace HotelView
+{
+ partial class FormHotel
+ {
+ ///
+ /// 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()
+ {
+ dataGridView = new DataGridView();
+ button1 = new Button();
+ button2 = new Button();
+ button3 = new Button();
+ textBoxName = new TextBox();
+ textBoxAddress = new TextBox();
+ label1 = new Label();
+ label2 = new Label();
+ label3 = new Label();
+ label4 = new Label();
+ numericUpDownCountStar = new NumericUpDown();
+ numericUpDownCountRoom = new NumericUpDown();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownCountStar).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownCountRoom).BeginInit();
+ SuspendLayout();
+ //
+ // dataGridView
+ //
+ dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView.Location = new Point(0, 0);
+ dataGridView.Name = "dataGridView";
+ dataGridView.RowHeadersWidth = 51;
+ dataGridView.RowTemplate.Height = 29;
+ dataGridView.Size = new Size(478, 448);
+ dataGridView.TabIndex = 0;
+ //
+ // button1
+ //
+ button1.Location = new Point(494, 409);
+ button1.Name = "button1";
+ button1.Size = new Size(94, 29);
+ button1.TabIndex = 1;
+ button1.Text = "Добавить";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += ButtonCreate_Click;
+ //
+ // button2
+ //
+ button2.Location = new Point(594, 409);
+ button2.Name = "button2";
+ button2.Size = new Size(94, 29);
+ button2.TabIndex = 2;
+ button2.Text = "Изменить";
+ button2.UseVisualStyleBackColor = true;
+ button2.Click += ButtonUpdate_Click;
+ //
+ // button3
+ //
+ button3.Location = new Point(694, 409);
+ button3.Name = "button3";
+ button3.Size = new Size(94, 29);
+ button3.TabIndex = 3;
+ button3.Text = "Удалить";
+ button3.UseVisualStyleBackColor = true;
+ button3.Click += ButtonDelete_Click;
+ //
+ // textBoxName
+ //
+ textBoxName.Location = new Point(508, 71);
+ textBoxName.Name = "textBoxName";
+ textBoxName.Size = new Size(280, 27);
+ textBoxName.TabIndex = 4;
+ //
+ // textBoxAddress
+ //
+ textBoxAddress.Location = new Point(508, 158);
+ textBoxAddress.Name = "textBoxAddress";
+ textBoxAddress.Size = new Size(280, 27);
+ textBoxAddress.TabIndex = 5;
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(523, 48);
+ label1.Name = "label1";
+ label1.Size = new Size(156, 20);
+ label1.TabIndex = 8;
+ label1.Text = "Название гостиницы";
+ //
+ // label2
+ //
+ label2.AutoSize = true;
+ label2.Location = new Point(523, 135);
+ label2.Name = "label2";
+ label2.Size = new Size(130, 20);
+ label2.TabIndex = 9;
+ label2.Text = "Адрес гостиницы";
+ //
+ // label3
+ //
+ label3.AutoSize = true;
+ label3.Location = new Point(523, 226);
+ label3.Name = "label3";
+ label3.Size = new Size(132, 20);
+ label3.TabIndex = 10;
+ label3.Text = "Количество звезд";
+ //
+ // label4
+ //
+ label4.AutoSize = true;
+ label4.Location = new Point(523, 310);
+ label4.Name = "label4";
+ label4.Size = new Size(144, 20);
+ label4.TabIndex = 11;
+ label4.Text = "Количество комнат";
+ //
+ // numericUpDownCountStar
+ //
+ numericUpDownCountStar.Location = new Point(508, 249);
+ numericUpDownCountStar.Name = "numericUpDownCountStar";
+ numericUpDownCountStar.Size = new Size(280, 27);
+ numericUpDownCountStar.TabIndex = 12;
+ //
+ // numericUpDownCountRoom
+ //
+ numericUpDownCountRoom.Location = new Point(508, 333);
+ numericUpDownCountRoom.Name = "numericUpDownCountRoom";
+ numericUpDownCountRoom.Size = new Size(280, 27);
+ numericUpDownCountRoom.TabIndex = 13;
+ //
+ // FormHotel
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(numericUpDownCountRoom);
+ Controls.Add(numericUpDownCountStar);
+ Controls.Add(label4);
+ Controls.Add(label3);
+ Controls.Add(label2);
+ Controls.Add(label1);
+ Controls.Add(textBoxAddress);
+ Controls.Add(textBoxName);
+ Controls.Add(button3);
+ Controls.Add(button2);
+ Controls.Add(button1);
+ Controls.Add(dataGridView);
+ Name = "FormHotel";
+ Text = "FormHotel";
+ Load += FormHotel_Load;
+ ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownCountStar).EndInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownCountRoom).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private DataGridView dataGridView;
+ private Button button1;
+ private Button button2;
+ private Button button3;
+ private TextBox textBoxName;
+ private TextBox textBoxAddress;
+ private Label label1;
+ private Label label2;
+ private Label label3;
+ private Label label4;
+ private NumericUpDown numericUpDownCountStar;
+ private NumericUpDown numericUpDownCountRoom;
+ }
+}
\ No newline at end of file
diff --git a/Hotel/HotelView/FormHotel.cs b/Hotel/HotelView/FormHotel.cs
new file mode 100644
index 0000000..c4c42b8
--- /dev/null
+++ b/Hotel/HotelView/FormHotel.cs
@@ -0,0 +1,126 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+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 HotelView
+{
+ public partial class FormHotel : Form
+ {
+ private readonly IHotelLogic _guestLogic;
+ public FormHotel(IHotelLogic guestLogic)
+ {
+ InitializeComponent();
+ _guestLogic = guestLogic;
+ }
+
+ private void FormHotel_Load(object sender, EventArgs e)
+ {
+ LoadData();
+ }
+
+ private void ButtonCreate_Click(object sender, EventArgs e)
+ {
+ Hotel newHotel = new()
+ {
+ HotelName = textBoxName.Text,
+ Address = textBoxAddress.Text,
+ CountStar = (int)numericUpDownCountStar.Value,
+ CountRoom = (int)numericUpDownCountRoom.Value,
+ };
+
+ _guestLogic.Create(newHotel);
+
+ LoadData();
+ }
+
+ private void LoadData()
+ {
+ var guests = _guestLogic.GetAll();
+
+ dataGridView.Rows.Clear();
+
+ if (dataGridView.ColumnCount == 0)
+ {
+ dataGridView.Columns.Add("Id", "ID");
+ dataGridView.Columns.Add("HotelName", "Название");
+ dataGridView.Columns.Add("Address", "Адрес");
+ dataGridView.Columns.Add("CountStar", "Количество звезд");
+ dataGridView.Columns.Add("CountRoom", "Количество комнат");
+ }
+
+ dataGridView.Columns["Id"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["HotelName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Address"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["CountStar"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["CountRoom"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+
+ foreach (var guest in guests)
+ {
+ dataGridView.Rows.Add(guest.Id, guest.HotelName, guest.Address, guest.CountStar, guest.CountRoom);
+ }
+ }
+
+ private void ButtonUpdate_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int guestId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ Hotel updatedHotel = new()
+ {
+ Id = guestId,
+ HotelName = textBoxName.Text,
+ Address = textBoxAddress.Text,
+ CountStar = (int)numericUpDownCountStar.Value,
+ CountRoom = (int)numericUpDownCountRoom.Value,
+ };
+
+ _guestLogic.Update(updatedHotel);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите гостинницу, информацию о которой необходимо обновить");
+ }
+ }
+
+ private void ButtonDelete_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int guestId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ _guestLogic.Delete(guestId);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите гостинницу, информацию о которой необходимо удалить");
+ }
+ }
+
+ private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
+ {
+ if (e.RowIndex >= 0)
+ {
+ DataGridViewRow row = dataGridView.Rows[e.RowIndex];
+ textBoxName.Text = row.Cells["HotelName"].Value.ToString();
+ textBoxAddress.Text = row.Cells["Address"].Value.ToString();
+ numericUpDownCountStar.Text = row.Cells["CountStar"].Value.ToString();
+ numericUpDownCountRoom.Text = row.Cells["CountRoom"].Value.ToString();
+ }
+ }
+ }
+}
diff --git a/Hotel/HotelView/FormHotel.resx b/Hotel/HotelView/FormHotel.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/Hotel/HotelView/FormHotel.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/Hotel/HotelView/FormMain.Designer.cs b/Hotel/HotelView/FormMain.Designer.cs
new file mode 100644
index 0000000..afaed44
--- /dev/null
+++ b/Hotel/HotelView/FormMain.Designer.cs
@@ -0,0 +1,183 @@
+namespace HotelView
+{
+ 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()
+ {
+ labelTest = new Label();
+ menuStrip3 = new MenuStrip();
+ справочникиToolStripMenuItem = new ToolStripMenuItem();
+ toolStripMenuItem1 = new ToolStripMenuItem();
+ guestToolStripMenuItem = new ToolStripMenuItem();
+ serviceToolStripMenuItem = new ToolStripMenuItem();
+ roomToolStripMenuItem = new ToolStripMenuItem();
+ reservationToolStripMenuItem = new ToolStripMenuItem();
+ serviceCheckToolStripMenuItem = new ToolStripMenuItem();
+ замерыВремениToolStripMenuItem = new ToolStripMenuItem();
+ get1000ToolStripMenuItem = new ToolStripMenuItem();
+ create1000ToolStripMenuItem = new ToolStripMenuItem();
+ update1000ToolStripMenuItem = new ToolStripMenuItem();
+ delete1000ToolStripMenuItem = new ToolStripMenuItem();
+ menuStrip3.SuspendLayout();
+ SuspendLayout();
+ //
+ // labelTest
+ //
+ labelTest.BorderStyle = BorderStyle.FixedSingle;
+ labelTest.Font = new Font("Segoe UI", 30F, FontStyle.Regular, GraphicsUnit.Point);
+ labelTest.Location = new Point(12, 40);
+ labelTest.Name = "labelTest";
+ labelTest.Size = new Size(776, 401);
+ labelTest.TabIndex = 4;
+ labelTest.TextAlign = ContentAlignment.MiddleCenter;
+ //
+ // menuStrip3
+ //
+ menuStrip3.ImageScalingSize = new Size(20, 20);
+ menuStrip3.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, замерыВремениToolStripMenuItem });
+ menuStrip3.Location = new Point(0, 0);
+ menuStrip3.Name = "menuStrip3";
+ menuStrip3.Size = new Size(800, 28);
+ menuStrip3.TabIndex = 7;
+ menuStrip3.Text = "menuStrip3";
+ //
+ // справочникиToolStripMenuItem
+ //
+ справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem1, guestToolStripMenuItem, serviceToolStripMenuItem, roomToolStripMenuItem, reservationToolStripMenuItem, serviceCheckToolStripMenuItem });
+ справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
+ справочникиToolStripMenuItem.Size = new Size(117, 24);
+ справочникиToolStripMenuItem.Text = "Справочники";
+ //
+ // toolStripMenuItem1
+ //
+ toolStripMenuItem1.Name = "toolStripMenuItem1";
+ toolStripMenuItem1.Size = new Size(178, 26);
+ toolStripMenuItem1.Text = "Hotel";
+ toolStripMenuItem1.Click += HotelToolStrip_Click;
+ //
+ // guestToolStripMenuItem
+ //
+ guestToolStripMenuItem.Name = "guestToolStripMenuItem";
+ guestToolStripMenuItem.Size = new Size(178, 26);
+ guestToolStripMenuItem.Text = "Guest";
+ guestToolStripMenuItem.Click += GuestToolStrip_Click;
+ //
+ // serviceToolStripMenuItem
+ //
+ serviceToolStripMenuItem.Name = "serviceToolStripMenuItem";
+ serviceToolStripMenuItem.Size = new Size(178, 26);
+ serviceToolStripMenuItem.Text = "Service";
+ serviceToolStripMenuItem.Click += ServiceToolStrip_Click;
+ //
+ // roomToolStripMenuItem
+ //
+ roomToolStripMenuItem.Name = "roomToolStripMenuItem";
+ roomToolStripMenuItem.Size = new Size(178, 26);
+ roomToolStripMenuItem.Text = "Room";
+ roomToolStripMenuItem.Click += RoomToolStrip_Click;
+ //
+ // reservationToolStripMenuItem
+ //
+ reservationToolStripMenuItem.Name = "reservationToolStripMenuItem";
+ reservationToolStripMenuItem.Size = new Size(178, 26);
+ reservationToolStripMenuItem.Text = "Reservation";
+ reservationToolStripMenuItem.Click += ReservationToolStrip_Click;
+ //
+ // serviceCheckToolStripMenuItem
+ //
+ serviceCheckToolStripMenuItem.Name = "serviceCheckToolStripMenuItem";
+ serviceCheckToolStripMenuItem.Size = new Size(178, 26);
+ serviceCheckToolStripMenuItem.Text = "ServiceCheck";
+ serviceCheckToolStripMenuItem.Click += ServiceCheckToolStrip_Click;
+ //
+ // замерыВремениToolStripMenuItem
+ //
+ замерыВремениToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { get1000ToolStripMenuItem, create1000ToolStripMenuItem, update1000ToolStripMenuItem, delete1000ToolStripMenuItem });
+ замерыВремениToolStripMenuItem.Name = "замерыВремениToolStripMenuItem";
+ замерыВремениToolStripMenuItem.Size = new Size(144, 24);
+ замерыВремениToolStripMenuItem.Text = "Замеры времени";
+ //
+ // get1000ToolStripMenuItem
+ //
+ get1000ToolStripMenuItem.Name = "get1000ToolStripMenuItem";
+ get1000ToolStripMenuItem.Size = new Size(177, 26);
+ get1000ToolStripMenuItem.Text = "Get 1000";
+ get1000ToolStripMenuItem.Click += get1000ToolStripMenuItem_Click;
+ //
+ // create1000ToolStripMenuItem
+ //
+ create1000ToolStripMenuItem.Name = "create1000ToolStripMenuItem";
+ create1000ToolStripMenuItem.Size = new Size(177, 26);
+ create1000ToolStripMenuItem.Text = "Create 1000";
+ create1000ToolStripMenuItem.Click += add1000ToolStripMenuItem_Click;
+ //
+ // update1000ToolStripMenuItem
+ //
+ update1000ToolStripMenuItem.Name = "update1000ToolStripMenuItem";
+ update1000ToolStripMenuItem.Size = new Size(177, 26);
+ update1000ToolStripMenuItem.Text = "Update 1000";
+ update1000ToolStripMenuItem.Click += update1000ToolStripMenuItem_Click;
+ //
+ // delete1000ToolStripMenuItem
+ //
+ delete1000ToolStripMenuItem.Name = "delete1000ToolStripMenuItem";
+ delete1000ToolStripMenuItem.Size = new Size(177, 26);
+ delete1000ToolStripMenuItem.Text = "Delete 1000";
+ delete1000ToolStripMenuItem.Click += delete1000ToolStripMenuItem_Click;
+ //
+ // FormMain
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(labelTest);
+ Controls.Add(menuStrip3);
+ Name = "FormMain";
+ Text = "Form1";
+ menuStrip3.ResumeLayout(false);
+ menuStrip3.PerformLayout();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+ private Label labelTest;
+ private MenuStrip menuStrip3;
+ private ToolStripMenuItem справочникиToolStripMenuItem;
+ private ToolStripMenuItem toolStripMenuItem1;
+ private ToolStripMenuItem замерыВремениToolStripMenuItem;
+ private ToolStripMenuItem get1000ToolStripMenuItem;
+ private ToolStripMenuItem create1000ToolStripMenuItem;
+ private ToolStripMenuItem update1000ToolStripMenuItem;
+ private ToolStripMenuItem delete1000ToolStripMenuItem;
+ private ToolStripMenuItem guestToolStripMenuItem;
+ private ToolStripMenuItem serviceToolStripMenuItem;
+ private ToolStripMenuItem roomToolStripMenuItem;
+ private ToolStripMenuItem reservationToolStripMenuItem;
+ private ToolStripMenuItem serviceCheckToolStripMenuItem;
+ }
+}
diff --git a/Hotel/HotelView/FormMain.cs b/Hotel/HotelView/FormMain.cs
new file mode 100644
index 0000000..9768242
--- /dev/null
+++ b/Hotel/HotelView/FormMain.cs
@@ -0,0 +1,146 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+
+namespace HotelView
+{
+ public partial class FormMain : Form
+ {
+ public FormMain()
+ {
+ InitializeComponent();
+ }
+
+ private void HotelToolStrip_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormHotel));
+ if (service is FormHotel form)
+ {
+ form.ShowDialog();
+ }
+ }
+
+ private void RoomToolStrip_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormRoom));
+ if (service is FormRoom form)
+ {
+ form.ShowDialog();
+ }
+ }
+
+ private void ReservationToolStrip_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormReservation));
+ if (service is FormReservation form)
+ {
+ form.ShowDialog();
+ }
+ }
+
+ private void GuestToolStrip_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormGuest));
+ if (service is FormGuest form)
+ {
+ form.ShowDialog();
+ }
+ }
+
+ private void ServiceToolStrip_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormService));
+ if (service is FormService form)
+ {
+ form.ShowDialog();
+ }
+ }
+
+ private void ServiceCheckToolStrip_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(FormServiceCheck));
+ if (service is FormServiceCheck form)
+ {
+ form.ShowDialog();
+ }
+ }
+
+
+ private void add1000ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(IHotelLogic));
+ if (service is IHotelLogic hotelLogic)
+ {
+ DateTime startTime = DateTime.Now;
+ for (int i = 0; i < 1000; i++)
+ {
+ Hotel hotel = new()
+ {
+ Id = i + 1000,
+ HotelName = " " + i,
+ Address = " " + i,
+ CountStar = i,
+ CountRoom = i
+ };
+ hotelLogic.CreateId(hotel);
+ }
+ DateTime endTime = DateTime.Now;
+
+ labelTest.Text = $" 1000 {(endTime - startTime).TotalMilliseconds} ";
+ }
+ }
+
+ private void get1000ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(IHotelLogic));
+ if (service is IHotelLogic hotelLogic)
+ {
+ DateTime startTime = DateTime.Now;
+ for (int i =0; i < 1000; i++)
+ hotelLogic.Get(i + 1000);
+ DateTime endTime = DateTime.Now;
+
+ labelTest.Text = $" 1000 {(endTime - startTime).TotalMilliseconds} ";
+ }
+ }
+
+ private void update1000ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(IHotelLogic));
+ if (service is IHotelLogic hoteLogic)
+ {
+ DateTime startTime = DateTime.Now;
+ for (int i = 0; i < 1000; i++)
+ {
+ Hotel hotel = new()
+ {
+ Id = i + 1000,
+ HotelName = " " + i + 2000,
+ Address = " " + i + 2000,
+ CountStar = i + 2000,
+ CountRoom = i + 2000
+ };
+ hoteLogic.Update(hotel);
+ }
+ DateTime endTime = DateTime.Now;
+
+ labelTest.Text = $" 1000 {(endTime - startTime).TotalMilliseconds} ";
+ }
+ }
+
+ private void delete1000ToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ var service = Program.ServiceProvider?.GetService(typeof(IHotelLogic));
+ if (service is IHotelLogic hoteLogic)
+ {
+ DateTime startTime = DateTime.Now;
+ for (int i = 0; i < 1000; i++)
+ {
+ hoteLogic.Delete(i + 1000);
+ }
+ DateTime endTime = DateTime.Now;
+
+ labelTest.Text = $" 1000 {(endTime - startTime).TotalMilliseconds} ";
+ }
+ }
+ }
+}
diff --git a/Hotel/HotelView/FormMain.resx b/Hotel/HotelView/FormMain.resx
new file mode 100644
index 0000000..5e4b3cb
--- /dev/null
+++ b/Hotel/HotelView/FormMain.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 407, 27
+
+
\ No newline at end of file
diff --git a/Hotel/HotelView/FormReservation.Designer.cs b/Hotel/HotelView/FormReservation.Designer.cs
new file mode 100644
index 0000000..4b9d3ac
--- /dev/null
+++ b/Hotel/HotelView/FormReservation.Designer.cs
@@ -0,0 +1,218 @@
+namespace HotelView
+{
+ partial class FormReservation
+ {
+ ///
+ /// 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()
+ {
+ numericUpDownPrice = new NumericUpDown();
+ label5 = new Label();
+ labelAuth = new Label();
+ comboBoxGuest = new ComboBox();
+ button3 = new Button();
+ button2 = new Button();
+ button1 = new Button();
+ dataGridView = new DataGridView();
+ label1 = new Label();
+ comboBoxRoom = new ComboBox();
+ dateTimePickerDeparture = new DateTimePicker();
+ label3 = new Label();
+ dateTimePickerArrival = new DateTimePicker();
+ label2 = new Label();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+ SuspendLayout();
+ //
+ // numericUpDownPrice
+ //
+ numericUpDownPrice.Location = new Point(737, 332);
+ numericUpDownPrice.Name = "numericUpDownPrice";
+ numericUpDownPrice.Size = new Size(274, 27);
+ numericUpDownPrice.TabIndex = 56;
+ //
+ // label5
+ //
+ label5.AutoSize = true;
+ label5.Location = new Point(752, 309);
+ label5.Name = "label5";
+ label5.Size = new Size(45, 20);
+ label5.TabIndex = 55;
+ label5.Text = "Цена";
+ //
+ // labelAuth
+ //
+ labelAuth.AutoSize = true;
+ labelAuth.Location = new Point(752, 14);
+ labelAuth.Name = "labelAuth";
+ labelAuth.Size = new Size(46, 20);
+ labelAuth.TabIndex = 54;
+ labelAuth.Text = "Гость";
+ //
+ // comboBoxGuest
+ //
+ comboBoxGuest.FormattingEnabled = true;
+ comboBoxGuest.Location = new Point(737, 39);
+ comboBoxGuest.Margin = new Padding(3, 5, 3, 5);
+ comboBoxGuest.Name = "comboBoxGuest";
+ comboBoxGuest.Size = new Size(274, 28);
+ comboBoxGuest.TabIndex = 53;
+ //
+ // button3
+ //
+ button3.Location = new Point(923, 408);
+ button3.Name = "button3";
+ button3.Size = new Size(94, 29);
+ button3.TabIndex = 52;
+ button3.Text = "Удалить";
+ button3.UseVisualStyleBackColor = true;
+ button3.Click += ButtonDelete_Click;
+ //
+ // button2
+ //
+ button2.Location = new Point(823, 408);
+ button2.Name = "button2";
+ button2.Size = new Size(94, 29);
+ button2.TabIndex = 51;
+ button2.Text = "Изменить";
+ button2.UseVisualStyleBackColor = true;
+ button2.Click += ButtonUpdate_Click;
+ //
+ // button1
+ //
+ button1.Location = new Point(723, 408);
+ button1.Name = "button1";
+ button1.Size = new Size(94, 29);
+ button1.TabIndex = 50;
+ button1.Text = "Добавить";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += ButtonCreate_Click;
+ //
+ // dataGridView
+ //
+ dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView.Location = new Point(1, -1);
+ dataGridView.Name = "dataGridView";
+ dataGridView.RowHeadersWidth = 51;
+ dataGridView.RowTemplate.Height = 29;
+ dataGridView.Size = new Size(696, 451);
+ dataGridView.TabIndex = 49;
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(752, 89);
+ label1.Name = "label1";
+ label1.Size = new Size(69, 20);
+ label1.TabIndex = 58;
+ label1.Text = "Комната";
+ //
+ // comboBoxRoom
+ //
+ comboBoxRoom.FormattingEnabled = true;
+ comboBoxRoom.Location = new Point(737, 114);
+ comboBoxRoom.Margin = new Padding(3, 5, 3, 5);
+ comboBoxRoom.Name = "comboBoxRoom";
+ comboBoxRoom.Size = new Size(274, 28);
+ comboBoxRoom.TabIndex = 57;
+ //
+ // dateTimePickerDeparture
+ //
+ dateTimePickerDeparture.Location = new Point(737, 267);
+ dateTimePickerDeparture.Name = "dateTimePickerDeparture";
+ dateTimePickerDeparture.Size = new Size(280, 27);
+ dateTimePickerDeparture.TabIndex = 60;
+ //
+ // label3
+ //
+ label3.AutoSize = true;
+ label3.Location = new Point(752, 244);
+ label3.Name = "label3";
+ label3.Size = new Size(95, 20);
+ label3.TabIndex = 59;
+ label3.Text = "Дата выезда";
+ //
+ // dateTimePickerArrival
+ //
+ dateTimePickerArrival.Location = new Point(737, 188);
+ dateTimePickerArrival.Name = "dateTimePickerArrival";
+ dateTimePickerArrival.Size = new Size(274, 27);
+ dateTimePickerArrival.TabIndex = 62;
+ //
+ // label2
+ //
+ label2.AutoSize = true;
+ label2.Location = new Point(752, 165);
+ label2.Name = "label2";
+ label2.Size = new Size(91, 20);
+ label2.TabIndex = 61;
+ label2.Text = "Дата заезда";
+ //
+ // FormReservation
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(1030, 450);
+ Controls.Add(dateTimePickerArrival);
+ Controls.Add(label2);
+ Controls.Add(dateTimePickerDeparture);
+ Controls.Add(label3);
+ Controls.Add(label1);
+ Controls.Add(comboBoxRoom);
+ Controls.Add(numericUpDownPrice);
+ Controls.Add(label5);
+ Controls.Add(labelAuth);
+ Controls.Add(comboBoxGuest);
+ Controls.Add(button3);
+ Controls.Add(button2);
+ Controls.Add(button1);
+ Controls.Add(dataGridView);
+ Name = "FormReservation";
+ Text = "FormReservation";
+ Load += FormReservation_Load;
+ ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private NumericUpDown numericUpDownPrice;
+ private Label label5;
+ private Label labelAuth;
+ private ComboBox comboBoxGuest;
+ private Button button3;
+ private Button button2;
+ private Button button1;
+ private DataGridView dataGridView;
+ private Label label1;
+ private ComboBox comboBoxRoom;
+ private DateTimePicker dateTimePickerDeparture;
+ private Label label3;
+ private DateTimePicker dateTimePickerArrival;
+ private Label label2;
+ }
+}
\ No newline at end of file
diff --git a/Hotel/HotelView/FormReservation.cs b/Hotel/HotelView/FormReservation.cs
new file mode 100644
index 0000000..68994a6
--- /dev/null
+++ b/Hotel/HotelView/FormReservation.cs
@@ -0,0 +1,156 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+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 HotelView
+{
+ public partial class FormReservation : Form
+ {
+ private readonly IReservationLogic _reservationLogic;
+ private readonly IGuestLogic _guestLogic;
+ private readonly IRoomLogic _roomLogic;
+ public FormReservation(IReservationLogic reservationLogic, IGuestLogic guestLogic, IRoomLogic roomLogic)
+ {
+ InitializeComponent();
+ _reservationLogic = reservationLogic;
+ _guestLogic = guestLogic;
+ _roomLogic = roomLogic;
+ }
+
+ private void FormReservation_Load(object sender, EventArgs e)
+ {
+ LoadData();
+ }
+
+ private void ButtonCreate_Click(object sender, EventArgs e)
+ {
+ Reservation newReservation = new()
+ {
+ GuestId = ((Guest?)comboBoxGuest.SelectedItem)?.Id ?? 0,
+ RoomId = ((Room?)comboBoxRoom.SelectedItem)?.Id ?? 0,
+ ArrivalDate = ToDateOnly(dateTimePickerArrival.Value),
+ DepartureDate = ToDateOnly(dateTimePickerDeparture.Value),
+ Price = (int)numericUpDownPrice.Value,
+ };
+
+ _reservationLogic.Create(newReservation);
+
+ LoadData();
+ }
+
+ private void LoadData()
+ {
+ var reservations = _reservationLogic.GetAll();
+
+ dataGridView.Rows.Clear();
+
+ if (dataGridView.ColumnCount == 0)
+ {
+ dataGridView.Columns.Add("Id", "ID");
+ dataGridView.Columns.Add("GuestId", "GuestId");
+ dataGridView.Columns["GuestId"].Visible = false;
+ dataGridView.Columns.Add("Guest", "Гость");
+ dataGridView.Columns.Add("RoomId", "RoomId");
+ dataGridView.Columns["RoomId"].Visible = false;
+ dataGridView.Columns.Add("Room", "Комната");
+ dataGridView.Columns.Add("ArrivalDate", "Дата заезда");
+ dataGridView.Columns.Add("DepartureDate", "Дата выезда");
+ dataGridView.Columns.Add("Price", "Цена");
+
+ }
+
+ dataGridView.Columns["Id"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["Guest"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Room"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["ArrivalDate"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["DepartureDate"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["Price"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+
+ comboBoxGuest.DataSource = _guestLogic.GetAll();
+ comboBoxGuest.DisplayMember = "Guest";
+ comboBoxGuest.ValueMember = "FIO";
+
+ comboBoxRoom.DataSource = _roomLogic.GetAll();
+ comboBoxRoom.DisplayMember = "Room";
+ comboBoxRoom.ValueMember = "Id";
+
+ foreach (var reservation in reservations)
+ {
+ dataGridView.Rows.Add(reservation.Id, reservation.GuestId, _guestLogic.Get(reservation.GuestId)?.FIO, reservation.RoomId, reservation.ArrivalDate,
+ reservation.DepartureDate, reservation.Price);
+ }
+ }
+
+ private void ButtonUpdate_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int reservationId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ Reservation updatedReservation = new()
+ {
+ Id = reservationId,
+ GuestId = ((Guest?)comboBoxGuest.SelectedItem)?.Id ?? 0,
+ RoomId = ((Room?)comboBoxRoom.SelectedItem)?.Id ?? 0,
+ ArrivalDate = ToDateOnly(dateTimePickerArrival.Value),
+ DepartureDate = ToDateOnly(dateTimePickerDeparture.Value),
+ Price = (int)numericUpDownPrice.Value,
+ };
+
+ _reservationLogic.Update(updatedReservation);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите статью, информацию о которой необходимо обновить");
+ }
+ }
+
+ private void ButtonDelete_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int reservationId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ _reservationLogic.Delete(reservationId);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите статью, информацию о которой необходимо удалить");
+ }
+ }
+
+ private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
+ {
+ if (e.RowIndex >= 0)
+ {
+ DataGridViewRow row = dataGridView.Rows[e.RowIndex];
+ comboBoxGuest.SelectedValue = row.Cells["Guest"].Value ?? new Guest { FIO = "Неизвестнo" };
+ comboBoxRoom.SelectedValue = row.Cells["Room"].Value ?? new Room { Id = 0 };
+ dateTimePickerArrival.Text = row.Cells["ArrivalDate"].Value.ToString();
+ dateTimePickerDeparture.Text = row.Cells["DepartureDate"].Value.ToString();
+ numericUpDownPrice.Text = row.Cells["Price"].Value.ToString();
+ }
+ }
+
+ public DateOnly ToDateOnly(DateTime dateTime)
+ {
+ var DateTime = dateTime;
+ var Date = new DateOnly(DateTime.Year, DateTime.Month, DateTime.Day);
+ return Date;
+ }
+ }
+}
diff --git a/Hotel/HotelView/FormReservation.resx b/Hotel/HotelView/FormReservation.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/Hotel/HotelView/FormReservation.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/Hotel/HotelView/FormRoom.Designer.cs b/Hotel/HotelView/FormRoom.Designer.cs
new file mode 100644
index 0000000..a63d2d9
--- /dev/null
+++ b/Hotel/HotelView/FormRoom.Designer.cs
@@ -0,0 +1,243 @@
+namespace HotelView
+{
+ partial class FormRoom
+ {
+ ///
+ /// 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()
+ {
+ numericUpFlor = new NumericUpDown();
+ numericUpDownCountPlace = new NumericUpDown();
+ label4 = new Label();
+ label3 = new Label();
+ label2 = new Label();
+ label1 = new Label();
+ textBoxNumber = new TextBox();
+ textBoxCategory = new TextBox();
+ button3 = new Button();
+ button2 = new Button();
+ button1 = new Button();
+ dataGridView = new DataGridView();
+ labelAuthor = new Label();
+ comboBoxHotel = new ComboBox();
+ numericUpDownPrice = new NumericUpDown();
+ label5 = new Label();
+ ((System.ComponentModel.ISupportInitialize)numericUpFlor).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownCountPlace).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit();
+ SuspendLayout();
+ //
+ // numericUpFlor
+ //
+ numericUpFlor.Location = new Point(954, 229);
+ numericUpFlor.Minimum = new decimal(new int[] { 5, 0, 0, int.MinValue });
+ numericUpFlor.Name = "numericUpFlor";
+ numericUpFlor.Size = new Size(274, 27);
+ numericUpFlor.TabIndex = 25;
+ //
+ // numericUpDownCountPlace
+ //
+ numericUpDownCountPlace.Location = new Point(954, 160);
+ numericUpDownCountPlace.Name = "numericUpDownCountPlace";
+ numericUpDownCountPlace.Size = new Size(274, 27);
+ numericUpDownCountPlace.TabIndex = 24;
+ //
+ // label4
+ //
+ label4.AutoSize = true;
+ label4.Location = new Point(969, 206);
+ label4.Name = "label4";
+ label4.Size = new Size(43, 20);
+ label4.TabIndex = 23;
+ label4.Text = "Этаж";
+ //
+ // label3
+ //
+ label3.AutoSize = true;
+ label3.Location = new Point(967, 137);
+ label3.Name = "label3";
+ label3.Size = new Size(126, 20);
+ label3.TabIndex = 22;
+ label3.Text = "Количество мест";
+ //
+ // label2
+ //
+ label2.AutoSize = true;
+ label2.Location = new Point(967, 273);
+ label2.Name = "label2";
+ label2.Size = new Size(122, 20);
+ label2.TabIndex = 21;
+ label2.Text = "Номер комнаты";
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(969, 72);
+ label1.Name = "label1";
+ label1.Size = new Size(81, 20);
+ label1.TabIndex = 20;
+ label1.Text = "Категория";
+ //
+ // textBoxNumber
+ //
+ textBoxNumber.Location = new Point(954, 296);
+ textBoxNumber.Name = "textBoxNumber";
+ textBoxNumber.Size = new Size(274, 27);
+ textBoxNumber.TabIndex = 19;
+ //
+ // textBoxCategory
+ //
+ textBoxCategory.Location = new Point(954, 95);
+ textBoxCategory.Name = "textBoxCategory";
+ textBoxCategory.Size = new Size(274, 27);
+ textBoxCategory.TabIndex = 18;
+ //
+ // button3
+ //
+ button3.Location = new Point(1140, 408);
+ button3.Name = "button3";
+ button3.Size = new Size(94, 29);
+ button3.TabIndex = 17;
+ button3.Text = "Удалить";
+ button3.UseVisualStyleBackColor = true;
+ button3.Click += ButtonDelete_Click;
+ //
+ // button2
+ //
+ button2.Location = new Point(1040, 408);
+ button2.Name = "button2";
+ button2.Size = new Size(94, 29);
+ button2.TabIndex = 16;
+ button2.Text = "Изменить";
+ button2.UseVisualStyleBackColor = true;
+ button2.Click += ButtonUpdate_Click;
+ //
+ // button1
+ //
+ button1.Location = new Point(940, 408);
+ button1.Name = "button1";
+ button1.Size = new Size(94, 29);
+ button1.TabIndex = 15;
+ button1.Text = "Добавить";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += ButtonCreate_Click;
+ //
+ // dataGridView
+ //
+ dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView.Location = new Point(1, 0);
+ dataGridView.Name = "dataGridView";
+ dataGridView.RowHeadersWidth = 51;
+ dataGridView.RowTemplate.Height = 29;
+ dataGridView.Size = new Size(910, 451);
+ dataGridView.TabIndex = 14;
+ //
+ // labelAuthor
+ //
+ labelAuthor.AutoSize = true;
+ labelAuthor.Location = new Point(969, 14);
+ labelAuthor.Name = "labelAuthor";
+ labelAuthor.Size = new Size(82, 20);
+ labelAuthor.TabIndex = 46;
+ labelAuthor.Text = "Гостиница";
+ //
+ // comboBoxHotel
+ //
+ comboBoxHotel.FormattingEnabled = true;
+ comboBoxHotel.Location = new Point(954, 39);
+ comboBoxHotel.Margin = new Padding(3, 5, 3, 5);
+ comboBoxHotel.Name = "comboBoxHotel";
+ comboBoxHotel.Size = new Size(274, 28);
+ comboBoxHotel.TabIndex = 45;
+ //
+ // numericUpDownPrice
+ //
+ numericUpDownPrice.Location = new Point(954, 359);
+ numericUpDownPrice.Name = "numericUpDownPrice";
+ numericUpDownPrice.Size = new Size(274, 27);
+ numericUpDownPrice.TabIndex = 48;
+ //
+ // label5
+ //
+ label5.AutoSize = true;
+ label5.Location = new Point(969, 336);
+ label5.Name = "label5";
+ label5.Size = new Size(45, 20);
+ label5.TabIndex = 47;
+ label5.Text = "Цена";
+ //
+ // FormRoom
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(1249, 450);
+ Controls.Add(numericUpDownPrice);
+ Controls.Add(label5);
+ Controls.Add(labelAuthor);
+ Controls.Add(comboBoxHotel);
+ Controls.Add(numericUpFlor);
+ Controls.Add(numericUpDownCountPlace);
+ Controls.Add(label4);
+ Controls.Add(label3);
+ Controls.Add(label2);
+ Controls.Add(label1);
+ Controls.Add(textBoxNumber);
+ Controls.Add(textBoxCategory);
+ Controls.Add(button3);
+ Controls.Add(button2);
+ Controls.Add(button1);
+ Controls.Add(dataGridView);
+ Name = "FormRoom";
+ Text = "FormRoom";
+ Load += FormRoom_Load;
+ ((System.ComponentModel.ISupportInitialize)numericUpFlor).EndInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownCountPlace).EndInit();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private NumericUpDown numericUpFlor;
+ private NumericUpDown numericUpDownCountPlace;
+ private Label label4;
+ private Label label3;
+ private Label label2;
+ private Label label1;
+ private TextBox textBoxNumber;
+ private TextBox textBoxCategory;
+ private Button button3;
+ private Button button2;
+ private Button button1;
+ private DataGridView dataGridView;
+ private Label labelAuthor;
+ private ComboBox comboBoxHotel;
+ private NumericUpDown numericUpDownPrice;
+ private Label label5;
+ }
+}
\ No newline at end of file
diff --git a/Hotel/HotelView/FormRoom.cs b/Hotel/HotelView/FormRoom.cs
new file mode 100644
index 0000000..5e3e278
--- /dev/null
+++ b/Hotel/HotelView/FormRoom.cs
@@ -0,0 +1,146 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+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 HotelView
+{
+ public partial class FormRoom : Form
+ {
+ private readonly IRoomLogic _roomLogic;
+ private readonly IHotelLogic _hotelLogic;
+ public FormRoom(IRoomLogic roomLogic, IHotelLogic hotelLogic)
+ {
+ InitializeComponent();
+ _roomLogic = roomLogic;
+ _hotelLogic = hotelLogic;
+ }
+
+ private void FormRoom_Load(object sender, EventArgs e)
+ {
+ LoadData();
+ }
+
+ private void ButtonCreate_Click(object sender, EventArgs e)
+ {
+ Room newRoom = new()
+ {
+ HotelId = ((Hotel?)comboBoxHotel.SelectedItem)?.Id ?? 0,
+ Category = textBoxCategory.Text,
+ CountPlace = (int)numericUpDownCountPlace.Value,
+ Flor = (int)numericUpFlor.Value,
+ Number = textBoxNumber.Text,
+ Price = (int)numericUpDownPrice.Value,
+ };
+
+ _roomLogic.Create(newRoom);
+
+ LoadData();
+ }
+
+ private void LoadData()
+ {
+ var rooms = _roomLogic.GetAll();
+
+ dataGridView.Rows.Clear();
+
+ if (dataGridView.ColumnCount == 0)
+ {
+ dataGridView.Columns.Add("Id", "ID");
+ dataGridView.Columns.Add("HotelId", "HotelId");
+ dataGridView.Columns["HotelId"].Visible = false;
+ dataGridView.Columns.Add("Hotel", "Гостиница");
+ dataGridView.Columns.Add("Category", "Категория");
+ dataGridView.Columns.Add("CountPlace", "Количество мест");
+ dataGridView.Columns.Add("Flor", "Этаж");
+ dataGridView.Columns.Add("Number", "Номер");
+ dataGridView.Columns.Add("Price", "Цена");
+
+ }
+
+ dataGridView.Columns["Id"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["Hotel"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Category"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["CountPlace"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["Flor"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["Number"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns["Price"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+
+ comboBoxHotel.DataSource = _hotelLogic.GetAll();
+ comboBoxHotel.DisplayMember = "Hotel";
+ comboBoxHotel.ValueMember = "HotelName";
+
+ foreach (var room in rooms)
+ {
+ dataGridView.Rows.Add(room.Id, room.HotelId, _hotelLogic.Get(room.HotelId)?.HotelName, room.Category, room.CountPlace,
+ room.Flor, room.Number, room.Price);
+ }
+ }
+
+ private void ButtonUpdate_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int roomId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ Room updatedRoom = new()
+ {
+ Id = roomId,
+ HotelId = ((Hotel?)comboBoxHotel.SelectedItem)?.Id ?? 0,
+ Category = textBoxCategory.Text,
+ CountPlace = (int)numericUpDownCountPlace.Value,
+ Flor = (int)numericUpFlor.Value,
+ Number = textBoxNumber.Text,
+ Price = (int)numericUpDownPrice.Value,
+ };
+
+ _roomLogic.Update(updatedRoom);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите статью, информацию о которой необходимо обновить");
+ }
+ }
+
+ private void ButtonDelete_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int roomId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ _roomLogic.Delete(roomId);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите статью, информацию о которой необходимо удалить");
+ }
+ }
+
+ private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
+ {
+ if (e.RowIndex >= 0)
+ {
+ DataGridViewRow row = dataGridView.Rows[e.RowIndex];
+ comboBoxHotel.SelectedValue = row.Cells["Hotel"].Value ?? new Hotel { HotelName = "Неизвестнo" };
+ textBoxCategory.Text = row.Cells["Category"].Value.ToString();
+ numericUpDownCountPlace.Text = row.Cells["CountPlace"].Value.ToString();
+ numericUpFlor.Text = row.Cells["Flor"].Value.ToString();
+ textBoxNumber.Text = row.Cells["Number"].Value.ToString();
+ numericUpDownPrice.Text = row.Cells["Price"].Value.ToString();
+ }
+ }
+ }
+}
diff --git a/Hotel/HotelView/FormRoom.resx b/Hotel/HotelView/FormRoom.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/Hotel/HotelView/FormRoom.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/Hotel/HotelView/FormService.Designer.cs b/Hotel/HotelView/FormService.Designer.cs
new file mode 100644
index 0000000..d50d83f
--- /dev/null
+++ b/Hotel/HotelView/FormService.Designer.cs
@@ -0,0 +1,149 @@
+namespace HotelView
+{
+ partial class FormService
+ {
+ ///
+ /// 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()
+ {
+ numericUpDownPrice = new NumericUpDown();
+ label4 = new Label();
+ label1 = new Label();
+ textBoxName = new TextBox();
+ button3 = new Button();
+ button2 = new Button();
+ button1 = new Button();
+ dataGridView = new DataGridView();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+ SuspendLayout();
+ //
+ // numericUpDownPrice
+ //
+ numericUpDownPrice.Location = new Point(508, 242);
+ numericUpDownPrice.Maximum = new decimal(new int[] { 100000, 0, 0, 0 });
+ numericUpDownPrice.Name = "numericUpDownPrice";
+ numericUpDownPrice.Size = new Size(280, 27);
+ numericUpDownPrice.TabIndex = 25;
+ //
+ // label4
+ //
+ label4.AutoSize = true;
+ label4.Location = new Point(529, 219);
+ label4.Name = "label4";
+ label4.Size = new Size(45, 20);
+ label4.TabIndex = 23;
+ label4.Text = "Цена";
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(529, 104);
+ label1.Name = "label1";
+ label1.Size = new Size(125, 20);
+ label1.TabIndex = 20;
+ label1.Text = "Название услуги";
+ //
+ // textBoxName
+ //
+ textBoxName.Location = new Point(508, 127);
+ textBoxName.Name = "textBoxName";
+ textBoxName.Size = new Size(280, 27);
+ textBoxName.TabIndex = 18;
+ //
+ // button3
+ //
+ button3.Location = new Point(700, 410);
+ button3.Name = "button3";
+ button3.Size = new Size(94, 29);
+ button3.TabIndex = 17;
+ button3.Text = "Удалить";
+ button3.UseVisualStyleBackColor = true;
+ button3.Click += ButtonDelete_Click;
+ //
+ // button2
+ //
+ button2.Location = new Point(600, 410);
+ button2.Name = "button2";
+ button2.Size = new Size(94, 29);
+ button2.TabIndex = 16;
+ button2.Text = "Изменить";
+ button2.UseVisualStyleBackColor = true;
+ button2.Click += ButtonUpdate_Click;
+ //
+ // button1
+ //
+ button1.Location = new Point(500, 410);
+ button1.Name = "button1";
+ button1.Size = new Size(94, 29);
+ button1.TabIndex = 15;
+ button1.Text = "Добавить";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += ButtonCreate_Click;
+ //
+ // dataGridView
+ //
+ dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView.Location = new Point(6, 1);
+ dataGridView.Name = "dataGridView";
+ dataGridView.RowHeadersWidth = 51;
+ dataGridView.RowTemplate.Height = 29;
+ dataGridView.Size = new Size(478, 448);
+ dataGridView.TabIndex = 14;
+ //
+ // FormService
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(800, 450);
+ Controls.Add(numericUpDownPrice);
+ Controls.Add(label4);
+ Controls.Add(label1);
+ Controls.Add(textBoxName);
+ Controls.Add(button3);
+ Controls.Add(button2);
+ Controls.Add(button1);
+ Controls.Add(dataGridView);
+ Name = "FormService";
+ Text = "FormService";
+ Load += FormService_Load;
+ ((System.ComponentModel.ISupportInitialize)numericUpDownPrice).EndInit();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private NumericUpDown numericUpDownPrice;
+ private Label label4;
+ private Label label1;
+ private TextBox textBoxName;
+ private Button button3;
+ private Button button2;
+ private Button button1;
+ private DataGridView dataGridView;
+ }
+}
\ No newline at end of file
diff --git a/Hotel/HotelView/FormService.cs b/Hotel/HotelView/FormService.cs
new file mode 100644
index 0000000..3bbff3e
--- /dev/null
+++ b/Hotel/HotelView/FormService.cs
@@ -0,0 +1,116 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+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 HotelView
+{
+ public partial class FormService : Form
+ {
+ private readonly IServiceLogic _serviceLogic;
+ public FormService(IServiceLogic serviceLogic)
+ {
+ InitializeComponent();
+ _serviceLogic = serviceLogic;
+ }
+
+ private void FormService_Load(object sender, EventArgs e)
+ {
+ LoadData();
+ }
+
+ private void ButtonCreate_Click(object sender, EventArgs e)
+ {
+ Service newService = new()
+ {
+ Name = textBoxName.Text,
+ Price = (double)numericUpDownPrice.Value,
+ };
+
+ _serviceLogic.Create(newService);
+
+ LoadData();
+ }
+
+ private void LoadData()
+ {
+ var services = _serviceLogic.GetAll();
+
+ dataGridView.Rows.Clear();
+
+ if (dataGridView.ColumnCount == 0)
+ {
+ dataGridView.Columns.Add("Id", "ID");
+ dataGridView.Columns.Add("Name", "Название");
+ dataGridView.Columns.Add("Price", "Цена");
+ }
+
+ dataGridView.Columns["Id"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Price"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+
+ foreach (var service in services)
+ {
+ dataGridView.Rows.Add(service.Id, service.Name, service.Price);
+ }
+ }
+
+ private void ButtonUpdate_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int serviceId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ Service updatedService = new()
+ {
+ Id = serviceId,
+ Name = textBoxName.Text,
+ Price = (double)numericUpDownPrice.Value
+ };
+
+ _serviceLogic.Update(updatedService);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите гостинницу, информацию о которой необходимо обновить");
+ }
+ }
+
+ private void ButtonDelete_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int serviceId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ _serviceLogic.Delete(serviceId);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите гостинницу, информацию о которой необходимо удалить");
+ }
+ }
+
+ private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
+ {
+ if (e.RowIndex >= 0)
+ {
+ DataGridViewRow row = dataGridView.Rows[e.RowIndex];
+ textBoxName.Text = row.Cells["Name"].Value.ToString();
+ numericUpDownPrice.Text = row.Cells["Price"].Value.ToString();
+ }
+ }
+ }
+}
diff --git a/Hotel/HotelView/FormService.resx b/Hotel/HotelView/FormService.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/Hotel/HotelView/FormService.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/Hotel/HotelView/FormServiceCheck.Designer.cs b/Hotel/HotelView/FormServiceCheck.Designer.cs
new file mode 100644
index 0000000..f6db195
--- /dev/null
+++ b/Hotel/HotelView/FormServiceCheck.Designer.cs
@@ -0,0 +1,196 @@
+namespace HotelView
+{
+ partial class FormServiceCheck
+ {
+ ///
+ /// 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()
+ {
+ dateTimePicker = new DateTimePicker();
+ label2 = new Label();
+ label1 = new Label();
+ comboBoxService = new ComboBox();
+ numericUpDownCount = new NumericUpDown();
+ label5 = new Label();
+ labelAuth = new Label();
+ comboBoxReservation = new ComboBox();
+ button3 = new Button();
+ button2 = new Button();
+ button1 = new Button();
+ dataGridView = new DataGridView();
+ ((System.ComponentModel.ISupportInitialize)numericUpDownCount).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
+ SuspendLayout();
+ //
+ // dateTimePicker
+ //
+ dateTimePicker.Location = new Point(628, 305);
+ dateTimePicker.Name = "dateTimePicker";
+ dateTimePicker.Size = new Size(274, 27);
+ dateTimePicker.TabIndex = 74;
+ //
+ // label2
+ //
+ label2.AutoSize = true;
+ label2.Location = new Point(643, 282);
+ label2.Name = "label2";
+ label2.Size = new Size(89, 20);
+ label2.TabIndex = 73;
+ label2.Text = "Дата услуги";
+ //
+ // label1
+ //
+ label1.AutoSize = true;
+ label1.Location = new Point(643, 90);
+ label1.Name = "label1";
+ label1.Size = new Size(54, 20);
+ label1.TabIndex = 72;
+ label1.Text = "Услуга";
+ //
+ // comboBoxService
+ //
+ comboBoxService.FormattingEnabled = true;
+ comboBoxService.Location = new Point(628, 115);
+ comboBoxService.Margin = new Padding(3, 5, 3, 5);
+ comboBoxService.Name = "comboBoxService";
+ comboBoxService.Size = new Size(274, 28);
+ comboBoxService.TabIndex = 71;
+ //
+ // numericUpDownCount
+ //
+ numericUpDownCount.Location = new Point(628, 207);
+ numericUpDownCount.Name = "numericUpDownCount";
+ numericUpDownCount.Size = new Size(274, 27);
+ numericUpDownCount.TabIndex = 70;
+ //
+ // label5
+ //
+ label5.AutoSize = true;
+ label5.Location = new Point(643, 184);
+ label5.Name = "label5";
+ label5.Size = new Size(90, 20);
+ label5.TabIndex = 69;
+ label5.Text = "Количество";
+ //
+ // labelAuth
+ //
+ labelAuth.AutoSize = true;
+ labelAuth.Location = new Point(643, 15);
+ labelAuth.Name = "labelAuth";
+ labelAuth.Size = new Size(114, 20);
+ labelAuth.TabIndex = 68;
+ labelAuth.Text = "Бронирование";
+ //
+ // comboBoxReservation
+ //
+ comboBoxReservation.FormattingEnabled = true;
+ comboBoxReservation.Location = new Point(628, 40);
+ comboBoxReservation.Margin = new Padding(3, 5, 3, 5);
+ comboBoxReservation.Name = "comboBoxReservation";
+ comboBoxReservation.Size = new Size(274, 28);
+ comboBoxReservation.TabIndex = 67;
+ //
+ // button3
+ //
+ button3.Location = new Point(814, 409);
+ button3.Name = "button3";
+ button3.Size = new Size(94, 29);
+ button3.TabIndex = 66;
+ button3.Text = "Удалить";
+ button3.UseVisualStyleBackColor = true;
+ button3.Click += ButtonDelete_Click;
+ //
+ // button2
+ //
+ button2.Location = new Point(714, 409);
+ button2.Name = "button2";
+ button2.Size = new Size(94, 29);
+ button2.TabIndex = 65;
+ button2.Text = "Изменить";
+ button2.UseVisualStyleBackColor = true;
+ button2.Click += ButtonUpdate_Click;
+ //
+ // button1
+ //
+ button1.Location = new Point(614, 409);
+ button1.Name = "button1";
+ button1.Size = new Size(94, 29);
+ button1.TabIndex = 64;
+ button1.Text = "Добавить";
+ button1.UseVisualStyleBackColor = true;
+ button1.Click += ButtonCreate_Click;
+ //
+ // dataGridView
+ //
+ dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ dataGridView.Location = new Point(-1, 2);
+ dataGridView.Name = "dataGridView";
+ dataGridView.RowHeadersWidth = 51;
+ dataGridView.RowTemplate.Height = 29;
+ dataGridView.Size = new Size(609, 446);
+ dataGridView.TabIndex = 63;
+ //
+ // FormServiceCheck
+ //
+ AutoScaleDimensions = new SizeF(8F, 20F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(916, 450);
+ Controls.Add(dateTimePicker);
+ Controls.Add(label2);
+ Controls.Add(label1);
+ Controls.Add(comboBoxService);
+ Controls.Add(numericUpDownCount);
+ Controls.Add(label5);
+ Controls.Add(labelAuth);
+ Controls.Add(comboBoxReservation);
+ Controls.Add(button3);
+ Controls.Add(button2);
+ Controls.Add(button1);
+ Controls.Add(dataGridView);
+ Name = "FormServiceCheck";
+ Text = "FormServiceCheck";
+ Load += FormServiceCheck_Load;
+ ((System.ComponentModel.ISupportInitialize)numericUpDownCount).EndInit();
+ ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
+ }
+
+ #endregion
+
+ private DateTimePicker dateTimePicker;
+ private Label label2;
+ private Label label1;
+ private ComboBox comboBoxService;
+ private NumericUpDown numericUpDownCount;
+ private Label label5;
+ private Label labelAuth;
+ private ComboBox comboBoxReservation;
+ private Button button3;
+ private Button button2;
+ private Button button1;
+ private DataGridView dataGridView;
+ }
+}
\ No newline at end of file
diff --git a/Hotel/HotelView/FormServiceCheck.cs b/Hotel/HotelView/FormServiceCheck.cs
new file mode 100644
index 0000000..8331f52
--- /dev/null
+++ b/Hotel/HotelView/FormServiceCheck.cs
@@ -0,0 +1,151 @@
+using HotelAbstractions.Logic;
+using HotelAbstractions.Models;
+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 HotelView
+{
+ public partial class FormServiceCheck : Form
+ {
+ private readonly IServiceCheckLogic _serviceCheckLogic;
+ private readonly IReservationLogic _reservationLogic;
+ private readonly IServiceLogic _serviceLogic;
+ public FormServiceCheck(IServiceCheckLogic serviceCheckLogic, IReservationLogic reservationLogic, IServiceLogic serviceLogic)
+ {
+ InitializeComponent();
+ _serviceCheckLogic = serviceCheckLogic;
+ _reservationLogic = reservationLogic;
+ _serviceLogic = serviceLogic;
+ }
+
+ private void FormServiceCheck_Load(object sender, EventArgs e)
+ {
+ LoadData();
+ }
+
+ private void ButtonCreate_Click(object sender, EventArgs e)
+ {
+ ServiceCheck newServiceCheck = new()
+ {
+ ReservationId = ((Reservation?)comboBoxReservation.SelectedItem)?.Id ?? 0,
+ ServiceId = ((Service?)comboBoxService.SelectedItem)?.Id ?? 0,
+ Count = (int)numericUpDownCount.Value,
+ DateTime = dateTimePicker.Value,
+ };
+
+ _serviceCheckLogic.Create(newServiceCheck);
+
+ LoadData();
+ }
+
+ private void LoadData()
+ {
+ var serviceChecks = _serviceCheckLogic.GetAll();
+
+ dataGridView.Rows.Clear();
+
+ if (dataGridView.ColumnCount == 0)
+ {
+ dataGridView.Columns.Add("Id", "ID");
+ dataGridView.Columns.Add("ReservationId", "ReservationId");
+ dataGridView.Columns["ReservationId"].Visible = false;
+ dataGridView.Columns.Add("Reservation", "Бронирование");
+ dataGridView.Columns.Add("ServiceId", "ServiceId");
+ dataGridView.Columns["ServiceId"].Visible = false;
+ dataGridView.Columns.Add("Service", "Услуга");
+ dataGridView.Columns.Add("Count", "Количество");
+ dataGridView.Columns.Add("DateTime", "Дата время");
+
+ }
+
+ dataGridView.Columns["Id"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Reservation"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Service"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["Count"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+ dataGridView.Columns["DateTime"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
+
+ comboBoxReservation.DataSource = _reservationLogic.GetAll();
+ comboBoxReservation.DisplayMember = "Reservation";
+ comboBoxReservation.ValueMember = "Id";
+
+ comboBoxService.DataSource = _serviceLogic.GetAll();
+ comboBoxService.DisplayMember = "Service";
+ comboBoxService.ValueMember = "Name";
+
+ foreach (var serviceCheck in serviceChecks)
+ {
+ dataGridView.Rows.Add(serviceCheck.Id,
+ serviceCheck.ReservationId, _reservationLogic.Get(serviceCheck.ReservationId)?.Id,
+ serviceCheck.ServiceId, _serviceLogic.Get(serviceCheck.ServiceId)?.Name,
+ serviceCheck.Count,
+ serviceCheck.DateTime);
+ }
+ }
+
+ private void ButtonUpdate_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int serviceCheckId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ ServiceCheck updatedServiceCheck = new()
+ {
+ Id = serviceCheckId,
+ ReservationId = ((Reservation?)comboBoxReservation.SelectedItem)?.Id ?? 0,
+ ServiceId = ((Service?)comboBoxService.SelectedItem)?.Id ?? 0,
+ Count = (int)numericUpDownCount.Value,
+ DateTime = dateTimePicker.Value,
+ };
+
+ _serviceCheckLogic.Update(updatedServiceCheck);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите статью, информацию о которой необходимо обновить");
+ }
+ }
+
+ private void ButtonDelete_Click(object sender, EventArgs e)
+ {
+ if (dataGridView.SelectedRows.Count > 0)
+ {
+ DataGridViewRow selectedRow = dataGridView.SelectedRows[0];
+ int serviceCheckId = Convert.ToInt32(selectedRow.Cells["Id"].Value);
+
+ _serviceCheckLogic.Delete(serviceCheckId);
+
+ LoadData();
+ }
+ else
+ {
+ MessageBox.Show("Пожалуйста, выберите статью, информацию о которой необходимо удалить");
+ }
+ }
+
+ private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
+ {
+ if (e.RowIndex >= 0)
+ {
+ DataGridViewRow row = dataGridView.Rows[e.RowIndex];
+ comboBoxReservation.SelectedValue = row.Cells["Reservation"].Value ?? new Reservation { Id = 0 };
+ comboBoxService.SelectedValue = row.Cells["Service"].Value ?? new Service { Name = "Неизвестно" };
+ numericUpDownCount.Text = row.Cells["Count"].Value.ToString();
+ dateTimePicker.Text = row.Cells["DateTime"].Value.ToString();
+ }
+ }
+ public FormServiceCheck()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Hotel/HotelView/FormServiceCheck.resx b/Hotel/HotelView/FormServiceCheck.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/Hotel/HotelView/FormServiceCheck.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/Hotel/HotelView/HotelView.csproj b/Hotel/HotelView/HotelView.csproj
new file mode 100644
index 0000000..1c7115a
--- /dev/null
+++ b/Hotel/HotelView/HotelView.csproj
@@ -0,0 +1,21 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Hotel/HotelView/Program.cs b/Hotel/HotelView/Program.cs
new file mode 100644
index 0000000..48793bf
--- /dev/null
+++ b/Hotel/HotelView/Program.cs
@@ -0,0 +1,47 @@
+using static System.Windows.Forms.DataFormats;
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using HotelAbstractions.Logic;
+using HotelDatabase.Implement;
+
+namespace HotelView
+{
+ internal static class Program
+ {
+ private static ServiceProvider? _serviceProvider;
+ public static ServiceProvider? ServiceProvider => _serviceProvider;
+
+ ///
+ /// 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();
+ var services = new ServiceCollection();
+ ConfigureServices(services);
+ _serviceProvider = services.BuildServiceProvider();
+ Application.Run(_serviceProvider.GetRequiredService());
+ }
+
+ private static void ConfigureServices(ServiceCollection services)
+ {
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ services.AddTransient();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Hotel/HotelView/Properties/Resources.Designer.cs b/Hotel/HotelView/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..9ffdb7e
--- /dev/null
+++ b/Hotel/HotelView/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// Этот код создан программой.
+// Исполняемая версия:4.0.30319.42000
+//
+// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+// повторной генерации кода.
+//
+//------------------------------------------------------------------------------
+
+namespace HotelView.Properties {
+ using System;
+
+
+ ///
+ /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
+ ///
+ // Этот класс создан автоматически классом StronglyTypedResourceBuilder
+ // с помощью такого средства, как ResGen или Visual Studio.
+ // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
+ // с параметром /str или перестройте свой проект VS.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HotelView.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Перезаписывает свойство CurrentUICulture текущего потока для всех
+ /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Hotel/HotelView/Properties/Resources.resx b/Hotel/HotelView/Properties/Resources.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/Hotel/HotelView/Properties/Resources.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