Pull to refresh

Электронная очередь абитуриентов

Reading time9 min
Views10K
image

Введение


Хочу рассказать об одной интересной задаче, которая возникла передо мной и моим коллегой в университете. Хоть сейчас и лето, но жизнь там не угасает ни на минуту. Все суетятся, обрабатывают документы, подсчитывают абитуриентов, если все обобщать – сезон поступления в ВУЗы. Учусь я на техническом факультете университета, причем, учусь неплохо, поэтому нам предложили написание электронной очереди для поступления абитуриентов. Не долго думая, я и мой коллега (и по группе и по работе) согласились. Причиной не желания воспользоваться уже какими-то готовыми продуктами для университета стала заоблачная цена данных разработок, которая составляла порядка 300т.р. Может и не много, но для нашего города цена высокая, наверное, поэтому и решили привлечь студентов своего университета, ко всему прочему это ещё и неплохой опыт работы в данной отрасли.

Отступление — как было раньше


В прошлом году было все ужасно: абитуриент приходит с родителями, спрашивает, кто последний в очередь на подачу документов, и ждет своего часа (да, именно часа, ведь порой приходилось просиживать часы). Затем выходил освободившийся секретарь в коридор и громким голосом спрашивал, кто следующий на такую-то специальность. После того, как абитуриент подал документы на одну специальность, он встает в другую очередь, для того, чтобы подать документы ещё на одну специальность. В этом году все должно было измениться…

Задача


Перед нами поставили задачу «Разработать такую систему, которая бы позволяла абитуриенту не волноваться, куда он стоит и не стоять в несколько очередей, если он поступает на несколько специальностей».
Предоставили следующую информацию:

«Приемная комиссия находится в трех аудиториях. Всего 28 столов и 28 секретарей, по 10 секретарей в двух аудиториях и 8 в третей. За каждым секретарем закреплена своя специальность. Пока поток абитуриентов небольшой, секретарь принимает документы только по своей специальности. Когда поток абитуриентов становится большим, чтобы секретари не сидели без дела, они начинаю принимать документы других специальностей своего факультета».

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

image


Мозговой штурм


Мозговой штурм задачи позволил составить краткие тезисы разработки, которых впоследствии нужно было придерживаться:
  • Очередь должна быть одна для одного человека
  • Абитуриенту нужно было бы просто сидеть и ждать, когда его вызовут
  • Секретари, обрабатывающие заявки, должны быть обеспечены удобной системой «получения» абитуриента для обслуживания
  • Должен быть удобный способ отображения очереди абитуриентов
  • Реализовать возможность закрепления за столом приоритетных и не приоритетных специальностей
После этого сразу стали собирать идеи по тому, как это все реализовать. Исходными данными для разработки стали Microsoft SQL SERVER 2005 и Delphi. Идей было весьма много и несколько раз они пересматривались, однако в итоге все же сформировалась идея системы приложений.

Решено было разделить систему на 4 программы:
  1. Программа для вывода информации на большой экран (с помощью проектора) в том месте, где будут ожидать абитуриенты
  2. Программа для секретарей, позволяющая принимать абитуриентов
  3. Программа для человека, который будет сидеть на входе и регистрировать абитуриентов в систему
  4. Программа для администратора, который бы смог конфигурировать параметры столов и отслеживать очереди абитуриентов.
Так как время на разработку и тестирование было мало, а именно 1 месяц, то пришлось отбросить всякие изыски и делать интерфейс программ максимально простым.

Программа «Дисплей» — вывод очереди

Интерфейс программы отображения очереди было решено сделать следующим: отображаются 15 последних сообщений о том, какому абитуриенту, в какую аудиторию и за какой стол идти.

image


Программа «Следующий» — удобный инструмент секретарей

Интерфейс для программы секретарей нас попросили сделать максимально простым, и чтобы там нельзя было сделать чего-то лишнего. Сначала мы хотели сделать программу с одной кнопкой «Следующий», но потом выяснилось, что абитуриент кроме как прийти, может ещё и не прийти. Так что в интерфейс добавилась еще одна кнопка и окошко с информацией, в котором отображаются специальности, на которые собственно и идет абитуриент. Зеленым цветом выделяются те специальности, по которым абитуриент уже оформился. После нажатия на кнопку, интерфейс программы блокируется на определенное время, для того чтобы избежать случайных нажатий.

