Порядок выполнения работы
Лабораторная работа №8 Организация защиты программы от неверных действий пользователя Цель работы: В созданной программе при выполнении лабораторной работе № 5 организовать защиту от неверных действий пользователя.
Порядок выполнения работы В лабораторной работе № 5 был рассмотрен следующий пример.
Задача. Составьте программу, которая производит расчет по формуле при различных значениях a , b , c. Программа должна содержать форму, на которой должны располагаться текстовые поля для ввода величин, кнопки для выполнения расчета, формирования отчета и выхода из программы. Сформировать отчет средствами VBA. Отчет должен содержать: условие задачи; формулу расчета с обозначениями и подставленными вместо них числами; полученный результат.
Решая задачу, мы спроектировали следующую форму [1] рис. 2.
Рис. 2. Форма для расчета формулы.
Мы написали программу, с помощью которой рассчитывается формула по введенным данным и создается отчет.
Dim a As Single, b As Single, c As Single, result As Single
Private Sub cmdRaschet_Click()
a = CSng (txtA.Text) b = CSng (txtB.Text) c = CSng (txtC.Text) result = (b + Sqr(b ^ 2 + 4 * a^ 3 * c)) / (2 * a) - a ^ 3 * c + b ^ (-2) lblOtvet.Caption = CStr(result) End Sub Private Sub cmdOtchet_Click()
frmFormula.Hide Dim docNew As Document 'объявляем новый документ 'создаем новый документ и устанавливаем на него ссылку Set docNew = Documents.Add With Selection 'Печатаем заголовок .InsertAfter "Программа для расчета формулы." 'напечатанный заголовок форматируем по середине .ParagraphFormat.Alignment = wdAlignParagraphCenter 'создаем отступ для первой строки .ParagraphFormat.FirstLineIndent = CentimetersToPoints(0.7) 'устанавливаем для заголовка полужирный шрифт, 14 размера .Font.Bold = True .Font.Size = 14 'вставляем два параграфа .InsertParagraphAfter .InsertParagraphAfter 'Перемещаем курсор в конец документа .EndOf Unit:=wdSection 'Печатаем задание .InsertAfter "Задание. " .ParagraphFormat.Alignment = wdAlignParagraphJustify .EndOf Unit:=wdSection .InsertAfter "Составить программу для расчета формулы. Программа должна содержать форму, которая должна иметь текстовые поля для ввода величин, кнопки для расчета, формирования отчета, выхода из программы." .InsertParagraphAfter .InsertAfter "Сформировать отчет средствами VBA. Отчет должен содержать:" .InsertParagraphAfter .InsertAfter "условие задачи;" .InsertParagraphAfter .InsertAfter "формулу расчета с обозначениями и подставленными вместо них числами;" .InsertParagraphAfter .InsertAfter "полученный результат." .Font.Bold = False .InsertParagraphAfter .EndOf Unit:=wdSection
'Вывод результатов в отчет .Font.Bold = True .InsertAfter "Решение. "
.InsertParagraphAfter .EndOf Unit:=wdSection .Font.Bold = False .InsertAfter "Для a = " & CStr(a) & ", для b = " & CStr(b) & ", для c = " & CStr(c) & " значение формулы:" .InsertParagraphAfter .InsertParagraphAfter .EndOf Unit:=wdSection
'Формируем формулу с обозначениями
'Formula = "(b+" & ChrW(8730) & "(b^2+4·a·c))/(2·a)-a^3·c+b^-2=" & "(" & b & "+" & ChrW(8730) & "(" & b & "^2" & "+4" & "·" & a & "·" & c & "))/" & "(2·" & a & ")-" & a & "^3·" & c & "+" & b & "^-2=" & result Formula = "(b+" & ChrW(8730) & "(b^2+4·a·c))/(2·a)-a^3·c+b^-2=(" & b & "+" & ChrW(8730) & "(" & b & "^2+4·" & a & "·" & c & "))/(2·" & a & ")-" & a & "^3·" & c & "+" & b & "^-2=" & result 'Объявляемобъект - диапазонobjRange Dim objRange As Range 'ОбъявляемобъктobjEq, какформулу Dim objEq As OMath
' УстанавливаемобъектobjRange, как выделенную часть документа. В нашем случае место под курсором Set objRange = Selection.Range 'свойствуtextобъектаobjRange присваиваем код формулы objRange.Text = Formula 'преобразуемобъектobjRange в математическую формулу Set objRange = Selection.OMaths.Add(objRange) ' создаем объект objEq, образуя его из объекта objRange Set objEq = objRange.OMaths(1) 'Преобразуем формулу из линейного вида к профессиональному objEq.BuildUp
End With
frmFormula.Show
End Sub Private Sub cmdExit_Click() End End Sub
Кажется, что мы все сделали. Но это не так. Мы не учли следующее: 1. Пользователь может нажать кнопку Рассчитать, забыв ввести данные в текстовые поля. В формулу будет подставлена пустая величина и приложение, в этом случае, выдаст ошибку и прекратит выполнение программы. 2. Пользователь может ввести неверные данные, например, не числовые, что опять может привести к ошибке выполнения программы. 3. Пользователь может ввести данные правильно, однако следует учесть, что подкоренное выражение в формуле не может быть меньше 0, а также знаменатель формулы не может быть равен 0. Если пользователь введет такие данные, которые не удовлетворят математическим ограничениям, это также приведет к ошибке. 4. Пользователь может нажать кнопку Создать отчет, не рассчитав прежде значение по формуле.
Для того, чтобы программа правильно реагировала на введенные не верно данные, нужно создать код проверки правильности ввода. У программистов такой код обычно называется «защита от дурака». Для кода проверки правильности ввода данных можно использовать рассмотренную ранее конструкцию
If условие Then [операторы] [ElseIf условие-n Then [операторы_elseif] ... [Else [операторы_else]] End If
Составим алгоритм проверки введенных данных при нажатии на кнопку Рассчитать:
Если a не введено Выдать сообщение и вернуться на форму Иначе если a введено не правильно (a – не число) Выдать сообщение и вернуться на форму Иначе если b не введено Выдать сообщение и вернуться на форму Иначе если b введено не правильно (b - не число) Выдать сообщение и вернуться на форму Иначе если c не введено Выдать сообщение и вернуться на форму Иначе если c введено не правильно (c - не число) Выдать сообщение и вернуться на форму Иначе (если введено все правильно) Если знаменатель равен 0 (a=0) Выдать сообщение и вернуться на форму Иначе если значение под корнем < 0 Выдать сообщение и вернуться на форму Иначе(если все верно) Рассчитать значение формулы Конец если Конец если
Составим также алгоритм для проверки нажатия кнопки Создать отчет:
Если поле ответа пустое Выдать сообщение и вернуться на форму Иначе Создать отчет Конец если
С учетом первого алгоритма, изменим текст программы для события нажатия кнопки Рассчитать:
Private Sub cmdRaschet_Click()
'Объявляем переменные, значения которых вводятся в текстовые поля Dim a As Single Dim b As Single Dim c As Single
'Объявляем переменные, которые показывают, являются ли введенные данные числами Dim AA As Boolean Dim BB As Boolean Dim CC As Boolean
'очищаем метку, в которую выводится рассчитанный результат lblOtvet.Caption = ""
'Выясняем, являются ли введенные данные числами.
AA = IsNumeric(txtA.Text) BB = IsNumeric(txtB.Text) CC = IsNumeric(txtC.Text)
If txtA.Text = "" Then 'заполнено ли текстовое поле a MsgBox ("Не введены данные для переменной a") txtA.SetFocus 'устанавливаем фокус на текстовое поле ElseIf Not (AA) Then 'Если введено не число MsgBox ("Не правильно введены данные для переменной a (a – не число)") txtA.SetFocus ElseIf txtB.Text = "" Then 'заполнено ли текстовое поле b MsgBox ("Не введены данные для переменной b") txtB.SetFocus ElseIf Not (BB) Then 'Если введено не число MsgBox ("Не правильно введены данные для переменной b (b - не число)") txtB.SetFocus ElseIf txtC.Text = "" Then 'заполнено ли текстовое поле c MsgBox ("Не введены данные для переменной c") txtC.SetFocus ElseIf Not (CC) Then 'Если введено не число MsgBox ("Не правильно введены данные для переменной c (c - не число)") txtC.SetFocus Else 'переводим данные в числовую форму a = CSng (txtA.Text) b = CSng (txtB.Text) c = CSng (txtC.Text)
If a = 0 Then 'Если знаменатель равен 0 MsgBox ("Число a не может быть равно 0, т.к. знаменатель в этом случае станет равен 0") txtA.SetFocus ElseIf b ^ 2 + 4 * a * c ^ 3 < 0 Then 'Если значение под корнем < 0 MsgBox ("Значение под корнем < 0") txtA.SetFocus Else 'Если все нормально 'рассчитываем формулу result = (b + Sqr(b ^ 2 + 4 * a * c ^ 3)) / (2 * a) - a ^ 3 * c + b ^ (-2) 'заносим ответ в метку на форме lblOtvet.Caption = CStr(result) End If End If End Sub
Используя второй алгоритм, напишем программу для проверки нажатия кнопки Создать отчет.
If lblOtvet = "" Then MsgBox ("Вы не расчитали формулу") cmdRaschet.SetFocus Else 'в этом месте идет код программы, как в примере выше для создания отчета End If
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (218)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |