Как составить расписание занятий в вузе таблица

После поступления в универ первокурсник сталкивается с новыми понятиями: ему надо разобраться, что такое кафедра и деканат, познакомиться с уставом вуза и пр. Мы хотим облегчить жизнь студента, поэтому объясняем, что и как устроено в вузе. Сегодня расскажем, кто оставляет расписание в университете и какие правила для есть для его написания.

Нужна помощь?

Доверь свою работу кандидату наук!

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

Кто составляет расписание в вузе

Сначала ответим на самый главный вопрос — кто же занимается составлением расписания занятий в вузе. Как правило, за это отвечают сотрудники специального отдела — диспетчерской. Диспетчерская обычно входит в состав учебной части и в ней работают от 2 до 5 человек (в зависимости от структуры вуза).

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

Разработка расписания для осеннего семестра учебного года начинают в конце июля-начале августа, для весеннего — в декабре-январе.

Кстати! Для наших читателей сейчас действует скидка 10% на любой вид работы

Инструкция по составлению расписания занятия в вузе

Существуют определённые правила составления расписания в вузе:

  1. У студентов не может быть больше 4-х или меньше 2-х пар в день.
  2. Если дисциплина предусматривает и лекции, и лабораторные/практические, то сначала должны стоять именно лекции.
  3. Цикл занятий по дисциплине не должен заканчиваться лекционным занятием, если есть практические или лабораторные занятия.
  4. У групп одного потока должно быть одинаковое количество лекционных, практических и лабораторных занятий.
  5. «Окна» между парами крайне нежелательны (это значит, что у вас не может стоять, например, первая и третья пары, а вторая отсутствовать).
  6. Если в вузе несколько корпусов, допускается только один переход в день, остальные занятия должны стоять в одном корпусе.

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

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

Также сотрудники диспетчерской учитывают:

  • время начала и конца занятий;
  • наличие свободных аудиторий;
  • загруженность и распорядок преподавателей (у них тоже не может быть больше 4-х занятий в день).

Специфику предметов в расчёт обычно не принимают, поэтому бывают дни, загруженные сложными дисциплинами, а бывают и наоборот.

Программы для составления расписаний уроков в вузах

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

Программы для составления расписаний уроков в вузах

Хорошая программа для составления расписания в вузе

В некоторых учебных заведениях решение этой задачи автоматизировано: там используют специальные информационные системы и программы, например «1С:Автоматизированное составление расписания. Университет».

Посмотри примеры работ и убедись, что мы поможем на совесть!

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

Карина

Карина – противоречивая натура: любит фильмы Ларса фон Триера и песни Михаила Шуфутинского. В активе – два высших образования и тысяча прочитанных книг.

М. Менеджеров,
24 января 2022

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

Содержание:

  1. Цель составления расписания
  2. Важные критерии составления расписания
  3. Кто занимается составлением расписания
  4. Требования к расписанию в ВУЗе
  5. Программы для составления расписаний в ВУЗах

Цель составления расписания

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

  • регламентирует трудовой ритм;
  • способствует равномерному распределению учебной нагрузки учащихся;
  • обеспечивает работоспособность студентов и условия для их разносторонней деятельности;
  • влияет на творческую отдачу преподавателей.

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

Важные критерии составления расписания

При составлении расписания нужно учитывать многие критерии и ограничения, среди которых существенными являются:

  • сложность дисциплины и количество необходимых на ее изучение часов;
  • аудиторный фонд учреждения;
  • наличие необходимого для проведения занятий оборудования;
  • определенная нагрузка на учеников;
  • равномерное распределение нагрузки для преподавателей.

Важные критерии составления расписания

Кто занимается составлением расписания

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

Расписание для осеннего семестра составляется летом. Оно должно быть согласовано и подписано ректором до середины августа. На разработку плана для весеннего семестра выделяется время зимой. Как правило, расписание должно быть готово к концу января.

До составления расписания сотрудниками диспетчерского отдела собираются ведомости учебных поручений. В этих документах указаны:

  • дисциплины, по которым планируется проведение лекций в предстоящем семестре;
  • преподаватели, которые будут проводить занятия.

На основе этой информации специалисты диспетчерского отдела начинают организацию учебного процесса.

Кто составляет расписание

Требования к расписанию в ВУЗе

Чтобы расписание удовлетворяло требованиям и преподавательского состава, и студентов, нужно придерживаться следующих правил:

  • Минимальное количество пар в день – две, максимальное – четыре. Преподаватели вправе самостоятельно назначать дополнительные занятия. Они не учитываются в основном расписании.
  • Лекции должны проводиться в начале дня, а практические и лабораторные занятия – в конце.
  • Чтобы избежать переутомления студентов, нужно равномерно распределять нагрузку на каждую группу. Например, после лекции по сложной дисциплине должна идти пара по относительно легкому предмету.
  • В расписании студентов не должно быть «окон». Однако они приветствуются в распорядке рабочего дня преподавателей.
  • Желательно сделать так, чтобы в конце учебной недели, в пятницу, было минимальное количество лекций.
  • Чтобы успеваемость студентов не снижалась, на первые две пары в понедельник следует назначить лекции по максимально легкому предмету.
  • Если ВУЗ имеет несколько корпусов, нужно составить расписание лекций так, чтобы в день был лишь один переход в другое здание, особенно если они находятся далеко друг от друга.

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

Программы для составления расписаний в ВУЗах

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

Программы для составления расписаний в ВУЗах

Существует две наиболее популярные программы, которые используются для составления расписаний в ВУЗе. Это АВТОРасписание и aSc TimeTables. Обе программы можно использовать абсолютно бесплатно.

При использовании материалов сайта, обязательно указание активной ссылки на источник.

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

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

Функциональные возможности разрабатываемой книги Microsoft Excel рассчитаны на широкую категорию пользователей. В связи с тем, что все читатели знакомы с учебным процессом по школе, колледжу или вузу, перечисленные далее основные сервисные возможности разработки должны быть понятны:

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

Ввод начальной информации

Понятно, что рассматриваемая разработка требует некоторой начальной информации — о группах, аудиторном фонде и т. д. Фактически нам необходимы справочники по группам, аудиториям, преподавателям и еще ряду категорий. Такие данные заносятся на отдельный лист книги; один из вариантов его заполнения представлен на рис. 5.15.

Рис. 5.15. Лист, содержащий справочную информацию

Рис. 5.15. Лист, содержащий справочную информацию

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

В столбце D располагаются учебные дни в течение недели, а столбец Е отводится для времени начала занятий. Так, во второй строке этого столбца отображается время начала первого занятия, в третьей строке — начало второго занятия, и т. д.

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

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

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

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

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

Рис. 5.16. Организация листа Заявки

Рис. 5.16. Организация листа Заявки

Основное содержание листа Заявки — регистрация заявок на проведение учебных занятий и аудиторий, которые для этих занятий выделяются. Для этого в верхней части листа располагаются два элемента управления. О них мы поговорим позднее, но уже из надписей на кнопках понятны их функции.

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

  • начальная информация о занятиях (заявитель, преподаватель, день, время, группа, количество студентов в группе, название дисциплины и номера учебных недель, когда занятия должны проводиться);
  • информация об обслуживании данной заявки (обслужена ли она, и если да, то номер аудитории, выбранной для проведения занятия).

Алгоритм подбора аудитории составляет важную содержательную часть рассматриваемой разработки. Здесь учитывается вместимость аудитории и количество студентов.

Так, в каждой строке столбцы F и G отводятся для записи информации об обслуживании заявки (подобранной для нее аудитории). И если аудитория подобрана, то в столбец F программно записывается слово «да», а в следующий столбец вписывается номер аудитории. Фактически информация на первом листе представляет собой определенную базу данных.

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

В столбце Е для каждой заявки указывается количество студентов, которые учатся в данной группе. Эта информация вносится автоматически после выбора названия группы (вы уже видели, что на втором листе присутствует два связанных столбца — название группы и число студентов в ней). В столбцах, начиная с J, отмечаются недели, когда должны проводиться занятия по данной заявке. Звездочка в соответствующем столбце говорит о том, что на этой неделе занятие планируется. В дальнейшем для исключения лишних фрагментов мы ограничимся семью неделями учебного процесса.

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

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

Рассмотрим теперь элементы управления на рис. 5.16. Это две кнопки, которые на листе расположены в области первых двух строк. В табл. 5.1 приведены значения их свойств Name и Caption.

Таблица 5.1. Значения свойств кнопок, расположенных на листе Заявки

Name Caption
Input_New Ввод новой заявки
Input_Auditoria Подбор аудитории

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

Форма для ввода заявок

Форма, которую мы здесь рассмотрим, связана с вводом новой заявки на проведение занятий. Пользователю для вызова этой формы нужно просто щелкнуть на кнопке Ввод новой заявки. После этого автоматически выполняется предопределенная процедура, приведенная в листинге 5.20.

1
2
3
4
' Листинг 5.20. Обработка щелчка на кнопке Ввод новой заявки
Private Sub Input_New_Click()
    Form_Add.Show
End Sub

Здесь Form_Add — значение свойства Name формы, которую мы далее разработаем для ввода информации. Выполняется метод Show этой формы, который загружает ее в память и отображает на экране. Фактически для пользователя щелчок на кнопке ввода новой заявки приводит к появлению формы на экране. На рис. 5.17 представлена рассматриваемая форма ввода.

Рис. 5.17. Форма ввода заявок на занятия

Рис. 5.17. Форма ввода заявок на занятия

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

Таблица 5.2. Значения свойства Name полей со списками на рис. 5.17

Name Подпись
Boss Декан
Prepod Преподаватель
Day День
Time Время
Group Группа
Disp Дисциплина

В правой части формы расположено текстовое окно Количество студентов (Name — Col_Stud), в которое автоматически заносится информация о количестве студентов после выбора группы. Это обеспечивает процедура, представленная в листинге 5.21.

1
2
3
4
' Листинг 5.21. Обработка щелчка в поле со списком групп учащихся
Private Sub Group_Click()
Col_Stud.Text = Worksheets(2).Cells(Group.ListIndex + 2, 2).Value
End Sub

В верхней части формы присутствует набор элементов управления тина «Флажок». Каждый флажок предназначен для указания определенного номера недели, когда должно проводиться занятие. Значения свойства Name флажков формируются как комбинация символов Ch и номера недели: Chi, Ch2 и т. д. Здесь предполагается, что в учебном блоке не больше 7 учебных недель.

