Программа по составлению расписания занятий в ВУЗеИсточник: habrahabr bya
Решил выложить описание и свою программу по составлению расписаний от 2001 года. В моём ВУЗе, на сегодняшний день, ей пользуются практически все крупные факультеты. Вкратце: она может быть и редактором и составлять расписание полностью автоматически или частично для выбранных элементов, сохраняет свои данные в формате Microsoft Access 2000, экспорт расписания групп, преподавателей и аудиторий в виде таблиц Microsoft Excel 2000 и сама написана с использованием MFC 4.2. Немножко историиДо 2001 года писал только программы связанные с научными вычислениями. Программирование графического интерфейса пользователя только смотрел, но не было реальных задач. Аналогично не учил, я по образованию механик, специализировался в аэрогидродинамике, и не знал ничего о СУБД, как построить с ними соединение или как сделать экспорт в Microsoft Excel. Не буду описывать все возникающие на работе пертурбации, но в их результате в совершенно инициативном порядке решил написать программу по составлению расписаний. Я понимал, что те программисты, которые есть в моей организации, ее никогда не сделают реально работающей, из-за ее довольно сложной логики. Для меня же был риск в программировании интерфейса пользователя, работа с СУБД и т.д. Поскольку испытываю просто патологическое неприятие продуктов фирмы Borland (опыт 3-х летний работы), решил ориентироваться на Microsoft. Linux-ом пользовался уже до этого 3-4 года, но там в тот момент времени не было стандартного GUI и нужно было бы ставить его на рабочие места, что еще большая проблема. Разработка заняла реального времени примерно 2 месяца. При написании, из-за сложной логики, очень активно использовались Тройки Хоара. Ниже описание самой программы и мои предложения. Начальные сведенияПрограмма предназначена для автоматизации процесса составления расписаний занятий в ВУЗах. Она обладает во-первых, возможностью редактирования расписания, а во-вторых его автоматической достройки. Интерфейс программы копирует стандартный проводник Windows. Это, кроме удобства представления информации на экране компьютера, позволяет пользоваться программой без специальной подготовки. Основные возможности:
Выдержанная идеология программы позволяет реализовать гораздо больше возможностей. Условия приобретенияДанная программа условно бесплатна. Платным является занесение в базу данных программы аудиторий (я в конце расскажу как обойти мою защиту). Это позволяет организовать эффективную защиту программы и не ограничивает её использование внутри учебного заведения. Организационная структураТипы окон и переходы между нимиПрограмма состоит из четырех базовых окон:
Переход между окнами может быть осуществлен с помощью меню. Или с помощью панели инструментов, выбирая иконку нужного окна кликом левой кнопки мыши. Панель инструментов можно включить с помощью меню. Окно предметовОкно предметов состоит из 5 областей. Первая область представляет собой собственно предметы, объединенные с помощью папок в иерархическую структуру. С каждым предметом связаны проводимые по нему занятия. Они представлены окном занятий. Ниже расположены связанные с выделенным занятием три окна, в которых находятся группы, преподаватели и аудитории. Окно группОкно групп состоит из 2 областей. Первая область представляет собой собственно группы, объединенные с помощью папок в иерархическую структуру и ссылок на группы, также представленные с помощью папок в виде иерархии. Справа от окна групп находится расписание занятий связанное с выделенной группой. Окно преподавателейОкно преподавателей также состоит из 2 областей. Первая область представляет собой собственно преподавателей, объединенные с помощью папок в иерархическую структуру и ссылок на преподавателей, также представленные с помощью папок в виде иерархии. Справа от окна преподавателей находится расписание занятий связанное с выделенным преподавателем. Окно аудиторийОкно аудиторий состоит из 2 областей. Первая область представляет собой собственно аудитории, объединенные с помощью папок в иерархическую структуру и ссылок на аудитории, также представленные с помощью папок в виде иерархии. Справа от окна аудиторий находится расписание занятий связанное с выделенной аудиторией. Ввод данныхВвод предметовПредметы группируются в папки, например по курсам: Создание и редактирование папок и предметов проводится с использованием контекстного меню. Для этого необходимо нажать правую кнопку мыши на выделенном элементе. Для копирования, перемещения и создания ссылок можно использовать контекстное меню или перетаскивая выбранный элемент мышкой. Если при перетаскивание нажать Ctrl, то если возможно будет создана копия элемента. В любой папке элементы упорядочиваются по алфавиту. Два разных элемента в папке не могут иметь одинаковое название. Если печатное название отсутствует, то выбирается в качестве печатного само название. Ввод занятийСоздание занятий возможно с помощью контекстного меню. Выделенный предмет в соседнем окне задает название занятия. После создания занятия (или занятий) с ним можно связать группу, преподавателя и аудитории (папку аудиторий) закрепленных за занятием. Связь устанавливается с помощью перетаскивания из расположенных ниже окон групп, преподавателей и аудиторий. При этом принимаются следующие правила. При перетаскивании папок проведение занятие устанавливается для для всех групп и преподавателей входящих в перетаскиваемые папки. Папка же аудиторий задает закрепленные за занятием предметы. При составлении расписания будет выбрана одна из аудиторий в папке. Двойной клик мыши, нажатие клавиш Enter или пробел приведут к выделению в нижних окнах связанных с занятием групп, преподавателей и аудиторий. Аналогичные изменения происходят также в связанных с ними окнами групп, преподавателей и аудиторий. Замечание С занятием необязательно связывать группы, преподавателей и аудитории. Любой из этих элементов может отсутствовать. Например неизвестно имя преподавателя, который будет проводит занятие. Ввод группГруппы можно условно разделить на два больших множества:
Рекомендуется организовать первую папку дублируя фактически организацию групп и подгрупп на факультете. При таком подходе достигается однозначность информации, а также имеется возможность легко поиска нужной группы. Например: В отличии от аудиторий и преподавателей, папки окрашенные в синий цвет означают разбиение на подгруппы. Папка с названием "Группы по предметам" содержит элементы четырех типов:
Ссылки позволяют группировать группы согласно их занятиям. Создание и редактирование папок и групп проводится с использованием контекстного меню. Для этого необходимо нажать правую кнопку мыши на выделенном элементе. Для копирования, перемещения и создания ссылок можно использовать контекстное меню или перетаскивая выбранный элемент мышкой. Если при перетаскивание нажать Ctrl, то если возможно будет создана копия элемента. В любой папке элементы упорядочиваются по алфавиту. Два разных элемента в папке не могут иметь одинаковое название. Если печатное название отсутствует, то выбирается в качестве печатного само название. Печатное название папки добавляется к имени группы. Ввод преподавателейПреподавателей можно разделить на две большие группы:
Рекомендуется организовать первую папку дублируя фактически организацию преподавателей в подразделения (кафедра, факультет). При таком подходе достигается однозначность информации, а также имеется возможность легко поиска нужного преподавателя. Например: Папка с названием "Преподаватели по предметам" содержит элементы трех типов:
Ссылки позволяют группировать преподавателей согласно их назначению или если они проводят вместе одно занятие. Например можно объединить заведующих кафедр в одну папку и назначить для них занятие "заседание ученого совета". Создание и редактирование папок и преподавателей проводится с использованием контекстного меню. Для этого необходимо нажать правую кнопку мыши на выделенном элементе. Для копирования, перемещения и создания ссылок можно использовать контекстное меню или перетаскивая выбранный элемент мышкой. Если при перетаскивание нажать Ctrl, то если возможно будет создана копия элемента. В любой папке элементы упорядочиваются по алфавиту. Два разных элемента в папке не могут иметь одинаковое название. Если печатное название отсутствует, то выбирается в качестве печатного само название. Печатное название папки добавляется к имени преподавателя. Ввод аудиторийАудитории также можно условно разделить на две большие группы:
Рекомендуется организовать первую папку дублируя фактически физическое расположение аудиторий. При таком подходе достигается однозначность информации, а также имеется возможность легко поиска нужной аудитории. Например: Данная возможность отсутствует в программе в связи с защитой от несанкционированного использования(я в конце расскажу как обойти мою защиту). Папка с названием "Аудитории по предметам" содержит элементы трех типов:
Ссылки позволяют группировать аудитории согласно их назначению. Например аудитория имея ссылку в папке "Практические" может использоваться для проведения практических занятий и имея ссылку в папке "Лекционные" может использоваться для чтения спецкурсов. В результате можно создавая папки с нужным названием с имитировать любые свойства находящихся в ней аудиторий. Создание и редактирование аудиторий и объединение их в папки запрещено в программе в связи с защитой от несанкционированного использования(я в конце расскажу как обойти мою защиту). Имеется возможность лишь внесения изменений в комментарий. Аудитории, переходы между которыми можно выполнить за перемену можно консолидировать. По умолчанию все аудитории консолидированы. Создание и редактирование папок проводится с использованием контекстного меню. Для этого необходимо нажать правую кнопку мыши на выделенном элементе. Для копирования, перемещения и создания ссылок можно использовать контекстное меню или перетаскивая выбранный элемент мышкой. Если при перетаскивание нажать Ctrl, то если возможно будет создана копия элемента. В любой папке элементы упорядочиваются по алфавиту. Два разных элемента в папке не могут иметь одинаковое название. Если печатное название отсутствует, то выбирается в качестве печатного само название. Печатное название папки добавляется к имени аудитории. Например печатное название "9 к. " добавится ко всем печатным именам аудиторий в "9 корпусе". Структура данныхСтруктура данных представлены в виде SQL совместимого с Microsoft Access.
Это был мой первый опыт создания реляционной БД. Составление расписанияНастройка параметровНастройка параметров влияющих на составление расписания осуществляется в главном меню. Данные параметры можно динамически изменять. Например если не удается составить расписание без окон у преподавателей, можно их разрешить. Выбор команды составить приведет к автоматическому составлению расписания для всех непоставленных занятий. Просмотр не поставленных занятий осуществляется аналогичным пунктом меню. Удалить все автоматически поставленные занятия командой очистить. Занятия поставленные в ручную должны очищаться в ручную. Варианты составленияВыбор команды составить приведет к автоматическому составлению расписания для всех не поставленных занятий. Просмотр не поставленных занятий осуществляется аналогичным пунктом меню. Удалить все автоматически поставленные занятия командой очистить. Занятия поставленные в ручную должны очищаться в ручную. Рекомендуется следующая тактика составления расписания. Сначала расставляются вручную занятия, постановка которых в расписание наиболее проблематична. Как правило это связанно с загруженностью аудиторного фонда, но возможно и с конкретным преподавателем или группой. Например занятия, которые связанны с потоковыми лекциями или занятиями в компьютерном классе. Затем происходит автоматическая достройка расписания при максимально выстроенных параметрах. Если не все занятия были поставлены, то просмотрев не поставленные и ослабив параметры составления можно попробовать достроить расписание. Если и это не помогает, можно выборочно очистить некоторые поставленные занятия, сделав возможным постановку не поставленных, а затем попробовать поставить удаленные из расписания занятия. Красными кружками отмечены запреты на определенные пары. Они могут быть по аудиториям, группам и преподавателям. Составление расписания для предметовРасписание для предметов можно составлять автоматически. Все операция вызываются контекстным меню, вызываемым правой кнопкой мыши. При данном на примере вызове будет сгенерированно расписание для 1 курса. Составление расписания для занятийРасписание для конкретного занятия можно составлять в ручную. Все операция вызываются контекстным меню, вызываемым правой кнопкой мыши. Составление расписания для группРасписание для групп можно составлять в ручную или автоматически. Для каждой группы можно задать запреты. Все операция вызываются контекстным меню, вызываемым правой кнопкой мыши. Следующее меню составляет расписание автоматически для всех групп и подгрупп входящих выделенную папку. Сохранение расписания в таблицах ExcelЭкспорт расписания осуществляется для выделенного элемента, например кафедры или папки 1 курса, через главное меню. Расписание соответственно сохраняется по группам преподавателям и аудиториям. Их названия присваиваются соответствующим листам Excel. Как обойти защитуЗащита основана на шифровании аудиторий поэтому программа содержит два exe-шника. Одним, как следует из его названия, нужно занести все аудитории, а затем пользоваться вторым. Мои предложенияВ 2002 исходники были потеряны, проблема с компьютером, но нисколько не жалею об этом. Я стараюсь жить по принципу: обращай вред в пользу. Меня давно просят усовершенствовать программу, но я страшно загружен по науке. Поскольку я бедный ученый, то должен эпизодически подрабатывать на стороне. Научные гранты это копейки и я их трачу только на командировки, на зарплату просто бессмысленно. На этой задаче толком не заработаешь, а время она отнимет много. Поэтому предлагаю следующие решение (набросок).
|