Применение ООП в практическом решении задач

Для выполнения заданий выберите вариант решения в зависимости от номера вашей зачетной книжки. Решайте вариант по формуле: Номер варианта = (Номер зачетной книжки mod 3) + 1

Задание 1: Система поиска по документам и файлам

Описание предметной области:

Вам необходимо разработать систему поиска документов и файлов, которая может работать с различными типами документов (текстовые файлы, PDF, изображения, видео, аудиофайлы). Программа должна поддерживать фильтрацию по различным критериям, таким как тип файла, размер, дата создания и последние изменения.

Задание:

  1. Реализуйте базовый класс File, который будет содержать основные поля, такие как имя файла, дата создания, размер и путь к файлу (локальный). Реализуйте метод open(), который будет выводить сообщение о попытке открытия файла.
  2. Создайте производные классы для различных типов файлов:
    • TextDocument для текстовых документов.
    • PDFDocument для PDF файлов.
    • ImageFile для изображений.
    • VideoFile для видеофайлов.
    • AudioFile для аудиофайлов.
  3. Реализуйте методы поиска с возможностью фильтрации по имени, типу, размеру, дате создания и изменения.
  4. Реализуйте методы для имитации предварительного просмотра изображений и видео, а также воспроизведения аудиофайлов (вывод сообщений об этих действиях).
  5. Реализуйте возможность тегирования файлов и поиска по тегам.
  6. Система должна поддерживать сортировку результатов по различным параметрам (имя файла, дата создания, размер).

Доп. функции:

  1. Добавьте систему архивации файлов. Создайте возможность перемещать файлы в архив и выводить их в поисковых результатах отдельно.
  2. Реализуйте систему отчётов, которая выводит статистику по найденным файлам (количество файлов, средний размер, последние изменения).
  3. Создайте возможность удаления файлов с подтверждением в консоли.

Входные данные для тестирования:

Информация о файлах может быть введена с клавиатуры или считана из текстового файла. Пример ввода данных с клавиатуры:

Введите информацию о файлах (формат: имя файла, дата создания, размер, теги):

1. Report.pdf, 10.05.2023, 200 KB, [work, project]
2. Image.jpg, 15.11.2022, 1.5 MB, [vacation, family]
3. Notes.txt, 01.01.2021, 50 KB, [work, personal]
4. Video.mp4, 20.02.2020, 500 MB, []
5. Podcast.mp3, 05.04.2021, 100 MB, []

Или можно прочитать из текстового документа:

Report.pdf, 10.05.2023, 200 KB, [work, project]
Image.jpg, 15.11.2022, 1.5 MB, [vacation, family]
Notes.txt, 01.01.2021, 50 KB, [work, personal]
Video.mp4, 20.02.2020, 500 MB, []
Podcast.mp3, 05.04.2021, 100 MB, []

Запрос поиска: тип файла - "PDF", теги - "work", сортировка - по дате создания.

Выходные данные:

Результаты поиска (сортировка по дате создания):
1. Report.pdf (10.05.2023, 200 KB, Local, Теги: [work, project])

Открытие файла: Report.pdf
Файл Report.pdf открыт для редактирования.

Задание 2: Система бронирования отелей

Описание предметной области:

Вам необходимо разработать масштабируемую систему управления бронированием отелей, которая поддерживает не только бронирование стандартных номеров (одноместные, двухместные и люксы), но и управление дополнительными услугами (например, завтрак, обед, экскурсии), а также управление скидками для постоянных клиентов. Система должна поддерживать динамическое изменение цен в зависимости от спроса и загруженности отелей. Клиенты могут получать скидки за накопленные бонусные баллы, которые они накапливают за каждое бронирование. Также система должна поддерживать групповые бронирования с расчетом специальных условий для групп.

Программа будет полностью консольной, и все действия по бронированию, расчету скидок и услуг будут выполняться через ввод данных в консоли.

Задание:

  1. Реализуйте базовый класс Booking, который будет содержать информацию о бронировании (номер комнаты, тип комнаты, количество ночей, базовая цена). Создайте методы для расчета стоимости бронирования с учетом дополнительных услуг и динамического изменения цен в зависимости от загруженности отеля.
  2. Создайте производные классы для различных типов номеров:
    • SingleRoom для одноместных номеров.
    • DoubleRoom для двухместных номеров.
    • Suite для люксов.
  3. Реализуйте систему управления скидками и бонусами для постоянных клиентов. Создайте систему накопления баллов, которые можно использовать для получения скидок.
  4. Реализуйте систему динамического изменения цен в зависимости от загруженности отелей.
  5. Поддержите групповые бронирования с расчетом скидок и спецпредложений для групп.

Доп. функции:

  1. Реализуйте систему управления сетью отелей, где каждый отель имеет свои цены и дополнительные услуги.
  2. Реализуйте систему отчётов, которая выводит информацию о загрузке отелей, количестве бронирований и использовании дополнительных услуг за определенный период времени.

Входные данные для тестирования:

Доступные номера:
1. Номер 101 - Single Room - 1000 руб/ночь
2. Номер 102 - Double Room - 1500 руб/ночь
3. Номер 201 - Suite - 3000 руб/ночь

Бонусы клиента:
Постоянный клиент, накоплено 300 баллов (5% скидка).

Запросы на бронирование:
1. Номер 102, 3 ночи, завтрак, клиент - постоянный.
2. Номер 101, групповое бронирование (2 номера), 2 ночи, обед.
Текущая загруженность отеля: 85%

Выходные данные:

Номер 102 (Double Room)
Количество ночей: 3
Дополнительные услуги: завтрак
Общая стоимость: 6500 руб (с учетом скидки)

Номер 101 (Single Room) - Групповое бронирование
Количество номеров: 2
Количество ночей: 2
Дополнительные услуги: обед
Общая стоимость: 3800 руб за номер (с учетом скидок)

Статус номеров: заняты