В нижней части формы располагаются три важные функциональные кнопки. При щелчке на кнопке Выход (Name — Com_Out) форма просто закрывается, и никакой записи информации в базу данных первого листа не производится. В листинге 5.22 приведен текст предопределенной процедуры для обработки щелчка на кнопке Выход. Метод Hide позволяет закрыть форму и вернуться на рабочий лист.

1
2
3
4
' Листинг 5.22. Обработка щелчка на кнопке Выход
Private Sub Com_Out_Click()
    Form_Add.Hide
End Sub

Другие две кнопки позволяют перенести на рабочий лист данные, внесенные пользователем в форму. При этом одна из кнопок (Зафиксировать и ввести следующую, Name — Com_Next) после записи оставляет форму активной, а другая (Name — Com_Wr_Out) закрывает ее. При активизации формы автоматически выполняется предопределенная процедура UserForm_Activate, а ее текст приведен в листинге 5.23. Основное ее назначение заключается в заполнении списков преподавателей, групп и т. д. Данные для заполнения берутся со второго листа, о чем уже говорилось.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
' Листинг 5.23. Процедура, выполняемая при активизации формы на рис. 5.17
Private Sub UserForm_Activate()
Ch1.Value = False
Ch2.Value = False
Ch3.Value = False
Ch4.Value = False
Ch5.Value = False
Ch6.Value = False
Ch7.Value = False
'Заполнение заявителей
N = 0
While Worksheets(2).Cells(N + 2, 6).Value <> ""
    N = N + 1
Wend
Boss.Clear
For i = 1 To N
Boss.AddItem Worksheets(2).Cells(i + 1, 6).Value
Next
'Заполнение преподавателей
N = 0
While Worksheets(2).Cells(N + 2, 7).Value <> ""
    N = N + 1
Wend
Prepod.Clear
For i = 1 To N
Prepod.AddItem Worksheets(2).Cells(i + 1, 7).Value
Next
' Заполнение учебных дней
N = 0
While Worksheets(2).Cells(N + 2, 4).Value <> ""
    N = N + 1
Wend
Day.Clear
For i = 1 To N
Day.AddItem Worksheets(2).Cells(i + 1, 4).Value
Next
'Заполнение начала пар
N = 0
While Worksheets(2).Cells(N + 2, 5).Value <> ""
    N = N + 1
Wend
Time.Clear
For i = 1 To N
Time.AddItem Worksheets(2).Cells(i + 1, 5).Value
Next
' Заполнение названий групп
N = 0
While Worksheets(2).Cells(N + 2, 8).Value <> ""
    N = N + 1
Wend
Group.Clear
For i = 1 To N
Group.AddItem Worksheets(2).Cells(i + 1, 8).Value
Next
' Заполнение названий дисциплин
N = 0
While Worksheets(2).Cells(N + 2, 10).Value <> ""
    N = N + 1
Wend
Disp.Clear
For i = 1 To N
    Disp.AddItem Worksheets(2).Cells(i + 1, 10).Value
Next
    Col_Stud.Text = ""
End Sub

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
' Листинг 5.24. Процедура щелчка на кнопке Зафиксировать и ввести следующую
Private Sub Com_Next_Click()
' Массивы для фиксации пересечений в занятиях
' по группам и преподавателям
Dim Mass(10) As Integer
Dim Mass2(10) As Integer
' Поле заявителя необходимо заполнить
If Boss.ListIndex = -1 Then
    MsgBox ("Выберите заявителя")
    Exit Sub
End If
' Поле преподавателя необходимо заполнить
If Prepod.ListIndex = -1 Then
    MsgBox ("Выберите преподавателя")
    Exit Sub
End If
' Поле для указания дня недели должно быть заполнено
If Day.ListIndex = -1 Then
    MsgBox ("Выберите день")
    Exit Sub
End If
' Поле для указания начала занятий должно быть заполнено
If Time.ListIndex = -1 Then
MsgBox ("Выберите время")
Exit Sub
End If
' Поле для указания группы должно быть заполнено
If Group.ListIndex = -1 Then
    MsgBox ("Выберите группу")
    Exit Sub
End If
' Необходимо выбрать дисциплину
If Disp.ListIndex = -1 Then
    MsgBox ("Выберите дисциплину")
    Exit Sub
End If
' Необходимо указать количество студентов
If IsNumeric(Col_Stud.Text) = False Then
    MsgBox ("Не указано количество студентов")
    Exit Sub
End If
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
' Запись информации на первый лист
Worksheets(1).Cells(N + 4, 1).Value = Boss.Text
Worksheets(1).Cells(N + 4, 2).Value = Prepod.Text
Worksheets(1).Cells(N + 4, 3).Value = Day.Text
Worksheets(1).Cells(N + 4, 4).Value = Time.Text
Worksheets(1).Cells(N + 4, 5).Value = Col_Stud.Text
Worksheets(1).Cells(N + 4, 8).Value = Group.Text
Worksheets(1).Cells(N + 4, 9).Value = Disp.Text
If Ch1.Value = True Then
    Worksheets(1).Cells(N + 4, 10).Value = "*"
    End If
If Ch2.Value = True Then
    Worksheets(1).Cells(N + 4, 11).Value = "*"
End If
If Ch3.Value = True Then
    Worksheets(1).Cells(N + 4, 12).Value = "*"
End If
If Ch4.Value = True Then
    Worksheets(1).Cells(N + 4, 13).Value = "*"
End If
If Ch5.Value = True Then
    Worksheets(1).Cells(N + 4, 14).Value = "*"
End If
If Ch6.Value = True Then
    Worksheets(1).Cells(N + 4, 15).Value = "*"
End If
If Ch7.Value = True Then
    Worksheets(1).Cells(N + 4, 16).Value = "*"
End If
Key = 0 ' Переменная-индикатор при наличии накладок в расписании
Ch_mass = 0
' Счетчик накладок по группам
Ch_mass2 = 0
' Счетчик накладок по преподавателям
' Цикл по заявкам
For it = 4 To 4 + N - 1
' Проверка преподавателя
    q1 = Worksheets(1).Cells(it, 2).Value 'Преподаватель
    q2 = Worksheets(1).Cells(it, 3).Value 'День
    q3 = Worksheets(1).Cells(it, 4).Value 'Время
    Zan_Pr = 0 ' Сброс индикатора занятости преподавателя
    If q1 = Worksheets(1).Cells(N + 4, 2).Value And _
    q2 = Worksheets(1).Cells(N + 4, 3).Value And _
    q3 = Worksheets(1).Cells(N + 4, 4).Value Then
    For Ned = 10 To 16
    If Worksheets(1).Cells(N + 4, Ned).Value <> "" _
        And Worksheets(1).Cells(it, Ned).Value <> "" Then
    Zan_Pr = 1 ' Преподаватель занят
    Exit For
End If
Next
If Zan_Pr = 1 Then
    Mass(Ch_mass) = it
    Ch_mass = Ch_mass + 1
    Key = 1 ' Отмечается факт противоречия в данных
    End If
    End If
'Проверка группы
    q1 = Worksheets(1).Cells(it, 8).Value
    q2 = Worksheets(1).Cells(it, 3).Value
    q3 = Worksheets(1).Cells(it, 4).Value
    Zan_Gr = 0
    If q1 = Worksheets(1).Cells(N + 4, 8).Value And _
    q2 = Worksheets(1).Cells(N + 4, 3).Value And _
    q3 = Worksheets(1).Cells(N + 4, 4).Value Then
    For Ned = 10 To 16
        If Worksheets(1).Cells(N + 4, Ned).Value <> "" And _
        Worksheets(1).Cells(it, Ned).Value <> "" Then
        Zan_Gr = 1
        Exit For
    End If
    Next
        If Zan_Gr = 1 Then
        Mass2(Ch_mass2) = it
        Ch_mass2 = Ch_mass2 + 1
        Key = 1 ' Отмечается факт противоречия в данных
        End If
        End If
    Next ' Завершение цикла по заявкам
If Key = 1 Then
    If Ch_mass > 0 Then ' Если есть противоречия по преподавателю
    Inform_str = "" ' Формирование информационной строки
    For i = 0 To Ch_mass - 1
    If Inform_str <> "" Then
    Inform_str = Inform_str + ","
    End If
    Inform_str = Inform_str + CStr(Mass(i))
    Next
    Inform_str = "Преподаватель занят. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
    End If
    If Ch_mass2 > 0 Then ' Накладка по группе
    Inform_str = "" ' Формирование информационной строки
        For i = 0 To Ch_mass2 - 1
            If Inform_str <> "" Then
                Inform_str = Inform_str + ","
                End If
                Inform_str = Inform_str + CStr(Mass2(i))
        Next
        Inform_str = "У группы уже есть занятие. Заявка в стр. " + Inform_str
        MsgBox (Inform_str)
        End If
' Выбор варианта действия пользователя
Inform = MsgBox("Если все равно записать заявку - Да. " + _
        " Если продолжить редактирование - Отмена. " + _
        " Если удалить, то нажмите - Нет. ", _
        vbYesNoCancel)
If Inform = vbNo Or Inform = vbCancel Then
' Удаление только что введенных данных
    For i = 1 To 16
    Worksheets(1).Cells(N + 4, i).Value = ""
    Next
End If
End If
End Sub

В начале процедуры подсчитывается количество уже имеющихся заявок на первом листе:

1
2
3
4
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend

Это делается для того, чтобы записать новую заявку в очередную свободную строку. Однако до этого проверяется, все ли данные введены: заявитель, преподаватель, группа и т. д. Что касается полей со списками, то для них индикатором выбора элемента в списке является значение свойства ListIndex (номер выбранного элемента): -1 означает, что в списке не выбран ни один элемент. Например, если не указан день, то следующая конструкция выводит соответствующее сообщение и процедура на этом завершается:

1
2
3
4
If Day.ListIndex = -1 Then
MsgBox ("Выберите день")
Exit Sub
End If

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

1
2
3
4
If IsNumeric(Col_Stud.Text) = False Then
MsgBox ("Введите число студентов")
Exit Sub
End If

Функция IsNumeric возвращает значение False, если входной параметр не является числом. Таким образом, если вместо количества студентов пользователь введет строку с включением букв или других символов, то процедура воспримет подобную информацию как некорректную.

Итак, мы рассмотрели так называемый блок предварительной проверки данных. Далее в процедуре располагается фрагмент, позволяющий выявить противоречия с уже имеющимися данными. Для этой проверки вводится переменная Key, которая в начале проверки принимает значение 0, а если в процессе просмотра имеющихся заявок обнаруживается накладка (по преподавателю или по группе), программно устанавливается в значение 1. Это является индикатором для вывода информационного сообщения в конце процедуры. Сама проверка технически достаточно проста — проверяется, есть ли в указанное время занятия в выбранной группе и у данного преподавателя. Однако несколько деталей мы все же поясним.

Так, в начале процедуры определены массивы Mass и Mass2. При вводе новой заявки процедура просматривает все предыдущие, проверяя, нет ли накладок в расписании по преподавателю и группе. Допустим, преподаватель может вести занятие для нескольких групп. Тогда при вводе новой заявки, если у преподавателя уже есть заявка на это время, в массиве Mass запоминается ее строка на первом листе книги, а в счетчик заявок Ch_mass добавляется 1. Например, если в результате просмотра всех имеющихся заявок в переменной Ch_mass будет число 5, это говорит о том, что у преподавателя в это время уже есть 5 других занятий (такое возможно при проведении занятия для нескольких групп одновременно). В конце процедуры на экран будет выведено одно сообщение с упоминанием обо всех этих заявках.

Массив Mass2 предназначен для проверки накладок по группе. Если у рассматриваемой группы yжe есть заявка на это время, то в массиве Mass2 запоминается номер строки этой имеющейся заявки, а в счетчик заявок Ch_mass2 добавляется 1. Например, если в результате просмотра всех имеющихся заявок в переменной Ch_mass2 будет число 1, это говорит о том, что у группы в это время уже есть другое занятие. В конце процедуры на экран выводится окно сообщения с упоминанием обо всех этих заявках. Фактически предназначение массивов — служить буфером для хранения информации, который очищается в начале процедуры.

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

1
2
3
Inform = MsgBox("Если все равно записать, то нажмите — Да. " + _
" Если продолжить редактировать, то нажмите — Отмена. " + _
" Если удалить заявку, то нажмите — Нет. ", vbYesNoCancel)

В этом месте процедуры на экран выводится стандартное диалоговое окно с кнопками Да, Нет и Отмена. В случае выбора варианта Отмена либо Нет выполняется очистка только что введенных данных на листе:

1
2
3
4
5
If inform = vbNo Or inform = vbCancel Then
For i = 1 To 16
Worksheets(1).Cells(N + 4, i).Value = ""
Next
End If

Таким образом, пользователь может отредактировать имеющуюся заявку в форме либо создать новую. А если накладок нет, то набранная заявка просто остается записанной на первом листе. На рис. 5.18 показан результат ввода одной из заявок на занятие.

Рис. 5.18. Заполненная заявка на проведение занятий

Рис. 5.18. Заполненная заявка на проведение занятий

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
' Листинг 5.25. Фрагмент процедуры щелчка на кнопке Зафиксировать и выйти
Private Sub Com_Wr_Out_Click()
If Key = 1 Then
    If Ch_mass > 0 Then ' Если есть противоречия по преподавателю
    Inform_str = "" ' Формирование информационной строки
    For i = 0 To Ch_mass - 1
    If Inform_str <> "" Then
    Inform_str = Inform_str + ","
    End If
    Inform_str = Inform_str + CStr(Mass(i))
    Next
    Inform_str = "Преподаватель занят. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
    End If
    If Ch_mass2 > 0 Then
' Накладка по группе
    Inform_str = "" ' Формирование информационной строки
        For i = 0 To Ch_mass2 - 1
            If Inform_str <> "" Then
                Inform_str = Inform_str + ","
            End If
            Inform_str = Inform_str + CStr(Mass2(i))
        Next
    Inform_str = "У группы уже есть занятие. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
End If
' Выбор варианта действия пользователя
Inform = MsgBox("Если все равно записать заявку - Да. " + _
    " Если продолжить редактирование - Отмена. " + _
    " Если удалить, то нажмите - Нет. ", _
    vbYesNoCancel)
If Inform = vbNo Or Inform = vbCancel Then
' Удаление только что введенных данных
    For i = 1 To 16
    Worksheets(1).Cells(N + 4, i).Value = ""
    Next
Else
Form_Add.Hide
End If
Else
Form_Add.Hide
End If
End Sub

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

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

Форма для подбора аудитории

В этом разделе мы рассмотрим один из наиболее интересных компонентов разработки — форму для подбора аудиторий для заявок на проведение учебных занятий. Сама форма с разнообразными элементами управления приведена на рис. 5.19, а для ее активизации на первом листе имеется кнопка с соответствующей надписью. В листинге 5.26 приведен текст процедуры, с помощью которой рассматриваемую электронную форму можно вывести на экран. Из текста видно, что в качестве значения свойства Name для формы подбора аудитории выбрано Form_Podbor.

1
2
3
4
' Листинг 5.26. Обработка щелчка на кнопке Подбор аудитории на первом листе
Private Sub Input_Auditoria_Click()
    Form_Podbor.Show
End Sub

Рис. 5.19. Форма подбора аудитории

Рис. 5.19. Форма подбора аудитории

Рассмотрим последовательно все основные расположенные на форме (рис. 5.19) элементы. В левом верхнем углу находится элемент управления типа ListBox (Name — Num_Str), а чуть выше располагается поясняющая подпись к нему — Номер строки. Этот список при активизации формы автоматически заполняется заявками, для которых еще не подобрана аудитория. Точнее не самими заявками, а номерами строк первого листа, где эти заявки расположены. В дальнейшем, выбрав (выделив) в списке номер заявки, мыс помощью специально разработанного алгоритма будем подбирать для нее подходящую аудиторию.

В левой части рис. 5.19 расположена группа элементов типа Label — они предназначены для отображения параметров заявки, выбранной в списке Num_Str. Эти элементы выделяются светлым цветом на фоне формы и снабжены поясняющими подписями. В табл. 5.3 приведены значения свойства Name элементов типа Label и соответствующие подписи.

Теперь перейдем к элементу управления Frame с подписью Поиск аудитории, который включает в себя несколько объектов. В верхней части этого условного контейнера объектов располагается кнопка Начать (Name — Begin_Poisk), щелчком на которой запускается алгоритм подбора аудитории для указанной в списке Num_Str заявки.

Таблица 5.3. Элементы управления Label для указания параметров заявок

Name Подпись
Boss Декан
Prepod Преподаватель
Day День
Times Время
Group Группа
Disp Дисциплина
Col_Stud Количество студентов

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

Продолжим обсуждение элементов, находящихся в рамке Поиск аудитории на форме. Элемент управления типа ListBox (Name — SpAyd), куда программная процедура записывает подходящие для заявки аудитории, расположен ниже кнопки Начать. Действия пользователя заключаются в указании конкретной аудитории в этом списке (щелчком мышью следует выделить одну из подходящих аудиторий). Элемент управления типа Label (Name — Inf_vmest), расположенный рядом с подписью Вместимость, используется для отображения вместимости выбранной аудитории в списке SpAyd. Теперь пользователю следует нажать кнопку Записать аудиторию (Name — Com_Write), что позволяет зафиксировать аудиторию, выбранную в списке, в строке заявки на первом листе.

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

В правой нижней части формы расположен элемент «Надпись» (Name — Inf_z), который предназначен для вывода информационных сообщений о наличии групповых заявок. Заполнение этого элемента производится при щелчке на списке Num_Str. В этом случае указывается, какие заявки комбинируются с выбранной. Таким образом, мы рассмотрели основные элементы управления, присутствующие на форме, и теперь можем перейти к описанию программного кода.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
' Листинг 5.27. Процедура, выполняемая при активизации формы подбора аудиторий
Private Sub UserForm_Activate()
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
N = N + 1
Wend
' Подсчет числа аудиторий
N_Rooms = 0
While Worksheets(2).Cells(N_Rooms + 2, 1).Value <> ""
N_Rooms = N_Rooms + 1
Wend
' Заполнение списка заявок
Num_Str.Clear
For i = 1 To N
Obslz = Worksheets(1).Cells(i + 3, 6).Value
If Obslz = "" Then
Num_Str.AddItem Worksheets(1).Cells(i + 3, 1).Row
End If
Next
'Заполнение списка аудиторий
If Num_Str.ListCount > 0 Then
Num_Str.ListIndex = Num_Str.ListCount - 1
End If
Com_Write.Enabled = False
End Sub

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
' Листинг 5.28. Процедура, выполняемая при щелчке на списке Num_Str
Private Sub Num_Str_Click()
Inf_z.Caption = "" 'Очистка информационного поля
Select_vibor = CInt(Num_Str.Text) 'Номер выделенной заявки
' Перенос информации о параметрах заявки на форму
Boss.Caption = Worksheets(1).Cells(Select_vibor, 1).Value
Prepod.Caption = Worksheets(1).Cells(Select_vibor, 2).Value
Day.Caption = Worksheets(1).Cells(Select_vibor, 3).Value
Times.Caption = Worksheets(1).Cells(Select_vibor, 4).Value
Col_Stud.Caption = Worksheets(1).Cells(Select_vibor, 5).Value
Group.Caption = Worksheets(1).Cells(Select_vibor, 8).Value
Disp.Caption = Worksheets(1).Cells(Select_vibor, 9).Value
Ned.Caption = ""
For i = 10 To 16
    If Worksheets(1).Cells(Select_vibor, i).Value <> "" Then
    Ned.Caption = Ned.Caption + CStr(i - 9) + ","
    End If
Next
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
N_Group = 0 ' Переменная для подсчета разных групп в одной аудитории
For i = 1 To N ' Основной цикл по заявкам
    Num = i + 3
    If Num <> Select_vibor Then ' Пропускаем выбранную заявку
    Prep = Worksheets(1).Cells(Num, 2).Value
    Day_Ned = Worksheets(1).Cells(Num, 3).Value
    Vre = Worksheets(1).Cells(Num, 4).Value
    Ob = Worksheets(1).Cells(Num, 6).Value
' Если у необслуженной заявки совпадают — день, время и преподаватель
    If Prep = Prepod.Caption And Day_Ned = Day.Caption And _
    Vre = Times.Caption And Ob = "" Then
    Zan = 0
    For j = 10 To 16
    If Worksheets(1).Cells(Num, j).Value = "*" And Worksheets(1).Cells(Select_vibor, j).Value = "*" Then
    Zan = 1 ' Если есть пересечение занятий
    Exit For
    End If
Next
If Zan = 1 Then
' Отмечаем информацию о совместных занятиях
    N_Group = N_Group + 1
    Mass_Group(N_Group) = Num
    End If
End If
End If
Next ' Завершение цикла по заявкам
' Выбранная завка сохраняется в элементе с нулевым индексом
Mass_Group(0) = Select_vibor
' Вывод информации о совместных заявках
If N_Group > 0 Then
    Inf_z.Caption = "Совместные заявки в строках "
    For i = 1 To N_Group
