Задание «Управление прачечной самообслуживания» #
Задание № 1 #
Разработать приложение, решающее задачу по управлению списком с данными.
Данные #
Элемент списка: оборудование.
Название поля | Описание поля | Тип поля |
---|---|---|
Id | Уникальный идентификатор | UUID |
Title | Название оборудования | Текст |
Type | Тип оборудования | Из списка: стиральная машина, сушильная машина |
StartDateTime | Начало эксплуатации | Дата и время в формате ISO |
Condition | Исправность оборудования | Логическое значение true/false |
Capacity | Максимальная вместимость (кг) | Вещественное число |
Price | Стоимость использования | Целое число |
Duration | Длительность цикла (мин) | Целое число |
Пример описания оборудования в формате JSON:
{
"Id": "cf52ee99-f7d7-46d6-8e88-8137b99346e8",
"Title": "Стиральная машина Maytag 3RMTW 4905 TW",
"Type": "стиральная машина",
"StartDateTime": "2024-01-02T00:00:00",
"Condition": true,
"Capacity": 8,
"Price": 300,
"Duration": 45
}
Приложение должно считывать список оборудования из CSV-файла (разделитель – запятая).
Пример данных:
Id,Title,Type,StartDateTime,Condition,Capacity,Price,Duration
cf52ee99-f7d7-46d6-8e88-8137b99346e8,Стиральная машина Maytag 3RMTW 4905 TW,стиральная машина,2024-01-02T00:00:00,true,8,300,45
a82eaf91-c83e-4819-991f-9175719a8ff1,Стиральная машина Maytag 3RMTW 4905 TW,стиральная машина,2024-01-03T00:00:00,true,8,300,45
7c580384-403c-4664-9f94-66b40f75a724,Стиральная машина Maytag 3RMTW 4905 TW,стиральная машина,2024-01-04T00:00:00,true,8,300,45
6c243167-63fc-47b8-ab8b-4db17c2f1d81,Стиральная машина Haier HCW12C,стиральная машина,2024-01-05T00:00:00,true,12,350,55
657c2450-b03e-46f2-8d16-75fd14f47c6a,Стиральная машина Haier HCW12C,стиральная машина,2024-01-06T00:00:00,false,12,350,55
6c2cea57-d99b-4356-98e1-c04899fe057b,Сушильная машина Haier HCD12C,сушильная машина,2024-01-07T00:00:00,true,12,100,30
32d9d122-26cf-47f0-b047-862ad4b68d3b,Сушильная машина Haier HCD12C,сушильная машина,2024-01-08T00:00:00,true,12,100,30
Имя файла с исходными данными должно передаваться приложению с ключом --laundry-file
... --laundry-file="../data/file.csv"
... --laundry-file="C:\Users\AM\data\app-3968942893870838401.csv"
Задание #
В зависимости от аргументов вызова приложение должно выполнять следующие команды:
1. list
– получить список оборудования.
#
Выходные данные: список всего оборудования в формате JSON, упорядоченный по возрастанию даты и времени начала эксплуатации и id. Список может быть пустым.
Информация об оборудовании должна содержать только идентификатор, название и исправность.
{
"laundry": [
{
"Id": "cf52ee99-f7d7-46d6-8e88-8137b99346e8",
"Title": "Стиральная машина Maytag 3RMTW 4905 TW",
"Condition": true
},
{
"Id": "a82eaf91-c83e-4819-991f-9175719a8ff1",
"Title": "Стиральная машина Maytag 3RMTW 4905 TW",
"Condition": true
}
]
}
{
"laundry": []
}
2. show-machine
– получить один элемент списка по идентификатору.
#
--machine-id=ID
– обязательный параметр. Корректное значение: идентификатор существующего в списке оборудования.
Выходные данные: полная информация об оборудовании в формате JSON.
show-machine --machine-id=a82eaf91-c83e-4819-991f-9175719a8ff1
{
"machine-id": "a82eaf91-c83e-4819-991f-9175719a8ff1",
"machine":{
"Id": "a82eaf91-c83e-4819-991f-9175719a8ff1",
"Title": "Стиральная машина Maytag 3RMTW 4905 TW",
"Type": "стиральная машина",
"StartDateTime": "2024-01-03T00:00:00",
"Condition": true,
"Capacity": 8,
"Price": 300,
"Duration": 45
}
}
3. check-wash
– подобрать оборудование.
#
--weight=NUMBER
– обязательный положительный вещественный параметр веса.
--budget=NUMBER
– обязательный положительный целочисленный параметр бюджета.
Подобрать список исправных стиральных машин, в которые можно загрузить указанный вес и использование стоит не больше указанного бюджета. Список может быть пустым.
Выходные данные: список подходящего оборудования в формате JSON, упорядоченный по возрастанию стоимости, возрастанию длительности цикла и id.
Информация об оборудовании содержит:
- идентификатор
- название
- максимальную вместимость
- стоимость использования
- длительность цикла
check-wash --weight=5.23 --budget=300
{
"weight": 5.23,
"budget": 300,
"laundry": [
{
"Id": "cf52ee99-f7d7-46d6-8e88-8137b99346e8",
"Title": "Стиральная машина Maytag 3RMTW 4905 TW",
"Capacity": 8,
"Price": 300,
"Duration": 45
}
]
}
4. statistic
– получить статистическую информацию об оборудовании.
#
Выходные данные: статистика в формате JSON по типу оборудования. Для каждого типа оборудования должны указываться поля:
type
– тип оборудованияcount
– общее количество элементов техникиcountServiceable
– количество исправных элементов техникиcapacityStatistic
– статистика элементов техники по вместимости – только исправная техника:capacity
– вместимостьcountServiceable
– количество исправных элементов техники данной вместимостиprice
– средняя стоимость использования исправных элементов техники данной вместимости
В выдаче должны присутствовать только те типы оборудования, которые есть в списке данных. Список упорядочен лексикографически по типу оборудования, списки техники по вместимости упорядочены по возрастанию вместимости.
Статистика может быть пустой.
{
"statistic": [
{
"type": "стиральная машина",
"count": 5,
"countServiceable": 4,
"capacityStatistic": [
{
"capacity": 8,
"countServiceable": 3,
"price": 300.0
},
{
"capacity": 12,
"countServiceable": 1,
"price": 350.0
}
]
},
{
"type": "сушильная машина",
"count": 2,
"countServiceable": 2,
"capacityStatistic": [
{
"capacity": 12,
"countServiceable": 2,
"price": 100.0
}
]
}
]
}
5\ statistic-by-life
– статистика по сроку эксплуатации.
#
Выходные данные: статистика в формате JSON по сроку эксплуатации оборудования (разница между текущим моментом времени и началом эксплуатации), содержит следующие пункты (при наличии) по порядку:
пора менять
– срок эксплуатации строго больше 5 лет илиCondition=false
.изношено
– срок эксплуатации между 3 и 5 годами включительно иCondition=true
.работает
– срок эксплуатации от полугода (включительно) до 3 лет (исключая) иCondition=true
.новое
– срок эксплуатации строго меньше полугода иCondition=true
.
Статистика может быть пустой.
{
"statistic": {
"пора менять": 1,
"работает": 2,
"новое": 3
}
}
Выходные данные #
При корректных входных данных приложение должно завершать работу с кодом возврата 0 и возвращать данные в формате JSON.
При некорректных входных данных приложение должно завершать работу с ненулевым кодом возврата и возвращать сообщение об ошибке. Некорректными данными считаются:
- отсутствие аргумента команды или некорректная команда.
- отсутствие обязательного параметра команды, его некорректное значение или несоответствие значения указанному типу данных.
- отсутствие аргумента
--laundry-file
или его некорректное значение.
Приложение всегда должно завершать работу корректно. Падение приложения или отображение стека вызовов недопустимо.