Создание математической модели расписания в ВУЗе

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 21.10.2011
Размер файла 191,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

18. Intel® «Обучение для будущего» при поддержке Microsoft ®: официальный Web-сайт программы.

19. decsupport@gmail.com. Поздняк Евгений Сергеевич, Попов Вадим Витальевич создатели программы «ДЕКАНАТ»

20. rapidshare.com/files/169086374/Dekanat_Free_Version.zip

21. http://www.rector.spb.ru

22. support@rector.spb.ru

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

«ДЕКАНАТ»

Возможности системы

· Подготовка и выполнение контроля учебного процесса студентов (формирование учебных планов, подготовка рабочих программ);

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

· Сопровождение процессов обучения студента в ВУЗ-е (переводы, отчисления, оценки, задолженности и т.д.);

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

· Формирование различных документов с поименным составом входящих в них преподавателей (заседаний комиссий, ведомостей и т.д.);

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

« РЕКТОР »

Ректор 3 - программа для составления расписания в средних школах.

Ректор-Школа - программа для составления расписания в средних школах с профильным обучением.

Программы позволяют быстро и удобно вводить все дисциплины, классы, нагрузки учителей, взаимосвязи уроков, кабинеты. Она позволяет создать группы, объединить несколько классов в один урок и иметь уроки, обучаемые через две недели. Возможно определить и большее количество учителей для одного урока. Мы можем выбрать точный интервал времени для каждой дисциплины, класса, кабинета и учителя. Например можно определить, что Математика не может быть 6-ым уроком, учительница Иванова не может обучать 6-ой урок во вторник и 3-ий в среду, и спортзал должен быть свободен в течение 4-ых и 5-ых уроков, так как в эти дни приходят тренироваться ученики спорт-школы. [ 21,22] Программа соблюдает все заданные условия:

· Число окон для учителей, ограничение максимального числа окон, ограничение дней, когда преподаватель может обучать.

· Равномерное распределение дисциплин в течений недели

· Проверка последовательности уроков полных и разделенных классов

· Размещение уроков в кабинеты

· И много больше ...

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

Ректор-ВУЗ - программа для составления расписания в ВУЗах.

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

СИСТЕМНЫЕ ТРЕБОВАНИЯ

Операционная система - MS Windows XP или MS Vista.

Объем оперативной памяти - 512 Мб или выше.

Свободное место на жестком диске - не менее 100 Мб.

Рекомендуемая глубина цвета, поддерживаемая видеокартой и монитором - 16 разрядов (бит) или больше.

Минимальное разрешение монитора - 1024 x 768.

Мышь - не менее двух кнопок.

Система АВТОР-2+

Система АВТОР-2+ предназначена для быстpого и удобного составления расписаний занятий и сопровождения их в течение всего учебного года. АВТОР-2+ - универсальная система. Есть несколько версий программы, рассчитанные на любые учебные заведения:

- сpедние и специализиpованные (математические, языковые и т.п.) школы, лицеи, гимназии;

- техникумы, училища и колледжи;

- ВУЗы с одним учебным корпусом;

- ВУЗы с несколькими учебными корпусами (с учетом переездов между корпусами).

АВТОР-2+ позволяет максимально облегчить и автоматизиpовать сложный тpуд составителей расписания. Система помогает легко стpоить, коppектиpовать и pаспечатывать в виде удобных и наглядных документов:

- pасписания занятий классов (учебных групп);

- расписания пpеподавателей;

- расписание аудиторий (кабинетов);

- учебные планы;

- тарификацию.

АВТОР-2+ имеет пpиятный дизайн и дpужеcтвенный сеpвис. Программа достаточно проста в освоении. Имеется подробное руководство, в котором описаны все возможности и способы работы с программой. Программа работает на любых IBM-совместимых компьютерах, начиная с 486DX с оперативной памятью 516Mb (и выше), занимает около 75 Mb на жестком диске. Операционная система: WINDOWS XP. Время работы зависит от размерности учебного заведения и мощности компьютера. Полный расчет и оптимизация расписания школы среднего размера (30 классов, 60 преподавателей, две смены) идет около 5 минут на компьютере типа Celeron-1700.

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