' Корректировка числа студентов
        Col_Stud.Caption = CInt(Col_Stud.Caption) + _
        Worksheets(1).Cells(Mass_Group(i), 5).Value
' Перечисление строк групповых занятий на 1-м листе
        Inf_z.Caption = Inf_z.Caption + Str(Mass_Group(i)) + ","
    Next
End If
End Sub

В начале процедуры в совокупность надписей на форме записывается информация о параметрах выбранной заявки. Например, строка Boss.Caption = Worksheets(1).Cells(Select_vibor, 2).Value заполняет поле заявителя на форме — элемент Label с именем Boss. Далее в цикле

1
2
3
4
5
For i = 10 To 16
    If Worksheets(1).Cells(Select_vibor, i).Value <> "" Then
    Ned.Caption = Ned.Caption + CStr(i - 9) + ","
    End If
Next

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

Для отслеживания групповых занятий в разделе General определяется счетчик количества групповых занятий (N_Group). Еще один массив предназначен для запоминания номеров строк заявок с общим одновременным занятием в одной аудитории (Mass_Group). На рис. 5.20 показана область описания общих переменных для рассматриваемой формы.

Рис. 5.20. Общие переменные формы подбора аудитории

Рис. 5.20. Общие переменные формы подбора аудитории

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

В процедуре Num_Str_Click основной цикл заключается в переборе всех необслуженных заявок на первом листе. В начале этой процедуры переменная N_Group устанавливается в 0, а при обнаружении такого же занятия (у того же преподавателя) в другой группе увеличивается на 1.

В результате, если у выбранной в списке Num_Str заявки находятся совместные, то информация о них выводится в элемент надпись, расположенный в нижней части формы:

1
2
3
4
5
6
7
8
If N_Group > 0 Then
Inf_z.Caption = "Совместные заявки в строках "
For i = 1 To N_Group
Col_Stud.Caption = CInt(Col_Stud.Caption) + _
Worksheets(1).Cells(Mass_Group(i), 5).Value
Inf_z.Caption = Inf_z.Caption + Str(Mass_Group(i)) + ","
Next
End If

Здесь производится суммирование количества студентов во всех объединяемых группах в надписи Col_Stud.

Таким образом, когда мы выделяем мышью в списке одну из заявок, то с помощью предопределенной процедуры, выполняемой по щелчку в списке Num_Str (с подписью Номер строки), выполняются следующие действия:

  • Заполняются информационные надписи на форме параметрами заявки.
  • Просматривается наличие групповых заявок, и если они есть, то в массив Mass_Group записываются номера строк, в которых эти заявки расположены на первом листе. Количество групповых заявок отображается в переменной N_Group.
  • Информация об имеющихся групповых занятиях выводится в информационную надпись в нижней части экрана.

Таким образом, в результате описанных действий мы подготовились к процедуре , выполняемой по кнопке Начать, которая запускает алгоритм поиска подходящих аудиторий для указанной заявки. Эта процедура Begin_Poisk_Click приведена в листинге 5.29, а далее мы прокомментируем ее основные моменты.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
' Листинг 5.29. Процедура, выполняемая при щелчке на кнопке Начать
Private Sub Begin_Poisk_Click()
Inf_vmest.Caption = ""
SpAyd.Clear
If Num_Str.ListIndex = -1 Then
    MsgBox ("Не выбрана заявка на занятие")
    Exit Sub
End If
' Подсчет числа аудиторий
Nom = 0
While Worksheets(2).Cells(Nom + 2, 1).Value <> ""
    Nom = Nom + 1
Wend
' Подсчет числа заявок
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To Nom ' Цикл по аудиториям
    Ayd = Worksheets(2).Cells(i + 1, 1).Value
' Проверка вместимости
    If Worksheets(2).Cells(i + 1, 2).Value >= CInt(Col_Stud.Caption)
Then
    SpAyd.AddItem Ayd
    End If
Next
End Sub

Например, на рис. 5.21 показано, что вместе с текущей заявкой есть еще одна — совместная (одно занятие для нескольких групп). В списке аудиторий приведен перечень подходящих для указанного занятия аудиторий (результат щелчка на кнопке Начать — в этом случае подбираются аудитории подходящие по вместимости для двух групп).

Рис. 5.21. Форма подбора аудиторий

Рис. 5.21. Форма подбора аудиторий

Так, в начале процедуры в листинге 5.28 проверяется, сделан ли выбор заявки, и если нет, то процедура завершается, так как обслуживать нечего:

1
2
3
4
If Num_Str.ListIndex.ListIndex = -1 Then
MsgBox ("Не выбран номер строки заявки")
Exit Sub
End If

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

1
If Worksheets(2).Cells(i + 1, 2).Value >= CInt(Col_Stud.Caption) Then,

где учитывается, что во втором столбце на втором листе указано количество мест в аудитории.

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

При щелчке на списке выполняется предопределенная процедура SpAyd_Click. Основное ее назначение — фиксация (для процедуры, выполняемой по щелчку на кнопке Записать аудиторию) конкретной аудитории для заявки, а также вывод информации о ее вместимости. Сама процедура приведена в листинге 5.30.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
' Листинг 5.30. Процедура, выполняемая при щелчке на списке SpAyd
Private Sub SpAyd_Click()
' Подсчет числа аудиторий на втором листе
N = 0
While Worksheets(2).Cells(N + 2, 1).Value <> ""
    N = N + 1
Wend
For i = 2 To N + 1
    If SpAyd.Text = Worksheets(2).Cells(i, 1).Value Then
' При нахождении выбранной аудитории на втором листе
    Inf_vmest.Caption = Worksheets(2).Cells(i, 2).Value
    Exit For
    End If
Next
Com_Write.Enabled = True
End Sub

Для рассматриваемой формы осталось рассмотреть процедуру записи информации на лист Заявки (листинг 5.31).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
' Листинг 5.31. Процедура, выполняемая при щелчке на кнопке Записать
Private Sub Com_Write_Click()
If SpAyd.ListIndex = -1 Then
    MsgBox ("Не выбрана аудитория")
    Exit Sub
End If
Select_vibor = CInt(Num_Str.Text)
Inf_vmest.Caption = "" ' Очистка информационного поля
' Запись информации на первый лист
For i = 0 To N_Group
    Worksheets(1).Cells(Mass_Group(i), 6).Value = "да"
    Worksheets(1).Cells(Mass_Group(i), 7).Value = SpAyd.Text
Next
Com_Write.Enabled = False ' Запрет доступа для записи
Num_Str.Clear ' Очистка списков
SpAyd.Clear
' Заполнение списка заявок
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
If CStr(Worksheets(1).Cells(i + 3, 6).Value) = "" Then
    Num_Str.AddItem Worksheets(1).Cells(i + 3, 1).Row
End If
Next
End Sub

Лист Расписание

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

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

Лист Потоки является вспомогательным и используется для задания потоков и групп, для которых мы намереваемся построить расписание занятий. Поэтому созданные нами ранее две группы объединим в общий поток и внесем в лист Потоки (рис. 5.22). Структура листа Потоки следующая: в первом столбце располагаются потоки, а последующих столбцах соответствующей строки — группы, входящие в поток.

Рис. 5.22. Организация листа Потоки

Рис. 5.22. Организация листа Потоки

Далее необходимо создать лист Расписание (рис. 5.23). Здесь три элемента управления: одна кнопка и два поля со списком. В полях со списком пользователю следует выбрать интервалы недель и затем щелкнуть на кнопке Заполнить. В результате на листе отобразится расписание для групп, указанных на листе Потоки.

Рис. 5.23. Организация листа Расписание

Рис. 5.23. Организация листа Расписание

На рис. 5.24 показан результат заполнения листа Расписание. И теперь разберем необходимые технические шаги для этого. Для работы с расписанием нам необходимо иметь заполненные списки недель. Данное заполнение мы выполним при активизации листа Расписание (листинг 5.32).

1
2
3
4
5
6
7
8
9
10
11
12
13
' Листинг 5.32. Процедура, выполняемая при активизации листа Расписание
Private Sub Worksheet_Activate()
N = 0
While Worksheets(2).Cells(N + 2, 3).Value <> ""
    N = N + 1
Wend
L1.Clear
L2.Clear
For i = 1 To N
    L1.AddItem Worksheets(2).Cells(i + 1, 3).Value
    L2.AddItem Worksheets(2).Cells(i + 1, 3).Value
Next
End Sub

Рис. 5.24. Формирование листа Расписание

Рис. 5.24. Формирование листа Расписание

Значения свойства Name элементов типа «Поле со списком» выберем L1 и L2 соответственно, а для кнопки Заполнить установим у аналогичного свойства значение Zapolnit. В листинге 5.33 приведена ключевая процедура, которая формирует заполнение листа Расписание.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
' Листинг 5.33. Процедура, выполняемая при щелчке на кнопке Заполнить
Private Sub Com_Start_Click()
Dim Mass(10) As Integer
' Очистка предыдущего расписания
Range("a5:AZ100").Select
Selection.ClearContents
Selection.Interior.ColorIndex = 0
' Подсчет числа потоков
NP = 0
While Worksheets("Потоки").Cells(NP + 2, 1).Value <> _
"" Or Worksheets("Потоки").Cells(NP + 2, 2).Value <> ""
NP = NP + 1
Wend
' Подсчет количества групп, входящих в поток
For i = 1 To NP
    Mass(i) = 0
    j = 0
    While Worksheets("Потоки").Cells(i + 1, j + 2).Value <> ""
    j = j + 1
    Wend
    Mass(i) = j
Next
' Подсчет числа аудиторий
N_Rooms = 0
While Worksheets("Нач. инф.").Cells(N_Rooms + 2, 1).Value <> ""
    N_Rooms = N_Rooms + 1
Wend
Sct = 0 ' Счетчик столбцов
'Заполнение названий групп и потоков
For i = 1 To NP
    Potok = Worksheets("Потоки").Cells(i + 1, 1).Value
    For j = 1 To Mass(i)
    Cells(5, Sct + 3).Value = Potok
    Cells(6, Sct + 3).Value = Worksheets("Потоки").Cells(i + 1, 1).Value
    Sct = Sct + 1
    Next
Next
' Подсчет числа дней
N_Days = 0
While Worksheets("Нач. инф.").Cells(N_Days + 2, 4).Value <> ""
N_Days = N_Days + 1
Wend
'Подсчет числа занятий в течение дня
N_Times = 0
While Worksheets("Нач. инф.").Cells(N_Times + 2, 5).Value <> ""
    N_Times = N_Times + 1
