Как стать автором
Обновить

Разработка автоматизированной очереди для сдачи лабораторных работ

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.3K

Обучение в политехе заключается в сдаче лабораторных работ. Буквально. Очень редко бывает такое, что на парах мы чему-то учимся, зачастую все завязано на самообучении. Грубо говоря, вот вам методичка, разбирайтесь сами, через неделю дедлайн.

В связи с этим мы столкнулись с очередями на сдачу этих лабораторных. Сначала просто писали в общий чат, кто каким будет в очереди (например, "я первый", "я вторая", "я третий" и т.д.). Далее решили создать расшаренную таблицу в гугле для формирования очередей. Однако долго она тоже не прожила, так как со временем появились "умники", которые стали ставить себя первыми в очереди, сдвигая остальных вниз. Потом общий доступ для таблицы закрыли, и было принято решение для записи на сдачу писать старосте, он, в свою очередь, будет добавлять студентов в список. Но староста группы не может быть постоянно на связи, иными словами, оперативно добавиться в очередь было просто невозможно.

В связи с этим я задумался над созданием автоматизированной очереди. В качестве стека основных технологий выбрал HTML5+CSS3 для фронтенда, PHP для бэкенда. В качестве СУБД был выбран MySQL. В первую очередь, конечно, необходимо было продумать структуру базы данных. Предметная область информационной системы уже была сформулирована: "Очередь на сдачу лабораторных работ с возможностью записи по отдельным дисциплинам, удаления своей записи. Учет истории создания записи, удаления записей, включая время записи. Возможность смены пароля, просмотра профиля." Даталогическая модель БД была построена в MySQL Workbench 8.0 CE в нотации IDEF1X.

Даталогическая модель БД в нотации IDEF1X
Даталогическая модель БД в нотации IDEF1X

Небольшое пояснение к даталогической модели:

  1. Сущность students предназначена для хранения списка студентов, содержит следующие поля: имя, фамилия, логин, пароль, дата регистрации, информация об устройстве, с которого производилась регистрация, привилегии (для будущей админки).

  2. Сущность authorization_list предназначена для хранения информации о входе в аккаунт того или иного пользователя (студента), связана внешним ключом с сущностью students, содержит следующие поля: дата авторизации, информация об устройстве, с которого производилась авторизация.

  3. Сущность disciplines предназначена для хранения списка дисциплин (учебных предметов), содержит поле: название дисциплины.

  4. Сущность shared_queue предназначена для формирования очередей, связана внешними ключами с таблицей students и disciplines, содержит поля: дата записи в очередь, статус записи (для хранения истории записей, так называемого, архива).

Далее стоял вопрос с разработкой фронтенда, то есть дизайна будущего проекта. Решил действовать по методике "MinimumCode", подобрал подходящий конструктор, поддерживающий верстку для различных типов девайсов (устройств с различной шириной экрана), который выдает готовый код без лишних наворотов, за исключением рекламной секции в футере, которая убирается простым редактированием HTML-страницы. Проектирование дизайна включало в себя полную проработку структуры проекта, создание различных блоков, которыми будет управлять бэкенд. Таким образом была произведена верстка двух основных страниц: "Главная" и "Профиль". Первая должна включать в себя авторизацию, выбор дисциплины, просмотр очереди и запись в очередь. На второй странице должна отображаться информация о профиле, выход из аккаунта и смена пароля.

Страница "Главная", шапка страницы, блоки авторизации и выбора дисциплины
Страница "Главная", шапка страницы, блоки авторизации и выбора дисциплины
Страница "Главная", блоки очереди и записи в очередь, подвал страницы
Страница "Главная", блоки очереди и записи в очередь, подвал страницы
Страница "Профиль", шапка страницы, блоки профиля и смены пароля
Страница "Профиль", шапка страницы, блоки профиля и смены пароля
Страница "Профиль", блок ограничения доступа, подвал страницы
Страница "Профиль", блок ограничения доступа, подвал страницы

Теперь необходимо объединить всё воедино. То есть написать бэкенд, включая работу с базой данных. Каких-то супер-алгоритмов не придумывал, проект примитивный. Как-будто смысла останавливаться на этом особо нет. Стоит сказать только про хранение ключа сессии в COOKIES, шифрование паролей с использованием 128-битного алгоритма хэширования MD5 (дополнение: очень слабый алгоритм хэширования, который использовать не рекомендуется, на подбор пароля требуется не больше 5 минут), выборку данных из таблиц при помощи SQL-запросов. Ниже приведен фрагмент кода, выполняющий получение названия дисциплины (выборка дисциплины по умолчанию, либо выборка дисциплины, хранящейся в $_GET).

Фрагмент кода, получающего название дисциплины
Фрагмент кода, получающего название дисциплины

Что мы имеем в итоге?

Получилась достаточно неплохая автоматизированная очередь с возможностью авторизации, просмотра записей, создания записи и удаления записи. Проект был успешно внедрен в эксплуатацию и используется учебной группой на данный момент.

Вид страницы "Главная" на мобильном устройстве
Вид страницы "Главная" на мобильном устройстве
Вид страницы "Профиль" на мобильном устройстве
Вид страницы "Профиль" на мобильном устройстве

Над чем необходимо продолжить работу?

Конечно, в ближайшем будущем планируется ввести привилегии пользователей, иными словами, админку для определенных пользователей. В которой необходимо реализовать возможность добавления студентов в любое место в очереди для любой дисциплины, удаление любых записей, смену паролей для каждого студента, просмотр архива очереди, закрытие и открытие записи на какую-либо дисциплину.

Теги:
Хабы:
+1
Комментарии13

Публикации

Истории

Работа

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург