Метод создания рабочего расписания

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?вия зависят от значения переменной Choice

OptionsForm.Show

If Choice = 1 Then

Отображается диалоговое окно Входные данные модели, в котором

вводятся параметры модели

InputsForm.Show

Получение решения и вывод отчета

Call RunSolver CreateReport

Анализ чувствительности Sensitivity

Активизация листа Диаграмма, его отображение и вывод

информационного сообщения

Application.ScreenUpdating = True

With Sheets("Диаграмма")

.Visible = True

.Activate With

MsgBox "Необычное поведение диаграммы вызвано " _

& "существованием нескольких оптимальных " _

& "решений для текущей модели.", _

vbInformation, "Оптимальное решение" If Sub

 

9.3Код процедуры RunSolver

 

Процедура RunSolver отображает и активизирует лист Модель, а после этого запускает надстройку Поиск решения. Обратите внимание, что надстройка Поиск решения уже настроена (на этапе разработки приложения), поэтому для ее запуска достаточно выполнить функцию SolverSolve. Также удостоверьтесь, что проверка существования решения не выполняется, так как всегда существует возможность пригласить достаточное количество работников, чтобы обеспечить дневную потребность - просто это будет больше стоить для работодателя.

Sub RunSolver().ScreenUpdating = False Worksheets("Модель")

.Visible = True

.Activate Withuserfinish:=True Sub

 

9.4Код процедуры CreateReport

 

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

Sub CreateReport()i As Integer, Counter As Integer .ScreenUpdating = False

Отображение и активизация листа Отчет

With Worksheets("Отчет")

.Visible = True

.Activate With

Очистка данных, полученных при предыдущем запуске

With Range("CIO")(.Offset(1, 0), .Offset(1, 1) _

.End(xlDown)).ClearContents

End With

Передача данных с листа Модель на лист Отчет

Counter = 0 Range("C10")i = 1 То 21Range("Assignments").Cells(i) > 0 Then = Counter + 1

Сохранение дней недели и количества сотрудников

.Offset(Counter, 0) = _ ("Assignments").Cells(i).Offset(0, -2)

.Offset(Counter, 1) = _ ("Assignments").Cells(i) If

Next

End With("Al").Select Sub

9.5 Алгоритм процедуры вывода отчета (CreateReport)

 

Рисунок 9.1 - Алгоритм процедуры вывода отчета

 

9.6 Код процедуры Sensitivity

 

Процедура Sensitivity отображает и активизирует лист Модель, а также запускает надстройку Поиск решения 11 раз для получения равномерно распределенных значений максимального количества работников с несмежными выходными днями. Результат сохраняется в ячейках, расположенных под ячейкой АА1 (листа Модель). Так как с этими ячейками связана диаграмма, при изменении значений, она будет обновлена автоматически.

Public Sub Sensitivity() i As Integer .ScreenUpdating = False

Отображает и активизирует лист Модель

With Worksheets("Модель")

.Visible = True

.Activate With

Анализ 11 задач поиска максимального количества

сотрудников

For i = 1 То 11

Range("MaxPct") = (i - 1) * 0.1("Assignments") = 0 userfinish:=True

Сохранение результата в массиве, с которым связана уже

построенная диаграмма

With Range("AA1")

.Offset(i, 1) = Range("Nonconsec")

.Offset(i, 2) = Range("TotalWorkers") With Sub

 

9.7 Алгоритм процедуры анализа чувствительности (Sensitivity)

 

Рисунок 9.2 - Алгоритм процедуры анализа чувствительности

9.8Код процедуры GoToExplanation

 

Процедура GoToExplanation предназначена для упрощения навигации по листам. Она связана с соответствующими кнопками на листах Модель, Отчет и Диаграмма.

Public Sub GoToExplanation()

Запускается при щелчке на кнопке на любом листе,

кроме листа Описание. Она не только возвращает вас на первый

лист, но и скрывает остальные листы

Worksheets("Описание").Activate("Е4").Select("Модель").Visible = False("Отчет").Visible = False("Диаграмма").Visible = False Sub

Заключение

 

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

Для этого был использован MS Excel (в частности надстройка Поиск решения) и VBA. В условии нашего задания начальными данными являлись (рисунок 10):

 

Рисунок 10 - начальные данные задачи

 

Оптимальным решением задачи является (рисунок 11):

Рисунок 11 - оптимальное решение задачи

 

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

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