Загрузка данных
cd ~/Desktop
mkdir -p lab4
cd lab4
cat << 'EOF' > README.md
# Индивидуальный проект: Спецификация системы «Зоопарк» (Вариант 21)
**Выполнил:** Студент группы 13б Тронькин Дмитрий
**Ссылка на репозиторий с кодом (Репозиторий №2):** [https://github.com/wakuralain/dimaegorlab3.git](https://github.com/wakuralain/dimaegorlab3.git)
---
## 1. Постановка задачи (Задание 2 Лабораторной работы №3)
Разработать консольное приложение на языке C для автоматизации учета и управления данными локального Зоопарка с использованием СУБД SQLite3. Система должна обеспечивать хранение, обновление и выборку данных о следующих сущностях:
* **Животные:** кличка, вид, возраст, состояние здоровья, номер вольера.
* **Вольеры:** номер, тип (открытый/закрытый), вместимость, зона расположения.
* **Сотрудники (смотрители/ветеринары):** ФИО, должность, закрепленные вольеры/животные.
**Основные операции:**
1. Аутентификация пользователей (администратор, смотритель).
2. Вывод полных списков животных по зонам и вольерам.
3. CRUD-операции (добавление, просмотр, обновление, удаление) для сущности «Животное».
4. Формирование отчетов по состоянию здоровья животных и заполненности вольеров.
---
## 2. Диаграмма вариантов использования (Use Case)
### Визуализация диаграммы
```mermaid
graph TD
Admin((Администратор)) --> Login[Войти в систему]
Admin --> CRUD[Управление животными CRUD]
Admin --> Report[Сформировать отчет по вольерам]
Keeper((Смотритель/Ветеринар)) --> Login
Keeper --> View[Просмотр данных животных]
Keeper --> UpdateStatus[Обновление состояния здоровья]
```
### Текстовый сценарий для прецедента «Добавить новое животное»
* **Идентификатор:** UC-02
* **Название:** Добавить новое животное в базу данных
* **Действующие лица (Акторы):** Администратор
* **Предусловия:** Администратор успешно прошел аутентификацию в системе и находится в главном меню управления.
* **Основной поток:**
1. Администратор выбирает пункт меню «Добавить животное».
2. Система запрашивает ввод данных: кличка, вид, возраст, статус здоровья и номер вольера.
3. Администратор вводит запрашиваемые параметры.
4. Система выполняет валидацию введенных данных (проверяет корректность возраста и существование указанного вольера в БД).
5. Система формирует и выполняет SQL-запрос `INSERT` к базе данных `zoo_database.db`.
6. Система выводит в консоль уведомление: «Животное успешно добавлено!».
* **Альтернативные потоки:**
* *4а. Указанный вольер не существует или переполнен:* Система выводит сообщение об ошибке, operation отменяется, происходит возврат в меню.
* *4б. Некорректный формат данных (например, отрицательный возраст):* Система предлагает повторить ввод.
* **Постусловия:** Новая запись зафиксирована в таблице `ANIMALS` базы данных.
---
## 3. Диаграммы деятельности (Activity)
### 3.1. Диаграмма деятельности для процесса «Войти в систему»
Описывает алгоритм проверки прав доступа пользователя при запуске консольного приложения.
```mermaid
stateDiagram-v2
[*] --> Ввод_Логина_и_Пароля
Ввод_Логина_и_Пароля --> Проверка_в_БД_SQLite
Проверка_в_БД_SQLite --> Авторизован : Данные верны
Проверка_в_БД_SQLite --> Ошибка_Доступа : Неверный логин/пароль
Ошибка_Доступа --> Ввод_Логина_и_Пароля : Повторить (осталось < 3 попыток)
Ошибка_Доступа --> Блокировка : Попытки исчерпаны
Авторизован --> Открытие_Главного_Меню
Открытие_Главного_Меню --> [*]
Блокировка --> [*]
```
### 3.2. Диаграмма деятельности для процесса «CRUD Животное»
Иллюстрирует логику работы администратора при модификации данных о животных в зоопарке.
```mermaid
%%{init: {'theme': 'base'}}%%
graph TD
A[Главное меню] --> B{Выбор операции}
B -->|C - Create| C[Ввод данных нового животного] --> C1[Проверка валидности] --> C2[SQL INSERT] --> End[Успешное обновление консоли]
B -->|R - Read| R[SQL SELECT по фильтру] --> R1[Вывод таблицы на экран] --> End
B -->|U - Update| U[Выбор ID животного] --> U1[Ввод новых параметров] --> U2[SQL UPDATE] --> End
B -->|D - Delete| D[Выбор ID для удаления] --> D1[Запрос подтверждения] --> D2[SQL DELETE] --> End
End --> A
```
---
## 4. Диаграммы классов (Class)
Описывает внутреннюю структуру модулей консольного приложения на C, моделируя разделение логики работы с базой данных, авторизации и сущностей в соответствии со стандартами КИС.
```mermaid
classDiagram
class AuthManager {
+int loginUser(char* username, char* password)
+void logout()
}
class DatabaseManager {
-sqlite3* db
+int connectDB(char* db_name)
+int executeQuery(char* sql)
+void closeDB()
}
class AnimalManager {
+int addAnimal(AnimalData animal)
+AnimalData getAnimalById(int id)
+int updateAnimal(int id, AnimalData newData)
+int deleteAnimal(int id)
}
class AnimalData {
+int id
+char name[50]
+char species[50]
+int age
+char health_status[30]
+int enclosure_id
}
AnimalManager ..> DatabaseManager : использует для SQL запросов
AuthManager ..> DatabaseManager : проверяет пользователей
AnimalManager ..> AnimalData : оперирует структурами данных
```
---
## 5. Диаграммы последовательности (Sequence)
### 5.1. Диаграмма последовательности «Войти в систему»
Показывает динамику взаимодействия между пользователем, консольным интерфейсом, модулем авторизации и базой данных SQLite3.
```mermaid
sequenceDiagram
actor Пользователь
participant Консоль as Консольный Интерфейс
participant Auth as Модуль AuthManager
participant DB as База Данных (SQLite)
Пользователь->>Консоль: Вводит логин и пароль
Консоль->>Auth: loginUser(username, password)
Auth->>DB: Выполнение SELECT * FROM USERS WHERE ...
DB-->>Auth: Возврат строки пользователя (хэш пароля)
Auth-->>Консоль: Статус проверки (Успех / Ошибка)
alt Если Успех
Консоль-->>Пользователь: Отобразить Главное меню приложения
else Если Ошибка
Консоль-->>Пользователь: Вывести "Неверный пароль! Попробуйте снова"
end
```
### 5.2. Диаграмма последовательности для «CRUD Животное» (Операция удаления)
Показывает цепочку вызовов при удалении записи о животном из зоопарка.
```mermaid
sequenceDiagram
actor Администратор
participant Консоль as Консольный Интерфейс
participant AM as Модуль AnimalManager
participant DB as База Данных (SQLite)
Администратор->>Консоль: Выбирает пункт "Удалить животное" и вводит ID
Консоль->>AM: deleteAnimal(animal_id)
AM->>DB: Выполнение DELETE FROM ANIMALS WHERE id = animal_id
DB-->>AM: Результат выполнения (SQLITE_OK)
AM-->>Консоль: Флаг успешного удаления
Консоль-->>Администратор: Вывод сообщения "Запись удалена успешно!"
```
---
## 6. Диаграмма компонентов (Component)
Описывает физическую структуру проекта, распределение файлов исходного кода на языке C, заголовочных файлов, скомпилированных модулей и файлов данных в соответствии со структурой репозитория.
```mermaid
graph LR
subgraph Includes [Папка /includes (Заголовочные файлы)]
auth_h[auth.h]
animal_h[animal.h]
db_h[db.h]
end
subgraph Src [Папка /src (Исходный код)]
main_c[main.c] --> auth_c[auth.c]
main_c --> animal_c[animal.c]
main_c --> db_c[db.c]
end
auth_c -.-> auth_h
animal_c -.-> animal_h
db_c -.-> db_h
subgraph External [Внешние зависимости и БД]
sqlite3_lib((sqlite3 библиотека))
db_file[(zoo_database.db)]
end
db_c --> sqlite3_lib
db_c --> db_file
subgraph Bin [Папка /bin (Результат сборки)]
app_exe[lab4_zoo.exe / бинарник]
end
main_c --> app_exe
```
EOF