rooms = {«18», «sport1», «trudy_m», «trudy_w» , «21»,»22″,»23″,»24″, «25», «26», «27», «31»,»32″,»33″,»34″};
teachers = {«ivanova», «petrova_en», «sidorova_ge», «shumova», «trudovik_m», «trudovik_w», «stoprtteacher»};
foreignLangTeachers = {«petrova_en», «sidorova_ge»};
trudyTeachers = {«trudovik_m», «trudovik_w»};
informaticsTeachers = {«trudovik_m», «trudovik_w»};
sportTeachers = {«trudovik_m», «trudovik_w»};
classes = {«5a», «5b», «6a», «6b», «7a», «7b», «8a», «8b», «9a», «9b»,»10a», «10b», «11a», «11b»};
// day, shift, lesson number
lessons = {
111, 112, 113, 114, 115, 116, 117, 121, 122, 123, 124, 125, 126, 127//,
/* 211, 212, 213, 214, 215, 216, 217, 221, 222, 223, 224, 225, 226, 227,
311, 312, 313, 314, 315, 316, 317, 321, 322, 323, 324, 325, 326, 327,
411, 412, 413, 414, 415, 416, 417, 421, 422, 423, 424, 425, 426, 427,
511, 512, 513, 514, 515, 516, 517, 521, 522, 523, 524, 525, 526, 527,
611, 612, 613, 614, 615, 616, 617, 621, 622, 623, 624, 625, 626, 627*/
};
roomTeachersRelation = [
[2,1,1,1,0,0,0],
[0,0,0,0,0,0,1],
[0,0,0,0,1,0,0],
[0,0,0,0,0,1,0],
[1,2,1,1,0,0,0],
[1,2,1,1,0,0,0],
[2,1,1,1,0,0,0],
[1,2,1,1,0,0,0],
[1,2,1,1,0,0,0],
[2,1,1,1,0,0,0],
[1,2,1,1,0,0,0],
[1,2,1,1,0,0,0],
[1,2,1,1,0,0,0],
[2,1,1,1,0,0,0],
[2,1,1,1,0,0,0]
];
teacherClassRelation = [
[2, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0],
[0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1],
[0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1],
[1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0]
];
classLessonRelation = [
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1]
];
teacherLessonRelation = [
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,0,0,0]
];
Описание проекта
В данном репозитории приводятся исходный код к програмному решению, реализованному в рамках дипломной работы.
Програмное решение выполняет решение задачи автоматического составления расписания занятий в университете для заданного списка учебных групп с помощью SMT солвера. Более подробное описание дипломной работы можно найти в расчетно пояснительной записке. Данное решение соститоит из базы данных, в которой хранится вспомогательная информация для составления расписания, а также из ряда утилит для генерации расписания и формирования pdf-документа с раписанием занятий группы.
Проект реализован на языке Java. Для сбоорки проекта использовался Maven. Весь проект состоит из следующих модулей (каждому модулю соответствует одноименная папка в корневой директории проекта):
- dbfill — консольная утилита для заполения базы;
- smtgen — косольная утилита для автоматического составления расписания с помощью SMT-солвера.
- pdfgen — консольная утилита для генерации pdf-документа для заданной группы.
- schedule-core — вспомогательны модуль, содержит базовые классы, необходимые для решения вышеописанных утилит: классы-сущности базы, репозитории для доступа к данным, файл конфигурации настройки Hibernate (параметры подключения, стратегия обновления сущностей, список сущностей) и др.
- schedule-parser — вспомогательный модуль, содержит классы для парсинга csv-файлов, а также парсинга html-страниц с расписанием. Парсинг html-страниц используется для сбора вспомогательной информации, которая нужна на этапе составления расписания. Парсинг csv-файлов используется для заполнения базы данными с помощью утилиты dbfill.
По-мимо папки с модулями, в данном репозитории можно найти следующие директории:
- ./build — готовые jar-приложения (утилита smtgen может не работать на разных архитектурах из-за библиотеки Z3, поэтому может понадобиться пересборка данного модуля).
- ./docs — папка с вспомогательными материалами (документами), которые использовались входе выполнения ВКР.
- ./sql — скрипты для создания базы.
Системные требования
Для запуска утилит понадобиться JRE 1.8, и PostgreSQL версии 10.8, либо docker в зависимости от выбранного способа установки и настройки базы.
Установка и настройка базы
Данный пункт является обязательным, поскольку большинство утилит используют базу данных для хранения вспомогательных данных, которые необходимы для составления расписания.
Для установки и настройки базы можно воспользоваться одним из следующих вариантов:
а) накатить docker-контейнер с базой:
- Скачиваем docker-образ:
$ docker pull karkinai/schedule-db
Для выполнения данной команды понадобиться установить Docker. Для запуска в ОС Linux Ubuntu необходимо установить Docker CE. Для запуска команды на Windows понадобиться установить Docker Toolbox для Windows. Если на компьютере установлена ОС Windows 10 Pro, то вместо Docker Toolbox можно поставить Docker Desktop.
- Запускаем контейнер с базой:
$ docker run --rm -p 5432:5432 --name scheduledb karkinai/schedule-db
Замечания:
- Для запуска контейнера в режиме демона, можно доабавить ключ -d
- Для того, чтобы данные не стирались при каждом запуске, можно смонтировать папку с данными PostgreSQL в локальную папку. Для этого нужно добавить параметр -v при запуске:
-v {путь к локальной папке, где будут хранится данные}:/var/lib/postgresql/pgdata.
б) установить Postgres локально, после чего прогнать скрипты создания и заполненить базу тестовыми данными с помощью утилиты dbfill:
На ОС Linux Ubuntu для установки и настройки postgres потребуется выполнить следующие шаги.
- Установить Postgres с помощью следующей команды в терминале:
$ sudo apt-get install postgresql postgresql-contrib
- Затем, создать пользователя в базе (рекомендуемое имя пользователя и пароль «admin»):
$ sudo -u postgres createuser admin $ sudo -u postgres psql psql=# alter user admin with encrypted password 'admin';
- Запустить скрипт для создания таблиц базы данных:
$ psql --username postgres --dbname postgres -a -f ./sql/init.sql
- Заполнить базу тестовыми данными, выполнив команду
$ java -jar ./build/dbfill.jar ./dbfill/src/main/resources/config.properties
Если при создании пользователя в postgres указывались реквизиты, отличные от приведенных в примере, то необходимо поменять параметры базы в файле ./schedule-core/src/main/resources/hibernate.cfg.xml на реквизиты пользователя указанные в пункте 2:
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">org.postgresql.Driver</property> <property name="connection.url">jdbc:postgresql://{хост подключения к базе}:{порт подключения}/bmstu_schedule</property> <property name="connection.username">{имя пользователя, указанное в пункет 2}</property> <property name="connection.password">{пароль, указанный в пункет 2}</property> ... </session-factory> </hibernate-configuration>
После этого необходимо пересобрать модуль dbfill ( о том как это сделать говорится в следующем разделе), после чего в директории модуля выполнить команду:
$ java -jar ./target/dbfill.jar
Сборка проекта
Для сборки всего проекта понадобиться установить следующее:
- JDK 1.8 (обязательно)
- Python 2.7 (для сборки smtgen)
- Библиотеку Z3 и байндинги для Java (для сборки smtgen)
- Apache Maven v3.6+ (обязательно)
- Git (для сборки smtgen)
Утилита smtgen
Для сборки данной утилиты необходимо сначала скачать байндинги библиотеки Z3 для Java.
Библиотека Z3, а также байндинг для языка Java предоставляются уже в собранном виде под большинство ОС рерозитории Z3.
Однако, в случае если утилита smtlib запускается на нестандартной ОС или на нестандартной архитектуре, библиотеку Z3 и API для Java можно пересобрать, выполнив следующие действия.
- Склонировать репозиторий с Z3 на локальный компьютер, выполнив команду в терминале:
$ cd {папка, где будет располагаться z3} $ git clone https://github.com/Z3Prover/z3.git
- Собрать Z3 и байндинги для Java, выполнив команду в терминале в той же директории:
$ python scripts/mk_make.py –-java $ cd ./build && make $ sudo make install
После того, как библиотека Z3 и байндинг данной библиотеки для Java собран, перед переходом к процедуре сборки утилиты smtgen необходимо установить API для Java в локальном Maven репозитории. Для этого в директории с библиотекой Z3 (там где располагается файл com.microsoft.z3.jar) неообходимо выполнить команду в командной строке:
$ mvn instal:install-file -Dfile=com.microsoft.z3.jar -DgroupId=com.microsoft.z3 -DartifactId=javasmt-solver-z3 -Dversion=4.8.4 -Dpackaging=jar
Остальные модули
Для сборки всего проекта необходимо перейти в директорию с проектом и выполнить команду для сборки:
$ cd {корневая директория проекта} $ mvn clean install -DskipTests=true
После выполнения в каждой папке Maven-модуля данного проекта, появиться папка ./target, в которой располагается исполняемый файл каждой из утилит для JVM (точнее, JAR-архив). О том как запустить, каждое приложение говорится в следующем разделе.
Для сборки отедльного модуля, достаточно перейти в директорию модуля и выполнить ту же команду:
$ cd {корневая директория проекта}/{название модуля} $ mvn clean install -DskipTests=true
Пользовательский интерфейс
В случае, если приведенные ниже утилиты запускаются на ОС Windows русские символы могут некорректно оторбражаться в консоли. Поэтому при запуске утилит из командной строки, командную строку (cmd.exe) следует запускать с ключом
chcp 1251
, для этого: зажать сочетание клавиш WK+R (открыть окно «выполнить») и в появившемся окне прописать строчку:
При запуск утилит из-под Windows в командной строке могут также некорректно считываться аргументы командной строки, поэтому для успешной работы с утилитами при запуске, необходимо добавить JVM параметр
sun.jnu.encoding=UTF-8
. Например:
java -Dsun.jnu.encoding=UTF-8 -jar pdfgen.jar . ИУ9-21
Утилита dbfill
Данная утилита выполняет заполнение базы. В качестве аргумента командной строки в данную утилиту передается путь к конфигурационному .properties-файлу. В этом файле прописываются пути к csv-справочникам, которые используются для заполения таблиц базы.
Для демонстрации работы программы использулся конфигурационный файл — config.properties. В данном файле приводятся пути к csv-справочникам, содержащими данные для кафедры ИУ9. Этот же файл используется для заполнения базы данными при первом запуске docker-контейнера (см. раздел Установка и настройка базы, пункт а).
Результатом успешного завершения данной утилиты будет заполненная база данных.
Утилита smtgen
Утилита выполняет автоматическое составление раписания. На вход данная утилита принимает, в качестве, аргументов командной строки одно из двух:
а) список шифров групп перечисленных через запятую (ключ -g);
б) информацию об учебном плане учебного потока: код специализации (ключ -s), код кафедры (ключ -d), год начала обучения учебных групп (ключ -y), номер текущего семестра данных групп (ключ -t).
Если указываются ключ из пункта а), все ключи пункта б) игнорируются. Если не указывается ключ -g, то должны быть указаны все ключи перечисленные в пункте б). В противном случае программа выдаст сообщение об ошибке.
Примеры запуска программы (из директории с приложением):
$ java -jar smtgen.jar -g ИУ9-21, ИУ9-22
или
$ java -jar smtgen.jar -y 2018 -t 2 -s 01.03.02_1 -d ИУ9
Результат работы программы — сохранение расписания для заданного списка групп в базу.
Результат успешного выполнения данной программы демонстрирует утилита pdfgen, описание которой приводится в следующем разделе.
Для всего учебного потока программа будет работать медленно, либо может вообще не завершится. Данное обстоятельство связано не с «кривой» реализацией дипломного проекта, а с особенностью поставленной задачей, которая относится к классу NP-полных. SMT-солвер (Z3) зацикливается при постановки такого рода задач для большого числа ограничений (проверено научным руководителем). Об этом же говорится в пояснительной записке. Рекомендуется запускать утилиту smtgen с числом групп не более 3 (больше 4 можно не даждаться, больше 5 — солвер может зациклиться или выдать некорректный результат). Оптимально: 1-2 группы, занимает максимум минут 10 (тестировал на своем ноутбуке: процессор — Intel Core i3, 1.9GHz x 4, память: 4Gb)
Полный список ключей утилиты:
-h, --help
-g, --groups <Список шифров учебных групп>
-d, --dept <Шифр кафедры>
-s, --spec <Код специализации>
-y, --year <Год начала обучения, соотвествует году учебном плане>
-t, --term <Номер семестра>
Утилита pdfgen
Данная утилита генерирует pdf-документ с раписанием занятий учебной группы.
Если учебное группа или расписание занятий для данной группы отсутвует в базе, то программа выдает сообщение об ошибке.
Программа, в качестве входных параметров, принимает следующие аргументы командной строки в заданном порядке:
-
путь к папке, где будет располагаться pdf-файл с расписанием учебной группы;
-
шифр учебной группы, для которой необходимо составить расписание.
В результате успешного завершения программа должна сохранить pdf-документ с расписанием в указанную папку. Формат выходного файла соответствует шаблону: {шифр группы}.pdf. Если файл, с таким именем уже существует в указанной папке, то старый файл перезаписывается новым.
Пример запуска утилиты (из директории с приложением):
$ java -jar pdfgen.jar . ИУ9-21
Примеры результатов выполнения утилиты pdfgen приведены в папке examples.
Составление расписания
Пусть мы составляем расписание одного из уроков для определенного класса.
T — множество учителей, уже занятых на этом уроке в других классах, R — множество уже занятых кабинетов. Если некоторый предмет ведут все учителя из множества T1 и проходить он может в любом из кабинетов R1, то требуется определить, может ли этот урок проходить в тот же час, и, если может, то изменить множество занятых учителей T, выделить для проведения этого урока минимальный по номеру свободный кабинет и добавить его во множество занятых кабинетов R.
Если же данный урок нельзя поставить в расписание, потому что хотя бы один из учителей его ведущих уже занят или заняты все кабинеты, где он мог бы проходить, то следует вывести одно число −1.
Входные данные
В первой строке записано целое неотрицательное число — количество элементов множества T. Во второй строке через пробел перечислены эти элементы (натуральные числа). Если количество элементов множества T равно нулю, то вторая строка входных данных пустая.
В третьей строке указано количество элементов множества R. В четвертой строке перечислены через пробел элементы второго множества (натуральные числа). Если количество элементов множества R равно нулю, то четвертая строка входных данных пустая.
Далее в том же формате указаны сначала количество, а потом и сами элементы непустого множества T1. Наконец, в последних двух строках входных данных указаны количество и сами элементы непустого множества R1.
Множества во входных данных могут быть неупорядочены и содержать равные элементы.
Выходные данные
Результат в случае положетельного ответа требуется вывести в том же формате: сначала количество элементов обновленного множества занятых учителей, затем сами элементы в порядке возрастания. В следующих двух строках выведите количество и элементы множества занятых кабинетов в порядке возрастания.
Если урок добавить в расписание невозможно, то выведите одно число −1.
Примеры
Ввод
Вывод
2
1 2
2
1 3
2
3 4
2
2 3
4
1 2 3 4
3
1 2 3
3
1 2 3
2
1 3
2
3 4
2
2 3
-1
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Получив знания в области системного программирования, веб-технологий, основ алгоритмизации и программирования на языках высокого уровня, менеджмента в информационных технологиях, тестирования программного обеспечения, мы смогли применить все знания и умения на заключительном этапе обучения – реализации и презентации дипломного проекта.
8 февраля 2013 года в ВГУ им. П.М. Машерова состоялась защита дипломного проекта «Разработка автоматизированной системы расписания занятий учебного заведения». Мы рассмотрим цели и задачи проекта, структуру программного продукта и технологию разработки автоматизированной информационной системы.
Страница проекта: http://drupal.la.by
Реферат
ИНФОРМАЦИОННАЯ СИСТЕМА, ВЫСШЕЕ УЧЕБНОЕ ЗАВЕДЕНИЕ, АВТОМАТИЗИРОВАННАЯ СИСТЕМА, РАСПИСАНИЕ ЗАНЯТИЙ, ФАКУЛЬТЕТ, CMS DRUPAL, PHP, ВЕБ-ПРОГРАММИРОВАНИЕ.
Объект исследования – автоматизированная система расписания занятий высшего учебного заведения.
Предмет исследования – применение современных информационных технологий и средств веб-программирования для создания автоматизированных информационных систем.
Цель работы – проектирование и разработка автоматизированной системы расписания занятий высшего учебного заведения.
Методы исследования и технология разработки: описательно-аналитический, экспериментальный, анализ проблем автоматизации работы высших учебных заведений, разработка системы расписания факультетов университета. В качестве системы управления базами данных выбрана СУБД MySQL. Средствами разработки являются PHP, HTML5 и jQuery, инструментарий для разработки и администрирования веб-проектом – система управления сайтом CMS/CMF Drupal 7.
Элементы новизны: использование современных веб-технологий HTML5, CSS3 и jQuery при проектировании веб-проекта.
Теоретическая и практическая значимость заключается в том, что результаты работ можно применять в деятельности конкретного учебного заведения, использовать другими учебными заведениями для совершенствования анализа результатов образовательного процесса, а также концепция данного исследования может быть использована в качестве методического пособия при разработке информационных систем.
Введение
Одной из важнейших проблем качественной организации учебного процесса в высшем учебном заведении является задача создания автоматизированного учебного расписания. Правильно и точно составленное расписание обеспечивает равномерную загрузку студенческих групп и профессорско-преподавательского состава.
В настоящее время использование информационных систем в высших образовательных учреждениях не является редкостью. Спектр их применения широк и варьируется от автоматизации отдельно взятых рабочих мест до полной автоматизации деятельности ВУЗа.
Вне зависимости от объекта автоматизации, будь то преподавательский состав или администрация университета, в образовательном учреждении такие системы внедряют, преследуя конечную цель — повышение качества образования.
ВУЗ, как и любое предприятие, непременно проходит процесс автоматизации и, несмотря на то, что понятие образовательной деятельности едино для всех образовательных учреждений, в каждом ВУЗе этот процесс проходит по-разному. Значительное влияние на процессы автоматизации оказывает как наличие денежных средств, так и готовность использования предлагаемых рынком информационных услуг программных продуктов.
На данный момент в высшем учебном заведении можно использовать информационное пространство, включающее компоненты по различным направлениям: кадровый учет сотрудников, учет студентов, служба безопасности, рейтинг преподавателей, контроль успеваемости студентов и другие. Работа сотрудников в едином пространстве организована на основе доменов Active Directory, что позволяет выполнять централизованное управление, обеспечивает единый процесс входа в систему и масштабируемость сети.
В связи с функционированием вузов в рамках единого информационного пространства, использование сторонних программных продуктов делается невозможным ввиду специфики работы имеющихся систем или же по причине дороговизны внедрения, влекущего значительную доработку как имеющихся, так и приобретаемых информационных систем.
С целью автоматизации планирования было разработано решение, упрощающее процесс создания электронного расписания на основе анализа имеющихся учебных планов специальностей, позволяющий анализировать структуру нагрузки, а также планировать структурную доработку и некоторую унификацию имеющихся учебных планов.
Общие требования, предъявляемые к автоматизированной системе, следующие:
— использование норм времени для расчета объемов учебной нагрузки;
— использование информации из учебных планов специальностей;
— быстрота обработки информации за счет автоматизации возможных операций пользователя системы;
— формирование отчетных форм;
— расширяемость системы (возможность её доработки в случае повышения требований к автоматизированной системе);
— удобный пользовательский интерфейс.
Для создания системы использовались языки программирования PHP, HTML5, CSS3 и jQuery-плагин FullCalendar для отображения сетки расписания, в качестве системы управления базами данных использовалась СУБД MySQL. Основной используемый инструмент для разработки и администрирования проекта – система управления сайтом CMS Drupal 7.
В первой главе дипломной работы рассматривается анализ проблем, связанных с автоматизацией деятельности ВУЗа, проводится анализ основных вопросов и подходов автоматизированного составления расписания занятий в высшем учебном заведении.
Во второй главе формулируются требования к разрабатываемой системе, определяются критерии выбора СУБД такие как:
— критерий моделирование данных;
— критерий, определяющий особенности архитектуры и функциональные возможности;
— критерий контроля работы системы;
— критерий производительности;
— критерий надежности и др.
Здесь приводится описание используемой СУБД и её преимуществ.
В третьей главе описывается структура базы данных MySQL и технология разработки автоматизированной системы расписания занятий, описываются созданные представления и пользовательские процедуры с использованием инструментов CMS Drupal 7. Глава включает описание работы сервисов и руководство по использованию программы.
Заключение включает в себя подведение итогов, результаты разработки автоматизированной системы и преимущества ее использования.
1 Теоретические основы автоматизированной информационной системы расписания занятий
1.1 Проблемы автоматизации деятельности высшего учебного заведения
Стремительный прогресс средств вычислительной техники, изменение условий образования, изменение средств и форм обучения, расширение спектра технических средств, а так же использование больших объемов информации диктуют необходимость внедрения информационных технологий в образование.
Вопросов для чего нужна автоматизация тех или иных процессов, как правило, не возникает. Но вот вопросы — как и с чего начать автоматизацию возникают у многих. Сколько потребуется денежных средств? Что и у кого приобретать? Как внедрять? Кто будет заниматься сопровождением программного продукта? Кто будет финансировать? Эти и многие другие вопросы обязательно возникают в начале автоматизации любых процессов.
Следует начать с определения понятия «автоматизация». Под автоматизацией обычно понимают применение технических и программных средств, частично или полностью освобождающих человека от непосредственного участия в процессах получения, преобразования, передачи и использования материалов или информации. Процессу автоматизации предшествует его формализация, то есть получение полного набора однозначно трактуемых инструкций, следуя которым достигается результат реализации процесса.
Преимущества автоматизации очевидны — это ускорение выполнения операций и снижение ошибок при их выполнении, снижение издержек на реализацию операций и повышение качества. Успешной может считаться автоматизация, в результате внедрения и использования которой удалось возвратить инвестированные в нее средства.
Выделяют следующие этапы процесса автоматизации, применяемые в целом к деятельности того или иного учреждения. Каждый из этапов требует осмысленного и последовательного выполнения.
Этап 1: постановка проблемы, оценка необходимости автоматизации и возможностей предприятия;
Этап 2: формирование требований к программно-аппаратному комплексу, выбор или реализация программного продукта и технического обеспечения;
Этап 3: внедрение программного продукта;
Этап 4: послегарантийное обслуживание программно-аппаратного комплекса.
Прежде чем начать автоматизацию необходимо ясно и четко сформулировать свои требования к ней. Требуется определить какие именно функции необходимо автоматизировать. Следует учитывать, что зачастую внедрение автоматизированных систем снижает степень влияния человеческого фактора на выполнение тех или иных операций.
Из числа руководителей высшего звена необходимо выделить сотрудника, ответственного за проведение данного процесса и уполномоченного принимать решения по вопросам автоматизации, степени и роли участия сотрудников, имеющих отношение к автоматизации.
Выделение квалифицированных специалистов, отвечающих за разработку или внедрение программного продукта, является обязательным условием автоматизации. Каждый отдельный специалист в рамках своих обязанностей должен уметь оперативно устранять возникающие в системе отказы, выявлять и устранять нарушения условий эксплуатации, решать те или иные проблемы пользователей.
Выбор программного продукта или среды его разработки не следует отделять от выбора технического обеспечения, на котором предстоит в дальнейшем работать. Не следует забывать и об имеющейся информационной системе ВУЗа. Интеграция в единое информационное пространство позволяет использовать ранее реализованные компоненты и единую базу данных, что повышает гибкость информационной системы в целом и снижает дублирование уже имеющейся информации.
Описанный процесс анализа деятельности ВУЗа обычно называют «предпроектным обследованием учреждения». В ходе обследованием строится полная модель организации, описывающая не только взаимодействие структурных единиц, но и реализуемые ими операции и информационные потоки. Построение подобных документированных моделей позволяет не только оптимизировать текущую работу, но и сделать деятельность предприятия менее зависимой от конкретных людей, а также помочь в обучении новых сотрудников
.
После построения модели учреждения и определения требований к программному продукту, необходимо определиться с выбором программы. Функциональная полнота (достаточность) будущей программы является базовым требованием к выбору программного продукта.
В рамках данной дипломной работы рассматривается автоматизация расписания занятий факультетов высшего учебного заведения. При выборе программного продукта, особое внимание следует обратить на возможность гибкой настройки программного продукта под специфику конкретного образовательного учреждения (используемые нормы времени, реализуемые учебные планы).
Следует обратить внимание на формирование отчетности. Важно решить – кому будут адресованы отчеты, и для каких целей, что позволит определить содержание и вид отчетов.
Можно приобрести единый программный комплекс для автоматизации различных процессов ВУЗа, но подобное решение неминуемо приведет к большим денежным и трудовым затратам, связанным как с приобретением нового программного обеспечения, так и с переходом и адаптацией к нему. Можно приобрести или разработать программу полностью адаптированную под специфику конкретного ВУЗа и автоматизирующую отдельно взятый процесс. Такие программы легки в освоении и содержат набор функций и операций, намного облегчающих деятельность пользователя системы. К достоинствам подобных программ следует отнести более низкую стоимость, простоту внедрения и адаптации в сравнении с крупными программными комплексами, направленными на большого числа задач.
Выбор варианта – покупать или разрабатывать самим – полностью зависит от каждого образовательного учреждения в отдельности. Здесь играет большую роль готовность в финансировании проекта, профессионализм разработчиков – сотрудников образовательного учреждения, готовых создать и внедрить программу, а также квалификация будущих пользователей.
1.2 Обзор основных вопросов автоматизированного составления расписания занятий в высшем учебном заведении
Задача составления расписаний являются предметом научных исследований с середины прошлого века. Область их применения включает в себя различные сферы человеческой деятельности, такие как: транспортные перевозки, массовое обслуживание, промышленность, образование и т. д. Практика выдвигает множество задач, которые невозможно эффективно решить путем полного перебора. Для большинства моделей теории расписаний нахождение оптимального расписания является трудноразрешимой задачей, а решение приближенных к реальным условиям задач обладает ещё большей сложностью, так как данные решения должны удовлетворять многочисленным, зачастую конфликтующим между собой ограничениям производственного, организационного и психофизиологического характера. Выходом из данного положения является отказ от подхода, когда пригодным считается только самое лучшее решение. Рассмотрим задачу подобного класса, возникающую в конкретной области управленческой деятельности, — составление расписаний учебных занятий в вузе.
Количественный и качественный рост высшей школы требует нового подхода к решению задач управления учебной, научной и хозяйственной деятельностью вузов. Этот подход в последние годы находит свое воплощение в применении современных средств вычислительной техники и математических методов в управлении высшими учебными заведениями. В современном мире всё большее распространение получают различного рода системы автоматизации технических процессов, которые всегда выполнялись вручную. Например, системы принятия решения в маркетинге, экспертные системы, заменяющие опытных специалистов, прогнозирующие системы в самых различных областях науки и техники. К таким же процессам относится и составление расписания, которое до сих пор во многих учебных заведениях создается вручную на основе многолетнего опыта. Современные it-технологии располагают средствами, позволяющими наилучшим образом организовать любой процесс, в том числе и учебный.
Задача планирования расписания учебных занятий — это задача на составление расписания комбинаторного типа, характерной особенностью которой является огромная размерность и наличие большого числа ограничений сложной формы. Фактически, в настоящее время, не существует универсальных методов решения таких задач. Прямое применение математической (классической) теории расписания к задаче составления учебных занятий не представляется возможным. Тем не менее, есть ряд эвристических и переборных методов, которые вполне поддаются программированию.
Есть мнение, что опытный диспетчер сможет составить расписание так, что оно будет отвечать интересам учебного процесса и общественной жизни образовательного учреждения. Однако с этим нельзя согласиться. Ручное решение задачи составления расписания занятий требует больших затрат времени, квалифицированных специалистов, в то же время результат такого решения часто получается далеко не оптимальным. После ввода исходной информации требуется её согласование, в то время как невозможность получения требуемого расписания может быть определена ещё на этапе анализа. Во время составления расписания возможно возникновение тупиковых ситуаций. Всё это требует изменения исходных данных и ослабления ограничений, и здесь без человека не обойтись. Без внесения данных изменений расписание не будет иметь практической ценности. Также следует учесть тот момент, что расписание может меняться и во время его использования, т.е. после составления, и здесь весьма важен человеческий фактор. В этом плане важна поддержка данного процесса автоматизированными методами и процедурами. Основное преимущество состоит в том, что автоматизированное составление устраняет массу рутинной работы, такой как: поиск возможных вариантов внесения очередных элементов в расписание, проверку выполнения требований, поиск случайных ошибок в готовом расписании, оформление расписания на бумаге в виде различных таблиц (для преподавателей, групп, покабинетного), оставляя человеку больше времени на более интеллектуальные действия. Компьютер в данном случае также является инструментом, существенно усиливающим способности человека, т.к. человек не в состоянии перебрать и проанализировать такое же количество вариантов расписаний, как компьютер.
В последние годы предпринимаются множественные попытки совершенствования планирования учебного процесса путем построения алгоритмов оптимизации задач планирования учебной работы вуза с использованием вычислительной техники и программного обеспечения Microsoft Excel. Практическое внедрение планирования учебного процесса с использованием веб-технологий имеет место лишь в немногих вузах. Анализ состояния этих разработок позволяет сделать следующие выводы:
— разработка и внедрение вузами задач АСУ осуществляется в инициативном порядке и эти работы, как правило, направлены на решение отдельных проблем. Разобщенность групп исследователей и разработчиков привела к созданию множества систем, направленных на разработку алгоритмов и программ, рассчитанных на обслуживание только конкретного вуза.
— многие системы возлагают на разработчика расписания всю ответственность за учет реальных требований. В частности, учет требований преподавателей, ограничений на количество проводимых занятий в день, в неделю — все эти и многие другие рутинные задачи в таких системах приходится решать человеку чаще всего методами перебора.
— имеющиеся программы не предполагают многопользовательский режим работы и не поддерживают весь необходимый электронный документооборот.
— не внедряется разработка типовых унифицированных элементов для создания единой автоматизированной системы управления высшей школой.
— имеющиеся программы имеют весьма неудобный интерфейс для ввода исходных данных и редактирования полученного расписания.
В связи с расширением работ по совершенствованию системы управления высшей школой путем создания и внедрения в вузах различных автоматизированных систем управления возникает необходимость в унифицировании средств составления учебного расписания на вычислительной технике. Для этого необходимо четко формализовать требования к расписанию и разработать соответствующее алгоритмическое обеспечение.
При разработке алгоритмов автоматизированного составления расписания занятий остро стоит проблема создания универсальных алгоритмов, учитывающих специфику условий каждой конкретной задачи. Такие алгоритмы должны быть достаточно «гибкими», т.е. без существенного их изменения можно было бы включать и исключать требования из системы требований к расписанию. Однако попытка решать задачу каким-либо одним единственным универсальным алгоритмом на данный момент не представляется возможной. Алгоритмы, позволяющие решать широкий класс задач, не дают той эффективности, которую обеспечивают более конкретные, адаптированные с учётом конкретных условий алгоритмы.
Для систем составления расписания занятий характерна сильная зависимость от специфики конкретных учебных заведений уже на уровне математических моделей и представления данных, что затрудняет использование типовых систем. Систему, созданную в одном вузе, обычно без изменения и доработки невозможно эффективно использовать в другом. К тому же многие из них создавались достаточно давно и с их помощью невозможно эффективно решать поставленную задачу.
Для решения существующих проблем требуется построение гибкой и легко адаптируемой системы на основе новых принципов, с использованием современных веб-технологий. Необходима система, составляющая расписание в соответствии с выбранными критериями и заданными требованиями. Данные возможности должны осуществляться также без изменения исходного кода системы. Для покрытия наиболее типичных случаев необходимо создание нескольких типовых алгоритмов, реализующих составление расписаний. Данная система должна иметь возможность дополнения и изменения существующей базы данных и пользовательского интерфейса. Всё это давало бы возможность задавать в каждом вузе требования, отвечающие его условиям, и с помощью подбора и настройки подходящего алгоритма получать требуемое расписание.
1.3 Сравнительный анализ подходов к автоматизации составления расписаний учебных занятий в образовательных учреждениях
В общей постановке задача составления расписания представляет собой процесс распределения некоторого конечного набора событий во времени в условиях ресурсных и других ограничений.
В качестве исходных данных для составления расписания выступают перечень специальностей, списки групп студентов, дисциплин, а также учебная нагрузка на группы. Имеющийся ресурс выражен в качестве списка профессорско-преподавательского состава, которые могут читать некоторые предметы в заданных группах, списка аудиторий, количества учебных дней в неделю, максимального количества занятий в день.
Необходимо составить оптимальное расписание занятий для каждой группы по дням недели, распределить учебные аудитории в каждый из дней недели, распределить нагрузку на преподавателей по дням с учетом их пожеланий. То есть наиболее удобным образом распределить имеющиеся ресурсы в соответствии с запросами и выделить время для занятий каждой группы.
Существование удачно составленных расписаний говорит о том, что задача составления оптимального расписания разрешима, или хотя бы о том, что для нее существуют допустимые решения.
Составление расписания относится к задачам целочисленного программирования, сложность решения которых растет экспоненциально с ростом числа и возможных значений варьируемых. Кроме того, для нее характерно наличие большого объема различной по своему составу исходной информации и большого числа трудноформализуемых требований. Указанные сложности препятствуют автоматизации процедуры составления расписания, несмотря на наличие широкого спектра методов целочисленного программирования.
С помощью точных (классических) методов и алгоритмов целочисленного программирования возможно получение точной математической модели, отвечающей всем ограничениям, но в силу NP-сложного характера задачи составления расписания эта модель будет громоздкой и сложной. Чтобы избежать этого, применяется имитационное моделирование. В этом случае алгоритм оперирует непосредственно расписанием и списком занятий, которые необходимо включить в расписание (учебным планом). Процесс составления начинается с пустого расписания, когда все занятия находятся в списке неучтенных занятий.
Далее алгоритм переходит от одного незаконченного расписания к другому, стремясь наилучшим образом расставить все занятия, включенные в список.
Процесс продолжается до тех пор, пока не будет сформировано полное расписание или выполнится фиксированное количество итераций.
При реализации алгоритма, основанного на принципах имитационного моделирования, особое внимание уделяется разработке эвристических правил выбора очередного занятия из списка, определения наилучшей для него позиции в расписании и оценке получаемого расписания.
К положительным чертам такого подхода можно отнести возможность детального учета специфики решаемой задачи в случае составления расписания для конкретного вуза. Однако при этом сильно ограничивается возможность применения разработанной системы в других учебных заведениях. Кроме того, по-видимому, понадобится вносить существенные изменения в алгоритм при незначительных внутренних изменениях в вузе.
Так как алгоритм основан на действиях, совершаемых диспетчером при составлении расписания, то существует возможность организации деятельного диалога между пользователем и системой при поиске оптимального расписания.
Подходы к автоматизации составления расписания. Во многих университетах расписание формируется в ручном режиме, составляется оно на картонных планшетах, мелким почерком карандашом на них наносится сетка расписания. В таком же виде они распространяются по факультетам и кафедрам. Найти нужную информацию или сделать определенную выборку в такой ситуации крайне затруднительно. Поэтому как минимум необходимо автоматизировать ввод и хранение информации о расписании занятий.
Программные продукты позволяют достаточно успешно формировать расписание занятий в автоматическом режиме, но при этом теряются опыт и устойчивая привычная структура расписания, полученные при ручном составлении.
Кроме того, такие программы чаще всего используют локальный подход, т.е. автоматизацию только одного отдела, ответственного за составление расписания. Сотрудникам этого отдела требуется провести трудоемкий процесс ввода исходной информации в единую базу данных.
Рисунок 1.1 — Потоки данных при локальном подходе
Как видно из схемы на рисунке 1.1, соотношение объема входных и выходных данных настолько велико, что имеют место необоснованные потери времени, возникающие при подготовке значительного объема входных данных только для составления расписания. Возможность же использования базы данных для решения других задач отсутствует.
Для решения этой проблемы необходимо вменить в обязанности ввод каждого блока информации соответствующим службам, непосредственно отвечающим за эти данные, которые будут контролировать, поддерживать актуальность и нести ответственность за вводимую информацию. Сведения о преподавателях – отдел кадров; учебные планы и дисциплины – учебно-методический отдел; группы и студенты – деканаты факультетов. Кроме того, необходимо заинтересовать эти службы во вводе данных в информационную систему, например, возможностью автоматизировать их бизнес-процессы, наладить поиск и устранение критических ошибок, а также возможностью формировать различные выборки, используя консолидированные данные из различных блоков информации.
Таким образом, схема потоков данных примет вид, представленный на рисунке 1.2.
Рисунок 1.2. Потоки данных при системном подходе
Это и есть принципиальная схема системного подхода к автоматизации составления расписаний вуза, т.е. автоматизации всех бизнес-процессов, связанных с предметной областью расписания. И именно это позволит автоматизировать рутины, а окончательный выбор при принятии решения оставить за пользователем.
При локальном подходе процесс автоматизации составления расписания достаточно трудоемок. К положительным моментам можно отнести, что разработать информационную систему, реализующую данный подход, вуз может своими силами, в достаточно короткий срок и с минимальными финансовыми затратами.
Примером системы с применением системного подхода будет служить, разработанное в рамках данной дипломной работы, автоматизированное расписание занятий высшего учебного заведения с использованием CMS/CMF Drupal 7.
База данных содержит 3 справочника, хранящих необходимый для составления расписания минимум информации. Главные задачи при разработке информационной системы: автоматизация ввода расписаний занятий с учетом специфики вуза, автоматизация поиска при составлении расписания и предоставление расписаний занятий пользователям с помощью удобного web-интерфейса.
Данная информационная система является примером отдельной части всего учебного процесса. При этом, с помощью встроенных средств экспорта-импорта существует возможность взаимосвязи между другими объектами деятельности университета. Система административных прав и ролей CMS Drupal 7 позволяет сотрудникам различных служб заполнять различные справочники и таблицы, содержащих информацию, которая относится к их службам, но напрямую используется и в других подразделениях.
В результате анализа существующих методов и подходов составления расписания можно сделать вывод об экономической целесообразности применения полностью автоматизированных систем составления расписаний в средних и крупных вузах при построении точных математических моделей. Наиболее эффективным решением задачи является применение системы диалогового процесса составления расписания, построенного с использованием системного подхода и являющегося частью корпоративной управленческой информационной системы. Этот подход обеспечит хранение всей необходимой и актуальной информации для составления расписания, а окончательное решение будет принимать сотрудник отдела по составлению расписаний.
2 Постановка задачи и выбор средства разработки
2.1 Требования к разрабатываемой системе
Одной из целей преследуемых при проведении автоматизации ВУЗа является создание единой информационной системы. Наличие единого центра хранения информации (базы данных) с целью минимизировать функции отдельных пользователей – не менее важная задача при создании автоматизированных систем. В связи с наличием в высших учебных заведениях единой базы данных, одним из главных требований к разрабатываемой системе является возможность интеграции в данную базу, для использования хранящейся в ней информации о студентах, кафедрах и учебных планах.
В приложении A представлена структура программного продукта.
Краткое описание назначений основных объектов:
«База данных» — объект, содержащий информацию о специальностях, группах, преподавателях, учебных планах, дополнительную справочную информацию.
«Пользовательский интерфейс» — объект, обеспечивающий высокую информативность выводимой на экран информации, организующий удобство ее вывода и обработки пользователем автоматизированной системы.
Также одним из требований, предъявляемых к разрабатываемой системе, является создание и настройка удобного пользовательского интерфейса, обеспечивающего легкое восприятие и обработку информации, а также минимизирующего пользовательские операции.
Разрабатываемая система при расчете нагрузки и штатной численности кафедр университетов учитывает принятые нормы времени в вузах Республики Беларусь.
Отчетные формы предоставляют администратором подробную информацию:
- нагрузки специальностей и кафедр за год;
- нормативном количестве штатных единиц по кафедрам за определенный промежуток времени;
- Таким образом, методами достижения поставленных задач можно считать:
- создание единой базы данных автоматизированной системы высшего учебного заведения;
- создание и настройка пользовательского интерфейса;
- генерация отчетных форм.
2.2 Выбор средства разработки и системы управления базами данных
Выбор системы управления базами данных является одним из важных этапов при разработке автоматизированной системы расписания занятий. Выбранный программный продукт должен удовлетворять как текущим, так и будущим потребностям учебного заведения, при этом следует учитывать затраты разработку и настройку необходимого программного обеспечения, а также обучение персонала.
Наиболее правильный подход при выборе СУБД основан на оценке того, в какой мере существующие системы удовлетворяют основным требованиям создаваемого проекта информационной системы.
Существует несколько критериев выбора системы управления базами данных:
- моделирование данных;
- особенности архитектуры и функциональные возможности;
- контроль работы системы;
- особенности разработки приложений;
- производительность;
- надежность;
- требования к рабочей среде;
- смешанные критерии.
При рассмотрении критерия моделирования данных обычно обращают внимание на используемую модель данных. Существует множество моделей, самые распространенные из них — иерархическая, сетевая, реляционная, объектно-реляционная и объектная. Вопрос об использовании той или иной модели должен решаться на начальном этапе проектирования информационной системы. Важным критерием является средства поиска, поддерживаемые типы данных, заложенные в систему, а также наличие и возможность расширение типов.
Критерий, определяющий особенности архитектуры и функциональные особенности, предполагает оценку:
- мобильности системы, ее независимость от среды, в которой она работает;
- масштабируемости, возможности соответствовать росту информационной системы;
- распределенности, возможности управления распределенными базами данных;
- сетевых возможностей, возможностей использования системами широкого диапазона сетевых протоколов и служб для работы и администрирования.
Критерий контроля работы подразумевает контроль использования памяти компьютера, когда система может управлять использованием, как оперативной памяти, так и дискового пространства, что может выражаться, например, в сжатии баз данных, или удалении избыточных файлов. Многие современные системы включают в себя возможности самоконфигурирования, как правило, опирающиеся на результаты работы сервисов самодиагностики производительности. Данная возможность позволяет выявить слабые места конфигурации системы и автоматически настроить ее на максимальную производительность.
Многие производители СУБД выпускают также средства разработки приложений для своих систем. Как правило, эти средства позволяют наилучшим образом реализовать все возможности сервера, поэтому при анализе СУБД стоит рассмотреть также и возможности средств разработки приложений. Некоторые системы имеют средства автоматического проектирования, как баз данных, так и прикладных программ.
Поддержка большого количества национальных языков и возможности разработки web-интерфейса расширяют область применения системы и приложений, построенных на ее основе, а наличие широкого спектра используемых языков программирования повышает доступность системы для разработчиков и существенно влияет на быстродействие и функциональность создаваемых приложений.
Для тестирования производительности применяются различные средства, и существует множество тестовых рейтингов. Одним из самых популярных и объективных является TPC-анализ производительности систем. Показатель TPC – это отношение количества запросов обрабатываемых за некий промежуток времени к стоимости всей системы.
Наличие возможности обеспечения параллельной обработки данных в СУБД играет не менее важную роль при выборе системы. Можно выделить два подхода: распараллеливание обработки последовательности запросов на несколько процессоров, либо использование нескольких компьютеров-клиентов, работающих с одной БД, которые объединяют в так называемый параллельный сервер.
Желательно, чтобы выбранная система позволяла производить оптимизацию запросов.
Критерий надежности системы включает возможность:
- восстановления системы после сбоев;
- резервного копирования;
- отката изменений;
- наличие многоуровневой системы защиты.
Немаловажно определить и требования к рабочей среде такие как:
- поддерживаемые аппаратные платформы;
- минимальные требования к оборудованию;
- максимальный размер адресуемой памяти;
- операционные системы, под управлением которых способна работать СУБД.
К смешанным критериям можно отнести:
- качество и полноту документации;
- локализованность, возможность использования национальных языков;
- модель формирования стоимости производителем СУБД;
- стабильность производителя;
- распространенность СУБД.
Четкий и глубокий сравнительный анализ на основании вышеперечисленных критериев в любом случае поможет рационально выбрать подходящую систему для конкретного проекта, и затраченные усилия не будут напрасными. Перечень критериев поможет осознать масштабность задачи и выполнить ее адекватную постановку.
В качестве системы управления базами данных в автоматизированной системе расписания занятий используется наиболее популярная СУБД MySQL. Кроме того, проект, разработанный при помощи фреймворка CMS Drupal 7, позволяет создавать и разворачивать на веб-сервере установочный профиль и использовать базы данных PostgreSQL и SQLite.
MySQL — свободная система управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle, имеющая на данный момент права на торговую марку. Продукт распространяется как под GNU General Public License, так и под собственной коммерческой лицензией. Помимо этого разработчики создают функциональность по заказу лицензионных пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.
MySQL является решением для малых и средних приложений. Входит в состав серверов WAMP, AppServ, LAMP и в портативные сборки серверов Денвер, XAMPP. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.
Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MyISAM, поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц.
MySQL является наиболее приспособленной для применения в среде веб системой управления базами данных. При этом она стала незыблемым стандартом в области СУБД для веб, в которой развиваются возможности для использования ее в любых критичных бизнес-приложениях, что создает конкуренцию на равных с СУБД таких производителей, как Oracle, IBM, Microsoft и Sybase.
Основные преимущества MySQL:
— многопоточность, поддержка нескольких одновременных запросов;
— оптимизация связей с присоединением многих данных за один проход;
— записи фиксированной и переменной длины;
— ODBC драйвер;
— гибкая система привилегий и паролей;
— гибкая поддержка форматов чисел, строк переменной длины и меток времени;
— интерфейс с языками C и Perl, PHP;
— быстрая работа, масштабируемость;
— совместимость с ANSI SQL;
— бесплатна в большинстве случаев;
— хорошая поддержка со стороны провайдеров услуг хостинга;
быстрая поддержка транзакций через механизм InnoDB.
Руководствуясь тем, что одним из главных требований при создании автоматизированной системы расписания занятий является интеграция в единое информационное пространство, а также единую базу данных ВУЗа, и в связи выявленными преимуществами распространённой СУБД, было принято решение об использовании в основе разрабатываемой системы СУБД MySQL.
3 Разработка и реализация автоматизированной системы расписания занятий учебного заведения
3.1 Структура проекта и базы данных MySQL
Общая схема структуры базы данных CMS Drupal 7, включая подсистемы хранения страниц (нод), блоков, иерархии, таксономии, меню, пользовательских прав и ролей пользователей приведена в приложении Б.
Мы рассмотрим основные типовые структуры, включающие данные учебных планов специальностей, кафедр и профессорско-преподавательского состава, а также подсистему хранения различной справочной информации.
Таксономия (Taxonomy)
Таксономия — это встроенный классификатор добавляемых в Drupal 7 материалов. Таксономия позволяет создавать термины и подтермины, которые входят в словари. Таксономия применяется для создания структуры сайта, для классификации добавляемых материалов по разделам/категориям/типам. Пользователи с соответствующими правами могут добавлять словари и термины на странице таксономии. Страницы со списками терминов предоставляют возможности по настройке каждого термина и их упорядочивания. Термины могут вкладываться друг в друга представляя собой иерархию из подтерминов. Каждый словарь имеет набор необходимых полей.
В рамках автоматизированной системы используется 3 типа словарей: вид занятий, преподаватель, факультет.
В состав словаря «вид занятий» входит термины:
— лабораторное занятие
— лекция
— полевая практика
— практическое занятие
— производственная практика
— семинар
В состав словаря «Преподаватель» входят термины с профессорско-преподавательском составом. Каждый термин содержит следующие поля:
— Ф.И.О. преподавателя
— Резюме
— Должность
— E-mail
— Телефон
— Факультет
— Кафедра
Словарь «Факультет» включает весь перечень специальностей и подчиняющимся им учебным группам.
Нода (Node)
Нода является структурной единицей материала (контента) в Drupal 7. Стандартные типы материалов, такие как заметка (story), запись блога (blogs), страница (page) являются нодами. Для создания учебных занятий мы разработали собственный тип нод с названием «Расписание занятий». Основные типы полей и их назначение продемонстрированы в таблице 1.
Таблица 1 Структура ноды «Расписание занятий»
Метка |
Машинное имя |
Тип поля |
Виджет |
Название |
Title |
Элемент модуля Node |
|
Описание занятия |
body |
Текст с анонсом |
Текстовая область |
Начало |
field_date_rasp |
Дата |
Pop-up calendar |
Окончание |
field_date_rasp_end |
Дата |
Pop-up calendar |
Преподаватель |
field_teacher |
Ссылка на термин |
Выбор из списка |
Место проведения |
field_adress |
Список (текст) |
Выбор из списка |
Аудитория |
field_place |
Текст |
Текстовое поле |
Факультет |
field_faculty |
Ссылка на термин |
Выбор из списка |
Кафедра |
field_kafedra |
Ссылка на термин |
Выбор из списка |
Вид занятий |
field_course |
Список (текст) |
Выбор из списка |
Представления (views)
Модуль Views позволяет создавать и управлять списками содержания (документами, пользователями, таблицами с дополнительными полями). В общем смысле, Views — это инструмент для создания запросов, который позволяет создавать запросы, выполнять их и выводить полученный результат разнообразными способами.
Кроме создания списков для представления какой-либо информации, с помощью видов можно генерировать отчёты, выводить коллекций изображений, создавать страницы для управления различным содержанием и использовать виды для любых других целей.
В рамках целей и задачей дипломной работы нами был создан отдельный views, который использует плагин FullCalendar jQuery для отображения сетки расписания занятий и вывод информации из типа материала «Расписание занятий» по дате с использованием взаимосвязанных фильтров таксономии «Специальность – Группа» (рисунок 3.1).
Рисунок 3.1 — Общий вид настройки представления Views
3.2 Технология разработки автоматизированной системы расписания занятий и описание интерфейса системы управления сайтом CMS Drupal 7
Интерфейс автоматизированной системы представляет собой веб-приложение, разработанное на языке программирования PHP с использованием популярного CMF фреймворка Drupal 7. Интерфейс предоставляет пользователю автоматизированной системы возможность в удобной форме обрабатывать необходимую информацию.
Drupal (Друпал) – одна из самых популярных систем управления сайтом с открытым исходным кодом. Благодаря огромному функционалу и активному сообществу, многие крупные организации и образовательные учреждения выбирают данную CMS в качестве главной составляющей развития компании в сети Интернет. Среди самых высокопосещаемых Интернет-проектов можно выделить сайт Белого Дома (http://www.whitehouse.gov/), сайт Гарвардского университета (http://www.harvard.edu/), официальный сайт операционной системы Ubuntu (http://www.ubuntu.com/), сайт Стенфордского университета (http://stanford.edu), сайт Колумбийского университета (http://columbia.edu), сайт Аризонского университета (http://arizona.edu) и многие другие.
Архитектура CMS/СMF Drupal построена по принципу объектно-ориентированного программирования. Структурной единицей материалов является Node (нода), на её основе строятся остальные типы материалов. Чтобы классифицировать и структурировать ноды в Drupal, введено понятие «Таксономия». Путем создания словарей и терминов можно построить любую структуру будущего веб-проекта.
Разработка сложной автоматизированной системы, как правило, предполагает внедрение разнообразных сервисов, разграничения прав доступа к разделам и материалам, большой объем информации с возможностью семантического поиска, единую авторизацию пользователей во всех сервисах и постоянное развитие проекта в дальнейшем.
Чтобы реализовать указанные требования, в CMS Drupal существует огромное количество модулей, с помощью которых можно построить сложную информационную систему.
В рамках дипломной работы использовались следующие модули Drupal 7:
1. ССK. Позволяет создавать типы материалов и добавлять к ним различные типы полей (текстовое поле, текстовая область, поле даты, изображение, ссылка, скрытые поля).
2. Views. Основной модуль для создания запросов и вывода их на сайте с применением разнообразных фильтров по выбранным полям. В комплексе с различными модулями дает возможность проектировать все виды представлений на сайте.
3. Image. Позволяет редактировать изображения и добавляет поле «Изображение» в содержание материалов. Благодаря поддержке библиотеки Graphics Library (GD) появляются уникальные возможности для обработки изображений с созданием различным стилей и привязки их к определенным полям типов материалов.
4. Node Reference. Модуль для организации связи между материалами.
5. Date. API для работы с датой и гибкое поле «времядата» для модуля CCK.
6. Calendar. Добавляет на сайт вид с календарём. В календаре можно настроить форматы дат, переключаться между просмотром по годам, неделям и дням. Календарь является видом, все выводимые им данные настраиваются через модуль Views.
7. Feeds. Модуль позволяет собирать данные из различных источников и сохранять их в виде документов, пользователей, терминов или просто записей в базе данных. Основным назначением модуля в автоматизированной системе является экспорт данных расписания занятий в формате .csv.
Для разработки пользовательского интерфейса был применен FullCalendar — jQuery плагин, который использует технологию AJAX. Он имеет широкие функциональные возможности, легок в конфигурации, работает с большинством форматов даты и времени. Так же FullCalendar является плагином с открытым исходным кодом и находиться под лицензией MIT или GPL Version 2.
При открытии главной страницы веб-интерфейса (рисунок 3.2) пользователю предоставляется возможность выбора направления работы:
— выбор факультета и группы;
— просмотр сетки расписания занятий по месяцам, неделям и дням;
— просмотр подробной информации об учебных занятиях;
— просмотр всех занятий по данному предмету в пределах учебного периода;
— просмотр контактной информации о профессорско-преподавательском составе.
Рисунок 3.2 — Главная страница веб-интерфейса автоматизированной системы
Переход к работе по выбранным направлениям осуществляется нажатием на ссылку левой кнопкой мыши.
Каждое учебное занятие обозначается соответствующим маркером-цветом, который наглядно обозначает тип занятия: лекция, лабораторное занятие, семинар, практическое занятие, производственная практика, полевая практика (рисунок 3.3).
Рисунок 3.3 — Обозначение цветовых маркеров типов учебных занятий
При нажатии на соответствующее учебное занятие, можно увидеть информацию о времени начала и окончания занятия по изучаемому предмету, аудиторию проведения занятия, место проведения, тип учебного занятия, закрепленного преподавателя (рисунок 3.4).
Рисунок 3.4 — Информация о текущем занятии учебной группы
При нажатии на пункт «Преподаватель», система дает возможность просмотреть контактную информацию о преподавателе и весь учебный план. Контактная информация включает в себя Ф.И.О преподавателя, должность, e-mail, контактный телефон, аудиторию, специальность и общее резюме (рисунок 3.5).
Рисунок 3.5 — Информация о преподавателе и закрепленных учебных предметах
Для централизованной настройки и управления автоматизированной системой расписания занятий система управления сайтом CMS Drupal 7 имеет удобную административную панель и различные инструменты для удобного назначения административных прав и ролей.
В системе существует один суперпользователь (admin) у которого нет ограничений на все действия в системе, он может редактировать и удалять любые материалы, управлять конфигурацией проекта и ограничивать действия других пользователей.
Анонимные пользователи и зарегистрированные пользователи являются ролями. Таким образом, суперпользователь (admin) может добавлять неограниченное количество ролей, в которых можно назначить права доступа к различным областям автоматизированной системы.
На рисунке 3.6 можно увидеть все роли с набор прав доступа к различным сущностям веб-проекта (анонимный пользователь, авторизованный пользователь, администратор, редактор расписания биологического факультета).
Таким образом, с учетом основных требований к безопасности автоматизированной системы можно выделить основные преимущества данной СMS:
— безопасность кода системы управления регулярно проверяется независимыми исследователями;
— политика учетных записей, разделение пользователей на группы;
— разграничение уровней доступа для различных групп пользователей;
— вводимые пользователем данные фильтруются и проверяются на предмет попыток взлома;
— защита от попытки взлома паролей «перебором»;
Для различных типов ролей предусмотрена возможность работы с определенными специальностями и группами. В административном интерфейсе было разработано и несколько различных инструментов для работы с расписанием занятий. Для быстрого редактирования изменений в расписании занятий имеется визуальный редактор, в котором можно быстро изменить время начала занятия, дату и аудиторию. Каждое учебное занятие имеет собственный уникальный идентификатор, что позволяет использовать одни и те же названия учебных предметов на различных факультетах, при этом для каждого словаря и термина настраиваются соответствующие права на создание и редактирование материалов.
Рисунок 3.7 — Импорт расписания занятий в формате .csv
Для массового заполнения предусмотрен импорт готового файла в формате .csv с набором ячеек, согласно разработанному интерфейсу администрирования расписания занятий (рисунок 3.7).
Веб-проект спроектирован с использованием современной адаптивной верстки (responsive web design) и применением медиа-запросов CSS3 для отображения на различных типах устройств – персональные компьютеры, планшеты и смартфоны. Кроме того, архитектура темы очень широко использует drupal_static методы кеширования, которые ускоряют рендеринг страницы и снижают количество запросов.
Адаптивный веб-дизайн – это концепция разработки сайта, при которой веб-проект сайт адаптируется под различные устройства, например, планшеты, смартфоны, телевизоры с выходом в интернет. В связи с огромным ростом мобильных устройств за последнее время, адаптивный, или отзывчивый дизайн стал крайне необходимым для многих образовательных учреждений.
Основным преимуществом такого подхода является:
- HTML5
- Поддержка адаптивной верстки для различных типов устройств
- Адаптивный JavaScript
- Обратная совместимость со старыми браузерами
- Интеграция с SAAS (мета-язык описания стилей)
- SEO-оптимизированный код темы
- Активная поддержка атрибутов RDF, ARIA и «чистая» разметка.
Таким образом, разработанная система упрощает процесс просмотра актуального расписания занятий для студентов и дает возможность сотрудникам вуза оперативно рассчитывать нагрузку на кафедры на основе анализа имеющихся учебных планов специальностей. Результаты работы системы в дальнейшем можно использовать для планирования анализа структур нагрузки, а также планирования структурной доработки и унификации имеющихся учебных планов.
Заключение
В результате проделанной работы была разработана автоматизированная система расписания занятий учебного заведения с целью ее внедрения в учебный процесс университета.
Данная система имеет удобный пользовательский интерфейс, позволяющий легко освоить работу в программе, гибкость же программного кода в случае необходимости позволит удовлетворить растущие требования к системе.
Преследуемая изначально цель автоматизации процесса расписания занятий достигнута. Разработанную автоматизированную систему можно интегрировать в единую информационную систему ВУЗа, что, несомненно, положительно скажется на работе пользователей при анализе структуры нагрузки, при планировании структурной доработки и унификации имеющихся учебных планов.
Разработанная система позволит повысить скорость обработки информации, сократит сроки формирования отчетов и сэкономит время работы пользователя пользователей.
Автоматизация процесса администрирования расписания занятий и гибкость разработанной автоматизированной системы дают преимущества при её использовании в системе образования, улучшая при этом деятельность персонала, а вместе с тем и повышая качество предоставляемого ВУЗом образования.
Модульная реализация разработанной системы автоматизированного составления расписания в структуре общей автоматизированной системы ведения документооборота обеспечивает возможность общего использования баз данных и внедрения общей политики защиты информационного обеспечения системы.
Разработанная система реализована средствами современных сетевых web-технологий с целью автоматизации организационных процессов и обеспечения возможности одновременного отдаленного доступа пользователей к информационным ресурсам в процессе формирования служебной документации.
Чтобы не утонуть в многомерных массивах, тем более, что у вас список может быть разной длины, лучше используйте списки List<T>
. В нихм ожно добавлять и удалять элементы, например у вас может быть разное количество подгрупп в каждой группе.
Вот например дневное расписание на один день для одной группы и подгруппы
struct Schedule
{
public string Group { get; set; }
public string SubGroup { get; set; }
public DateTime Day { get; set; }
public Dictionary<TimeSpan, string> DayShedule { get; set; }
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append(Day.ToString("dd.MM.yyyy")).Append(' ');
sb.Append(Group).Append('-').AppendLine(SubGroup);
foreach (var pair in DayShedule)
{
sb.Append(pair.Key.ToString(@"hh:mm")).Append(' ').AppendLine(pair.Value);
}
return sb.ToString();
}
}
Может я переусложнил, но вы удилите лишнее, если надо. Я сделал именно так для наглядности.
Всё, теперь это можно хранить в списке и делать выборку с помощью System.Linq
.
Давайте создадим список и добавим в него данные
List<Schedule> schedules = new List<Schedule>();
schedules.Add(new Schedule
{
Group = "Ы",
SubGroup = "15",
Day = DateTime.Parse("15.01.2020"),
DayShedule = new Dictionary<TimeSpan, string>
{
[TimeSpan.FromHours(9)] = "Алгебра",
[TimeSpan.FromHours(11)] = "Физика",
[TimeSpan.FromHours(13)] = "Экономика",
[TimeSpan.FromHours(15)] = "Геометрия",
}
});
schedules.Add(new Schedule
{
Group = "Ы",
SubGroup = "15",
Day = DateTime.Parse("16.01.2020"),
DayShedule = new Dictionary<TimeSpan, string>
{
[TimeSpan.FromHours(11)] = "Английский",
[TimeSpan.FromHours(15)] = "Физкультура",
}
});
schedules.Add(new Schedule
{
Group = "Б",
SubGroup = "15",
Day = DateTime.Parse("16.01.2020"),
DayShedule = new Dictionary<TimeSpan, string>
{
[TimeSpan.FromHours(11)] = "Английский",
[TimeSpan.FromHours(15)] = "Физкультура",
}
});
Тогда можно будет одной строкой получить выборку для любой группы, на любой день, как наприме, давайте выберем расписание для группы Ы
и выведем в консоль.
var selection = schedules.Where(x => x.Group == "Ы");
foreach (Schedule s in selection)
Console.WriteLine(s);
Если вам незнаком Linq
, то можно выбрать вот так
foreach (Schedule s in schedules)
{
if (s.Group == "Ы")
Console.WriteLine(s);
}
Вывод будет такой
15.01.2020 Ы-15
09:00 Алгебра
11:00 Физика
13:00 Экономика
15:00 Геометрия
16.01.2020 Ы-15
11:00 Английский
15:00 Физкультура
Можно таким же образом выбирать по временному промежутку, датам, подгруппам, времени, предметам, как угодно.
#статьи
- 19 сен 2022
-
0
Создаём веб-приложение для быстрого заполнения расписания новостной передачи.
Иллюстрация: Катя Павловская для Skillbox Media
Готовить эфиры бывает утомительно и непросто, поэтому, помимо ведущих, за кадром должна быть сильная команда помощников. И неважно, идёт ли речь о передаче на телевидении или на YouTube, Rutube, в VK и так далее: главные герои тыла — продюсеры, которые ищут экспертов, договариваются с гостями, предлагают темы для обсуждения, согласовывают всё это и составляют для всех расписания.
Миллиарды нервных клеток продюсеров стримов сгорели в попытках находить интересных героев, делать выпуски непохожими друг на друга, возвращать на связь внезапно исчезнувших с радаров гостей и, конечно, вписываться в график. В общем, продюсер эфира — этакий рокетмен, сжигающий свои предохранители. Но как тут может помочь программирование? Давайте попробуем разобраться.
Опыт участия в подготовке новостных эфиров, а также обсуждения темы с друзьями из других медиа заставили задуматься: а вдруг в работе продюсера, помимо творчества, есть шаблонные действия? Ведь, если это правда, часть задач можно поручить компьютеру! А это снижение нагрузки, освобождение части рабочего времени и прочее.
Предположим, что некий алгоритм действительно существует, хотя и различается в разных редакциях. Вот что может учитывать условный продюсер стрима на условную политическую тематику.
При ежедневных выходах выбор как минимум между сегодня и завтра. Повестка быстро меняется, и планировать дальше может быть сложно — хотя когда как.
Допустим, утро или вечер — для разной ЦА. Кто-то внимательно посмотрит прямую трансляцию, кто-то хочет послушать эфир за рулём, кто-то на кухне за готовкой, некоторые подписчики включат его фоном во время работы, а остальные посмотрят запись на досуге.
Обычно это один или несколько человек из списка постоянных ведущих. Кто-то из них может быть в этот день недоступен по причине занятости, командировки, отпуска, болезни.
Это самый интересный и творческий пункт. Задача в том, чтобы определить самые актуальные темы и найти гостей (экспертов), которые впишутся в передачу и будут согласны ненадолго выйти в эфир с комментарием.
Но это ещё не всё. Хороших экспертов нужно взять на заметку и приглашать снова, а плохих — отсеять.
Когда расписание в том или ином виде составлено, его нужно согласовать с ведущими. С точки зрения подачи это означает, что текст должен быть ясным, кратким и выглядеть аккуратно, потому что ведущие — занятые люди и у них нет времени читать полотна текста.
Таким образом, есть несколько плавающих переменных, которые способны измениться в очень короткий срок. Но всё же это одни и те же переменные, и сбор информации действительно можно немножечко автоматизировать. Это мы и сделаем.
Наша программа будет простой и наглядной. Мы создадим локальную веб-страницу с самым необходимым:
- приятным интерфейсом;
- возможностью выбора опций эфира;
- небольшой базой данных экспертов с возможностью добавления новых;
- автоматическим заполнением текста расписания;
- отправкой оформленного поста в рабочий Telegram-чат команды стрима.
В результате продюсер эфира сможет открыть нашу страницу, выбрать нужные детали и гостей (при необходимости — завести карточки новых гостей), составить расписание, почти ничего не печатая, и в один клик переслать структурированный план на согласование ведущим. Для многих этого будет вполне достаточно, хотя при желании можно запросто накрутить дополнительные возможности.
Какие технологии будем использовать:
- HTML и CSS для красивого дизайна;
- язык JavaScript для программирования интерфейса;
- API IndexedDB для создания локальной базы данных прямо в браузере (современными браузерами оно поддерживается);
- Telegram Bot API для отправки расписания.
Готовый код мы разместили на pastebin.com:
- HTML-код;
- JavaScript-код.
Допустим, мы сделаем приложение для продюсеров условной YouTube-передачи Skillbox FM с реальными ведущими и гостями (по мотивам уже вышедших эпизодов подкаста «Люди и код»).
Скриншот: Skillbox Media
Приложение будет следовать логике продюсера новостного эфира: определять дату, время и ведущих. А после этого сопоставлять экспертов и время выхода. В конце приложение покажет расписание всем ведущим.
Взглянем на всё это как программисты:
- по сути, нам надо сделать набор чекбоксов, которые администратор проставляет в нужном порядке;
- выбор времени подключения привязан к блоку «Вид эфира» и устанавливается, когда отмечаем утро или вечер;
- для добавления экспертов в расписание к конкретному времени нужно по очереди щёлкнуть на время подключения, а затем на имя гостя — и они встанут на свои места;
- все опции сконцентрированы вокруг требуемого результата (текста поста). Поэтому блок «Предпросмотр поста» должен располагаться по центру.
Вот как отреагирует программа, если мы выберем случайные опции.
Скриншот: Skillbox Media
Скриншот: Skillbox Media
Нажав на голубую кнопку вверху, мы отправим в Telegram-чат вот такой пост.
Скриншот: Skillbox Media
Скриншот: Skillbox Media
Теперь разберём, как написать такую программу.
Код будет упакован в два файла: Air Constructor.html и speakersDB.js. Первый — сама страница (HTML, CSS и немного JavaScript). Второй — всё, что связано с базой данных экспертов (JavaScript-код, который мы подключим к веб-странице).
Посмотрим на применение указанных инструментов.
Наш интерфейс должен быть не только приятным, но и привычным для продюсера, поэтому его нужно оформить в фирменном стиле медиа. В нашем случае ведущий цвет — синий (код #3D3BFF).
С вёрсткой мудрить не будем:
- элементарная сетка из трёх <div>-блоков для разделения страницы на три вертикальных уровня (<div id=»firstBlock»>, <div id=»secondBlock»>, <div id=»thirdBlock»>);
- первый уровень (см. скриншот) — заголовок «Расписание эфира» и кнопка отправки на синем фоне;
- второй уровень — блоки «Дата эфира», «Вид эфира», «Ведущие»;
- третий уровень — блоки «Время подключения», «Предпросмотр поста», «Спикеры»;
- CSS-правил будет немного, поэтому разместим их не в отдельном файле, а внутри страницы с помощью элемента <style>.
С опциями интерфейса в целом всё тоже просто: чтобы дать пользователю возможность выбора пунктов, вставим в наши <div>-блоки шесть HTML-форм (элементы <form>), внутри которых будут связанные элементы <input>/<label>, <fieldset>/<legend> или <textarea>.
Взаимодействие форм с инпутами и подписями поначалу может показаться запутанным, поэтому разберём его подробнее:
- форма (элемент <form>) — это секция документа, содержащая интерактивные элементы для отправки информации. Содержит элементы формы (см. ниже);
- инпут (элемент <input>) — это как раз элемент управления одного из нескольких возможных типов. Мы будем использовать инпуты типа radio (выбор только одного варианта) и checkbox (выбор любого количества вариантов);
- элемент <label> — это подпись для связанного инпута. Связь указывается с помощью атрибутов id и for;
- элемент <fieldset> группирует несколько управляющих элементов формы, а связанный с ним <legend> буквально добавляет над ними «легенду» (красивый заголовок).
Мы нарушим эту схему только в двух случаях: для кнопки отправки в Telegram укажем тип submit («отправка», без подписи с помощью <label>), а форма предпросмотра поста будет содержать только текстовый блок <textarea> для расписания.
Давайте теперь настроим отображение этих элементов. Для начала сбросим дефолтные стили браузера, чтобы самостоятельно задать отступы и шрифт.
* { font-family: Intro Light, sans-serif; margin: 0; padding: 0; }
Далее сделаем ширину трёх главных блоков сетки равной ширине страницы (заодно установим и другие опции).
#firstBlock { width: 100%; position: relative; } #secondBlock { width: 100%; margin-left: 5%; } #thirdBlock { width: 100%; margin-left: 5%; clear: both; }
Позаботимся о стиле заголовка страницы:
h1 { background-color: #3D3BFF; color: #fff; width: 100%; font-family: Intro Black, sans-serif; text-align: center; padding: 5px; }
И стиле кнопки отправки в Telegram:
#sendButton { width: 170px; height: 30px; position: absolute; top: 10%; right: 4%; background-color: #179cde; border: 1px dashed white; color: #fff; font-family: Intro Black, sans-serif; cursor: pointer; }
А этот стиль поможет правильно выстроить блоки меню относительно друг друга — чтобы они не съезжали со строк и не наезжали друг на друга. Первые три блока — одинаковые.
#first_form, #second_form, #third_form { width: 30%; margin-top: 1%; margin-bottom: 1%; margin-right: 5px; float: left; }
Формы 4–6 должны быть разными по ширине: больше места под расписание и базу гостей и меньше — для времени подключения. Обратите внимание, что в коде фактически три разных варианта четвёртой формы (выбор времени подключения) — просто отображаться должен только один (об этом ниже).
#fourth_form_filler, #fourth_form_morning, #fourth_form_evening { width: 20%; margin-bottom: 1%; margin-right: 5px; float: left; } #fifth_form, #sixth_form { width: 35%; margin-bottom: 1%; margin-right: 5px; float: left; }
Отдельные настройки области для текста (элемент <textarea> в пятой форме). В частности, убираем возможность менять её размер (resize: none) и добавляем возможность прокрутки на случай, если текста будет много (ну мало ли).
#fifth_form > fieldset { overflow: scroll; } textarea { width: 95%; height: 92%; padding: 2%; font-size: 18px; resize: none; border: 0; }
Оставшиеся CSS-правила не так важны — и вы сможете увидеть их в финальном варианте. А мы пойдём к самому интересному — программированию поведения элементов.
Пока ещё не касаясь базы данных, отметим менее очевидные задачи: необходимо сбросить дефолтный выбор пунктов меню и вовремя добавить функции — обработчики событий на клики по различным пунктам.
Этот блок мы добавим ближе к началу кода HTML-страницы — в элемент <head>:
<script>
// Функция отправки расписания в Telegram-чат (привязывается к кнопке отправки).
function sendSchedule() {
// Конструктор ссылки для отправки новостей в Telegram: токен бота, ID чата, способ кодировки, заголовок + текст дайджеста, предупреждение.
let token = '12345abcd';
let chat = '-10012345';
let text = encodeURIComponent(document.getElementsByTagName('textarea')[0].value);
let sendURL = 'https://api.telegram.org/bot' + token + '/sendMessage?chat_id=' + chat + '&parse_mode=HTML&text=' + text;
fetch(sendURL);
alert('Расписание отправлено.');
console.log('Отправка расписания в Telegram-чат.');
};
// Функция отмены предварительного выбора пунктов в меню.
function uncheckInputs() {
var inputs = document.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
inputs[i].checked = false;
};
};
</script>
Остановимся ненадолго на реализации отправки поста в Telegram (функция sendSchedule). Нужно всего лишь сделать GET-запрос методом sendMessage() из Telegram Bot API с помощью JavaScript-метода fetch(). Требуется только подставить в нужные переменные токен вашего бота (его можно получить при создании бота у BotFather) и ID чата.
Далее конструктор собирает из переменных ссылку для запроса, а чтобы функция срабатывала по клику на кнопку отправки, мы добавляем кнопке обработчик с названием функции:
<input type="submit" value="Отправить расписание" id="sendButton" onclick="sendSchedule()">
Ещё один скрипт — после отрисовки первой формы «Дата эфира», для которой требуется получить сегодняшнюю и завтрашнюю даты.
<script>
// Определяем и вставляем актуальные даты (сегодня и завтра).
let now = new Date();
let now2 = new Date();
now2.setDate(now2.getDate() + 1);
let month = [
'января',
'февраля',
'марта',
'апреля',
'мая',
'июня',
'июля',
'августа',
'сентября',
'октября',
'ноября',
'декабря'
];
let today = now.getDate().toString() + ' ' + month[now.getMonth()];
let tomorrow = now2.getDate().toString() + ' ' + month[now2.getMonth()];
document.getElementById('replace1').innerHTML = 'Сегодня, ' + today;
document.getElementById('replace2').innerHTML = 'Завтра, ' + tomorrow;
</script>
В самый конец тела страницы вставляем вызовы функции отмены предварительного выбора пунктов меню uncheckInputs() и функций — обработчиков кликов по пунктам меню. Приведём часть этого блока — остальное будет по тому же принципу.
// Если выбрано время "утро". function checkMorning() { if (document.getElementById('morning').checked = true) { document.getElementById('fourth_form_filler').setAttribute('style', 'display: none;'); document.getElementById('fourth_form_evening').setAttribute('style', 'display: none;'); document.getElementById('fourth_form_morning').setAttribute('style', 'display: inherit;'); document.getElementsByTagName('textarea')[0].value += 'УТРО' + 'nn' + 'Ведущие: '; }; }; // Если выбрано время "вечер". function checkEvening() { if (document.getElementById('evening').checked = true) { document.getElementById('fourth_form_filler').setAttribute('style', 'display: none;'); document.getElementById('fourth_form_morning').setAttribute('style', 'display: none;'); document.getElementById('fourth_form_evening').setAttribute('style', 'display: inherit;'); document.getElementsByTagName('textarea')[0].value += 'ВЕЧЕР' + 'nn' + 'Ведущие: '; }; }; document.getElementById('morning').addEventListener('click', checkMorning); document.getElementById('evening').addEventListener('click', checkEvening);
Теперь самое сложное — прикрутить базу данных на IndexedDB. Грубо говоря, мы создадим в браузере пользователя локальное хранилище.
Чтобы было удобнее, реализуем эту фичу отдельным модулем — и для начала в самый низ <body> вставляем обращение к файлу speakersDB.js:
<script src="speakersDB.js"></script>
Далее работаем в этом файле.
Вкратце алгоритм работы хранилища на IndexedDB выглядит следующим образом: открыть базу, создать или открыть хранилище объектов (object store) с ключом, совершать с ним транзакции.
const dbName = 'База данных гостей эфира'; // Название базы данных. let openRequest = indexedDB.open(dbName, 1); // Открытие базы данных. console.log('Открытие базы данных...');
Где «1» — это версия базы.
У попытки открытия может быть три возможных результата: либо базы ещё нет (и её нужно создать), либо ошибка, либо успех. Отсюда — три разных обработчика.
Если хранилище объектов ещё не создано:
openRequest.onupgradeneeded = function() { let db = openRequest.result; if (!db.objectStoreNames.contains('Гости эфира')) { // Если хранилища 'Гости эфира' не существует... db.createObjectStore('Гости эфира', {keyPath: 'Name'}); // ...создаём хранилище. }; };
Если у нас ошибка:
openRequest.onerror = function() { console.error("Ошибка открытия базы данных.", openRequest.error); };
Самая длинная часть — если всё идёт по плану. База данных открыта — сначала ещё немного формальностей.
openRequest.onsuccess = function() { let db = openRequest.result; console.log('База данных успешно открыта.'); // Защита от повторного открытия вкладки. db.onversionchange = function() { db.close(); alert("База данных устарела, пожалуйста, перезагрузите страницу.") };
Дальше нужно записать в базу гостей «по умолчанию», сделать возможность ручного добавления и вывести данные из базы на страницу в блок «Спикеры» (шестая форма).
Начнём с автоматического добавления стартового списка.
// Запись в базу данных стартовых значений. // Объявление массива с гостями по умолчанию. let initialGuests = [ { Name: 'Никита Дубко', Post: 'Senior Frontend Developer, Google Developer Expert по Web', Telegram: '@dev_tip' }, { Name: 'Светлана Вронская', Post: 'Эксперт департамента аналитических решений ГК «КОРУС Консалтинг»', Telegram: '@analyticsnow' }, { Name: 'Евгений Некрасов', Post: 'DevOps-инженер кластеров и нейронных сетей', Telegram: '@ravino_doul_channel' }, { Name: 'Роман Душкин', Post: 'Автор и ведущий просветительского YouTube-канала «Душкин объяснит»', Telegram: '@drv_official' } ]; // Добавление гостей по умолчанию в базу, если их ещё там нет. for (let i = 0; i < initialGuests.length; i++) { let transactionWrite = db.transaction('Гости эфира', 'readwrite'); // Создание транзакции. let guests = transactionWrite.objectStore('Гости эфира'); // Получение хранилища объектов 'Гости эфира' для работы с ним. let addInitialGuest = guests.add(initialGuests[i]); // Добавление записи гостя в хранилище объектов. addInitialGuest.onsuccess = function() { console.log('Добавление в базу записи гостя по умолчанию: ' + initialGuests[i].Name); }; addInitialGuest.onerror = function() { console.log('В базе найдены записи по умолчанию.'); }; };
Теперь позаботимся о возможности вручную добавить гостя в базу, чтобы продюсер мог ввести ФИО, место работы и Telegram-канал и одним кликом добавить данные в хранилище.
Для этого понадобятся три формы ввода данных, кнопка добавления и привязанная к ней функция сбора введённых значений. Всё перечисленное нужно предварительно создать в памяти, а потом вставить в нужное место страницы.
// Вывод формы добавления в базу нового гостя. // Объявление функции добавления нового гостя нажатием на кнопку. function addingGuest() { let transactionWrite2 = db.transaction('Гости эфира', 'readwrite'); // Создание транзакции. let guests2 = transactionWrite2.objectStore('Гости эфира'); // Получение хранилища объектов 'Гости эфира' для работы с ним. let getUserInputName = document.getElementById('newGuestName').value; // Получение введённого пользователем имени нового гостя. let getUserInputPost = document.getElementById('newGuestPost').value; // Получение введённых пользователем должности и места работы нового гостя. let getUserInputTelegram = document.getElementById('newGuestTelegram').value; // Получение введённой пользователем ссылки на Telegram-канал нового гостя. let newGuestFromUser = { Name: getUserInputName, Post: getUserInputPost, Telegram: getUserInputTelegram }; // Добавление записи нового гостя в хранилище объектов. let addNewGuest = guests2.add(newGuestFromUser); addNewGuest.onsuccess = function() { console.log('Добавление в базу нового гостя: ' + newGuestFromUser.Name); }; addNewGuest.onerror = function() { console.log('Ошибка добавления в базу нового гостя.'); }; }; let newGuestNameInput = '<input type="text" id="newGuestName" name="newName" placeholder="Имя гостя" required minlength="5" size="30">'; let newGuestPostInput = '<input type="text" id="newGuestPost" name="newName" placeholder="Место работы/должность гостя" required minlength="5" size="30">'; let newGuestTelegramInput = '<input type="text" id="newGuestTelegram" name="newName" placeholder="Telegram-канал гостя (если есть)" minlength="5" size="30"><br>'; let newGuestNameLabel = '<label for="newGuestName">Добавить гостя в базу:</label><br>'; let newGuestButton = document.createElement('input'); newGuestButton.setAttribute('type', 'button'); newGuestButton.setAttribute('value', 'Добавить'); newGuestButton.addEventListener('click', addingGuest); let path2 = document.getElementById('sixth_form').getElementsByTagName('fieldset')[0]; path2.insertAdjacentHTML('beforeend', newGuestNameLabel); path2.insertAdjacentHTML('beforeend', newGuestNameInput); path2.insertAdjacentHTML('beforeend', newGuestPostInput); path2.insertAdjacentHTML('beforeend', newGuestTelegramInput); path2.append(newGuestButton); path2.insertAdjacentHTML('beforeend', '<br><br>Гости в базе:<br>');
Наконец, уже существующих в базе спикеров нужно вывести на страницу и предложить для выбора. Это другая транзакция, и делается она следующим образом.
// Вывод на страницу гостей из базы данных. let transactionRead = db.transaction('Гости эфира', 'readonly'); // Создание транзакции. let existingGuests = transactionRead.objectStore('Гости эфира'); // Получение хранилища объектов 'Гости эфира' для работы с ним. let readRequest = existingGuests.getAll(); readRequest.onsuccess = function(e) { console.log('ЧТЕНИЕ БАЗЫ ДАННЫХ'); console.log('В базе найдено ' + readRequest.result.length + ' гостей.'); // Перебор гостей в базе для уведомления в консоль и вывода на страницу. for (let eg = 0; eg < readRequest.result.length; eg++) { let printName = readRequest.result[eg].Name; // Получение ФИО. let printPost = readRequest.result[eg].Post; // Получение должности и места работы. let printTelegram = readRequest.result[eg].Telegram; // Получение ссылки на Telegram-канал. // Финальная строка с данными гостя (для вывода пользователю). let printGuest = printName + ', ' + printPost + ', ' + printTelegram; // Уведомление в консоль о найденном в базе пользователе. console.log('В базе найден гость ' + printGuest); // Вставка списка на страницу. let guestInput = document.createElement('input'); guestInput.type = 'checkbox'; guestInput.id = 'guest' + eg; guestInput.name = 'air_guest'; let guestLabel = document.createElement('label'); guestLabel.setAttribute('for', ['guest' + eg]); guestLabel.innerHTML = printGuest; // Добавление переноса строки после каждого гостя. let newLine = document.createElement('br'); let path = document.getElementById('sixth_form').getElementsByTagName('fieldset')[0]; path.append(guestInput); path.append(guestLabel); guestLabel.after(newLine); // Вставка функции выбора гостей к каждому пункту с именами гостей. for (g = 0; g < document.getElementsByName('air_guest').length; g++) { document.getElementsByName('air_guest')[g].addEventListener('click', checkGuest); }; }; }; };
На этом реализация закончена.
Убедиться в правильности работы хранилища можно двумя способами.
Во-первых, для этой цели у нас предусмотрены консольные уведомления о работе локального хранилища.
Скриншот: Skillbox Media
Во-вторых, на него можно взглянуть в браузерных инструментах разработчика на вкладке Приложение → Хранилище → IndexedDB (в Google Chrome) или Хранилище → IndexedDB (в Mozilla Firefox).
Скриншот: Skillbox Media
Скриншот: личный архив Евгения Колесникова
Наш эксперимент увенчался успехом, но это лишь первая бета-версия с самыми важными функциями. И к ней всегда можно добавить что-то ещё. Однако важнее другое: мы не использовали никаких фреймворков и сложных «продвинутых» языков. То есть для такого приложения достаточно относительно простых и известных каждому веб-разработчику инструментов (если не считать IndexedDB). А экономия времени получается колоссальная.
Учись бесплатно:
вебинары по программированию, маркетингу и дизайну.
Участвовать
Научитесь: Профессия Java-developer PRO
Узнать больше
Фаркушатова Анна Владимировна,
студентка гр. ПО(ПР)-111 ГОУ СПО КПК, г. Кемерово;
Руководитель: Мышкина Елена Петровна, преподаватель
ГОУ СПО КПК, г. Кемерово.
Разработка программного
продукта
«Электронное расписание
занятий»
Краткая
аннотация к статье.
Статья
описывает актуальность разработки данной программы, функциональное и
эксплуатационное назначение, информацию, содержащуюся в базе данных, подробно
описывается обоснование выбора системы управления базами данных.
Ключевые слова: база данных, программный
продукт,
назначение, система управления базами данных.
Программный продукт «Электронное расписание занятий»
разработан для учебной части ГОУ СПО «Кемеровский педагогический колледж» и предназначен
для составления расписания занятий, хранения и учета выданной преподавателем
нагрузки.
Актуальность данной программы заключается в том, что в
настоящее время все большее распространение находит компьютерная техника, все
шире становится перечень охватываемых ею задач. Постоянно растет объем и
сложность обрабатываемой информации, требуются все новые виды ее представления.
Работа сотрудников учебного отдела составляющих
расписание занятий в образовательной организации должна быть хорошо
организована. В настоящее время для того, чтобы найти информацию о свободных
аудиториях, занятости преподавателей и групп или составить изменения к
расписанию необходимо просмотреть большое количество документов.
Данная программа исключает совпадения нескольких групп
у одного преподавателя в одно и то же время, а также обеспечивает
автоматический подсчет выданной преподавателем нагрузки.
Объектом исследования является процесс разработки
программного продукта «Электронное расписание занятий».
Предметом исследования являются требования, в
соответствии с которыми разрабатывается программный продукт «Электронное
расписание занятий».
Программный продукт «Электронное расписание занятий»
представляет собой приложение к базе данных, которая содержит следующую
информацию:
1
Учебные
график группы;
2
Перечень
дисциплин;
3
Списки
групп, подгрупп;
4
Списки
аудиторий (корпусов);
5
Списки
преподавателей и мастеров производственного обучения;
6
Графики
занятости преподавателей;
7
Расписание
звонков.
Программный продукт обеспечивает возможность
выполнения следующих функций:
8
Ввод
и редактирование справочной информации;
9
Ввод
и редактирование учетной информации;
10 Формирование и печать отчетов;
11 Учет и хранение выданной нагрузки
преподавателей;
12 Составление расписания занятий.
Для разработки программного
продукта необходимо было выбрать инструментальное средство разработки БД.
Мною принималось во внимание
множество факторов. Но руководствуясь несколькими наиболее важными критериями,
к которым, в частности, относятся:
– тип модели данных, которую
поддерживает данная СУБД, её адекватность потребностям рассматриваемой
предметной области;
– характеристики
производительности системы;
– запас функциональных
возможностей для дальнейшего развития системы;
– степень оснащённости системы
инструментарием для персонала администрирования данными;
– удобство и надежность СУБД в
эксплуатации;
– стоимость СУБД и дополнительного
программного обеспечения.
Я остановилась на выборе СУБД MS Acсess, т.к. на сегодняшний день она является одной из популярных
настольных СУБД. Это связано с тем, что Access обладает очень широким
диапазоном средств для ввода, анализа и представления данных. Эти средства
являются не только простыми и удобными, но и высокопродуктивными, что
обеспечивает высокую скорость разработки приложений.
Кроме того, СУБД MS Access была
выбрана исходя из следующих функциональных возможностей:
– в ней обеспечивается эффективная
обработка больших объёмов информации;
– обеспечивает доступ ко всем
типам данных;
– имеется возможность
одновременного использования нескольких таблиц БД;
– несмотря на то, что Access
является мощной и сложной системой, его использование не сложно для
непрофессиональных пользователей;
– лёгкость создания таблиц при
помощи одного из трёх режимов: с помощью конструктора, с помощью мастера и
путём ввода данных;
– простота создания связей между
таблицами, с помощью «Редактора связей»;
– возможность создания форм с
помощью конструктора и мастера форм;
– наличие встроенного механизма
проверки целостности данных;
– СУБД Access позволяет создавать
различные отчёты на основе данных из таблиц и других объектов БД.
Access – мощное приложение к
Windows; впервые производительность СУБД органично сочетается с теми
удобствами, которые имеются в распоряжении пользователей Microsoft Windows.
Поскольку оба эти продукта – детища компании Microsoft, они прекрасно
взаимодействуют между собой. Система Access работает под управлением Windows,
так что при работе с ней пользователю доступны все преимущества Windows. Можно
вырезать, копировать и вставлять данные из любого приложения Windows в Access и
наоборот; можно создавать проект формы в Access и сохранить его как отчет.
В Access в полной мере реализовано
управление реляционными базами данных. Система поддерживает первичные и внешние
ключи и обеспечивает целостность данных на уровне ядра (что предотвращает
несовместимые операции обновления или удаления данных). Кроме того, таблицы в
Access снабжены средствами проверки допустимости данных, предотвращающими
некорректный ввод, независимо от того, как он осуществляется, а каждое поле
таблицы имеет свой формат и стандартные описания, что существенно облегчает
ввод данных. Access поддерживает все необходимые типы полей, в том числе
текстовый, числовой, счетчик, денежный, дата/время, МЕМО, логический,
гиперссылка и поля объектов OLE. Если в процессе специальной обработки в полях
не оказывается никаких значений, система обеспечивает полную поддержку пустых
значений.
Программный продукт «Электронное
расписание занятий» находится в процессе разработки. Тестирование и отладка
будет произведена в июне 2015 года.
Данный программный продукт можно будет использовать не
только в Кемеровском педагогическом колледже, но и в других образовательных
организациях, включая школы, лицеи и педагогические колледжи.