Wend
' Количество строк в расписании
DayTimes = N_Times * N_Days
' Заполнение первых двух столбцов
Stroka = 7
For i = 1 To N_Days
    For j = 1 To N_Times
    Cells(Stroka, 1).Value = Worksheets("Нач. инф.").Cells(i + 1, 4).Value
    Cells(Stroka, 2).Value = Worksheets("Нач. инф.").Cells(j + 1, 5).Value
    Stroka = Stroka + 1
    Next
Next
' Вычисление числа записей на первом листе
N = 0
While Worksheets("Заявки").Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
' Цикл по строкам первого листа
For i = 1 To N
    Days = CStr(Worksheets("Заявки").Cells(i + 3, 3).Value)
    Times = CStr(Worksheets("Заявки").Cells(i + 3, 4).Value)
    Group = CStr(Worksheets("Заявки").Cells(i + 3, 8).Value)
    Prepod = CStr(Worksheets("Заявки").Cells(i + 3, 2).Value)
    Disp = CStr(Worksheets("Заявки").Cells(i + 3, 9).Value)
    Aud = CStr(Worksheets("Заявки").Cells(i + 3, 7).Value)
    Obs = CStr(Worksheets("Заявки").Cells(i + 3, 6).Value)
    Indic = 0
' Попадает ли заявка в указанный интервал недель?
    For j = CInt(L1.Text) To CInt(L2.Text)
If CStr(Worksheets(1).Cells(i + 3, 9 + j).Value) = "*" Then
Indic = 1
    Exit For
    End If
Next
' Если заявка попадает в указанный интервал недель
If Indic = 1 Then
' Цикл по столбцам
For im = 1 To Sct
If Group = CStr(Cells(5, im + 2).Value) Or Group = CStr(Cells(6, im + 2).Value) Then
Stolbec = im + 2
For j = 1 To DayTimes
If CStr(Cells(6 + j, 1).Value) = Days And CStr(Cells(6 + j, 2).Value) = Times Then
    If Cells(6 + j, Stolbec).Value <> "" Then
    Cells(6 + j, Stolbec).Value = _
    Cells(6 + j, Stolbec).Value + Chr(10)
    End If
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + Disp + " "
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + Prepod
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + " Ауд." + Aud + Chr(10)
    For jj = CInt(L1.Text) To CInt(L2.Text)
    ask = CStr(Worksheets(1).Cells(i + 3, jj + 9).Value)
    If ask = "*" Then
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + " " + Str(jj) + ","
    End If
    Next
    End If
    Next
    End If
    Next
    End If
Next
Cvet1 = 35 ' Оформление цветом
Cvet2 = 40
Cell1= Cells(7, 1).Value
For i = 7 To 100
    Cel12= Cells(i, 1).Value
    If Cell1 <> Cell2 Then
    Vr_cvet = Cvet1
    Cvet1 = Cvet2
    Cvet2 = Vr_cvet
    End If
        Cel11= Cel12
    Rows(i).Select
    Selection.Interior.ColorIndex = Cvet1
Next
Range("A7").Select
End Sub

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

1
2
Range("A5:Z100").Select
Selection.ClearContents

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

1
2
3
4
5
NP = 0
While Worksheets("Потоки").Cells(NP + 2, 1).Value <> _
"" Or Worksheets("Потоки").Cells(NP + 2, 2).Value <> ""
NP = NP + 1
Wend

Затем в массиве Mass вычисляется, сколько групп в каждом потоке. Так, в элементе Mass (1) подсчитывается количество групп в первом выводимом в расписании потоке, в Mass (2) — во втором, и т. д. Процесс заполнения массива Mass выполняется следующим образом:

1
2
3
4
5
6
7
8
For i = 1 To NP
Mass(i) = 0
j = 0
While Worksheets("Потоки").Cells(i + 1, j + 2).Value <> ""
j = j + 1
Wend
Mass(i) = j
Next

Далее в пятую и шестую строки листа Расписание выводятся названия потоков и групп, для которых мы его составляем. Аналогичным образом в первые два столбца листа программно заносятся учебные дни и время начала занятий. После этого выполняется цикл но всем строкам на первом листе, и если при этом очередная заявка относится к одной из рассматриваемых групп, то она выводится в соответствующей ячейке (которая определяется днем, временем, группой либо потоком).

Если подвести некий промежуточный итог, то можно сказать следующее: мы имеем почти готовую версию расписания. На рис. 5.24 поля со списками позволяют выбрать интервал недель, для которого мы хотим составить расписание. Фактически на этом функциональные возможности листа можно было бы считать исчерпанными. Однако мы реализуем дополнительные сервисные возможности по вводу заявок. В большой доли случаев приходится копировать занятие по определенной дисциплине. Часто также приходится какие-то заявки удалять. Реализуем это с помощью дополнительных элементов управления. На рис. 5.25 добавлены:

  • кнопка Копировать (Name — Com_Copy);
  • кнопка Вставить (Name — Com_Paste);
  • кнопка Удалить (Name — Com_Delete);
  • текстовое окно (Name — Inform).

Рис. 5.25. Добавление элементов управления на лист Расписание

Рис. 5.25. Добавление элементов управления на лист Расписание

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
' Листинг 5.34. Процедура, выполняемая при щелчке на кнопке Копировать
Private Sub CommandButton4_Click()
NumRow = ActiveCell.Row
NumCol = ActiveCell.Column
Group = CStr(Cells(6, NumCol))
Days = CStr(Cells(NumRow, 1))
Times = CStr(Cells(NumRow, 2))
ColZaavok = 0
' Переменная для подсчета выделенных заявок
N = 0 ' Расчет числа заявок на 1-м листе
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
    Day1 = CStr(Worksheets(1).Cells(i + 3, 3).Value)
    Time1 = CStr(Worksheets(1).Cells(i + 3, 4).Value)
    Group1 = CStr(Worksheets(1).Cells(i + 3, 8).Value)
' Если параметры заявки совпадают
    If Time1 = Times And Day1 = Days And Group = Group1 Then
    For j = CInt(L1.Text) To CInt(L2.Text)
        Zan = Worksheets("Заявки").Cells(i + 3, 9 + j).Value
        If Zan = "*" Then
            ColZaavok = ColZaavok + 1
            MassZaavok(ColZaavok) = i + 3
            Exit For
        End If
        Next
    End If
Next
Inform.Text = ""
' Очистка текстового окна для сообщений
If ColZaavok > 0 Then
' Вывод номеров строк заявок в окно сообщений
    For i = 1 To ColZaavok
    Number.Text = Number.Text + Str(MassZaavok(i)) + ","
    Next
Else
    Number.Text = ""
End If
End Sub

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

Рис. 5.26. Описание переменной и массива в общей области

Рис. 5.26. Описание переменной и массива в общей области

Теперь необходимо разместить процедуру обработки щелчка на кнопке Вставить. Она представлена в листинге 5.35.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
' Листинг 5.35. Процедура, выполняемая при щелчке на кнопке Вставить
Private Sub Com_Paste_Click()
NewRow = ActiveCell.Row
NewCol = ActiveCell.Column
If Inform.Text = "" Then
    Exit Sub
End If
Ngroup = 0
While Worksheets(2).Cells(Ngroup + 2, 8).Value <> ""
    Ngroup = Ngroup + 1
Wend
For i = 1 To ColZaavok ' Цикл по числу скопированных заявок
    N = 0
    While Worksheets("Заявки").Cells(N + 4, 1).Value <> ""
    N = N + 1
    Wend
    Worksheets(1).Cells(N + 4, 1).Value = _
    Worksheets(1).Cells(MassZaavok(i), 1).Value
    Worksheets(1).Cells(N + 4, 2).Value = _
    Worksheets(1).Cells(MassZaavok(i), 2).Value
    Worksheets(1).Cells(N + 4, 3).Value = CStr(Cells(NewRow, 1))
    Worksheets(1).Cells(N + 4, 4).Value = Cells(NewRow, 2)
    For j = 1 To Ngroup
    If Worksheets(2).Cells(j + 1, 8).Value = Cells(6, NewCol) Then
        Exit For
    End If
    Next
    Worksheets(1).Cells(N + 4, 5).Value = Worksheets(2).Cells(ib + 1, 9).Value
    Worksheets(1).Cells(N + 4, 8).Value = CStr(Cells(6, NewCol))
    For m = 9 To 16
    Worksheets(1).Cells(N + 4, m).Value = Worksheets(1).Cells(MassZaavok(i), m).Value
    Next
    Cells(NewRow, NewCol).Value = _
    Cells(NewRow, NewCol).Value + Worksheets(1).Cells(N + 4,
    9).Value + _
    " " + Worksheets(1).Cells(N + 4, 2).Value + Chr(10)
    For l = CInt(L1.Text) To CInt(L2.Text)
    If CStr(Worksheets(1).Cells(i + 3, l + 9).Value) = "*" Then
    Cells(NewRow, NewCol).Value = _
    Cells(NewRow, NewCol).Value + " " + Str(l) + ","
    End If
    Next
Next
End Sub

Теперь мы можем легко добавить еще одно занятие. На рис. 5.27 добавлено еще одно занятие к показанным на рис. 5.24. Для этого мы сначала выделили ячейку D14 и щелчком на кнопке Копировать зафиксировали параметры заявки во внутренней структуре данных. После этого необходимо выделить ячейку D10 и щелкнуть на кнопке Вставить. В результате на первом листе сформируется новая заявка и мы ее увидим на листе Расписание.

Рис. 5.27. Выполнение изменений н расписании занятий

Рис. 5.27. Выполнение изменений н расписании занятий

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
' Листинг 5.36. Процедура, выполняемая при щелчке на кнопке Удалить
Private Sub Com_Delete_Click()
Dim Mass(10) As Integer
NumRow = ActiveCell.Row
NumCol = ActiveCell.Column
Group = CStr(Cells(6, NumCol))
Days = CStr(Cells(NumRow, 1))
Times = CStr(Cells(NumRow, 2))
ColZaavok = 0
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
If CStr(Worksheets(1).Cells(i + 3, 4).Value) = Times And _
Days = CStr(Worksheets(1).Cells(i + 3, 3).Value) _
And Group = CStr(Worksheets(1).Cells(i + 3, 8).Value) Then
    For j = CInt(L1.Text) To CInt(L2.Text)
    If Worksheets(1).Cells(i + 3, 9 + j).Value = "*" Then
    ColZaavok = ColZaavok + 1
    Mass(ColZaavok) = i + 3
    Exit For
    End If
    Next
End If
Next
Inform.Text = ""
For i = ColZaavok To 1 Step -1
	j = Mass(i)
    Worksheets(1).Rows(j).Delete
    Inform.Text = "Заявки удалены"
Next
Cells(NumRow, NumCol).Value = ""
End Sub

Лист Загрузка

Рассмотрим еще один лист, который дает представление о загрузке аудиторного фонда. Первый шаг заключается в несложном оформлении листа и создании двух элементов управления: поля со списком и кнопки (рис. 5.28).

Рис. 5.28. Организация листа Загрузка

Рис. 5.28. Организация листа Загрузка

Для заполнения номерок недель в поле со списком мы воспользуемся процедурой, выполняемой при активизации рассматриваемого листа.

1
2
3
4
5
6
7
8
9
10
11
' Листинг 5.37. Процедура, выполняемая при активизации листа Загрузка
Private Sub Worksheet_Activate()
N = 0
While Worksheets(2).Cells(N + 2, 3).Value <> ""
    N = N + 1
Wend
L1.Clear
For i = 1 To N
    L1.AddItem Worksheets(2).Cells(i + 1, 3).Value
Next
End Sub

Теперь пользователю необходимо выбрать интересующую его учебную неделю, после чего щелчок на кнопке Заполнить позволяет получить на листе информацию об использовании аудиторного фонда (рис. 5.29). Для этого необходимо оформить процедуру обработки щелчка на кнопке Заполнить в виде, представленном в листинге 5.38.

Рис. 5.29. Просмотр загрузки аудиторного фонда

Рис. 5.29. Просмотр загрузки аудиторного фонда

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
' Листинг 5.38. Процедура, выполняемая при щелчке на кнопке Заполнить
Private Sub Zapolnit_Click()
' Установка цветов для обозначения факультетов
Dim Colors(50) As Integer
Colors(1) = 4
Colors(2) = 22
Colors(3) = 19
Colors(4) = 24
Colors(5) = 26
For i = 6 To 50
    Colors(i) = 28
Next
If L1.ListIndex = -1 Then ' Выход, если не выбрана неделя
    MsgBox (" Не выбрана неделя ")
    Exit Sub
End If
Range("A5:AZ100").Select
' Очистка области данных
Selection.ClearContents
' Подсчет количества учебных дней в неделе
N_Day = 0
While Worksheets(2).Cells(N_Day + 2, 4).Value <> ""
    N_Day = N_Day + 1
Wend
' Подсчет количества занятий в течение дня
N_Times = 0
While Worksheets(2).Cells(N_Times + 2, 5).Value <> ""
    N_Times = N_Times + 1
Wend
' Подсчет количества аудиторий
N_Ayd = 0
While Worksheets(2).Cells(N_Ayd + 2, 1).Value <> ""
    N_Ayd = N_Ayd + 1
Wend
DaysTimes = N_Day * N_Times
N_Boss = 0 ' Подсчет заявителей
While Worksheets(2).Cells(N_Boss + 2, 6).Value <> ""
    N_Boss = N_Boss + 1
Wend
Range("B7:AZ100").Select
With Selection.Interior
' Заливка белым цветом области вывода
    .ColorIndex = 0
    .Pattern = xlSolid
End With
For i = 1 To 10
Cells(2, 2 + i * 2).Select
With Selection.Interior ' Установка обозначений цветов
.ColorIndex = colors(i) ' заявителей
.Pattern = xlSolid
End With
' Установка подписей заявителей для соответствующих цветов
Cells(1, 2 + i * 2).Value = Worksheets(2).Cells(i + 1, 6).Value
Next
' Подсчет количества строк с заявками на 1-м листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
Stroka = 7
' Данные на листе размещаются начиная с седьмой строки
For i = 1 To N_Ayd ' Установка подписей аудиторий
Cells(Stroka, 1).Value = Worksheets(2).Cells(i + 1, 1).Value
Stroka = Stroka + 1
Next
St = 1
For i = 1 To N_Day ' Установка подписей занятий
    For j = 1 To N_Times
    St = St + 1
    Cells(5, St).Value = Worksheets(2).Cells(i + 1, 4).Value
    Cells(6, St).Value = Worksheets(2).Cells(j + 1, 5).Value
    Next
Next
For i = 1 To DaysTimes
    For j = 1 To N_Ayd
    Cells(6 + j, i + 1) = 0 'Инициализация ячеек
    Next
Next
For i = 4 To N + 3 ' Цикл по строкам заявок
    If CStr(Worksheets(1).Cells(i, 6).Value) = "да" Then
' Выполнение условия по обслуживанию заявки
    Stroka = 0
    For m = 1 To N_Ayd
    If CStr(Worksheets(1).Cells(i, 7).Value) = _
    CStr(Cells(m + 6, 1).Value) Then
    Stroka = m + 6
    Exit For
    End If
    Next
If Stroka > 0 And _
CStr(Worksheets(1).Cells(i, CInt(L1.Text) + 9).Value) ="*" Then
' Если есть строка с указанной аудиторией
    For m = 1 To DaysTimes
' Нахождение столбца на листе для помещения заявки
    If CStr(Worksheets(1).Cells(i, 3).Value) = _
    CStr(Cells(5, 1 + m).Value) Then
    If CStr(Worksheets(1).Cells(i, 4).Value) = _
    CStr(Cells(6, 1 + m).Value) Then
        Stolbec = 1 + m
        Exit For
    End If
End If
Next
Nomer = 1
For l = 1 To N_Boss 'Определение заявителя в заявке
    If CStr(Worksheets(1).Cells(i, 1).Value) _
    = CStr(Worksheets(2).Cells(l + 1, 6).Value) Then
    Nomer = l
    Exit For
End If
Next
Cells(Stroka, Stolbec).Value = Cells(Stroka, Stolbec).Value + Worksheets(1).Cells(i, 5).Value
Cells(Stroka, Stolbec).Select
With Selection.Interior
    .ColorIndex = colors(nomer) ' Установка заливки
    .Pattern = xlSolid ' для ячейки
End With
End If
End If
Next
End Sub

Рассмотренный в данном разделе отчет позволяет компактно, с помощью различных цветных заливок ячеек, представить информацию об использовании аудиторного фонда заявителями (факультетами или руководителями программ). Численная информация, выводимая в ячейках листа, показывает соотношение вместимости аудитории и количества учащихся в группах студентов.

Какое расписание в вузе и как оно составляется


Дата: май 19, 2022 13:05


Просмотров: 1908

Расписание в вузе – это не тоже самое, что и в школе. И первокурсниками иногда бывает сложно разобраться в нем. Мы поможем вам в этом непростом деле и расскажем, кто и как составляет расписание занятий в вузе.

Кто и когда составляет расписание

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

Расписание на первый семестр разрабатывается в конце июля или в начале августа, на второй – в декабре или январе.

Правила составления расписания

Есть определенные правила, которых придерживаются при составлении расписания. Например:

  1. У студентов в день должно быть не менее 2 пар, но и не более 4.
  2. Если предмет включает в себя лекции с практическими, то в расписании сначала ставят лекции.
  3. Курс предмета не может оканчиваться лекцией, когда он включает лабораторные или семинары.
  4. У потока должно быть одинаковое число лекций и семинаров.
  5. Во время учебного дня допускается лишь один переход по корпусам во время большой перемены.
  6. Форточек быть не должно.

Все занятия сначала семестра начинаются с лекций на потоке, а потом подстраиваются под каждый курс. Также работники деканата учитывают такие параметры как:

  1. Наличие не занятых аудиторий.
  2. Загруженность преподавателя, который должен вести не более 4 пар.
  3. Время начала и окончания пар.

А вот специфику занятий не учитывают, поэтому не удивляйтесь, если в понедельник у вас будут все 4 пары сложные, а в пятницу – все простые.

Программы составления расписания

В каждом вузе своя методика и свои программы составления. Кому-то проще делать вручную, кому-то при помощи программы «1С: Автоматизированное составление расписания. Университет».

Расписание пар: пример

УПРАВЛЕНИЕ В СОЦИАЛЬНЫХ И ЭКОНОМИЧЕСКИХ СИСТЕМАХ

УДК 519.854.2

А. С. Хасухаджиев, И. В. Сибикина

ОБОБЩЕННЫЙ АЛГОРИТМ СОСТАВЛЕНИЯ РАСПИСАНИЯ В ВУЗЕ С УЧЕТОМ НОВЫХ ТРЕБОВАНИЙ ФЕДЕРАЛЬНЫХ ГОСУДАРСТВЕННЫХ ОБРАЗОВАТЕЛЬНЫХ СТАНДАРТОВ

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

Ключевые слова: формирование расписания, управление, требования, алгоритм.

Введение

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

Задача автоматизации управления учебным процессом в высшем учебном заведении ха-растеризуется [1]:

– большим объемом разнородной обновляемой информации из различных структурных подразделений вуза, таких как учебный отдел, деканаты, кафедры, отделы АСУ и информационной безопасности;

– сложностью формализации и идентификации параметров [2] и ограничений составляемого расписания, степень и качество учета которых полностью зависят от опыта и квалификации ответственного работника учебно-методического управления;

– конфликтом интересов основных участников учебного процесса: студентов и преподавателей, кафедр – как владельцев специализированного оборудования и аудиторий, что налагает ограничения на свободу их использования в расписании;

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

Ключевыми направлениями модернизации новых возможностей реализации образовательных программ являются:

– электронное обучение;

– дистанционные образовательные технологии;

– создание кафедр на производстве;

– создание условий для обучения лиц с ограниченными возможностями здоровья и многое другое [3, 4].

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

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

Анализ задачи теории расписания в современных условиях

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

Задачи составления расписания возникают в разных сферах деятельности:

– производство (упорядочение технологических операций по исполнителям и по времени);

– транспорт;

– образование (организация учебного процесса).

Задаче о составлении оптимального расписания в той или иной области посвящено довольно большое количество работ [1, 5-24], что говорит о ее сложности и практической значимости.

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

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

Решение задач теории расписаний усложняется тем фактом, что большинство из них являются NP-трудными [4], и алгоритмы их решения, реализованные на ЭВМ, должны быть адаптированы для получения приемлемого варианта за предельно допустимое время.

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

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

– расписание теоретических занятий (лекционных);

– расписание практических занятий (семинары, практики);

– расписание лабораторных занятий;

– расписание промежуточной аттестации (экзаменационной сессии);

– расписание ГИА (государственной итоговой аттестации);

– расписание ГАК (государственной аттестационной комиссии);

– расписание ликвидации академической задолженности;

– расписание консультаций студентов;

– расписание дистанционного общения со студентами, имеющими ограничения по здоровью.

Сбор входных данных

Исходными данными для составления расписания учебных занятий являются:

– компетентностно-ориентированный учебный план специальности;

– график учебного процесса;

– тарификационная нагрузка преподавателей на учебный год;

