Программный продукт реализуется как модульное приложение на языке C# (.NET 6/8), сочетающее структурный и объектно-ориентированный подходы. Основные уровни:
| Уровень | Назначение | Примеры классов/модулей |
|---|---|---|
| Данные (Data Layer) | Хранение и доступ к локальным JSON-файлам | DataStorage, FileRepository |
| Бизнес-логика (Business Logic) | Операции аренды, расчёт тарифов, управление статусами | RentalService, TariffCalculator, MaintenanceService |
| Представление (UI Layer) | Взаимодействие с пользователем (меню или формы) | Program, ConsoleUI, FormMain |
| Модели (Domain Entities) | Классы предметной области (объекты учёта) | Customer, InventoryItem, Rental, Tariff, MaintenanceRecord |
Блок-схема основного сценария: оформление аренды и возврат инвентаря.
flowchart TD
A[Начало]
B[Меню: выбрать действие]
C{Создать новую аренду?}
D[Выбор клиента]
E[Выбор инвентаря]
F{Инвентарь доступен?}
G[Выбор тарифа]
H[Расчёт стоимости]
I[Создание договора аренды status = open]
J[Сохранение в файл rentals.json]
K[Вывод подтверждения]
L{Возврат инвентаря?}
M[Поиск договора по ID]
N[Ввод фактического времени]
O[Перерасчёт суммы и штрафов]
P[Изменение статуса на closed]
Q[Обновление статуса инвентаря на доступен]
R[Формирование отчёта]
Z[Конец]
A --> B
B --> C
C -->|Да| D
D --> E
E --> F
F -->|Да| G
F -->|Нет| B
G --> H --> I --> J --> K --> B
C -->|Нет| L
L -->|Да| M --> N --> O --> P --> Q --> R --> B
L -->|Нет| Z
classDiagram
direction LR
class Customer {
+Guid Id
+string FullName
+string Phone
+string DocumentId
}
class InventoryItem {
+Guid Id
+string InvNumber
+string Category
+string Condition
+string Status
+DateTime LastServiceAt
+void ChangeStatus(string newStatus)
}
class Tariff {
+Guid Id
+string Name
+string Mode // hour/day/package
+decimal Rate
+string RoundRule
}
class Rental {
+Guid Id
+Customer Customer
+InventoryItem Item
+Tariff Tariff
+DateTime StartAt
+DateTime? EndAt
+decimal BaseAmount
+decimal Discount
+decimal Penalty
+decimal Total
+string Status
+void CloseRental(DateTime endAt)
}
class MaintenanceRecord {
+Guid Id
+InventoryItem Item
+DateTime Date
+string Work
+string Note
}
class TariffCalculator {
+decimal Calculate(Tariff t, DateTime start, DateTime end)
}
class DataStorage {
+List~Customer~ Customers
+List~InventoryItem~ Items
+List~Tariff~ Tariffs
+List~Rental~ Rentals
+List~MaintenanceRecord~ Maintenances
+void LoadAll()
+void SaveAll()
}
class RentalService {
+void OpenRental(Customer c, InventoryItem i, Tariff t)
+void CloseRental(Guid rentalId)
+List~Rental~ GetActiveRentals()
}
Customer "1" --> "0..*" Rental : оформляет
InventoryItem "1" --> "0..*" Rental : участвует
InventoryItem "1" --> "0..*" MaintenanceRecord : проходит ТО
Tariff "1" --> "0..*" Rental : применяется
RentalService --> DataStorage : использует
Rental --> TariffCalculator : расчёт
Краткое описание классов:
Customer — модель клиента.InventoryItem — описание единицы инвентаря и статусов.Tariff — тариф с параметрами расчёта.Rental — договор аренды, связь клиент↔инвентарь↔тариф.MaintenanceRecord — запись технического обслуживания.TariffCalculator — вычисление стоимости по тарифу и интервалу времени.DataStorage — загрузка/сохранение данных из JSON.RentalService — бизнес-логика управления арендами.
sequenceDiagram
participant U as Пользователь
participant UI as Интерфейс
participant RS as RentalService
participant DS as DataStorage
participant TC as TariffCalculator
U->>UI: Выбрать "Создать аренду"
UI->>RS: Запрос создания аренды (данные клиента, инвентаря, тарифа)
RS->>DS: Проверить доступность инвентаря
DS-->>RS: Статус "доступен"
RS->>TC: Рассчитать стоимость (startAt, tariff)
TC-->>RS: Возврат суммы
RS->>DS: Сохранить договор в rentals.json
DS-->>RS: Подтверждение
RS-->>UI: Успешно создан договор
UI-->>U: Отображение информации и сумма аренды
System.Text.Json); атомарная запись файлов.RentalService, MaintenanceService).