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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 05.10.2013
Размер файла 1,8 M

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

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

ЛИТЕРАТУРА

1. Бронфман В. В., Дунин С. М., Шапиро М. А. Колебания. М.: ИНТ, 1997. 63 с.

2. Бояршинов М. Г. Математическое моделирование в школьном курсе Информатики // Информатика и образование. -- 1999. -- №. -- С. 13 -- 17.

3. Гречихин А.А., Древс Ю.Г. Вузовская учебная книга: Типология, стандартизация, компьютеризация. М.: Логос, 2000.

4. Заславский А.А. Использование стратегии расслоения переменных в общих задачах целочисленного линейного программирования // Экономика и мат. методы. 1997. Т. 33. Вып. 2.

5. Заславский А.А. Комбинированный метод решения задач о рюкзаке // Экономика и мат. методы. 1999. Т. 35. Вып. 1.

6. Закон об образовании (в ред. Федерального закона от 13.01.96 № 12-ФЗ)

7. Интернет-обучение: технологии педагогического дизайна / Под ред. кандидата педагогических наук М. В. Моисеевой. -- М.: Издательский дом «Камерон», 2004. -- 216 с.

8. Костюка Ю. Л. -- Томск,1989. -- 154С.

9. Кошкин Н. И. Ширкевич М. Г. “Справочник по элементарной дискретной математике”

10. Концепция модернизации российского образования на период до 2010 года (Приложение к приказу Министерства Образования России от 11.02.2002 №93)

11. Лагоша Б.А., Петропавловская А.В. Комплекс моделей и методов оптимизации расписания занятий в вузе // Экономика и мат. методы. 1993. Т. 29. Вып. 4.

12. Лебедев С.С. Модификация метода Бендерса частично целочисленного линейного программирования // Экономика и мат. методы. 1994. Т. 30. Вып. 2.

13. Лебедев С.С., Заславский А.А. Использование специального метода ветвей и границ для решения целочисленной обобщенной транспортной задачи // Экономика и мат. методы. 1995. Т. 31. Вып. 2.

14. Лебедев С.С. О методе упорядочивающей индексации целочисленного линейного программирования // Экономика и мат. методы. 1997. Т. 33. Вып. 2.

15. Лебедев С.С., Заславский А.А. Модифицированный метод пометок для задач булева программирования // Экономика и мат. методы. 1998. Т. 34. Вып. 4.

16. Мильчин А.Э. Издательский словарь-справочник. М.: Юристъ, 1998.

17. Мелихов А.Н., Берштейн Л.С. четкие и расплывчатые множества, ч.1,2 - Таганрог: ТРТУ, 1980, 1981.

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

...

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

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

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

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

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

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

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

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

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

  • Реализация информационно-справочной системы расписания поездов в Microsoft Visual Studio 2008 на языке C#. Методика разработки и основное содержание данной программы, алгоритмы ее реализации. Требования к программе и оценка ее эффективности, листинг.

    курсовая работа [5,0 M], добавлен 19.08.2012

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

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

  • Программная реализация на языке ЛИСП расписания встреч участников соревнования с использованием круговой и олимпийской системы проведения соревнований. Математические и алгоритмические основы решения задачи. Функциональные модели и блок-схемы решения.

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

  • Логическое проектирование и разработка общей концепции системы. Составление расписания приема специалистов. Обработка заявок от клиентов. Построение информационно-логической модели системы. Шаблон для стандартных страниц. Данные для доступа к базе.

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

  • Особенности написания базы данных на языках программирования C++, применимой для расписания занятий в университете. Этапы работы: ввод новой записи, изменение, просмотр базы данных, поиск данных. Алгоритмы, используемые в процессе выполнения проекта.

    практическая работа [16,6 K], добавлен 12.06.2010

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

    дипломная работа [101,2 K], добавлен 17.06.2011

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

    курсовая работа [215,3 K], добавлен 01.09.2010

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

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

  • Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.

    отчет по практике [296,1 K], добавлен 19.04.2015

  • Анализ современных информационных технологий цехового планирования. Разработка математической модели объекта проектирования. Формализация модели бизнес-процесса АРМа цехового плановика. Детальная разработка модулей программного продукта планирования.

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

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

    курсовая работа [65,4 K], добавлен 21.11.2013

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

    курсовая работа [81,7 K], добавлен 18.08.2014

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

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

  • Методы решения задач линейного программирования: планирования производства, составления рациона, задачи о раскрое материалов и транспортной. Разработка экономико-математической модели и решение задачи с использованием компьютерного моделирования.

    курсовая работа [607,2 K], добавлен 13.03.2015

  • Разработка концептуальной модели базы данных. Реализация алгоритмов и разработка управляющей программы. Разработка структуры системы управления данными. Методика проведения и результаты тестирования. Функционирование разработанного программного модуля.

    курсовая работа [550,5 K], добавлен 08.06.2023

  • Разработка СУБД - программного модуля для систематизации, хранения и обработки сведений о работниках лаборатории. Технологический процесс машинной реализации задачи, составление алгоритма, описание переменных процедур и функций. Листинг программы.

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

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