4. Этап реализации
На этапе реализации создается прототип экспертной системы. В этой части моей курсовой работы я напишу коды, используемые для работы «Музыкальные жанры», опишу и представлю формы.
Так как в процессе создания каждая форма и код претерпевали изменения, изобразить весь ход создания экспертной системы не является возможным. Поэтому далее будут представлены конечные результаты.
Одним из важных моментов реализации моей экспертной системы, будет создание модуля, в который я запишу функцию формулы Байеса, о которых я говорил ранее.
Public Function да(a, y)
Public Mas2(1 To 10) As Currency
да = (y * a) / (y * a + (1 - a) * (1 - y)) 'формула Байеса при ответе «Да»
End Function
Public Function нет(a, y)
нет = ((1 - y) * a) / ((1 - y) * a + (1 - a) * y) 'формула Байеса при ответе «Нет»
End Function
Теперь можно перейти к формам, созданным в экспертной системе. Пользователя приветствует начальная UserForm «Здравствуйте!» (рис. 1), которая служит для ввода фамилию, автоматически фиксируется на календаре дата прохождения тестирования, так же пользователь подтверждает начало своего сеанса обращения к ЭС. Данная форма является единственной, где пользователь должен ввести свои данные, во всех последующих случаях пользователю будет предложено выбирать из представленных вариантов.
Рисунок 1. UserForm1 «Приветствие!»
Код этой формы:
Public T1 As Single'задаем переменные
Public T2 As Single
Private Sub CommandButton1_Click()'нажимаем на кнопку "Старт"
Worksheets("Лист1").Activate' активируем рабочий лист
r = 1
Do Until IsEmpty(Cells(r, 1))
r = r + 1
Loop
Cells(r, 1).Value = TextBox1.Text' запись данных на рабочий лист
Cells(r, 2).Value = TextBox2.Text
Cells(r, 3).Value = Date
В ячейки рабочего листа записываем имя, фамилию, дату прохождения ЭС.
Me.Hide
UserForm2.Show
End Sub
Private Sub UserForm_Initialize()
T1 = Timer' начинает работать таймер
End Sub
После закрытия формы «Приветствие!», открывается форма «Тест» (рис. 2)
Рисунок.2 UserForm «Тест»
Данная форма содержит вопросы, на которые предлагается ответить либо «да», либо «нет».
Код данной формы:
Dim Mas1(1 To 10, 1 To 11) As Double, m, n As Byte' объявляю массив и две переменных
Private Sub CommandButton1_Click()' если нажимаем на кнопку «Да»
Worksheets("Лист1").Activate' активируется рабочий лист, в который изначально было запланировано записывать результаты ответов на вопросы
r = 1
Do Until IsEmpty(Cells(r, 4))
r = r + 1' переходит в следующую пустую ячейку
Loop
Cells(r, 4).Value = "да"' записывается в ячейку, что пользователь ответил «Да» на заданный вопрос
For x = 1 To 10
Mas2(x) = да(Mas1(x, 1), Mas1(x, 11)) ' вызывается функция которая считает вероятность по формуле Байеса для ответа «Нет»
Next x
Unload Me
UserForm4.Show
End Sub
Если пользователь отвечает на вопрос «Нет»:
Private Sub CommandButton2_Click()
Worksheets("Лист1").Activate 'активируется рабочий лист, в который изначально было запланировано записывать результаты ответов на вопросы
r = 1
Do Until IsEmpty(Cells(r, 4))
r = r + 1' переходит в следующую пустую ячейку
Loop
Cells(r, 4).Value = "нет"
For x = 1 To 10
Mas2(x) = нет(Mas1(x, 1), Mas1(x, 11)) ' вызывается функция которая считает вероятность по формуле Байеса для ответа «Да»
Next x
Unload Me
UserForm4.Show' открывается следующая форма
End Sub
Private Sub Label1_Click()
End Sub
Private Sub UserForm_Initialize()
Worksheets("Лист2").Activate'активируется рабочий лист на котором записаны вероятности при ответе «Да» на каждый вопрос для каждого исхода
For m = 1 To 10
For n = 1 To 11
Mas1(m, n) = Worksheets("Лист2").Cells(m + 1, n + 1)
Next n
Next m
End Sub
После того, как пользователь ответит честно на все вопросы, «Музыкальные жанры» делает рекомендацию прослушивания того или иного музыкального жанра в соответствии с вашими предпочтениями. Открывается UserForm «Результат» (рис.4) На этой UserForm будет выведен результат, а так же время прохождения ЭС.
Рисунок 4. UserForm «Результат»
Код для инициализации формы следующий:
Private Sub CommandButton1_Click()
Unload Me
UserForm14.Show
End Sub
Private Sub UserForm_Initialize()
T2 = Timer' остановка таймера
Worksheets("Лист1").Activate
For b = 1 To 10
If Cells(b, 17).Value = Cells(11, 17).Value Then' сравнивает результаты, находит тот, что равен максимуму
Label1.Caption = Cells(b, 16) ' выводит название максимального результата
End If
Next b
If Label1.Caption = "Apple iPhone 4S" Then
Label2.Caption = "не нуждается в описании"
ElseIf Label1.Caption = "HTC One S" Then
Label2.Caption = "Дизайн HTC One S просто сводит с ума, он прекрасен и внутри, и снаружи, и может гордиться самым тонким корпусом среди смартфонов."
ElseIf Label1.Caption = "Samsung Galaxy Ace Plus S7500" Then
Label2.Caption = "Яркий,надежный, красивый!!"
ElseIf Label1.Caption = "Sony Ericsson Xperia PLAY" Then
Label2.Caption = "замечательный смартфон, темы оформления, java игры, программы, картинки, видео, мелодии."
ElseIf Label1.Caption = "LG T375 Cookie Smart Dual " Then
Label2.Caption = "Мобильный телефон LG dual-SIM T375 Cookie Smart, несмотря на название, смартфоном не является, однако он вполне подойдет тем пользователям, которые не нуждаются в высокопроизводительном «комбайне», но заинтересованы в возможности одновременной работы с двумя операторами мобильной связи."
ElseIf Label1.Caption = "Nokia C5 " Then
Label2.Caption = "Для коммуникации может предложить: Web-браузер, HSDPA, стерео Bluetooth, и, конечно, USB-порт. Для любителей музыки есть аудио выход на 3.5 мм. Также стоит отметить, что он оснащен GPS-приемником, который позволит Вам не заблудиться в любом месте!"
ElseIf Label1.Caption = "Nokia Asha 303: QWERTY" Then
Label2.Caption = "Главной особенностью его является QWERTY-клавиатура, что позволяет с легкостью общаться."
ElseIf Label1.Caption = "Samsung E2222" Then
Label2.Caption = "2 симки, прост в использовании, Клавиатура, приложения, не плохие оригенальные мелодии,Звук громкий, Слышимость чёткая"
ElseIf Label1.Caption = "Nokia 101" Then
Label2.Caption = "Практичный, простой в управлении, надежный"
Else
Label1.Caption = "Fly DS103 "
Label2.Caption = "Малофункциональный, имеет две симкарты, практичный, легкийв обращении"
End If
Worksheets("Лист1").Activate
r = 1
Do Until IsEmpty(Cells(r, 14))
r = r + 1' перемещается в следующую пустую ячейку в столбце 14 на Лист1
Loop
Cells(r, 14).Value = Label1.Caption
TextBox1.Value = Round(T2 - UserForm1.T1) & " сек." ' считает разницу во времени, выводит округленный результат в секундах
UserForm13.TextBox1.Value = Round((T2 - UserForm1.T1)) & " сек."
End Sub