diff --git a/img/form1.png b/img/form1.png new file mode 100644 index 0000000..d78771f Binary files /dev/null and b/img/form1.png differ diff --git a/img/form2.png b/img/form2.png new file mode 100644 index 0000000..920955d Binary files /dev/null and b/img/form2.png differ diff --git a/img/form3.png b/img/form3.png new file mode 100644 index 0000000..76cd77b Binary files /dev/null and b/img/form3.png differ diff --git a/img/graph.png b/img/graph.png new file mode 100644 index 0000000..91069b7 Binary files /dev/null and b/img/graph.png differ diff --git a/report.tex b/report.tex index ecef5b3..d0437e5 100644 --- a/report.tex +++ b/report.tex @@ -106,6 +106,36 @@ 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} % начало документа @@ -174,7 +204,7 @@ % \end{enumerate} \newpage - \section {Лабораторная работа №1} + \section {Аналитика предметной области} \subsection{Часть 1: Описание процессов предметной области} \subsubsection*{Исходное описание предметной области} Стрельба из лука, олимпийский вид спорта с 1900 года. Правила и порядок проведения соревнований в России регламентируются Всемирной федерацией стрельбы из лука (FITA) и Российской федерацией по стрельбе из лука (РФСЛ). РФСЛ проводит несколько десятков соревнований по различным видам стрельбы из лука ежегодно. Спорт также приобретает популярность в любительской среде, например, только в Санкт-Петербурге функционируют около двух десятков спортивных стрелковых клубов и лучных клубов, где может тренировать любой желающий. Частные клубы также регулярно проводят спортивные соревнования. @@ -311,7 +341,7 @@ \newpage - \section{Лабораторная работа №2} + \section{Use-case диаграммы} Название: организация соревнований по стрельбе из лука. @@ -701,17 +731,16 @@ \end{figure} - \section{Часть 3} - \subsection{BPMN диаграмма процесса <<Сбор заявок на соревнования>>} + \section{BPMN диаграмма процесса <<Сбор заявок на соревнования>>} Название: Сбор заявок на соревнования. Триггер: принято решение о проведении соревнований. - Входные данные: незаполненный ограниченный список участников дивизиона. + Входные данные: незаполненный список участников дивизиона. Выходные данные: заполненный список участников дивизиона. - BPMN диаграмма процесса приведена на Рис.~12. + BPMN диаграмма процесса приведена на Рис.~12-13. \addtocounter{figure}{1} \includepdf[pages={1}, fitpaper, pagecommand={ @@ -729,37 +758,290 @@ \end{tikzpicture} }]{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 \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}{Список литературы} - -\newpage -\section*{Список литературы} -\addcontentsline{toc}{section}{Список литературы} - -\vspace{-1.5cm} -\begin{thebibliography}{0} - \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} +% \vspace{-1.5cm} +% \begin{thebibliography}{0} +% \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} \ No newline at end of file