2.1. Общие сведения
| Исполнитель | студенческая команда (1–2 человека) |
| Заказчик | учебная группа/кафедра |
| Основание | учебный план по дисциплине «Основы программирования (C#)» |
| Стадии работ |
анализ → проектирование → реализация → испытания → сдача
Схема стадий ниже (Mermaid):
flowchart LR
A[Анализ] --> B[Проектирование]
B --> C[Реализация]
C --> D[Испытания]
D --> E[Сдача]
|
2.2. Назначение и область применения
Программный продукт предназначен для автоматизации учёта аренды спортивного инвентаря (велосипеды, ролики, коньки, лыжи и др.) в небольшом пункте проката. Система обеспечивает оформление выдачи и возврата, расчёт стоимости по тарифам, фиксацию штрафов, ведение справочников клиентов и инвентаря, формирование базовых отчётов.
2.3. Термины и сокращения
- Единица инвентаря (Item) — конкретный объект проката с инвентарным номером.
- Договор/Аренда (Rental) — запись о выдаче/возврате одной единицы инвентаря клиенту.
- ТО (Maintenance) — техническое обслуживание/ремонт.
- CRUD — операции создания/чтения/изменения/удаления.
2.4. Требования к функциональности (F)
F1. Управление инвентарём
- F1.1 Добавление/редактирование/удаление единиц инвентаря.
- F1.2 Изменение статусов: «доступен», «в аренде», «на обслуживании».
- F1.3 Просмотр перечня инвентаря с фильтрами (категория, статус).
F2. Управление клиентами
- F2.1 Ведение справочника клиентов (ФИО, контакты, документ).
- F2.2 Поиск по ФИО/телефону.
F3. Тарифы и расчёт
- F3.1 Ведение тарифов: почасовой/посуточный/пакетный.
- F3.2 Расчёт стоимости аренды по фактическому времени с правилами округления (например, ≥ 30 мин округлять до часа).
- F3.3 Учёт скидок/штрафов (повреждение, просрочка).
F4. Оформление аренды
- F4.1 Создание договора выдачи: выбор клиента, инвентаря, тарифа, предварительный расчёт.
- F4.2 Закрытие договора: фиксация возврата, перерасчёт, итог к оплате.
- F4.3 Просмотр истории аренды по клиенту и по инвентарю.
F5. Обслуживание/ремонты
- F5.1 Регистрация записи ТО, блокировка инвентаря на время работ.
- F5.2 Завершение ТО и перевод в статус «доступен».
F6. Отчёты и выгрузки
- F6.1 Отчёт о выручке за период.
- F6.2 Отчёт о загрузке инвентаря (время в аренде/в простое).
- F6.3 Экспорт выбранных данных в CSV/JSON.
Mermaid-диаграмма функциональных блоков
flowchart TB
subgraph Inventory[Управление инвентарём]
F11[F1.1 CRUD] --> F12[Статусы]
F12 --> F13[Фильтры]
end
subgraph Clients[Клиенты]
F21[F2.1 CRUD] --> F22[Поиск]
end
subgraph Pricing[Тарифы и расчёт]
F31[Тарифы] --> F32[Правила округления] --> F33[Скидки/штрафы]
end
subgraph Rental[Оформление аренды]
F41[Выдача] --> F42[Закрытие] --> F43[История]
end
subgraph Service[ТО/ремонты]
F51[Регистрация] --> F52[Завершение]
end
subgraph Reports[Отчёты/выгрузки]
F61[Выручка] --> F62[Загрузка] --> F63[Экспорт]
end
Inventory --> Rental
Clients --> Rental
Pricing --> Rental
Rental --> Reports
Service --> Inventory
2.5. Нефункциональные требования (N)
- N1. Платформа. Язык C#, .NET LTS (6/8), автономное приложение (Console или Windows Forms).
- N2. Производительность. N2.1 Время отклика основных операций ≤ 1 с на тестовом наборе до 1000 записей.
- N3. Надёжность и целостность данных. N3.1 Валидация обязательных полей; запрет выдачи предмета со статусом ≠ «доступен». N3.2 Автосохранение при закрытии программы/операции.
- N4. Удобство использования. Чёткое меню/формы, подтверждения критических действий.
- N5. Безопасность (учебный режим). Локальное хранение; минимальный набор ПДн; опц. маскирование телефона.
- N6. Совместимость. Windows 10/11; без интернета и внешних БД.
- N7. Поддерживаемость/качество кода. Структурирование, комментарии к ключевым местам, читаемые имена.
2.6. Требования к входным и выходным данным (D)
D1. Хранилище: локальные файлы JSON (основной вариант) или CSV (экспорт/импорт).
D2. Структуры данных (минимальный состав полей)
D2.1 InventoryItem (items.json)
| Поле | Тип | Ограничения / пример | Назначение |
| id | string | GUID | Уникальный идентификатор |
| invNumber | string | обяз., шаблон INV-0001 | Инвентарный номер |
| category | string | обяз. | Велосипед/Ролики/Лыжи и т.п. |
| condition | string | обяз. | Новое/Хорошее/Требует ремонта |
| status | string | обяз. | available/rented/maintenance |
| lastServiceAt | date | опц. | Дата последнего ТО |
D2.2 Customer (customers.json)
| Поле | Тип | Ограничения / пример | Назначение |
| id | string | GUID | Уникальный идентификатор |
| fullName | string | обяз. | ФИО |
| phone | string | шаблон | Телефон |
| docId | string | опц. | Документ (номер/серия) |
D2.3 Tariff (tariffs.json)
| Поле | Тип | Ограничения / пример | Назначение |
| id | string | GUID | Уникальный идентификатор |
| name | string | — | Название тарифа |
| mode | enum | hour/day/package | Режим тарифа |
| rate | decimal | ≥ 0 | Базовая ставка |
| roundRule | string | напр. ceil_30min | Правила округления |
D2.4 Rental (rentals.json)
| Поле | Тип | Ограничения / пример | Назначение |
| id | string | GUID | Уникальный идентификатор |
| itemId | string | GUID | Связь с InventoryItem |
| customerId | string | GUID | Связь с Customer |
| tariffId | string | GUID | Связь с Tariff |
| startAt | datetime | — | Время выдачи |
| endAt | datetime | опц. | Время возврата |
| baseAmount | decimal | — | Базовая сумма |
| discount | decimal | — | Скидка |
| penalty | decimal | — | Штраф |
| total | decimal | — | Итог к оплате |
| status | enum | open/closed | Статус договора |
D2.5 Maintenance (maintenance.json)
| Поле | Тип | Ограничения / пример | Назначение |
| id | string | GUID | Уникальный идентификатор |
| itemId | string | GUID | Связь с InventoryItem |
| date | date | — | Дата работ |
| work | string | — | Вид работ |
| note | string | — | Комментарий |
D3. Ввод/вывод: ввод — формы/меню: создание/редактирование сущностей, выбор из списков. Вывод — таблицы/списки, детальные карточки, суммарные отчёты; экспорт CSV/JSON.
Mermaid ER (иллюстративно)
erDiagram
Customer ||--o{ Rental : rents
InventoryItem ||--o{ Rental : booked
Tariff ||--o{ Rental : priced_by
Rental ||--o{ Payment : paid_by
InventoryItem ||--o{ Maintenance : serviced_by
2.7. Требования к интерфейсу пользователя (UI)
- Консольный вариант: главное меню (Инвентарь/Клиенты/Аренда/ТО/Отчёты/Экспорт/Выход), подменю и подтверждения.
- Windows Forms (по желанию): вкладки или навигация слева, формы с валидацией (обязательные поля отмечены).
- Сообщения об ошибках — информативные, без технических трассировок.
2.8. Ограничения и допущения
- Один договор = одна единица инвентаря (упрощение учебной модели).
- Конкурентный доступ не моделируется; проверка статуса предотвращает двойную выдачу.
- Денежные расчёты без интеграции с эквайрингом.
2.9. Условия эксплуатации
| Аппаратные | ПК/ноутбук с 4 ГБ ОЗУ и выше |
| Программные | Windows 10/11, .NET 6/8 Runtime/SDK, локальные права записи в каталог приложения |
| Установка | распаковка дистрибутива, запуск исполняемого файла либо сборка из исходников в Visual Studio/VS Code |
| Резервирование | периодическое копирование каталога данных (папка data/) |
| Режим | эксплуатация офлайн, доступ к интернету не обязателен |
2.10. Состав и структура поставки
- Исходные коды (
*.cs, *.sln);
- Сборка (
exe) — для Windows Forms-проекта;
- Файлы данных (
/data/*.json);
- Руководство пользователя (краткое);
- Отчёт по проекту (docx/pdf).
2.11. Требования к надёжности и защите данных
- Валидация ввода.
- Обработка исключений (недоступность файла, некорректный формат).
- Атомарность операций записи (временный файл + замена).
2.12. Контроль качества и приёмка (критерии)
- K1. Функциональность: реализованы F1–F6 согласно разделу 2.4.
- K2. Корректность расчётов: тест-кейсы на границах времени (59/60/61 мин; 23:59/00:01) проходят без ошибок.
- K3. Удобство: все критические действия подтверждаются, ошибки — с понятными сообщениями.
- K4. Данные: все обязательные поля валидируются; запрет выдачи при статусе ≠ «доступен».
- K5. Качество кода: структура классов, комментарии к ключевым методам, читаемые имена.
- K6. Отчётность: отчёты строятся корректно на тестовом наборе; экспорт CSV работает.
- K7. Документация: отчёт содержит все разделы, скриншоты/листинги, результаты тестов.
2.13. Матрица трассируемости (фрагмент)
| ID требования | Описание | Проверка |
| F1.2 | Перевод статусов инвентаря | Тест TC-INV-02 (смена доступен→в аренде) |
| F3.2 | Округление ≥ 30 мин до часа | Тест TC-CALC-05 (пример 1ч29м → 2 часа) |
| F4.2 | Перерасчёт при закрытии | Тест TC-RENT-07 (ночной возврат) |
| F6.1 | Выручка за период | Тест TC-RPT-01 (периодический отчёт) |
| N2.1 | Отклик ≤ 1 с | Замер на тестовом наборе (скрипт/ручной) |
2.14. Порядок сдачи и приёмки
- Демонстрация работы на наборе тестовых данных.
- Предоставление отчёта, исходников и собранного приложения (если применимо).
- Подписание листа приёмки (учебная форма) при выполнении критериев K1–K7.