Загрузка данных
Практическое занятие 1, 2
Создание приложений
1 Цель работы:
1.1 Изучить основные понятия и принципы работы в С++. при подключении баз данных.
1.2 Получить практические навыки создания сложных приложений, используя элементы объектно-ориентированного программирования.
1.3 Сформировать умение самостоятельно разрабатывать приложения.
2 Создание программы для подбора кандидатов на вакантные должности, имеющиеся в банке данных.
При обращении к данной программе перед пользователем должны появиться окна, соответствующие полям базы данных, в которые он вносит свои данные для организации поиска специалиста. Данные вносятся в окна формы соответствующие полям таблицы: возраст, пол и т.д., количество полей укажите сами, либо выбирает эти параметры из предложенного списка.
Можно выполнить иначе: пользователю предъявляется одно окно, где он вводит ответы на вопросы или делает выбор из списка ответов (вопросы могут быть следующие: Какая вакансия вас интересует? Какого возраста специалист вам необходим? Указать пол специалиста и т.д.)
В результате работы пользователь должен получить список отобранных по указанным им параметрам специалистов с дополнительной информацией и контактными сведениями.
Причем пользователь не обязан заполнять все поля.
2.1 Требование к приложению
Приложение должно обеспечивать:
хранение данных о кандидатах и вакансиях в структурированном виде;
добавление, редактирование и удаление записей;
многокритериальный поиск кандидатов по параметрам вакансии;
наглядный вывод результатов.
2.2 Проектирование базы данных
Основные таблицы:
таблица candidates (кандидаты);
таблица vacancies (вакансии);
таблица responses (отклики).
Связи:
- candidates.id → responses.candidate_id — 1:М (один кандидат может иметь несколько откликов на разные вакансии)
- vacancies.id → responses.vacancy_id — 1:М (одна вакансия может получить несколько откликов от разных кандидатов)
Вместе эти две связи 1:М через таблицу responses образуют М:М (многие ко многим) между кандидатами и вакансиями.
Атрибуты представлены в таблицах 1,2,3.
Таблица 1
Атрибуты таблицы candidates (кандидаты)
Поле Тип Описание
id SERIAL PK уникальный идентификатор
full_name VARCHAR(150) ФИО кандидата
age INTEGER возраст (18-70)
gender VARCHAR(10) пол (мужской/женский)
phone VARCHAR(20) контактный телефон
email VARCHAR(100) электронная почта
education VARCHAR(50) уровень образования
experience_years INTEGER опыт работы (лет))
specialization VARCHAR(100) специализация
skills TEXT навыки
city VARCHAR(50) город
salary_expectation INTEGER ожидаемая зарплата (руб)
status VARCHAR(20) статус (Активен/В резерве/...)
staff_find BOOLEAN находка персонала (да/нет)
rating INTEGER рейтинг (1-5)
created_at TIMESTAMP дата добавления
Таблица 2
Атрибуты таблицы vacancies (вакансии)
Поле Тип Описание
id SERIAL PK уникальный идентификатор
title VARCHAR(150) название должности
department VARCHAR(100) отдел
min_age INTEGER минимальный возраст
max_age INTEGER максимальный возраст
gender_req VARCHAR(10) требуемый пол (NULL = любой)
education_req VARCHAR(50) требуемое образование
min_experience INTEGER минимальный опыт (лет)
specialization_req VARCHAR(100) требуемая специализация
required_skills TEXT требуемые навыки
salary_min INTEGER зарплата от
salary_max INTEGER зарплата до
city VARCHAR(50) город
description TEXT описание вакансии
is_active BOOLEAN активна ли вакансия
created_at TIMESTAMP дата создания
Таблица 3
Атрибуты таблицы responses (отклики)
id SERIAL PK уникальный идентификатор
candidate_id INTEGER FK ссылка на candidates.id
vacancy_id INTEGER FK ссылка на vacancies.id
response_date TIMESTAMP дата отклика
status VARCHAR(20) статус (Рассматривается/Приглашён/Отказ/Принят)
2.3 ER-диаграмма
Построил ER-диаграмму (нотация Чена) (рисунок 2.1).
Рисунок 2.1 - ER-диаграмму (нотация Чена)
2.4 Создание базы данных
Создал базу данных hr_candidates (рисунок 2.2).
Рисунок 2.2 – Создание базы данных hr_candidates
Создал таблицу кандидаты (candidates) (рисунок 2.3).
Рисунок 2.3 – SQL-запрос для создания таблицы кандидаты (candidates)
Создал таблицу вакансии (vacancies) (рисунок 2.4)
Рисунок 2.4 – SQL-запрос для создания таблицы вакансии (vacancies)
Создал таблицу отклики (responses) — связь кандидатов и вакансий (рисунок 2.5).
Рисунок 2.5 – SQL-запрос для создания таблицы отклики (responses)
2.5 ER-диаграмма из разработанной базы данных
Полученная ER-диаграмма из БД представлена на рисунке 2.6
Рисунок 2.6 – ER-диаграмма из БД
2.6 Заполнение таблиц данными
Заполнил данными таблицу кандидаты (candidates) (рисунок 2.7-2.8).
Рисунок 2.7 – SQL-запрос для заполнения данными таблицы кандидаты (candidates)
Рисунок 2.8 – Заполненная таблица кандидаты (candidates)
Заполнил данными таблицу вакансии (vacancies) (рисунок 2.9-2.10).
Рисунок 2.9 – SQL-запрос для заполнения данными таблицы вакансии (vacancies)
Рисунок 2.10 – Заполненная таблица вакансии (vacancies)
Заполнил данными таблицу отклики (responses) (рисунок 2.11-2.12).
Рисунок 2.11 – SQL-запрос для заполнения данными таблицы отклики (responses)
Рисунок 2.12 – Заполненная таблица отклики (responses)
2.7 Создание полезных запросов
1) Создал запрос «Все кандидаты со статусом Активен» (рисунок 2.13).
Рисунок 2.13 – Реализация запроса «Все кандидаты со статусом Активен»
2) Создал запрос «Кандидаты — находка персонала» (рисунок 2.14).
Рисунок 2.14 – Реализация запроса «Кандидаты — находка персонала»
3) Создал запрос «Подбор кандидатов под вакансию «Программист Python» (id=1)» (рисунок 2.15).
Рисунок 2.15 – Реализация запроса «Подбор кандидатов под вакансию «Программист Python» (id=1)»
4) Создал запрос «Количество откликов на каждую вакансию» (рисунок 2.16).
Рисунок 2.16 – Реализация запроса «Количество откликов на каждую вакансию»
2.8 Создание таблицу для системы уведомлений пользователей
Создал таблицу notifications для системы уведомлений пользователей. Когда в системе будет происходить какое-то действие (добавлен кандидат, новый отклик, кандидат отмечен как «находка»), система автоматически создаст уведомление и запишет его в таблицу notifications. Пользователь увидит красный бейдж с числом непрочитанных уведомлений в шапке сайта.
Атрибуты таблицы notifications представлены в таблице 4.
Таблица 4
Атрибуты таблицы notifications
Поле Тип Описание
id SERIAL PK Идентификатор
username VARCHAR(50) Имя роли PostgreSQL
message TEXT Текст уведомления
is_read BOOLEAN Прочитано
created_at TIMESTAMP Дата создания
Таблица notifications представлена на рисунке 2.17.
Рисунок 2.17 -SQL-запрос для создания таблицы notifications
Заполнил таблицу notifications тестовыми данными (рисунки 2.18-2.19).
Рисунок 2.18 -SQL-запрос для заполнения таблицы notifications тестовыми данными
Рисунок 2.19 - Заполненная таблица notifications
2.9 Создание ролей и прав доступа
Создал 3 роли: Администратор, HR-менеджер и Гость (рисунок 2.19).
Рисунок 2.19 -SQL-запрос для добавления ролей
Назначение прав представлено в таблице 5.
Таблица 5
Назначение прав
Роль Логин Пароль Права
role_admin role_admin admin123 Полный доступ ко всем таблицам (SELECT, INSERT, UPDATE, DELETE)
role_manager role_manager manager123 Кандидаты: SELECT, INSERT, UPDATE (без DELETE).
Вакансии: только SELECT.
Отклики: SELECT, INSERT, UPDATE.
Уведомления: SELECT, UPDATE
role_guest role_guest guest123 Только SELECT на candidates, vacancies, notifications
SQL-запросы для назначения прав представлены на рисунках 2.20, 2.21, 2.22.
Рисунок 2.20 -SQL-запрос для назначения прав для роли Администратор
Рисунок 2.21 - SQL-запрос для назначения прав для роли HR-менеджер
Рисунок 2.22 - SQL-запрос для назначения прав для роли Гость
Проверил список созданных ролей (рисунок 2.23).
Рисунок 2.23 – SQL-запрос для проверки списка созданных ролей
Проверил права конкретной роли (рисунки 2.24-2.26).
Рисунок 2.24 – Проверка прав HR-менеджера
Рисунок 2.25 –Проверка прав администратора
Рисунок 2.26 – Проверка прав гостя
3. Веб‑интерфейс (web‑приложение на Flask + HTML)
3.1 Описание технология: Python, Flask, HTML.
Для бэкенд составляющей выбрал язык программирования Python, так как это высокоуровневый, интерпретируемый, объектно-ориентированный язык программирования с динамической типизацией.
Веб-фреймворк: Flask. Flask — это микрофреймворк для веб-разработки на Python. Он предоставляет базовые инструменты для создания веб-приложений, но при этом остается гибким и позволяет разработчикам выбирать дополнительные библиотеки и компоненты по своему усмотрению. Flask идеально подходит для небольших и средних проектов, а также для создания API.
3.2 Структура проекта
Структура проекта представлена в таблице 6.
Таблица 6
Структура проекта
папка файл Назначение
web/ app.py Flask-сервер
requirements.txt flask, psycopg2-binary
database_schema.sql создание БД и таблиц
roles_pgadmin.sql роли PostgreSQL и права
templates/ base.html общий каркас
login.html страница входа
index.html поиск кандидатов
candidates.html список кандидатов
candidate_form.html форма кандидата
vacancies.html список вакансий
vacancy_form.html форма вакансии
responses.html отклики
notifications.html уведомления
3.3 Создал файл requirements.txt (рисунок 3.1) для установки списка библиотек.
Рисунок 3.1 - файл requirements.txt
3.4 Создал файл app.ry.
Основные пункты файла app.ry содержат:
1) Зависимости (рисунок 3.2).
Рисунок 3.2 - Зависимости (фрагмент файла app.ry)
2) Конфигурация подключения (подключение к БД, имя роли PostgreSQL, справочники) (рисунок 3.3).
Рисунок 3.3 - Конфигурация подключения (фрагмент файла app.ry)
3) Работа с БД (рисунок 3.4).
Рисунок 3.4 - Работа с БД (фрагмент файла app.ry)
4) Контроль доступа (рисунок 3.5).
Рисунок 3.5 – Контроль доступа (фрагмент файла app.ry)
5) Авторизация (через роли PostgreSQL) (рисунок 3.6).
Рисунок 3.6 – Авторизация (фрагмент файла app.ry)
6) Поиск кандидатов (все роли) (рисунок 3.7).
Рисунок 3.7 – Поиск кандидатов (фрагмент файла app.ry)
7) Кандидаты (CRUD) (рисунок 3.8).
Рисунок 3.8 –Кандидаты (фрагмент файла app.ry)
8) Вакансии (CRUD) (рисунок 3.9).
Рисунок 3.9 – Вакансии (фрагмент файла app.ry)
9) Отклики (рисунок 3.10).
Рисунок 3.10 – Отклики (фрагмент файла app.ry)
10) Уведомления (рисунок 3.11).
Рисунок 3.11 – Уведомления (фрагмент файла app.ry)
11) Запуск (рисунок 3.12).
Рисунок 3.12 –Запуск (фрагмент файла app.ry)
Полный листинг файла app.ry представлен в Приложение А.
3.5 Создал папку templates. В ней создал файлы HTML:
1) base.html (рисунок 3.13) - общий каркас всех страниц: меню навигации, бейдж уведомлений, подключение стилей. Остальные страницы наследуются от него.
Рисунок 3.13 – Файл base.html
2) login.html (рисунок 3.14) - форма входа: поля логин и пароль, отправка данных на сервер для проверки роли PostgreSQL.
Рисунок 3.14 – Файл login.html
3) index.html (рисунок 3.15) - главная страница поиска кандидатов с фильтрами по нескольким критериям и подсветкой «Находок персонала».
Рисунок 3.15 – Файл index.html (часть 1)
Рисунок 3.15 – Файл index.html (часть 2)
4) candidates.html (рисунок 3.16) - список всех кандидатов в виде таблицы с кнопками редактирования и удаления.
Рисунок 3.16 – Файл candidates.html
5) candidate_form.html (рисунок 3.17) - форма добавления и редактирования кандидата: ФИО, навыки, опыт, рейтинг, отметка «Находка».
Рисунок 3.17 – Файл candidate_form.html (часть 1)
Рисунок 3.17 – Файл candidate_form.html (часть 2)
6) vacancies.html (рисунок 3.18) - список вакансий с кнопками добавления, редактирования и удаления.
Рисунок 3.18 – Файл vacancies.html
7) vacancy_form.html (рисунок 3.19) - форма добавления и редактирования вакансии: должность, требования, зарплата.
Рисунок 3.19 – Файл vacancy_form.html
8) responses.html (рисунок 3.20) - таблица откликов кандидатов на вакансии с указанием статуса.
Рисунок 3.20– Файл responses.html
9) notifications.html (рисунок 3.21) - список уведомлений пользователя с отметкой прочитанных и непрочитанных.
Рисунок 3.21 – Файл notifications.html
4. Макеты интерфейсов
4.1 Страница входа представлена на рисунке 4.1.
Пользователь вводит логин и пароль роли PostgreSQL. Приложение пытается подключиться к БД.
Рисунок 4.1 - Страница входа
4.2. Страница поиска кандидатов (роль: admin) представлена на рисунке 4.2. Слева размещена форма с 10+ параметрами. Справа находится таблица результатов. В шапке — имя, роль, бейдж
Рисунок 4.2 – Поиск кандидатов