У меня есть задача разработать систему онлайн-бронирования. Где пользователь может ввести почтовый индекс/количество людей/время бронирования и получить список ресторанов. Успенский (Пользователь и ресторан всегда в одном городе)
В каждом ресторане может быть несколько столиков с разным количеством посадочных мест. Итак, 2 стола на 4 человека и 4 стола на 4 человека.
У меня возникли проблемы с поиском правильных структур данных для использования.
Мои классы следующие
Ресторан: содержит время открытия, время закрытия, общее количество доступных мест. Не знаю, как я буду хранить информацию о столиках в ресторане. Не имеет смысла иметь отдельный класс для таблицы. Вся информация, которая мне нужна, это то, сколько таблиц бесплатно и каковы их размеры.
Бронирование: сохраняет фактическое бронирование и позволяет отменить бронирование.
ReservationSystem: содержит интерфейс для проверки доступности списка (долгое время, люди)». Как это вернет этот список? Сначала я думал об использовании priorityQueue для поддержания очереди с максимальным количеством доступных мест. Но затем я пройдусь по этому списку, чтобы увидеть, правильное ли время, чтобы сделать бронирование, а затем, как только бронирование будет сделано, обновить эту очередь. Одна проблема заключается в том, что очередь делает все дубликаты.
Мои конкретные вопросы:
- Как хранить информацию о таблице в каждом ресторане.
- Как лучше всего вести этот список ресторанов, чтобы я мог возвращать список без необходимости каждый раз сортировать эту информацию.
РЕДАКТИРОВАТЬ: На вопрос о том, как хранить информацию о таблице. Меня особенно беспокоит то, что хранение класса таблицы будет означать, что я создаю ненужные объекты. Вот мои рассуждения. 5 столов, за каждым из которых сидят 2 человека, имеют одинаковые предметы - я имею в виду, что нет никакой значимой информации, которая будет различаться между ними. Мне просто нужны цифры. нет мест/стола. (Если у меня есть стол из 4, но 3 человек, я буду считать этот стол занятым)
Я думал о создании 3 массивов. Допустим, таблица представляет 1,2 и т. д., поэтому int[] DifferentSeatingOnTable; его индексы — это таблицы, а значения — разрешенные места. Затем массив таблиц с totalNoOfThosetable, где индексы — это таблицы, а значения — общее количество таких таблиц. Аналогично для бесплатных таблиц freeTables, где индекс является таблицей и сколько таких свободных таблиц осталось.