– виды учебных занятий (лекции, практические занятия, лабораторные работы);

– сведения об имеющемся аудиторном фонде и его оборудовании;

– данные о количестве студентов в учебных группах (подгруппах);

– распределение групп для практических занятий между преподавателями;

– мотивированные пожелания преподавателей.

Таким образом, в качестве исходной информации при составлении расписания учебных занятий выступают:

1. Множество дисциплин изучения (51, …, Будем считать, что дисциплины 51 и S2, ассоциированные с одним и тем же предметом, например предметом «Методы оптимизации», различаются по признаку «Тип занятия»: £1 – «Методы оптимизации – лекция»; 52 – «Методы оптимизации – лабораторная».

2. Множество учебных групп G …, GNg).

3. Множество преподавателей Т (Т1, …, Тю).

4. Множество аудиторий, имеющихся в распоряжении А (А1, …, А^).

5. Множество временных интервалов (пар) Р (Р1, …, .

6. Множество требований D (D1, …, DNd).

В вышеперечисленных множествах приняты следующие обозначения: N – число дисциплин обучения; – число учебных групп; ЫТ – число преподавателей; ЫА – число аудиторий; ЫР – число пар в течение семестра, причём пара представима в формате неделя.день.пара и их количество строго оговорено с учетом режима работы учреждения (пятидневка или шестидневка и др.) и определяется произведением числа дней в неделе (5 или 6), пар в течение дня (максимум 6) и количеством типов недель при формировании расписания (2 – четная и нечетная); – множество требований.

Такие элементы расписания, как ПРЕДМЕТ, АУДИТОРИЯ И ПРЕПОДАВАТЕЛЬ не равноценны по отношению друг к другу по разным причинам и могут быть проранжированы.

Например, в обеспечение требований новых федеральных государственных образовательных стандартов (ФГОС) доля работников из числа руководителей и работников организаций, деятельность которых связана с направленностью (профилем) образовательной программы, должна составлять не менее 10 %. Для них и сотрудников, совмещающих административные или другие должности, должны быть обеспечены «льготные» условия расписания в первую очередь.

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

Это означает, что актуальна и задача оценки качества расписания по построенной модели нагрузки преподавателей кафедры с учетом новых требований ФГОС.

Аудитории также могут различаться в зависимости от их соответствия:

– правилам и нормам безопасности;

– нормативам площадей;

– возможностям индивидуального доступа к сети Интернет;

– наличию свободного и лицензионного программного обеспечения;

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

Требования, предъявляемые к расписанию учебных занятий

К расписанию предъявляется множество требований. Требования при составлении расписания также ранжируются и делятся на основные и второстепенные.

К основным требованиям можно отнести следующие:

1. Отсутствие накладок.

2. Соответствие количества мест в аудитории количеству человек в группе.

3. Отсутствие «окон».

4. Соответствие аудитории типу занятия.

5. Обязательное проведение полного объёма занятий по учебному плану.

6. Ограничение на объём ежедневных занятий.

К второстепенным требованиям отнесём следующие:

1. Равномерность нагрузки студентов в течение всего семестра и конкретного учебного дня.

2. Минимизация переходов между аудиториями или корпусами.

3. Избыточность количества мест в аудитории по отношению к количеству учащихся.

4. Компактность нагрузки преподавателей.

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

countD,

к =

week

countP,

week

где countDweek – суммарное количество дней с аудиторными занятиями; соиШР^еек – суммарное количество пар в течение недели.

5. Периодичность расписания и т. д.

Обобщённая классификация требований к расписанию в вузе приведена на рис. 1.

Рис. 1. Классификация требований при составлении расписания Общие этапы процесса обработки данных для формирования расписания приведены на рис. 2.

Учебные планы

Требования ФГОС

Рис. 2. Диаграмма потоков данных

Требования к составлению расписания экзаменационных сессий и показатели качества при составлении расписания

Кроме требований, предъявляемых к расписанию учебных занятий, существует ряд требований к составлению расписания экзаменов:

1. Не менее 2 дней для подготовки к экзамену.

2. Не более 6 часов на экзамен для одной группы.

3. Не менее 2 часов на консультацию перед экзаменом.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

4. Экзаменов в году не более 8, зачётов не более 10.

5. Время на сдачу устного экзамена – не более 15 минут.

6. Время на сдачу комплексного экзамена – не более 23 минут на одного студента.

7. Время на сдачу письменного экзамена – не более 3 часов (академических).

8. Время на выполнение задания билета – не более 1 часа (академического).

9. Время консультации перед комплексным экзаменом – не менее 2 часов на дисциплину, входящую в программу экзамена.

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

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

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

Обзор существующих методов для решения задачи составления расписаний и имеющихся программных разработок

Задача составления расписания принадлежит классу NP-полных задач и может быть решена на базе таких различных подходов и методов, как:

– классические методы в терминах целочисленного линейного программирования или задачи о раскраске графа [8-11];

– метаэвристические методы – метод имитации отжига, генетические алгоритмы и др. [7, 12, 15, 17, 18];

– мультиагентные системы, метод решения по прецедентам [13-15].

Обобщенный алгоритм составления расписания

Систем для автоматического составления расписания достаточно много, например «Астра», «1С: ХроноГраф Расписание», «АВТОРасписание» и др.

Практика показывает, что среди существующих систем больше тех, которые используются для первоначальной расстановки предметов и элементов расписания (обычно от 40 до 70 %) с последующей ручной доработкой [25].

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

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

Так, опыт сотрудников учебного отдела показывает, что формирование расписания начинают с распределения предметов «первостепенных» – физкультура, иностранный язык и др.

Далее имеет место декомпозиция задачи составления расписания в зависимости от множества участников, включенных в текущее распределение.

Задача разбивается на части или, точнее, на ряд последовательно решаемых задач, при этом каждая задача, решенная на предыдущем шаге, является ограничением для задачи, подле-

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

Обобщённый алгоритм составления расписаний представлен на рис. 3 со следующими обозначениями: N – число дисциплин обучения; N – число учебных групп; N – число преподавателей; Na – число аудиторий; N – число пар в течение семестра; N – множество требований;

||Дк || – матрица разрешений:

10, /-я дисциплина не может проводиться в к-й аудитории, “к =11-

[1, /-я дисциплина может проводиться в к-й аудитории; – матрица запретов:

6.-, =

0, ,-й преподаватель не разрешает проводить занятие на I-й паре,

1, ,-й преподаватель разрешает проводить занятие на I-й паре.

К К

К порог, К порог

пороговые значения; Рпорог, Р порог – приоритеты дисциплин и преподавателей.

Определить матрицу разрешений НАЛ

Доработка расписания с учётом второстепенных требований

Оценка качества и выбор окончательного варианта

ы

Рис. 3. Обобщённый алгоритм составления расписаний

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

Заключение

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

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

СПИСОК ЛИТЕРА ТУРЫ

1. Об образовании в Российской Федерации: федер. закон от 29 декабря 2012 г. N 273-Ф3 (в ред. Федеральных законов от 07.05.2013 N 99-ФЗ, от 07.06.2013 N 120-ФЗ, от 02.07.2013 N 170-ФЗ, от 23.07.2013 N 203-Ф3, от 25.11.2013 N 317-Ф3, от 03.02.2014 N 11-ФЗ, от 03.02.2014 N 15-ФЗ, от 05.05.2014 N 84-ФЗ). N 273-ФЗ). URL. http://www.consultant.ru/document/cons_doc_LAW_140174/.

2. Об утверждении порядка организации и осуществления образовательной деятельности по образовательным программам высшего образования – программам бакалавриата, программам специалитета, программам магистратуры: приказ Минобрнауки России от 19.12.2013 N 1367. URL: http://www.garant.ru/ products/ipo/prime/doc/70503294/.

3. Hahn-Goldberg S. Defining, Modeling, and Solving a Real University Course Timetabling. URL: http://tidel.mie.utoronto.ca/pubs/Theses/hahn-goldberg.masc.pdf.

4. Конвей Р. В., Максвелл В. Л., Миллер Л. В. Теория расписаний. М.: Наука, 1975. 360 c.

5. Crainic T. G., Toulouse M. Parallel Meta-heuristics. Interuniversity Research Centre on Enterprise Networks, Logistics and Transportation (CIRRELT-2009-22). Canada, 2009. 51 p.

6. Burke E. K., Marecek J., Parkes A. J., Rudova H. A supernodal formulation of vertex colouring with applications in course timetabling // Annals of Operational Research. 2010. Vol. 179, No. 1. P. 105-130.

7. Kuhn F. Weak Graph Colorings: Distributed Algorithms and Applications // SPAA ’09 Proceedings of the twenty-first annual symposium on Parallelism in algorithms and architectures. 2009. P. 138-144.

8. Burke E. K., Marecek J., Parkes J., Andrew J., Rudova H. Penalising Patterns in Timetables: Novel Integer Programming Formulations. In: Operations Research Proceedings 2007. Berlin: Springer, 2008. P. 409-414.

9. Boehning R. L., Butler R. M., Gillett B. E. A parallel integer linear programming algorithm // European Journal on Operations Research. 1988. Vol. 34, iss. 3. P. 393-398.

10. Abdullah S., Hamdan A. R. A Hybrid Approach for University Course Timetabling // International Journal of Computer Science and Network Security. 2008. Vol. 8, No. 8. P. 127-131.

11. Babkin E., Abdulrab H., Babkina T. Agent Time: A Distributed Multi-agent Software System for University’s Timetabling. Ma Aziz-Alaoui & C. Bertelle (eds.). From System Complexity to Emergent Properties. Heidelberg, Springer, 2009. P. 141-154.

12. Autry B. M., Squire K. University course timetabling with probability collectives. URL: http://bosun.nps.du/ uhtbin/hyperion-image. exe/08Mar_Autry.pdf.

13. Burke E. K., Petrovic S., Qu R. Case-based heuristic selection for timetabling problems // Journal of Scheduling. 2006. Vol. 9, No. 2. P. 115-132.

14. Yu E., Sung K. S. A genetic algorithm for a university weekly course timetabling // International Transactions In Operational Research. 2002. Vol. 9. P. 703-717.

15. Nandhini M., Kanmani Dr. S. A Survey of Simulated Annealing Methodology for University Course Timetabling // International Journal of Recent Trends in Engineering. 2009. Vol. 1, No. 2. P. 255-257.

16. Kirkpatrick S., Gelatt C. D., Vecchi M. P. Optimization by Simulated Annealing // Science. New Series. 1983. Vol. 220, No. 4598. P. 671-680.

17. Давыдов С. В. Система автоматического построения расписания учебных занятий. URL: http: //davidovsv narod.ru/schedule/index. html.

18. Береговых Ю. В., Васильев Б. А., Володин Н. А. Алгоритм составления расписания занятий // Искусственный интеллект. 2009. № 2. С. 35-43.

19. Верёвкин В. И., Исмагилова О. М., Атавин Т. А. Автоматизированное составление расписания учебных занятий вуза с учётом трудности дисциплин и утомляемости студентов // Докл. Томск. гос. ун-та систем управления и радиоэлектроники. 2009. № 1 (19), ч. 1. С. 221-225.

20. Балтак С. В., Сотсков Ю. Н. Построение расписаний учебных занятий на основе раскраски вершин графа // Информатика. 2006. № 3 (11). С. 56-69.

21. Кабальное Ю. С., Шехтман Л. И., Низамова Г. Ф., Земченкова Н. А. Композиционный генетический алгоритм составления расписания учебных занятий // Вестн. Уфим. гос. авиац. техн. ун-та. 2009. Т. 7, № 2 (15). С. 99-107.

22. Яндыбаева Н. В. Генетический алгоритм в задаче составления учебного расписания вуза // Современные наукоемкие технологии. 2009. № 1l. С. 97-98.

23. Соуса Ф., Алвес А. Полностью эвристическое расписание занятий, управляемое пожеланиями студентов // Науковi пращ Вшниц. нац. техн. ун-ту. 2009. № 2. С. 1-4.

24. Шишканова Т. А. Разработка методики построения автоматизированной системы управления учебным процессом. URL: http://www.giab-online.ru/files/Data/2013/12/366-372_SHishkanova_-_7_str.pdf.

25. Пиликов Н. П. Проблема полной автоматизации при составлении школьного расписания. URL: http://www.mnogosmenka.ru/pilikov/timetable.htm.

Статья поступила в редакцию 29.04.2016

ИНФОРМАЦИЯ ОБ АВТОРАХ

Хасухаджиев Апги Саид-Ахмадович – Россия, 414056, Астрахань; Астраханский государственный технический университет; аспирант кафедры информационных технологий; apti.has@gmail.com.

Сибикина Ирина Вячеславовна – Россия 414056, Астрахань; Астраханский государственный технический университет; канд. техн. наук; доцент кафедры информационной безопасности; isibikina@bk.ru.

A. S. Khasukhadzhiev, I. V. Sibikina

GENERALIZED ALGORITHM OF SCHEDULING IN THE UNIVERSITY TAKING INTO ACCOUNT THE NEW REQUIREMENTS OF THE FEDERAL STATE EDUCATIONAL STANDARDS

Abstract. The paper considers the process of scheduling in higher educational institutions and presents the classification of the types of schedules and the requirements in their drafting. The advantages and disadvantages of the modern approaches to automation of scheduling are analyzed, the data about the used mathematical models and algorithms are resented. The initial data necessary for scheduling the training classes are determined. A lot of indicators of the estimation of the schedule quality are specified, the ways of reduction of the criteria for simplification of the procedure of choosing the appropriate schedule are illustrated. The algorithm of task solution on scheduling is developed, the block-scheme of the algorithm generalizing different scientific studies on the topic is presented. It is stated that scheduling is not a single-step act, as during the training process the schedule can require to be specified to provide the replacement of the teachers when they are dismissed, absent due to the business trip or sick leave, i. e. the development of the data base for automatic generation of the schedules still remains an essential task.

Key words: scheduling, management, requirements, algorithm.

REFERENCES

1. Ob obrazovanii v Rossiiskoi Federatsii. Federal’nyi zakon ot 29 dekabria 2012 g. N 273-FZ v red. Feder-al’nykh zakonov ot 07.05.2013 N 99-FZ, ot 07.06.2013 N120-FZ, ot 02.07.2013 N170-FZ, ot 23.07.2013 N 203-FZ, ot 25.11.2013 N 317-FZ, ot 03.02.2014 N 11-FZ, ot 03.02.2014 N 15-FZ, ot 05.05.2014 N 84-FZ). Available at: http ://www.consultant.ru/document/cons_doc_LAW_140174/.

