Задание «Инвентаризационный список техники» #
Задание № 1 #
Разработать приложение, решающее задачу по управлению списком с данными.
Данные #
Элемент списка: элемент техники.
Название поля | Описание поля | Тип поля |
---|---|---|
Id | Инвентарный номер | UUID |
Equipment | Наименование оборудования | Текст |
Category | Тип техники | Из списка: монитор, ПК, телефон, принтер, другое |
GuaranteeDate | Гарантийный срок | Дата в формате ISO |
IsUsed | Используется или свободно | Логическое значение: true (используется) false (свободно) |
Price | Балансная стоимость | Вещественное число |
Location | Место хранения | Текст |
ResponsiblePerson | ФИО материально ответственного лица | Текст |
User | ФИО пользователя оборудования | Текст null , если IsUsed=false |
Пример описания элемента техники в формате JSON:
{
"Id": "67bfcd12-6c8f-45fc-bc6b-265c23d7d881",
"Equipment": "Системный блок Acer",
"Category": "ПК",
"GuaranteeDate": "2028-01-01",
"IsUsed": true,
"Price": 15300,
"Location": "дома",
"ResponsiblePerson": "Смирнова Ксения Дмитриевна",
"User": "Смирнова Ксения Дмитриевна"
}
Приложение должно считывать список элементов техники из CSV-файла (разделитель – запятая).
Пример данных:
Id,Equipment,Category,GuaranteeDate,IsUsed,Price,Location,ResponsiblePerson,User
1d0f861e-9d0c-4340-acad-69ade7b83085,"Монитор 19.5"" LG 20M47D",монитор,2028-01-01,false,2800,склад,Иванов Иван Иванович,
4cc3098f-fa98-4312-b351-fce99fde825f,"Монитор 19.5"" Acer K202HQL",монитор,2028-01-01,false,5700,склад,Иванов Иван Иванович,
bf7c82ce-334a-470b-89be-f7ae283ce564,"Системный блок Acer Intel Core i5-6500, RAM 16 ГБ, SSD 480 ГБ, Intel HD Graphics 530",ПК,2028-01-01,false,15300,склад,Иванов Иван Иванович,
f463afc0-3088-4ba4-92ae-5859faedc585,"Принтер Canon PIXMA G540 ",принтер,2030-01-01,true,21550,"офис, кабинет № 26",Иванов Иван Иванович,Воронкова Элина Матвеевна
d7494a0f-6929-4d71-9bbc-fb067356bfeb,IP-телефон Cisco CP-7940G,телефон,2030-01-01,true,6100,"офис, кабинет № 26",Иванов Иван Иванович,Овсянникова Анастасия Елисеевна
fe385d95-f916-47c0-b042-557435b2e160,Проектор Epson EB-E20,другое,2030-01-01,true,60600,"офис, кабинет № 15",Быкова Ника Робертовна,Быкова Ника Робертовна
f920444e-3741-497c-a6b2-b9fa1bc5b741,"Принтер Canon PIXMA G540 ",принтер,2030-01-01,true,21550,"офис, кабинет № 15",Иванов Иван Иванович,Волкова Александра Артемьевна
505324a0-dc5f-4e55-adb2-08cea636909f,"Монитор 19.5"" Acer K202HQL",монитор,2028-01-01,true,5700,"офис, кабинет № 15",Горбунов Тимофей Дмитриевич,Горбунов Тимофей Дмитриевич
ddf299df-f992-40f0-98f2-52e087b19f2b,IP-телефон Cisco CP-7940G,телефон,2030-01-01,true,6100,"офис, кабинет № 15",Новикова Виктория Романовна,Новикова Виктория Романовна
dfae5f87-9f0d-4972-9fb7-ec4b1cd49ad2,IP-телефон Cisco CP-7940G,телефон,2030-01-01,true,6100,"офис, кабинет № 12",Иванов Иван Иванович,Федорова Ника Кирилловна
14fb9f3b-0540-407c-b93b-2d57a574240f,"Монитор 19.5"" LG 20M47D",монитор,2028-01-01,true,2800,дома,Иванов Иван Иванович,Козлов Тихон Ильич
61ee40c7-c174-431f-9c2b-8c821b11075b,"Системный блок Acer Intel Core i5-6500, RAM 16 ГБ, SSD 480 ГБ, Intel HD Graphics 530",ПК,2028-01-01,true,15300,дома,Лазарева Марьяна Михайловна,Лазарева Марьяна Михайловна
53fd0e1e-d06e-46b0-8d64-298166453829,"Монитор 19.5"" LG 20M47D",монитор,2028-01-01,true,2800,дома,Михайлова Альбина Александровна,Михайлова Альбина Александровна
99e66f63-6303-45f5-9cc3-4214de370633,"Системный блок Acer Intel Core i5-6500, RAM 16 ГБ, SSD 480 ГБ, Intel HD Graphics 530",ПК,2028-01-01,true,15300,дома,Морозова Арина Львовна,Морозова Арина Львовна
1fee9e0c-3323-468e-b8cb-36d294347b49,"Монитор 19.5"" LG 20M47D",монитор,2028-01-01,true,2800,дома,Руднев Никита Александрович,Руднев Никита Александрович
67bfcd12-6c8f-45fc-bc6b-265c23d7d881,"Системный блок Acer Intel Core i5-6500, RAM 16 ГБ, SSD 480 ГБ, Intel HD Graphics 530",ПК,2028-01-01,true,15300,дома,Смирнова Ксения Дмитриевна,Смирнова Ксения Дмитриевна
Имя файла с исходными данными должно передаваться приложению с ключом --equipment-file
... --equipment-file="../data/file.csv"
... --equipment-file="C:\Users\AM\data\app-3968942893870838401.csv"
Задание #
В зависимости от аргументов вызова приложение должно выполнять следующие команды:
1. list
– получить список техники.
#
Выходные данные: список всей техники в формате JSON, упорядоченный по возрастанию типа техники лексикографически и id. Список может быть пустым.
Информация о технике должна содержать только инвентарный номер, наименование и поле IsUsed.
{
"equipment": [
{
"Id": "fe385d95-f916-47c0-b042-557435b2e160",
"Equipment": "Проектор Epson EB-E20",
"IsUsed": true
},
{
"Id": "14fb9f3b-0540-407c-b93b-2d57a574240f",
"Equipment": "Монитор 19.5\" LG 20M47D",
"IsUsed": true
}
]
}
{
"equipment": []
}
2. show-equipment
– получить один элемент списка по идентификатору.
#
--equipment-id=ID
– обязательный параметр. Корректное значение: идентификатор существующей в списке техники.
Выходные данные: полная информация о технике в формате JSON.
show-equipment --equipment-id=fe385d95-f916-47c0-b042-557435b2e160
{
"equipment-id": "fe385d95-f916-47c0-b042-557435b2e160",
"equipment": {
"Id": "fe385d95-f916-47c0-b042-557435b2e160",
"Equipment": "Проектор Epson EB-E20",
"Category": "другое",
"GuaranteeDate": "2030-01-01",
"IsUsed": true,
"Price": 60600,
"Location": "офис, кабинет № 15",
"ResponsiblePerson": "Быкова Ника Робертовна",
"User": "Быкова Ника Робертовна"
}
}
{
"equipment-id": "1d0f861e-9d0c-4340-acad-69ade7b83085",
"equipment": {
"Id": "1d0f861e-9d0c-4340-acad-69ade7b83085",
"Equipment": "Монитор 19.5\" LG 20M47D",
"Category": "монитор",
"GuaranteeDate": "2028-01-01",
"IsUsed": false,
"Price": 2800,
"Location": "склад",
"ResponsiblePerson": "Иванов Иван Иванович",
"User": null
}
}
3. list-unused-equipment
– получить список не использующейся техники.
#
--category=TEXT
– необязательный параметр типа техники. Может содержать несколько типов техники через запятую. Регистр может отличаться, могут присутствовать лишние пробельные символы. Если хотя бы одно из полученных значений отсутствует в списке типов техники, значение параметра считается некорректным и приложение должно возвращать ненулевой код и сообщение об ошибке.
Выходные данные: список свободной техники в формате JSON соответствующих типов или всех типов при отсутствии параметра или при пустом параметре. Список может быть пустым.
Информация о технике должна содержать только инвентарный номер и наименование. Список упорядочен по возрастанию типа техники лексикографически и id.
Поле «category» должно содержать переданную строку или пустую строку, если параметр отсутствует.
list-unused-equipment
list-unused-equipment --category=монитор
list-unused-equipment --category=Монитор,Пк
{
"category": "Монитор,Пк",
"equipment": [
{
"Id": "1d0f861e-9d0c-4340-acad-69ade7b83085",
"Equipment": "Монитор 19.5\" LG 20M47D"
},
{
"Id": "4cc3098f-fa98-4312-b351-fce99fde825f",
"Equipment": "Монитор 19.5\" Acer K202HQL"
},
{
"Id": "bf7c82ce-334a-470b-89be-f7ae283ce564",
"Equipment": "Системный блок Acer Intel Core i5-6500, RAM 16 ГБ, SSD 480 ГБ, Intel HD Graphics 530"
}
]
}
{
"category": "другое",
"equipment": []
}
4. list-time
– получить список техники, которую нужно заменить к моменту времени.
#
--time
– обязательный параметр даты и времени в формате ISO
Выходные данные: список техники, для которой в переданный момент времени истечёт гарантийный срок.
Список может быть пустым.
Информация о технике должна содержать только инвентарный номер, наименование и гарантийный срок. Список упорядочен по возрастанию типа техники лексикографически и id
list-time --time=2028-01-01T00:00:00.0
{
"time": "2028-01-01T00:00:00.0",
"equipment": [
{
"Id": "1fee9e0c-3323-468e-b8cb-36d294347b49",
"Equipment": "Монитор 19.5\" LG 20M47D",
"GuaranteeDate": "2028-01-01"
},
{
"Id": "99e66f63-6303-45f5-9cc3-4214de370633",
"Equipment": "Системный блок Acer Intel Core i5-6500, RAM 16 ГБ, SSD 480 ГБ, Intel HD Graphics 530",
"GuaranteeDate": "2028-01-01"
}
]
}
5. statistic
– получить статистическую информацию об имеющейся технике.
#
--by-type=[category/person]
– обязательный параметр типа отображаемой статистики.
Возможные значения:
category
– статистика по типу техникиperson
– статистика по материально ответственному лицу
Статистика должна содержать поля:
category/person
– тип техники или МОЛ,count
– количество элементов техники,price
– общая стоимость элементов техники,countUsers
– количество различных пользователей, пользующихся данной техникой (null
не учитывается).
Статистика должны быть упорядочена по полю category/person. Может быть пустой.
statistic --by-type=category
statistic --by-type=person
{
"statisticByCategory": [
{"category": "другое", "count": 1, "price": 60600, "countUsers": 1},
{"category": "монитор", "count": 6, "price": 22600, "countUsers": 4},
{"category": "ПК", "count": 4, "price": 61200, "countUsers": 3},
{"category": "принтер", "count": 2, "price": 43100, "countUsers": 2},
{"category": "телефон", "count": 3, "price": 18300, "countUsers": 2}
]
}
{
"statisticByPerson": [
{"person": "Быкова Ника Робертовна", "count": 1, "price": 60600, "countUsers": 1},
{"person": "Горбунов Тимофей Дмитриевич", "count": 1, "price": 5700, "countUsers": 1},
{"person": "Иванов Иван Иванович", "count": 8, "price": 81900, "countUsers": 5},
{"person": "Лазарева Марьяна Михайловна", "count": 1, "price": 15300, "countUsers": 1}
]
}
Выходные данные #
При корректных входных данных приложение должно завершать работу с кодом возврата 0 и возвращать данные в формате JSON.
При некорректных входных данных приложение должно завершать работу с ненулевым кодом возврата и возвращать сообщение об ошибке. Некорректными данными считаются:
- отсутствие аргумента команды или некорректная команда.
- отсутствие обязательного параметра команды, его некорректное значение или несоответствие значения указанному типу данных.
- отсутствие аргумента
--equipment-file
или его некорректное значение.
Приложение всегда должно завершать работу корректно. Падение приложения или отображение стека вызовов недопустимо.