diff --git a/Disign_table_reservation_system_Figma.jpg b/Disign_table_reservation_system_Figma.jpg
new file mode 100644
index 0000000..2b9e409
Binary files /dev/null and b/Disign_table_reservation_system_Figma.jpg differ
diff --git a/ERD_table_reservation_system.jpg b/ERD_table_reservation_system.jpg
new file mode 100644
index 0000000..b9747cc
Binary files /dev/null and b/ERD_table_reservation_system.jpg differ
diff --git a/UML_table_reservation_system.jpg b/UML_table_reservation_system.jpg
new file mode 100644
index 0000000..ac017af
Binary files /dev/null and b/UML_table_reservation_system.jpg differ
diff --git a/hw_8/.idea/workspace.xml b/hw_8/.idea/workspace.xml
new file mode 100644
index 0000000..e0d148a
--- /dev/null
+++ b/hw_8/.idea/workspace.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1670503970370
+
+
+ 1670503970370
+
+
+
+
\ No newline at end of file
diff --git a/hw_8/hw_8.iml b/hw_8/hw_8.iml
new file mode 100644
index 0000000..9465dd8
--- /dev/null
+++ b/hw_8/hw_8.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hw_8/src/Main.java b/hw_8/src/Main.java
new file mode 100644
index 0000000..3e59c38
--- /dev/null
+++ b/hw_8/src/Main.java
@@ -0,0 +1,5 @@
+public class Main {
+ public static void main(String[] args) {
+ System.out.println("Hello world!");
+ }
+}
\ No newline at end of file
diff --git a/hw_8/src/Model/Client.java b/hw_8/src/Model/Client.java
new file mode 100644
index 0000000..2b660c2
--- /dev/null
+++ b/hw_8/src/Model/Client.java
@@ -0,0 +1,13 @@
+package Model;
+
+
+/**
+ * Client - сущность с данными о клиенте
+ */
+public class Client {
+ public String nameClient;
+ public String surnameClient;
+ public Integer phoneClient;
+ public String emailClient;
+ public Boolean advertisingConsent;
+}
diff --git a/hw_8/src/Model/Repository.java b/hw_8/src/Model/Repository.java
new file mode 100644
index 0000000..7ab292f
--- /dev/null
+++ b/hw_8/src/Model/Repository.java
@@ -0,0 +1,41 @@
+package Model;
+
+import Presenter.iModel;
+import View.Area;
+
+import java.sql.Time;
+import java.util.ArrayList;
+import java.util.Date;
+
+/**
+ * Repository - класс, содержащий методы для работы с базой данных; реализует интерфейс iModel
+ * getTables(Date date, Integer seats, Time time, Boolean smoking, Area area) - запрашивает данные о столиках из источника данных
+ * getStatusOccupationTable(Integer number, Date date, Time time) - проверяет, свободен ли
+ * * данный столик в указанное время
+ * getDataTable(Integer numberTable) - возвращает данные о конкретном столике
+ * updateDB(Integer numberTable, Date date, Time time, Client client) - вносит данные о бронировании в БД
+ */
+public class Repository implements iModel {
+ @Override
+ public ArrayList
getTables(Date date, Integer seats, Time time, Boolean smoking, Area area) throws Exception {
+ ArrayList
listItem = new ArrayList
();
+ if (listItem.isEmpty()) {
+ throw new Exception("There are no free tables matching the filters");
+ }
+ return listItem;
+ }
+
+ @Override
+ public Boolean getStatusOccupationTable(Integer number, Date date, Time time) {
+ return true;
+ }
+
+ @Override
+ public Table getDataTable(Integer numberTable) {
+ return new Table();
+ }
+
+ public Boolean updateDB(Integer numberTable, Date date, Time time, Client client){
+ return true;
+ }
+}
diff --git a/hw_8/src/Model/Table.java b/hw_8/src/Model/Table.java
new file mode 100644
index 0000000..94330ae
--- /dev/null
+++ b/hw_8/src/Model/Table.java
@@ -0,0 +1,12 @@
+package Model;
+
+
+/**
+ * Table - сущность с данными о каждом столике
+ */
+public class Table {
+ public Integer numberTable;
+ public Integer seats;
+ public Boolean smoking;
+ public String area;
+}
diff --git a/hw_8/src/Presenter/Presenter.java b/hw_8/src/Presenter/Presenter.java
new file mode 100644
index 0000000..1a85062
--- /dev/null
+++ b/hw_8/src/Presenter/Presenter.java
@@ -0,0 +1,69 @@
+package Presenter;
+
+import Model.Client;
+import Model.Repository;
+import Model.Table;
+import View.Area;
+import View.View;
+
+import java.sql.Time;
+import java.util.ArrayList;
+import java.util.Date;
+
+/**
+ * Presenter - класс, содержащий методы, отвечающие за логику приложения
+ * getData(Date date, Integer seats, Time time, Boolean smoking, Area area) возвращает список столиков,
+ * * удовлетворяющих заданным условиям
+ * isBusyTable(Integer numberTable, Date date, Time time) - запрашивает данные о стлике и
+ * * возвращает True, если столик занят, и False, если столик свободен
+ * getDetailsTable(Integer numberTable) - возвращает данные о конкретном столике
+ * setReserve(Integer numberTable, Date date, Time time) - отвечает за бронирование столика - проверяет,
+ * * свободен ли выбранный столик, запрашивает данные клиентаи подтверждение брони
+ * getDataClient() - запрашивает данные о клиенте
+ * getConfirmReserve() - запрашивает подтверждение брони
+ */
+public class Presenter {
+ public ArrayList
getData(Date date, Integer seats, Time time, Boolean smoking, Area area) throws Exception {
+ iModel imodel = new Repository();
+ return ((Repository) imodel).getTables(date, seats, time, smoking, area);
+ }
+
+ public Boolean isBusyTable(Integer numberTable, Date date, Time time){
+ iModel imodel = new Repository();
+ return ((Repository) imodel).getStatusOccupationTable(numberTable, date, time);
+ }
+
+ public Table getDetailsTable(Integer numberTable){
+ iModel imodel = new Repository();
+ return ((Repository) imodel).getDataTable(numberTable);
+ }
+
+ public Boolean setReserve(Integer numberTable, Date date, Time time) throws Exception{
+ Presenter presenterItem = new Presenter();
+ Boolean realStatus = presenterItem.isBusyTable(numberTable, date, time);
+
+ if (realStatus) {
+ throw new Exception("The table is busy. Choose another.");
+ }
+
+ Client clientItem = presenterItem.getDataClient();
+ Boolean confirmItem = presenterItem.getConfirmReserve();
+
+ if (!confirmItem) {
+ throw new Exception("You canceled the reservation");
+ }
+
+ iModel imodel = new Repository();
+ return ((Repository) imodel).updateDB(numberTable, date, time, clientItem);
+ }
+
+ public Client getDataClient(){
+ iView iview = new View();
+ return iview.inputDataClient();
+ }
+
+ public Boolean getConfirmReserve(){
+ iView iview = new View();
+ return iview.confirmReserve();
+ }
+}
diff --git a/hw_8/src/Presenter/iModel.java b/hw_8/src/Presenter/iModel.java
new file mode 100644
index 0000000..7d3e5f8
--- /dev/null
+++ b/hw_8/src/Presenter/iModel.java
@@ -0,0 +1,25 @@
+package Presenter;
+
+import Model.Client;
+import Model.Table;
+import View.Area;
+
+import java.sql.Time;
+import java.util.ArrayList;
+import java.util.Date;
+
+
+/**
+ * iModel - интерфейс, позволяющий избежать зависимости более абстрактного класс Presenter
+ * * от менее абстрактного класса Repository
+ */
+public interface iModel {
+
+ ArrayList
getTables(Date date, Integer seats, Time time, Boolean smoking, Area area) throws Exception;
+
+ public Boolean getStatusOccupationTable(Integer number, Date date, Time time);
+
+ public Table getDataTable(Integer numberTable);
+
+ public Boolean updateDB(Integer numberTable, Date date, Time time, Client client);
+}
diff --git a/hw_8/src/Presenter/iView.java b/hw_8/src/Presenter/iView.java
new file mode 100644
index 0000000..b961537
--- /dev/null
+++ b/hw_8/src/Presenter/iView.java
@@ -0,0 +1,12 @@
+package Presenter;
+
+import Model.Client;
+
+/**
+ * iView - интерфейс, позволяющий избежать зависимости более абстрактного класс Presenter
+ * * от менее абстрактного класса View
+ */
+public interface iView {
+ public Client inputDataClient();
+ public Boolean confirmReserve();
+}
diff --git a/hw_8/src/View/Area.java b/hw_8/src/View/Area.java
new file mode 100644
index 0000000..3feae68
--- /dev/null
+++ b/hw_8/src/View/Area.java
@@ -0,0 +1,15 @@
+package View;
+
+/**
+ * Area - отдельные зоны, на которые можно поделить ресторан. Каждой зоне характерны свои особенности.
+ * * Клиент при выборе столика может на них ориентироваться
+ */
+public enum Area {
+ barArea,
+ windowArea,
+ centralArea,
+ secludedArea,
+ danceArea,
+ stageArea,
+ streetArea
+ }
diff --git a/hw_8/src/View/View.java b/hw_8/src/View/View.java
new file mode 100644
index 0000000..af8cfe2
--- /dev/null
+++ b/hw_8/src/View/View.java
@@ -0,0 +1,51 @@
+package View;
+
+import Model.Client;
+import Presenter.Presenter;
+import Presenter.iView;
+import java.sql.Time;
+import java.util.Date;
+
+/**
+ * View - класс, содержащий методы для работы свнешней частью приложения, для взаимодействия с клиентом
+ * selectTables(Date date, Time time, Integer seats, Boolean smoking, Area area) - инициализирует процесс
+ * * подбора столиков, удовлетворяющих заданным критериям
+ * isTableFree(Integer numberTable, Date date, Time time) - предоставляет клиету информацию о занятости столика
+ * infOfTable(Integer numberTable) - предоставляет клиету подробную информацию о выбранном столике
+ * reserveTable(Integer numberTable,Date date, Time time) - инициализирует процесс бронирования столика
+ * inputDataClient() - запрашивает личные данные для бронирования у клиента
+ * confirmReserve() - запрашивает подтверждение о бронировании у клиента
+ */
+public class View implements iView {
+
+ public void selectTables(Date date, Time time, Integer seats, Boolean smoking, Area area) throws Exception {
+ Presenter presenterItem = new Presenter();
+ presenterItem.getData(date, seats, time, smoking, area);
+ }
+
+ public Boolean isTableFree(Integer numberTable, Date date, Time time) {
+ Presenter presenterItem = new Presenter();
+ return !(presenterItem.isBusyTable(numberTable, date, time));
+ }
+
+ public void infOfTable(Integer numberTable){
+ Presenter presenterItem = new Presenter();
+ presenterItem.getDetailsTable(numberTable);
+ }
+
+ public void reserveTable(Integer numberTable,Date date, Time time) throws Exception {
+ Presenter presenterItem = new Presenter();
+ Boolean reserveItem = presenterItem.setReserve(numberTable,date, time);
+
+ System.out.println("Table reservation was successful");
+ }
+
+ public Client inputDataClient(){
+ return new Client();
+ }
+
+ public Boolean confirmReserve(){
+ System.out.println("Confirmation received");
+ return true;
+ }
+}