Задание «Управление прачечной самообслуживания»

Задание «Управление прачечной самообслуживания» #

Задание № 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 или его некорректное значение.

Приложение всегда должно завершать работу корректно. Падение приложения или отображение стека вызовов недопустимо.

© A. M. Васильев, 2024, CC BY-SA 4.0, andrey@crafted.su