image


Программа регистрации абитуриента

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

image


Программа «Панель управления»

Программу для администратора не нужно было оборудовать сильно удобными интерфейсами, поэтому её сделали исходя из расчета (один раз настроил и все). Например, нам сказали сделать так, чтобы можно было в случае сильного наплыва абитуриентов (а в некоторые дни количество обслуживаемых человек могло достигать 200-300 человек) можно было настроить столы так, чтобы каждый стол мог принимать всех абитуриентов. Сказано – сделано. Появилась возможность за каждым столом закреплять основные специальности и ещё в дополнение к ним, побочные. Из очереди побочных специальностей абитуриенты бы брались только в том случае, если бы в основной очереди никого не было бы.

image


Возможности программы:
  1. Добавление новых специальностей
  2. Добавление новых столов
  3. Прикрепление к столам приоритетных и неприоритетных специальностей
  4. Просмотр статистики: Сколько абитуриентов стоят в очереди и на какие специальности; какой абитуриент куда сейчас стоит
  5. Определение примерного времени ожидания абитуриента в очереди

Логика системы – Идеал VS Реальность


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

image

Появление новой записи на экране сопровождается звуковым сигналом и абитуриент не пропустит свою очередь, если только куда-нибудь не отойдет. После появления информации о своем номере, аудитории и столе, куда нужно пройти, абитуриент идет в указанное программой место. Там его уже ожидает секретарь для оформления. После оформления абитуриент либо возвращается в зал ожидания (если у него есть ещё специальности, по которым нужно оформиться) либо счастливый уходит домой.

Так происходит, если рассматривать идеальный случай: система работает идеально, а абитуриент – это идеальный абитуриент, который за всем внимательно следит и никуда не опаздывает.

В реальности же случаи бывают разные. Абитуриент может пропустить запись на мониторе, отойти за водой или попросту уехать по своим делам. В этом случае нельзя давать секретарю долго просиживать ценное время, ибо помимо ушедшего абитуриента есть те, кто хочет побыстрее оформиться. В системе мы даем одну минуту на ожидание абитуриента секретарем (секретарь может на свое усмотрение подождать и больше, но одну минуту он не может ни завершить вызов абитуриента, ни вызвать следующего, ни даже закрыть программу), затем секретарь может нажать на кнопку «Опоздал», и исключить опоздавшего абитуриента на 2 минуты из очереди. То есть опоздавший абитуриент исключается из очереди на 2 минуты, затем программа сама возвращает его в очередь, причем не последним, а тем же самым номером, который ему выдали (ведь если ставить в конец, абитуриент может так до конца дня прождать). Но бесконечно абитуриента тоже возвращать не выгодно, к тому же, если попадутся 3-4 таких абитуриента, то они могут попросту парализовать очередь, поэтому если абитуриент не пришел в третий раз, мы выкидываем его из очереди на полчаса (на случай, если он отъехал по делам). Через полчаса мы возвращаем его в очередь и если он опять 3 раза опоздает, исключение из очереди будет полностью.

Логика программ


Программа «Дисплей» для отображения очереди абитуриентов

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

Программа висит на рабочем столе у секретарей. Для вызова абитуриента необходимо нажать на кнопку «Следующий». Если в очереди кто-то есть, то программа выведет номер абитуриента, его специальности и добавит абитуриента в таблицу, из которой выводится информация в зале ожидания. Тут следует заметить одну важную вещь. Если абитуриент стоит на несколько специальностей, то программа дополнительно блокирует его, чтобы его не смог в тоже самое время вызвать ещё один стол, иначе смысл данной системы терялся бы. Если абитуриент пришел, то секретарь оформляет его и после всего оформления нажимает кнопку «Оформление окончено», если же секретарь не дождался абитуриента, то он нажимает кнопку «Опоздал» и вызывает следующего абитуриента.

image

