Загрузка данных


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