Про формы

This commit is contained in:
2025-05-25 12:00:58 +03:00
parent f1fe3177ea
commit 98160fcf98
5 changed files with 311 additions and 29 deletions

BIN
img/form1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
img/form2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
img/form3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
img/graph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

View File

@@ -106,6 +106,36 @@
captionpos=b, captionpos=b,
} }
% Определение языка JSON для листингов
\lstdefinelanguage{JSON}{
basicstyle=\normalfont\ttfamily,
numbers=left,
numberstyle=\scriptsize,
stepnumber=1,
numbersep=8pt,
showstringspaces=false,
breaklines=true,
frame=lines,
backgroundcolor=\color{white},
literate=
*{0}{{{\color{teal}0}}}{1}
{1}{{{\color{teal}1}}}{1}
{2}{{{\color{teal}2}}}{1}
{3}{{{\color{teal}3}}}{1}
{4}{{{\color{teal}4}}}{1}
{5}{{{\color{teal}5}}}{1}
{6}{{{\color{teal}6}}}{1}
{7}{{{\color{teal}7}}}{1}
{8}{{{\color{teal}8}}}{1}
{9}{{{\color{teal}9}}}{1}
{:}{{{\color{gray}{:}}}}{1}
{,}{{{\color{gray}{,}}}}{1}
{\{}{{{\color{gray}{\{}}}}{1}
{\}}{{{\color{gray}{\}}}}}{1}
{[}{{{\color{gray}{[}}}}{1}
{]}{{{\color{gray}{]}}}}{1},
}
\begin{document} % начало документа \begin{document} % начало документа
@@ -174,7 +204,7 @@
% \end{enumerate} % \end{enumerate}
\newpage \newpage
\section {Лабораторная работа №1} \section {Аналитика предметной области}
\subsection{Часть 1: Описание процессов предметной области} \subsection{Часть 1: Описание процессов предметной области}
\subsubsection*{Исходное описание предметной области} \subsubsection*{Исходное описание предметной области}
Стрельба из лука, олимпийский вид спорта с 1900 года. Правила и порядок проведения соревнований в России регламентируются Всемирной федерацией стрельбы из лука (FITA) и Российской федерацией по стрельбе из лука (РФСЛ). РФСЛ проводит несколько десятков соревнований по различным видам стрельбы из лука ежегодно. Спорт также приобретает популярность в любительской среде, например, только в Санкт-Петербурге функционируют около двух десятков спортивных стрелковых клубов и лучных клубов, где может тренировать любой желающий. Частные клубы также регулярно проводят спортивные соревнования. Стрельба из лука, олимпийский вид спорта с 1900 года. Правила и порядок проведения соревнований в России регламентируются Всемирной федерацией стрельбы из лука (FITA) и Российской федерацией по стрельбе из лука (РФСЛ). РФСЛ проводит несколько десятков соревнований по различным видам стрельбы из лука ежегодно. Спорт также приобретает популярность в любительской среде, например, только в Санкт-Петербурге функционируют около двух десятков спортивных стрелковых клубов и лучных клубов, где может тренировать любой желающий. Частные клубы также регулярно проводят спортивные соревнования.
@@ -311,7 +341,7 @@
\newpage \newpage
\section{Лабораторная работа №2} \section{Use-case диаграммы}
Название: организация соревнований по стрельбе из лука. Название: организация соревнований по стрельбе из лука.
@@ -701,17 +731,16 @@
\end{figure} \end{figure}
\section{Часть 3} \section{BPMN диаграмма процесса <<Сбор заявок на соревнования>>}
\subsection{BPMN диаграмма процесса <<Сбор заявок на соревнования>>}
Название: Сбор заявок на соревнования. Название: Сбор заявок на соревнования.
Триггер: принято решение о проведении соревнований. Триггер: принято решение о проведении соревнований.
Входные данные: незаполненный ограниченный список участников дивизиона. Входные данные: незаполненный список участников дивизиона.
Выходные данные: заполненный список участников дивизиона. Выходные данные: заполненный список участников дивизиона.
BPMN диаграмма процесса приведена на Рис.~12. BPMN диаграмма процесса приведена на Рис.~12-13.
\addtocounter{figure}{1} \addtocounter{figure}{1}
\includepdf[pages={1}, fitpaper, pagecommand={ \includepdf[pages={1}, fitpaper, pagecommand={
@@ -729,37 +758,290 @@
\end{tikzpicture} \end{tikzpicture}
}]{pdf/bpmn-2.pdf} }]{pdf/bpmn-2.pdf}
\newpage
\section{Описание экранных форм}
\subsection{Граф экранных форм}
Граф экранных форм приведен на Рис.~\ref{fig:graph}.
\begin{figure}[h!]
\centering
\includegraphics[width=1\linewidth]{img/graph.png}
\caption{Граф экранных форм.}
\label{fig:graph}
\end{figure}
Были выделены следующие экранные формы:
\begin{enumerate}
\item Форма создания заявки;
\item Форма проверки справки о разряде;
\item Форма редактирования справки о разряде;
\item Уведомление об отказе от редактирования справки о разряде;
\item Форма подтверждения или отказа от участия в соревнованиях;
\item Уведомление об отказе от участия в соревнованиях;
\item Уведомление о согласии участвовать в соревнованиях;
\end{enumerate}
Каждый экземпляр процесса может иметь один из следующих статусов:
\begin{enumerate}
\item Заполнение заявки участником;
\item Проверка секретарем справки о разряде участника;
\item Редактирование справки о разряде участником;
\item Ознакомление секретаря с отказом участника от редактирования справки о разряде;
\item Отказ участника от редактирования справки о разряде;
\item Ожидание от участника подтверждения или отказа от участия в соревнованиях;
\item Ознакомление секретаря с отказом участника от участия в соревнованиях;
\item Отказ участника от участия в соревнованиях;
\item Ознакомление секретаря с согласием участника участвовать в соревнованиях;
\item Заявка участника зарегистрирована.
\end{enumerate}
Пример экземпляра процесса в JSON:
\begin{verbatim}
{
"participant_request": {
"status": "Заявка участника зарегистрирована",
"participant_id": 1234,
"contact_info": {
"email": "ivan@example.com",
"phone": "+79991234567"
},
"personal_info": {
"name": "Иван Иванов",
"year_of_birth": "2000-01-01",
"region": "Москва"
},
"rank_confirmation_versions": [
{
"rank": "1-й разряд",
"rank_date": "2021-01-01",
"rank_certificate": "rank_certificate_1234_version_1.pdf",
"status": "not_checked",
"comment": ""
},
{
"rank": "3-й разряд",
"rank_date": "2021-01-01",
"rank_certificate": "rank_certificate_1234_version_2.pdf",
"status": "rejected",
"comment": "На скане справки не видно дату присвоения разряда."
},
{
"rank": "2-й разряд",
"rank_date": "2023-01-01",
"rank_certificate": "rank_certificate_1234_version_3.pdf",
"status": "approved",
"comment": " Справка одобрена."
}
]
}
}
\end{verbatim}
\subsection{Форма создания заявки}
Перечень данных:
\begin{itemize}
\item Имя;
\item Дата рождения;
\item Регион;
\item Телефон;
\item Электронная почта;
\item Разряд;
\item Дата присвоения разряда;
\item Справка о присвоении разряда;
\end{itemize}
Проверки:
\begin{itemize}
\item Все поля должны быть заполнены;
\item Имя участника должно содержать только буквы;
\item Дата рождения должна быть минимум на 18 лет меньше текущей даты, то есть участник должен быть старше 18 лет;
\item Регион должен быть выбран из списка;
\item Телефон должен соответствовать регулярному выражению: \\
\verb|/^(\+7)[- .]?\(?(?:\d{3})\)?[- .]?\d{3}[- .]?\d{4}$/|;
\item Электронная почта должна соответствовать регулярному выражению: \\
\verb|/^[A-Z0-9._%+-]+@[A-Z0-9-]+.+.[A-Z]{2,4}$/i|;
\item Разряд должен быть выбран из списка;
\item Дата присвоения разряда должна быть меньше текущей даты;
\item Файл со справкой о присвоении разряда должен иметь расширение pdf, png, jpg или jpeg;
\item Заявки участника с такой электронной почтой и номером телефона не должно быть в реестре заявок.
\end{itemize}
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\linewidth]{img/form1.png}
\caption{Форма создания заявки.}
\label{fig:form1}
\end{figure}
Пример JSON после заполнения формы:
\begin{verbatim}
{
"participant_request": {
"status": "Проверка секретарем справки о разряде",
"participant_id": 1234,
"contact_info": {
"email": "ivan@example.com",
"phone": "+79991234567"
},
"personal_info": {
"name": "Иван Иванов",
"year_of_birth": "2000-01-01",
"region": "Москва"
},
"rank_confirmation_versions": [
{
"rank": "1-й разряд",
"rank_date": "2021-01-01",
"rank_certificate": "rank_certificate_1234_version_1.pdf",
"status": "not_checked",
"comment": ""
}
]
}
}
\end{verbatim}
\newpage
\subsection{Форма проверки справки о разряде}
Перечень данных:
\begin{itemize}
\item Комментарий;
\end{itemize}
Проверки:
\begin{itemize}
\item Комментарий должен быть заполнен;
\end{itemize}
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\linewidth]{img/form2.png}
\caption{Форма проверки справки о разряде.}
\label{fig:form2}
\end{figure}
Пример JSON после заполнения формы:
\begin{verbatim}
{
"participant_request": {
"status": "Проверка секретарем справки о разряде",
"participant_id": 1234,
"contact_info": {
"email": "ivan@example.com",
"phone": "+79991234567"
},
"personal_info": {
"name": "Иван Иванов",
"year_of_birth": "2000-01-01",
"region": "Москва"
},
"rank_confirmation_versions": [
{
"rank": "1-й разряд",
"rank_date": "2021-01-01",
"rank_certificate": "rank_certificate_1234_version_1.pdf",
"status": "rejected",
"comment": "Не видно дату присвоения разряда."
}
]
}
}
\end{verbatim}
\newpage
\subsection{Форма редактирования справки о разряде}
Перечень данных:
\begin{itemize}
\item Разряд;
\item Дата присвоения разряда;
\item Справка о присвоении разряда;
\end{itemize}
Проверки:
\begin{itemize}
\item Разряд должен быть выбран из списка;
\item Дата присвоения разряда должна быть меньше текущей даты;
\item Файл со справкой о присвоении разряда должен иметь расширение pdf, png, jpg или jpeg;
\end{itemize}
\begin{figure}[h!]
\centering
\includegraphics[width=0.5\linewidth]{img/form3.png}
\caption{Форма редактирования справки о разряде.}
\label{fig:form3}
\end{figure}
Пример JSON после заполнения формы:
\begin{verbatim}
{
"participant_request": {
"status": "Проверка секретарем справки о разряде",
"participant_id": 1234,
"contact_info": {
"email": "ivan@example.com",
"phone": "+79991234567"
},
"personal_info": {
"name": "Иван Иванов",
"year_of_birth": "2000-01-01",
"region": "Москва"
},
"rank_confirmation_versions": [
{
"rank": "1-й разряд",
"rank_date": "2021-01-01",
"rank_certificate": "rank_certificate_1234_version_1.pdf",
"status": "rejected",
"comment": "Не видно дату присвоения разряда."
},
{
"rank": "1-й разряд",
"rank_date": "2021-01-01",
"rank_certificate": "rank_certificate_1234_version_2.pdf",
"status": "not_checked",
"comment": ""
}
]
}
}
\end{verbatim}
\newpage \newpage
\section*{Заключение} \section*{Заключение}
\addcontentsline{toc}{section}{Заключение} \addcontentsline{toc}{section}{Заключение}
% В ходе освоения данного курса было выполнено пять лабораторных работ:
% \begin{enumerate}
% \item Создано представление, инкапсулирующее запрос. Продемонстрирована невозможность модификации представления; написан запрос, использующий в себе созданное представление.
% \item Создана таблица подсчёта количества соревнований для каждого судьи. Также созданы 5 триггеров, автоматизирующие сбор статистики в таблице.
% \item Созданы 2 пользователя с различными правами доступа. Первый пользователь наделён правами только на просмотр представления, а второй наделён правами просмотра, вставки, удаления и обновления данных во всех таблицах, участвующих в представлении. На 8 примерах продемонстрировано поведение СУБД при различных операциях для каждого пользователя, в том числе при недопустимых.
% \item Созданы процедура и функция. Функция принимает на вход фамилию, имя и отчество человека и возвращает фамилию и его инициалы.
% \item Управление транзакциями. Задан уровень изоляции транзакций как Read Committed и продемонстрировано отсутствие артефакта <<Грязное чтение>> и наличие артефактов <<Неповторяемое чтение>> и <<Фантомы>>.
% \end{enumerate}
% На работу было потрачено около 2-х месяцев, за которые было написано более 500 строк кода. В ходе выполнения данной лабораторной работы была описана предметная область организации соревнований по стрельбе из лука:
\begin{itemize}
\item Составлено текстовое описание 8 различных процессов из предметной области. Выделено 9 основных ролей, которые участвуют в процессах.
\item На основе текста, описывающего процесс сбора заявок судей и участников, была построена ER-диаграмма. Полученная диаграмма содержит 14 сущностей и описывает 8 различных связей между ними.
\item Разработаны 9 use-case диаграмм для описания основного процесса и его подпроцессов на трёх уровнях детализации.
\item Создана BPMN-диаграмма, описывающая процесс сбора заявок участников на соревнования.
\item Разработан граф форм для процесса регистрации заявки участника. Граф содержит 4 формы и 3 уведомления. Разработаны эскизы для 4 форм. Разработана структура JSON, содержащая экземпляр процесса регистрации заявки участника.
\end{itemize}
% Работа была выполнена в системе управления базами данных PostgreSQL 16.2. Были получены базовые навыки работы с ER-диаграммами, Use-case диаграммами и BPMN-диаграммами.
% Полученные знания могут быть и будут использованы в работе над последующими проектами и заданиями. % \newpage
% \section*{Список литературы}
% \addcontentsline{toc}{section}{Список литературы}
% \vspace{-1.5cm}
\newpage % \begin{thebibliography}{0}
\section*{Список литературы} % \bibitem{MySQL}
\addcontentsline{toc}{section}{Список литературы} % MySQL Documentation URL: \url{https://dev.mysql.com/doc/}, Дата обращения: 01.11.2024
% \bibitem{PostgreSQL}
\vspace{-1.5cm} % PostgreSQL documentation URL: \url{https://www.postgresql.org/docs/}, Дата обращения: 01.11.2024
\begin{thebibliography}{0} % \end{thebibliography}
\bibitem{MySQL}
MySQL Documentation URL: \url{https://dev.mysql.com/doc/}, Дата обращения: 01.11.2024
\bibitem{PostgreSQL}
PostgreSQL documentation URL: \url{https://www.postgresql.org/docs/}, Дата обращения: 01.11.2024
\end{thebibliography}
\end{document} \end{document}