АВТОР-2+ позволяет:

- оптимизировать "окна" в расписании;

- учитывать требуемый диапазон дней/часов как для классов, так и для преподавателей;

- оптимально pазмещать занятия по кабинетам (аудиториям) с учетом особенностей классов, предметов, пpеподавателей и вместимости кабинетов;

- учитывать хаpактеp pаботы и пожелания как штатных сотpудников, так и совместителей-почасовиков;

- легко соединять ("спаpивать") несколько классов (учебных групп) в потоки пpи пpоведении любых занятий;

- pазделять классы пpи пpоведении занятий по иностранному языку, физической культуре, тpуду, информатике (и любым другим предметам) на любое количество подгрупп (до десяти!);

- вводить (помимо основных пpедметов) спецкуpсы и факультативы;

- оптимизировать равномерность и трудоемкость расписания.

По желанию заказчика АВТОР-2+ модифициpуется под условия конкретного учебного заведения.

Система “Расписание” ver 4.0 Москва - ЛинТех

Необходимо сразу же отметить, что программа “Расписание” ориентирована на составление школьного расписания, использование в ВУЗ`ах и колледжах возможно лишь с некоторыми оговорками. Составление расписания производится в рамках комплекса условий, которые определяются на шагах ввода исходных данных. Полный перечень возможных условий приведен ниже:

- Ограничен максимальный номер урока - т.е. количество уроков, максимально допустимое в день;

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

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

- Контроль окон в расписании преподавателей;

- Программа учитывает то обстоятельство, что классы могут произвольно объединяться и дробиться (классы могут объединяться в потоки или же дробиться на более мелкие подгруппы, причем эти подгруппы, в свою очередь, могут служить основой для объединения в более крупные группы. Пример: в школе №1859 есть 2 старших класса, но в каждом из этих классов есть две подгруппы по специализации, занятия по общеобразовательным предметам проводятся сразу для всего класса, а предметы по специализации - отдельно. Но поскольку подгруппы по специализации слишком малы, а преподавателей не хватает, по некоторым предметам подгруппы 11а и 11б также могут объединяться (например, на ин.яз.) - это усложняет обеспечении непрерывности расписания для классов (необходимо обеспечивать непрерывность расписания для каждой из подгрупп);

- Наличие нескольких смен - в этом случае отдельные классы должны приходить позже, чем группы первой смены, кроме этого, усложняется контроль окон в расписании преподавателей, если есть преподаватели, работающие в обе смены - в этом случае в расписании этих преподавателей их занятия необходимо “стягивать” вокруг пересечения смен;

- Условие привязки преподавателей к аудитории - отдельные преподаватели имеют “свою” аудиторию, в которой проводят все свои занятия;

- Наличие “плавающей” смены - когда время начала первого урока точно не определено, т.к. оно формируется динамически, в зависимости от освобождения связанных с соответствующим классов, преподавателей, аудиторий;

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

- Наличие комбинированных предметов - типа “ин.яз./информатика” “информатика/труд” и т.п. - когда класс разбивается на подгруппы;

- Условие привязки предметов к аудиториям - проведения занятий по отдельным предметам возможно лишь в строго определенной аудитории или списке аудиторий (физкультура, труд и т.п.);

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

- “Выдержать параллели” - для некоторых преподавателей необходимо учитывать то обстоятельство, что для проведения занятий требуется длительная подготовка (например, занятия по химии), в этом случае занятия в дневном расписании преподавателя стараются поставить блоками параллелей, например, сначала 5-ые классы, затем 7-ые и т.п., или же при распределении между днями разнести занятия в разных параллелях на разные дни;

- Иногда при составлении расписания требуется учитывать тот нюанс, что по некоторым предметам расписание известно заранее -в этом случае такие занятия вводятся как неперемещаемые (фиксированные);

- Контроль запрещенных комбинаций предметов, приходящихся на один день расписания класса - например, нежелательно, чтобы “физическая культура” и “труд” проводились в один и тот же день;

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

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

- Необходимость расстановки занятий по отдельным предметам по два занятия подряд (“парами”, “спарками”), причем это условие может быть жестким (ни в коем случае не разрывать “спарки” занятий), а может носить предпочтительный характер (если не получается перемещать по два занятия, “спарку” можно разрывать);

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

Система “Методист”

Выпускается в двух версиях.

Версия virtual.

Выпускается без модуля автоматического составления расписания. Возможности версии virtual:

- быстрый поиск в списках преподавателей, аудиторий, классов (групп), дисциплин, корпусов;

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

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

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

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

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

- возможность просмотра, печати и редактирования готового расписания с проверкой корректности изменений (занятость ауд., преп., групп/подгрупп, ...);

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

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

- если обнаружена необходимость незначительного (до 10%) изменения исходных данных (обнаружены ошибки, внезапные дополнения), возможен повторный заказ модуля формирования расписания за незначительную плату;

- в любой момент можно перейти на версию стандарт;

Методист - стандарт.

Помимо возможностей версии virtual включает в себя:

- Модуль автоматического составления расписания;

- Распределение и контроль учебной нагрузки ;

- Учет методических рекомендаций и личных пожеланий преподавателей ("окна", метод. дни, теннис по четвергам, день рождения сына, ...);

- Cтрогое выдерживание последовательности прохождения дисциплины (лекции - 2 час., практические - 4 час., лабораторные ...);

- Составление расписания для любого типа учебного заведения: недельное или семестровое (от 1 до 23 недель);

- Учет объединения групп (классов) в потоки и/или разбиение их на подгруппы;

- Закрепление специальных аудиторий (компьютерные классы, лингафонные кабинеты, бассейн, ...);

- Учет занятости преподавателей и аудиторий (совместительство, использование общей учебной базы);

- Учет времени переходов между корпусами;

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

- Указание причин "неудачного назначения" занятий (занята аудитория, преподаватель назначен в нежелательный для него день недели) с возможностью их "ручного" исправления;

- Возможность многократного автоматического "улучшения" расписания;

- Возможность изменения значимости учитываемых при составлении расписания факторов;

- Возможность введения приоритетов преподавателей - степени учета их индивидуальных пожеланий;

Ограничения функциональности “Методиста”:

- многосменные расписания ограничены максимальным кол-вом уроков в день - 7;

- занятия всегда начинаются с первого урока / пары (при необходимости возможно назначение на первую пару "свободного занятия" );

- не учитывется время перемен (например для проверки возможности перехода между корпусами);

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

- продолжительность занятий постоянна (невозможно составление расписания для 30 мин. урока в младших и 45 мин. - в старших классах).

Приложение 2. Листинг программного модуля методов решения задачи автоматического составления расписания

iCurRow = iCurRow + 8

Next dDay

dbsDatabase.Close

'Все готово, показываем окошко

SetPageProperties xlPortrait

MyWindow.Visible = True

MyWindow.ActiveSheet.Range("A1").Select

End Sub

Sub Создать_Расписание()

Windows("Расписание.xlt").Visible = False

If Year(dSelectedDay) < 2000 Then

dSelectedDay = Now

End If

Set dbsDatabase = OpenDatabase(Workbooks("Расписание.xlt").Path & "/" & strDatabase)

Load ChooseLessonForm

PlaneItForm.Show vbModeless

'dbsDatabase.Close

End Sub

Sub Вставить_расписание()

Windows("Расписание.xlt").Visible = False

' запрашиваем дату

'res = MyDateInputBox()

'If Not IsEmpty(res) Then

' dSelectedDay = CDate(res)

'Else

' Exit Sub

'End If

Set MyWindow = ActiveWindow

'MyWindow.WindowState = xlMinimized

MyWindow.Visible = False

If Year(dSelectedDay) < 2000 Then

dSelectedDay = Now

End If

Rem Вставка расписания на текущую неделю из БД

Set dbsDatabase = OpenDatabase(Workbooks("Расписание.xlt").Path & "/" & strDatabase)

MakeMyTable

SetPageProperties

dbsDatabase.Close

MyWindow.Visible = True

'MyWindow.WindowState = xlMaximized

'MyWindow.Activate

MyWindow.ActiveSheet.Range("A1").Select

End Sub

Sub MakeMyTable()

' очистить все

MyWindow.ActiveSheet.Cells.Clear

' Заголовок расписания

MyWindow.ActiveSheet.Range("A1:AD1").ColumnWidth = 4.2

MyWindow.ActiveSheet.Range("A1:A62").RowHeight = 20

MergeCellsText "A2", "U2", "РАСПИСАНИЕ"

dStartWeekDay = dSelectedDay - Weekday(dSelectedDay, vbUseSystemDayOfWeek) + 1

MergeCellsText "A3", "U3", "занятий с " & FormatDateTime(dStartWeekDay, vbLongDate) & " по " & FormatDateTime(dStartWeekDay + 6, vbLongDate)

MergeCellsText "V1", "AB1", "УТВЕРЖДАЮ"

MergeCellsText "V2", "AB2", "начальник учебного отдела"

MyWindow.ActiveSheet.Range("W3").Formula = "подполковник"

MyWindow.ActiveSheet.Range("AA3").Formula = "В.Харичкин"

MyWindow.ActiveSheet.Range("Q50").Formula = "Старший ПНУО п/п-к"

MyWindow.ActiveSheet.Range("X50").Formula = "В.Гусельников"

Dim rstWeekday As Recordset

Dim fldHours As Field

Dim rstLessons As Recordset

Dim fldLong As Field

Dim fldName As Field

Dim fldTime As Field

Dim fldColor As Field

Dim sqlQuery As String

Dim iCurRow As Integer

Dim iCurCol As Integer

' первая часть расписания на 1-3 роты

iCurRow = 5

iCurCol = 1

For dDay = 1 To 7 'цикл по дням недели

If dDay = 4 Then

iCurRow = 29

iCurCol = 1

End If

' Запрос часов по дням

Set rstWeekday = dbsDatabase.OpenRecordset("SELECT * FROM Дни_недели WHERE день='" & WeekdayName(dDay) & "'")

Set fldHours = rstWeekday.Fields("Кол-во_часов")

iHours = fldHours.Value

rstWeekday.Close

'Заголовок для взводов

If dDay = 1 Or dDay = 4 Then

MyWindow.ActiveSheet.Cells(iCurRow, iCurCol).Value = "№"

With MyWindow.ActiveSheet.Cells(iCurRow + 1, iCurCol)

.Value = "взвод"

.Font.Name = "MS Serif"

.Font.Size = 8

End With

MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol).Value = "№"

With MyWindow.ActiveSheet.Cells(iCurRow + 17, iCurCol)

.Value = "взвод"

.Font.Name = "MS Serif"

.Font.Size = 8

End With

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow, iCurCol).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + 1).Address

End If

If dDay = 3 Or dDay = 7 Then

MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + iHours + 1).Value = "№"

With MyWindow.ActiveSheet.Cells(iCurRow + 1, iCurCol + iHours + 1)

.Value = "взвод"

.Font.Name = "MS Serif"

.Font.Size = 8

End With

MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours + 1).Value = "№"

With MyWindow.ActiveSheet.Cells(iCurRow + 17, iCurCol + iHours + 1)

.Value = "взвод"

.Font.Name = "MS Serif"

.Font.Size = 8

End With

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + iHours).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours + 1).Address

End If

' Расстановка часов по дням

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + 1, iCurCol + iHours).Address

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow + 17, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours).Address

For iHourCounter = 1 To iHours 'цикл по часам в дне dDay

MyWindow.ActiveSheet.Cells(iCurRow + 1, iCurCol + iHourCounter).Value = iHourCounter

MyWindow.ActiveSheet.Cells(iCurRow + 17, iCurCol + iHourCounter).Value = iHourCounter

Next

If dDay < 7 Then

MergeCellsText MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + iHours).Address, WeekdayName(dDay) & " - " & FormatDateTime(dStartWeekDay + dDay - 1, vbLongDate)

MergeCellsText MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours).Address, WeekdayName(dDay) & " - " & FormatDateTime(dStartWeekDay + dDay - 1, vbLongDate)

Else

MergeCellsText MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + iHours).Address, WeekdayName(dDay)

MergeCellsText MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours).Address, WeekdayName(dDay)

End If

' Расстановка взводов

For i = 1 To 3 'Роты

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + 2, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + i * 5 + 1, iCurCol + iHours).Address

With MyWindow.ActiveSheet.Range(MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + 2, iCurCol + 1).Address & ":" & MyWindow.ActiveSheet.Cells(iCurRow + i * 5 + 1, iCurCol + iHours).Address)

.Font.Name = "MS Serif"

.Font.Size = 6

End With

For j = 1 To 5 'Взвода

iPlatoon = 200 + 10 * i + j

If dDay = 1 Or dDay = 4 Then

MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j + 1, iCurCol).Value = iPlatoon

End If

If dDay = 3 Or dDay = 7 Then

MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j + 1, iCurCol + iHours + 1).Value = iPlatoon

End If

' Rem Поиск занятия в расписании

sqlQuery = "SELECT Предметы.Цвет, Предметы.Кратк_название & ' ' & План.Тема & '/' & IIF(АвтовставкаТем.Тема is not null,АвтовставкаТем.Тема,План.Занятие)& ' ' & План.Место_проведения AS Имя, План.Длина, Расписание.Время "

sqlQuery = sqlQuery & "FROM (((Расписание INNER JOIN План ON Расписание.Код_занятия=План.Код_занятия)"

sqlQuery = sqlQuery & "INNER JOIN Предметы ON План.Код_предмета=Предметы.Код_предмета)"

sqlQuery = sqlQuery & "LEFT JOIN [АвтовставкаТем] ON (Расписание.Дата=АвтовставкаТем.Дата AND Расписание.Код_занятия=АвтовставкаТем.Код_занятия))"

sqlQuery = sqlQuery & "WHERE Расписание.Дата=CDate('" & FormatDateTime(dStartWeekDay + dDay - 1, vbShortDate) & "') "

sqlQuery = sqlQuery & "AND Расписание.Взвод=" & Str(iPlatoon)

Set rstLessons = dbsDatabase.OpenRecordset(sqlQuery)

Do Until rstLessons.EOF

Rem занятие найдено, устанавливаем длину и название ячейки

Set fldName = rstLessons.Fields("Имя")

Set fldLong = rstLessons.Fields("Длина")

Set fldTime = rstLessons.Fields("Время")

Set fldColor = rstLessons.Fields("Цвет")

With MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j + 1, iCurCol + fldTime.Value)

MergeCellsText .Address, .Offset(0, fldLong.Value - 1).Address, fldName.Value расписание учебный информационный модель

If Not IsNull(fldColor) Then

If fldColor.Value > 0 Then MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j + 1, iCurCol + fldTime.Value).Interior.Color = fldColor.Value

End If

MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j + 1, iCurCol + fldTime.Value).WrapText = True

End With

rstLessons.MoveNext

Loop

rstLessons.Close

Next j

Next i

iCurCol = iCurCol + iHours

Next dDay

' вторая часть расписания на 4-6 роты

' Заголовок расписания

MyWindow.ActiveSheet.Range("A55:AD55").ColumnWidth = 4.2

MyWindow.ActiveSheet.Range("A55:A116").RowHeight = 20

MergeCellsText "A56", "U56", "РАСПИСАНИЕ"

dStartWeekDay = dSelectedDay - Weekday(dSelectedDay, vbUseSystemDayOfWeek) + 1

MergeCellsText "A57", "U57", "занятий с " & FormatDateTime(dStartWeekDay, vbLongDate) & " по " & FormatDateTime(dStartWeekDay + 6, vbLongDate)

MergeCellsText "V55", "AB55", "УТВЕРЖДАЮ"

MergeCellsText "V56", "AB56", "начальник учебного отдела"

MyWindow.ActiveSheet.Range("W57").Formula = "подполковник"

MyWindow.ActiveSheet.Range("AA57").Formula = "В.Харичкин"

MyWindow.ActiveSheet.Range("Q104").Formula = "Старший ПНУО п/п-к"

MyWindow.ActiveSheet.Range("X104").Formula = "В.Гусельников"

iCurRow = 59

iCurCol = 1

For dDay = 1 To 7 'цикл по дням недели

If dDay = 4 Then

iCurRow = 83

iCurCol = 1

End If

' Запрос часов по дням

Set rstWeekday = dbsDatabase.OpenRecordset("SELECT * FROM Дни_недели WHERE день='" & WeekdayName(dDay) & "'")

Set fldHours = rstWeekday.Fields("Кол-во_часов")

iHours = fldHours.Value

rstWeekday.Close

'Заголовок для взводов

If dDay = 1 Or dDay = 4 Then

MyWindow.ActiveSheet.Cells(iCurRow, iCurCol).Value = "№"

With MyWindow.ActiveSheet.Cells(iCurRow + 1, iCurCol)

.Value = "взвод"

.Font.Name = "MS Serif"

.Font.Size = 8

End With

MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol).Value = "№"

With MyWindow.ActiveSheet.Cells(iCurRow + 17, iCurCol)

.Value = "взвод"

.Font.Name = "MS Serif"

.Font.Size = 8

End With

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow, iCurCol).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + 1).Address

End If

If dDay = 3 Or dDay = 7 Then

MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + iHours + 1).Value = "№"

With MyWindow.ActiveSheet.Cells(iCurRow + 1, iCurCol + iHours + 1)

.Value = "взвод"

.Font.Name = "MS Serif"

.Font.Size = 8

End With

MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours + 1).Value = "№"

With MyWindow.ActiveSheet.Cells(iCurRow + 17, iCurCol + iHours + 1)

.Value = "взвод"

.Font.Name = "MS Serif"

.Font.Size = 8

End With

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + iHours).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours + 1).Address

End If

' Расстановка часов по дням

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + 1, iCurCol + iHours).Address

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow + 17, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours).Address

For iHourCounter = 1 To iHours 'цикл по часам в дне dDay

MyWindow.ActiveSheet.Cells(iCurRow + 1, iCurCol + iHourCounter).Value = iHourCounter

MyWindow.ActiveSheet.Cells(iCurRow + 17, iCurCol + iHourCounter).Value = iHourCounter

Next

If dDay < 7 Then

MergeCellsText MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + iHours).Address, WeekdayName(dDay) & " - " & FormatDateTime(dStartWeekDay + dDay - 1, vbLongDate)

MergeCellsText MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours).Address, WeekdayName(dDay) & " - " & FormatDateTime(dStartWeekDay + dDay - 1, vbLongDate)

Else

MergeCellsText MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow, iCurCol + iHours).Address, WeekdayName(dDay)

MergeCellsText MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + 18, iCurCol + iHours).Address, WeekdayName(dDay)

End If

' Расстановка взводов

For i = 4 To 6 'Роты

MakeFrameBorder MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 - 13, iCurCol + 1).Address, MyWindow.ActiveSheet.Cells(iCurRow + i * 5 - 14, iCurCol + iHours).Address

With MyWindow.ActiveSheet.Range(MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 - 13, iCurCol + 1).Address & ":" & MyWindow.ActiveSheet.Cells(iCurRow + i * 5 - 14, iCurCol + iHours).Address)

.Font.Name = "MS Serif"

.Font.Size = 6

End With

For j = 1 To 5 'Взвода

iPlatoon = 200 + 10 * i + j

If dDay = 1 Or dDay = 4 Then

MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j - 14, iCurCol).Value = iPlatoon

End If

If dDay = 3 Or dDay = 7 Then

MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j - 14, iCurCol + iHours + 1).Value = iPlatoon

End If

' Rem Поиск занятия в расписании

sqlQuery = "SELECT Предметы.Цвет, Предметы.Кратк_название & ' ' & План.Тема & '/' & IIF(АвтовставкаТем.Тема is not null,АвтовставкаТем.Тема,План.Занятие)& ' ' & План.Место_проведения AS Имя, План.Длина, Расписание.Время "

sqlQuery = sqlQuery & "FROM (((Расписание INNER JOIN План ON Расписание.Код_занятия=План.Код_занятия)"

sqlQuery = sqlQuery & "INNER JOIN Предметы ON План.Код_предмета=Предметы.Код_предмета)"

sqlQuery = sqlQuery & "LEFT JOIN [АвтовставкаТем] ON (Расписание.Дата=АвтовставкаТем.Дата AND Расписание.Код_занятия=АвтовставкаТем.Код_занятия))"

sqlQuery = sqlQuery & "WHERE Расписание.Дата=CDate('" & FormatDateTime(dStartWeekDay + dDay - 1, vbShortDate) & "') "

sqlQuery = sqlQuery & "AND Расписание.Взвод=" & Str(iPlatoon)

Set rstLessons = dbsDatabase.OpenRecordset(sqlQuery)

Do Until rstLessons.EOF

Rem занятие найдено, устанавливаем длину и название ячейки

Set fldName = rstLessons.Fields("Имя")

Set fldLong = rstLessons.Fields("Длина")

Set fldTime = rstLessons.Fields("Время")

Set fldColor = rstLessons.Fields("Цвет")

With MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j - 14, iCurCol + fldTime.Value)

MergeCellsText .Address, .Offset(0, fldLong.Value - 1).Address, fldName.Value

If Not IsNull(fldColor) Then

If fldColor.Value > 0 Then MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j - 14, iCurCol + fldTime.Value).Interior.Color = fldColor.Value

End If

MyWindow.ActiveSheet.Cells(iCurRow + (i - 1) * 5 + j - 14, iCurCol + fldTime.Value).WrapText = True

End With

rstLessons.MoveNext

Loop

rstLessons.Close

Next j

Next i

iCurCol = iCurCol + iHours

Next dDay

End Sub

Sub MakeFrameBorder(strStartCell, strEndCell, Optional wInsideVertical = xlThin)

'Изменение рамки вокруг блока (внутри тонкие, снаружи толстые)

Set MyRange = MyWindow.ActiveSheet.Range(strStartCell & ":" & strEndCell)

MyRange.Borders(xlDiagonalDown).LineStyle = xlNone

MyRange.Borders(xlDiagonalUp).LineStyle = xlNone

With MyRange.Borders(xlEdgeLeft)

.LineStyle = xlContinuous

.Weight = xlMedium

.ColorIndex = xlAutomatic

End With

With MyRange.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.Weight = xlMedium 'xlThin

.ColorIndex = xlAutomatic

End With

With MyRange.Borders(xlEdgeBottom)

.LineStyle = xlContinuous

.Weight = xlMedium

.ColorIndex = xlAutomatic

End With

With MyRange.Borders(xlEdgeRight)

.LineStyle = xlContinuous

.Weight = xlMedium

.ColorIndex = xlAutomatic

End With

With MyRange.Borders(xlInsideVertical)

.LineStyle = xlContinuous

.Weight = wInsideVertical

.ColorIndex = xlAutomatic

End With

With MyRange.Borders(xlInsideHorizontal)

' .LineStyle = xlContinuous

.Weight = xlThin

' .ColorIndex = xlAutomatic

End With

End Sub

Sub MergeCellsText(strStartCell, strEndCell, strText)

Rem Объединение ячеек и надпись строки по центру

With MyWindow.ActiveSheet.Range(strStartCell & ":" & strEndCell)

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlVAlignTop

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = True

.Formula = strText

End With

End Sub

Sub SetPageProperties(Optional Orient = xlLandscape)

'

' Настройки параметров страницы

'

With MyWindow.ActiveSheet.PageSetup

' .PrintTitleRows = ""

' .PrintTitleColumns = ""

' .PrintArea = ""

.Orientation = Orient

.LeftMargin = Application.InchesToPoints(0.4)

.RightMargin = Application.InchesToPoints(0.4)

.TopMargin = Application.InchesToPoints(0.4)

.BottomMargin = Application.InchesToPoints(0.4)

' .HeaderMargin = Application.InchesToPoints(0.5)

' .FooterMargin = Application.InchesToPoints(0.5)

' .PrintGridlines = False

' .PrintComments = xlPrintNoComments

' .PrintQuality = 600

.CenterHorizontally = True

.CenterVertically = True

' .Draft = False

.PaperSize = xlPaperA4

' .FirstPageNumber = xlAutomatic

' .Order = xlDownThenOver

' .BlackAndWhite = False

' .Zoom = 100

' .PrintErrors = xlPrintErrorsDisplayed

End With

End Sub

Sub SetPageProperties1(Optional Orient = xlLandscape)

'

' Настройки параметров страницы

'

With MyWindow.ActiveSheet.PageSetup

' .PrintTitleRows = ""

' .PrintTitleColumns = ""

' .PrintArea = ""

.Orientation = Orient

.LeftMargin = Application.InchesToPoints(0.4)

.RightMargin = Application.InchesToPoints(0.4)

.TopMargin = Application.InchesToPoints(0.4)

.BottomMargin = Application.InchesToPoints(0.4)

' .HeaderMargin = Application.InchesToPoints(0.5)

' .FooterMargin = Application.InchesToPoints(0.5)

' .PrintGridlines = False

' .PrintComments = xlPrintNoComments

' .PrintQuality = 600

.CenterHorizontally = True

.CenterVertically = False

' .Draft = False

.PaperSize = xlPaperA4

' .FirstPageNumber = xlAutomatic

' .Order = xlDownThenOver

' .BlackAndWhite = False

' .Zoom = 100

' .PrintErrors = xlPrintErrorsDisplayed

End With

End Sub

Sub SetPageProperties2(Optional Orient = xlLandscape)

'

' Настройки параметров страницы

'

With MyWindow.ActiveSheet.PageSetup

' .PrintTitleRows = ""

' .PrintTitleColumns = ""

' .PrintArea = ""

.Orientation = Orient

.LeftMargin = Application.InchesToPoints(0.4)

.RightMargin = Application.InchesToPoints(0.4)

.TopMargin = Application.InchesToPoints(0.4)

.BottomMargin = Application.InchesToPoints(0.4)

' .HeaderMargin = Application.InchesToPoints(0.5)

' .FooterMargin = Application.InchesToPoints(0.5)

' .PrintGridlines = False

' .PrintComments = xlPrintNoComments

' .PrintQuality = 600

.CenterHorizontally = True

.CenterVertically = False

' .Draft = False

.PaperSize = xlPaperA4

' .FirstPageNumber = xlAutomatic

' .Order = xlDownThenOver

' .BlackAndWhite = False

.Zoom = 80

' .PrintErrors = xlPrintErrorsDisplayed

End With

End Sub

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [1,6 M], добавлен 18.01.2012

  • Понятие математической модели, свойства и классификация. Характеристика элементов системы Mathcad. Алгоритмический анализ задачи: описание математической модели, графическая схема алгоритма. Реализация базовой модели и описание исследований MathCAD.

    реферат [1,0 M], добавлен 20.03.2014

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

    лабораторная работа [310,6 K], добавлен 13.02.2009

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

    реферат [42,1 K], добавлен 29.01.2010

  • Анализ математических алгоритмов решения задачи, постановка задач по критериям. Выбор программной платформы для создания системы и описание 1С:Предприятие 8. Функционал создания индивидуальных учебных планов, формирования и реорганизации учебных групп.

    дипломная работа [2,1 M], добавлен 13.10.2016

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

    дипломная работа [411,7 K], добавлен 22.03.2018

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

    курсовая работа [1,2 M], добавлен 31.05.2013

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

    дипломная работа [3,4 M], добавлен 18.02.2017

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

    курсовая работа [3,6 M], добавлен 26.09.2014

  • Разработка математической модели системы. Моделирование работы конвейера сборочного цеха в течении 8 часов. Определение вероятности пропуска секции. Расчет количества скомплектованных изделий за 8 часов. Исследование системы на имитационной модели.

    контрольная работа [98,3 K], добавлен 24.09.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.