Применение ООП в практическом решении задач
Для выполнения заданий выберите вариант решения в зависимости от номера вашей зачетной книжки. Решайте вариант по формуле: Номер варианта = (Номер зачетной книжки mod 3) + 1
Задание 1: Система поиска по документам и файлам
Описание предметной области:
Вам необходимо разработать систему поиска документов и файлов, которая может работать с различными типами документов (текстовые файлы, PDF, изображения, видео, аудиофайлы). Программа должна поддерживать фильтрацию по различным критериям, таким как тип файла, размер, дата создания и последние изменения.
Задание:
- Реализуйте базовый класс
File
, который будет содержать основные поля, такие как имя файла, дата создания, размер и путь к файлу (локальный). Реализуйте методopen()
, который будет выводить сообщение о попытке открытия файла. - Создайте производные классы для различных типов файлов:
TextDocument
для текстовых документов.PDFDocument
для PDF файлов.ImageFile
для изображений.VideoFile
для видеофайлов.AudioFile
для аудиофайлов.
- Реализуйте методы поиска с возможностью фильтрации по имени, типу, размеру, дате создания и изменения.
- Реализуйте методы для имитации предварительного просмотра изображений и видео, а также воспроизведения аудиофайлов (вывод сообщений об этих действиях).
- Реализуйте возможность тегирования файлов и поиска по тегам.
- Система должна поддерживать сортировку результатов по различным параметрам (имя файла, дата создания, размер).
Доп. функции:
- Добавьте систему архивации файлов. Создайте возможность перемещать файлы в архив и выводить их в поисковых результатах отдельно.
- Реализуйте систему отчётов, которая выводит статистику по найденным файлам (количество файлов, средний размер, последние изменения).
- Создайте возможность удаления файлов с подтверждением в консоли.
Входные данные для тестирования:
Информация о файлах может быть введена с клавиатуры или считана из текстового файла. Пример ввода данных с клавиатуры:
Введите информацию о файлах (формат: имя файла, дата создания, размер, теги):
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: Система бронирования отелей
Описание предметной области:
Вам необходимо разработать масштабируемую систему управления бронированием отелей, которая поддерживает не только бронирование стандартных номеров (одноместные, двухместные и люксы), но и управление дополнительными услугами (например, завтрак, обед, экскурсии), а также управление скидками для постоянных клиентов. Система должна поддерживать динамическое изменение цен в зависимости от спроса и загруженности отелей. Клиенты могут получать скидки за накопленные бонусные баллы, которые они накапливают за каждое бронирование. Также система должна поддерживать групповые бронирования с расчетом специальных условий для групп.
Программа будет полностью консольной, и все действия по бронированию, расчету скидок и услуг будут выполняться через ввод данных в консоли.
Задание:
- Реализуйте базовый класс
Booking
, который будет содержать информацию о бронировании (номер комнаты, тип комнаты, количество ночей, базовая цена). Создайте методы для расчета стоимости бронирования с учетом дополнительных услуг и динамического изменения цен в зависимости от загруженности отеля. - Создайте производные классы для различных типов номеров:
SingleRoom
для одноместных номеров.DoubleRoom
для двухместных номеров.Suite
для люксов.
- Реализуйте систему управления скидками и бонусами для постоянных клиентов. Создайте систему накопления баллов, которые можно использовать для получения скидок.
- Реализуйте систему динамического изменения цен в зависимости от загруженности отелей.
- Поддержите групповые бронирования с расчетом скидок и спецпредложений для групп.
Доп. функции:
- Реализуйте систему управления сетью отелей, где каждый отель имеет свои цены и дополнительные услуги.
- Реализуйте систему отчётов, которая выводит информацию о загрузке отелей, количестве бронирований и использовании дополнительных услуг за определенный период времени.
Входные данные для тестирования:
Доступные номера:
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 руб за номер (с учетом скидок)
Статус номеров: заняты