Важные моменты программы:
  • После нажатия кнопки «Следующий» в течении 1-й минуты блокируются все элементы программы. Во-первых, чтобы предотвратить двойное нажатие кнопок, а во-вторых, чтобы предотвратить случайное закрытие программы
  • Во время оформления абитуриента программу нельзя закрыть или вызвать меню, можно только нажать либо кнопку «Опоздал», либо «Оформление окончено»
  • Если в очереди никого не было, программа выводит сообщение об этом и начинает мониторить базу на появление кого-то в очереди. Как только в очереди кто-то появится, то программа известит об этом сообщением и появлением зеленой полоски для визуального оповещения. Сделано для того, чтобы не приходилось секретарям тыкать на кнопку «Следующий» для проверки, появился кто в очереди или нет
  • При нажатии на любую кнопку за этим следует обязательная блокировка на 10 секунд для избегания двойных или случайных нажатий
  • У каждого стола есть Логин и Пароль
Программа регистрации абитуриента

Пожалуй, самая простая программа в системе. Секретарь выбирает от 1-й до 5-ти специальностей, нажимает кнопку «Зарегистрировать», в программе появляется уникальный номер зарегистрированного абитуриента, секретарь выдает номерок абитуриенту. Здесь так же реализована защита от случайных нажатий в виде 5-ти секундного ожидания после каждой регистрации.

Программа администрирования

Данная программа не участвует в процессе очереди, а участвует в администрировании системы.

Проблемы, которые могли возникнуть

  • Одной из основных проблем могло стать зависание или отключение компьютера секретаря во время оформления абитуриента. Ведь программа бы не успела дать базе данных знать о том, что абитуриент оформлен, и он бы не вернулся в очередь. Для этого в программу администрирования была вынесена возможность редактировать поле флага занятости абитуриента. Так как такие случаи редки (ни разу не возникли в ходе работы программы), то подправить администратором одно поле у одного абитуриента не составит труда
  • Отключение сервера. Это вообще из рук вон выходящее событие. Однако даже это не так страшно могло оказаться. А данном случае при вырубании сервера теряется лишь связь с базой данных, программы же продолжают функционировать нормально. Главное в этом случае организационный момент – предупредить секретарей какое-то время вообще не нажимать в программе ничего, чтобы целостная ситуация системы осталась неизменной. После включения сервера программы бы опять связались с базой и продолжили работать с того места, на котором закончили
  • Форс-мажор в виде наводнений, землетрясений и прочего. Предусматривать такие ситуации было не рационально в нашем случае, поэтому мы решили закрыть на это глаза =)

Проблема, которая возникла


Да, проблема в ходе работы программы была только одна. Если бы во время появления в очереди нового абитуриента в течение примерно 0,1 секунды кнопку «Следующий» нажали два секретаря, относившиеся оба к одной специальности, то данный абитуриент появился бы дважды на экране с очередью и ушел бы к обоим секретарям. У нас случилось так, что нажали три секретаря =) Проблему быстро решили, однако программу нужно было исправлять. Не долго думая, при нажатии кнопки «Следующий», вместо того, чтобы сначала выбрать абитуриента, а потом поставить галочку занятости, мы решили ввести хеш. Сначала абитуриенту присваивался хеш, потом он выбирался, и уже потом хеш затирался, и одновременно ставилась галочка занятости. При выборке, естественно, учитывалось – есть хеш или нет. После тестирования и проверки выяснилось, что программа больше данной баге не подвержена.

Результаты работы


На данный момент период приема документов подошел к концу (по крайней мере в нашем университете) и можно сделать некоторые заключения по результатам работы программы:
  1. Было обслужено около 3500 абитуриентов
  2. В самый посещаемый день было свыше 250 абитуриентов
  3. С программой каждый абитуриент в среднем экономит 50% (при подаче документов на две специальности, и свыше 80% при подаче на три и более) времени по сравнению с обычной очередью
  4. Нет психологического напряжения вроде «Кто последний?»
  5. Всегда примерно знаешь, через сколько человек ты пойдешь оформляться
  6. Не опасно отходить на пару минут боясь, что потеряешь очередь
  7. Снизилась нагрузка на секретарей, которым приходилось каждый раз выходить и спрашивать, есть ли кто-то на их специальность
  8. Сбоя системы не произошло ни разу, учитывая сроки разработки под ключ – 1 месяц
  9. Электронная очередь – это удобно
Tags:
Hubs:
+177
Comments121

Articles