2. Ob utverzhdenii poriadka organizatsii i osushchestvleniia obrazovatel’noi deiatel’nosti po obrazovatel’nym pro-grammam vysshego obrazovaniia – programmam bakalavriata, programmam spetsialiteta, programmam magistratury. PrikazMinobrnaukiRossii ot 19.12.2013 N1367. Available at: http://www.garant.ru/products/ipo/prime/doc/70503294/.

3. Hahn-Goldberg S. Defining, Modeling, and Solving a Real University Course Timetabling. Available at: http: //tidel. mie. utoronto .ca/pub s/Theses/hahn-goldberg. masc.pdf.

4. Conway R. W., Maxwell W. L., Miller M. L. Theory of Scheduling. Addison-Wesley: New York, 1967. 304 p.

5. Crainic T. G., Toulouse M. Parallel Meta-heuristics. Interuniversity Research Centre on Enterprise Networks, Logistics and Transportation (CIRRELT-2009-22). Canada, 2009. 51 p.

6. Burke E. K., Marecek J., Parkes A. J., Rudova H. A supernodal formulation of vertex colouring with applications in course timetabling. Annals of Operational Research, 2010, vol. 179, no. 1, pp. 105-130.

7. Kuhn F. Weak Graph Colorings: Distributed Algorithms and Applications. SPAA ’09 Proceedings of the twenty-first annual symposium on Parallelism in algorithms and architectures. 2009. P. 138-144.

8. Burke E. K., Marecek J., Parkes J., Andrew J., Rudova H. Penalising Patterns in Timetables: Novel Integer Programming Formulations. In: Operations Research Proceedings 2007. Berlin: Springer, 2008. P. 409-414.

9. Boehning R. L., Butler R. M., Gillett B. E. A parallel integer linear programming algorithm. European Journal on Operations Research, 1988, vol. 34, iss. 3, pp. 393-398.

10. Abdullah S., Hamdan A. R. A Hybrid Approach for University Course Timetabling. International Journal of Computer Science and Network Security, 2008, vol. 8, no. 8, pp. 127-131.

11. Babkin E., Abdulrab H., Babkina T. Agent Time: A Distributed Multi-agent Software System for University’s Timetabling. Ma Aziz-Alaoui & C. Bertelle (eds.). From System Complexity to Emergent Properties. Heidelberg, Springer, 2009. P. 141-154.

12. Autry B. M., Squire K. University course timetabling with probability collectives. Available at: http://bosun.nps.du/uhtbin/hyperion-image.exe/08Mar_Autry.pdf.

13. Burke E. K., Petrovic S., Qu R. Case-based heuristic selection for timetabling problems. Journal of Scheduling, 2006, vol. 9, no. 2, pp. 115-132.

14. Yu E., Sung K. S. A genetic algorithm for a university weekly course timetabling. International Transactions In Operational Research, 2002, vol. 9, pp. 703-717.

15. Nandhini M., Kanmani Dr. S. A Survey of Simulated Annealing Methodology for University Course Timetabling. International Journal of Recent Trends in Engineering, 2009, vol. 1, no. 2, pp. 255-257.

16. Kirkpatrick S., Gelatt C. D., Vecchi M. P. Optimization by Simulated Annealing. Science. New Series, 1983, vol. 220, no. 4598, pp. 671-680.

17. Davydov S. V. Sistema avtomaticheskogo postroeniia raspisaniia uchebnykh zaniatii [System of automatic scheduling of classes]. Available at: http://davidovsv narod.ru/schedule/index.html.

18. Beregovykh Iu. V., Vasil’ev B. A., Volodin N. A. Algoritm sostavleniia raspisaniia zaniatii [Algorithm of scheduling]. Iskusstvennyi intellekt, 2009, no. 2, pp. 35-43.

19. Verevkin V. I., Ismagilova O. M., Atavin T. A. Avtomatizirovannoe sostavlenie raspisaniia uchebnykh zaniatii vuza s uchetom trudnosti distsiplin i utomliaemosti studentov [Automated scheduling of classes at the university taking into account the disciplines and students’ fatigue]. Doklady Tomskogo gosudarstvennogo un-iversiteta sistem upravleniia i radioelektroniki, 2009, no. 1 (19), ch. 1, pp. 221-225.

20. Baltak S. V., Sotskov Iu. N. Postroenie raspisanii uchebnykh zaniatii na osnove raskraski vershin grafa [Scheduling of classes based on colouring the heads of the graph]. Informatika, 2006, no. 3 (11), pp. 56-69.

21. Kabal’nov Iu. S., Shekhtman L. I., Nizamova G. F., Zemchenkova N. A. Kompozitsionnyi geneticheskii algoritm sostavleniia raspisaniia uchebnykh zaniatii [Compositional genetic algorithm of scheduling of classes]. Vest-nik Ufimskogo gosudarstvennogo aviatsionnogo tekhnicheskogo universiteta, 2009, vol. 7, no. 2 (15), pp. 99-107.

22. Iandybaeva N. V. Geneticheskii algoritm v zadache sostavleniia uchebnogo raspisaniia vuza [Genetic algorithm of scheduling at the university]. Sovremennye naukoemkie tekhnologii, 2009, no. 11, pp. 97-98.

23. Sousa F., Alves A. Polnost’iu evristicheskoe raspisanie zaniatii, upravliaemoe pozhelaniiami studentov [Complete heuristic scheduling directed by students’ preferences]. Naukovi pratsi Vinnits’kogo natsional’nogo tekhnichnogo universitetu, 2009, no. 2, pp. 1-4.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

24. Shishkanova T. A. Razrabotka metodiki postroeniia avtomatizirovannoi sistemy upravleniia uchebnym protsessom [Development of the method of designing the automated system of training process control]. Available at: http://www.giab-online.ru/files/Data/2013/12/366-372_SHishkanova_-_7_str.pdf.

25. Pilikov N. P. Problema polnoi avtomatizatsii pri sostavlenii shkol’nogo raspisaniia [Problem of full automation of school scheduling]. Available at: http://www.mnogosmenka.ru/pilikov/timetable.htm.

The article submitted to the editors 29.04.2016

INFORMATION ABOUT THE AUTHORS

Khasukhadzhiev Apti Said-Akhmadovich – Russia, 414056, Astrakhan; Astrakhan State Technical University; Postgraduate Student of the Department of Information Technologies; isibikina@bk.ru.

Sibikina Irina Vyacheslavovna — Russia, 414056, Astrakhan; Astrakhan State Technical University; Candidate of Technical Sciences; Assistant Professor of the Department of Information Security; isibikina@bk.ru.

Добавить комментарий