|
Критический путь: 1-5-6-10Результаты вычислений вручную и на ЭВМ совпадают.5.Описание интерфейса и руководство пользователяПри запуске Excel файла появляется стартовое окно, на котором располагаются 2 кнопки: «Начать работу» при нажатии на эту кнопку вызывается окно ввода начальных данных. «Выход» при нажатии на эту кнопку происходит закрытие программы и Excel. В окне ввода начальных данных пользователь задает число этапов работ (число должно быть целым в диапазоне от 3 до 254) В форме находятся 4 кнопки и флажок · «ОК» - формирование таблицы исходных данных и включение режима заполнения таблицы. · «Отмена» - закрытие формы · «Справка» - вызов справки о программе · «Пропустить» - переход к форме решения · «Включить подсказки» - включение поясняющих окон. После заполнения таблицы пользователь переходит к окну решения На котором располагаются 3 кнопки: · «Определение критического пути» - расчёт критического пути и сопутствующих данных и вывод результатов на экран. · «Возврат к вводу начальных данных» - открытие окна ввода начальных данных и листа ввода. · «Перевод единиц времени» - открытие окна перевода единиц времени в котором нужно выбрать текущие единицы времени и нажать кнопку «ОК», затем выбрать требуемые единицы времени и нажать кнопку «ОК». В результате выполнения работы был изучен алгоритм нахождения критического пути и составления таблицы сетевого графика. На основе алгоритма реализована программа, обеспечивающая графический интерфейс пользователя, табличный ввод данных и табличный вывод полученных результатов. Литература
1. Беляев С.П. Курс лекций по «Исследованию операций». 2. Кузменко В.Г, Программирование на Microsoft Visual Basic for Applications 2003 /Москва изд. Бином; 2004г. – 880 с.: ил. Листинг программы
Форма About (справка о программе) Private Sub UserForm_Terminate() Hide InsForm.Show End Sub Форма HelpForm1 (помощь в заполнении таблицы) Private Sub CommandButton1_Click() Hide OKForm.StartUpPosition = 0 OKForm.Top = 450 OKForm.Left = 580 OKForm.Show End Sub Private Sub CommandButton2_Click() Hide InsForm.Show End Sub Private Sub UserForm_Terminate() Hide InsForm.Show End Sub Форма HelpForm2 (помощь в понимании результатов вычислений) Private Sub CommandButton1_Click() check = True Hide SolForm.StartUpPosition = 0 SolForm.Top = 350 SolForm.Left = 480 SolForm.Show End Sub Private Sub CommandButton2_Click() check = False Hide SolForm.StartUpPosition = 0 SolForm.Top = 350 SolForm.Left = 480 SolForm.Show End Sub Форма HelpForm3 (помощь в переводе единиц времени) Private Sub CommandButton1_Click() check = True Hide SolForm.StartUpPosition = 0 SolForm.Top = 350 SolForm.Left = 480 SolForm.Show End Sub Private Sub CommandButton2_Click() check = False Hide SolForm.StartUpPosition = 0 SolForm.Top = 350 SolForm.Left = 480 SolForm.Show End Sub Форма InsForm (ввод количества этапов работ, проверка формата листа, проверка правильности ввода, вызов справки, выход из программы, переход к расчётной форме) 'Проверка правильности ввода Private Sub CommandButton1_Click() Dim Answer As String Application.ScreenUpdating = False If iget.Value = "" Then MsgBox "Введите количество этапов", vbCritical + vbOKOnly, "Ошибка ввода" Exit Sub End If If Not (IsNumeric(iget.Value)) Then MsgBox "Количество этапов работы должно быть числом", vbCritical + vbOKOnly, "Ошибка ввода" Exit Sub End If If iget.Value < 3 Then MsgBox "Количество этапов работы должно быть не менее 3", vbCritical + vbOKOnly, "Ошибка ввода" Exit Sub End If If iget.Value > 254 Then MsgBox "Количество этапов работы должно быть не более 222", vbCritical + vbOKOnly, "Ошибка ввода" Exit Sub End If n = Fix(iget.Value) 'Проверка листа на наличие информации For i = 1 To 254 For j = 1 To 254 If Not ActiveSheet.Cells(i, j).Value = "" Then Answer = MsgBox("Лист содержит информацию! При продолжении она будет уничтожена! Продолжить?", vbCritical + vbOKCancel, "Предупреждение") End If If Answer = vbCancel Then i = 254 j = 254 Exit Sub End If If Answer = vbOK Then i = 254 j = 254 End If Next j Next i 'Построение таблицы ввода и переход к ней Range("A1:IV254").Select Selection.Clear InsData Application.ScreenUpdating = True Hide If help.Value = True Then hlp = True HelpForm1.Show Else hlp = False OKForm.StartUpPosition = 0 OKForm.Top = 450 OKForm.Left = 580 OKForm.Show End If End Sub Private Sub CommandButton2_Click() Hide STF.Show End Sub Private Sub CommandButton3_Click() Hide About.Show End Sub Public Sub Start() iget.Value = n End Sub Private Sub CommandButton4_Click() Dim flag As Boolean Hide SolForm.StartUpPosition = 0 SolForm.Top = 350 SolForm.Left = 480 SolForm.Show flag = True n = 1 If Not ActiveSheet.Cells(1, 1).Value = "№" Then MsgBox "Лист не отформатирован для расчёта, воспользуйтесь окном ввода данных", vbCritical + vbOKOnly, "Ошибка" Hide InsForm.Show Exit Sub End If Do While flag n = n + 1 If ActiveSheet.Cells(n, 1).Value = "" Then flag = False End If If ActiveSheet.Cells(n, 1).Value = n - 1 Then flag = True Else: flag = False End If Loop n = n - 2 For i = 2 To n If Not ActiveSheet.Cells(1, i).Value = i - 1 Then MsgBox "Лист не отформатирован для расчёта, воспользуйтесь окном ввода данных", vbCritical + vbOKOnly, "Ошибка" Hide InsForm.Show Exit Sub End If Next i End Sub Private Sub SpinButton1_SpinUp() If iget.Value <= 222 Then iget.Value = iget.Value + 1 Else Exit Sub End If End Sub Private Sub SpinButton1_SpinDown() If iget.Value >= 4 Then iget.Value = iget.Value - 1 Else Exit Sub End If End Sub Private Sub UserForm_Initialize() iget.Value = 10 Sheets("Data").Select End Sub Private Sub UserForm_Terminate() Hide STF.Show End Sub Форма OKForm (подтверждение окончания ввода начальных данных) Private Sub CommandButton1_Click() SolForm.StartUpPosition = 0 SolForm.Top = 350 SolForm.Left = 480 Hide SolForm.Show End Sub Private Sub UserForm_Terminate() Hide SolForm.StartUpPosition = 0 SolForm.Top = 350 SolForm.Left = 480 SolForm.Show End Sub Форма Perevod1 (запоминание текущих единиц времени) 'Запоминание текущих единиц времени Private Sub CommandButton1_Click() If Minutes.Value = True Then edin = 1 End If If Chas.Value = True Then edin = 2 End If If Sutki.Value = True Then edin = 3 End If If Nedeli.Value = True Then edin = 4 End If If Mes.Value = True Then edin = 5 End If If Godi.Value = True Then edin = 6 End If Hide Perevod2.Show End Sub Private Sub UserForm_Terminate() Hide SolForm.StartUpPosition = 0 SolForm.Top = 350 SolForm.Left = 480 SolForm.Show End Sub Форма Perevod2 (перевод единиц времени, возврат к расчётной форме) 'Перевод единиц времени Private Sub CommandButton1_Click() Hide SolForm.Show If ActiveSheet.Cells(1, 1).Value = "№" Then If edin = 1 Then If Minutes.Value = True Then Exit Sub End If If Chas.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value / 60 End If Next j Next i End If If Sutki.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value / 1440 End If Next j Next i End If If Nedeli.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value / 10080 End If Next j Next i End If If Mes.Value = True Then MsgBox "Точный перевод невозможен. Попробуйте другой вариант", vbCritical + vbOKOnly, "Ошибка ввода" End If If Godi.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value / 525600 End If Next j Next i End If End If If edin = 2 Then If Minutes.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value * 60 End If Next j Next i End If If Chas.Value = True Then Exit Sub End If If Sutki.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value / 24 End If Next j Next i End If If Nedeli.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value / 168 End If Next j Next i End If If Mes.Value = True Then MsgBox "Точный перевод невозможен. Попробуйте другой вариант", vbCritical + vbOKOnly, "Ошибка ввода" End If If Godi.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value / 8760 End If Next j Next i End If End If If edin = 3 Then If Minutes.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value * 1440 End If Next j Next i End If If Chas.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value * 24 End If Next j Next i End If If Sutki.Value = True Then Exit Sub End If If Nedeli.Value = True Then For i = 2 To n + 1 For j = 2 To n + 1 If Not ActiveSheet.Cells(i, j).Value = "" Then ActiveSheet.Cells(i, j).Value = ActiveSheet.Cells(i, j).Value / 7 End If Next j Next i End If If Mes.Value = True Then MsgBox "Точный перевод невозможен. Попробуйте другой вариант", vbCritical + vbOKOnly, "Ошибка ввода" |
Новости |
Мои настройки |
|
© 2009 Все права защищены.