Мегаобучалка Главная | О нас | Обратная связь


Порядок выполнения работы



2020-02-04 218 Обсуждений (0)
Порядок выполнения работы 0.00 из 5.00 0 оценок




Лабораторная работа №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

 



2020-02-04 218 Обсуждений (0)
Порядок выполнения работы 0.00 из 5.00 0 оценок









Обсуждение в статье: Порядок выполнения работы

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (218)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)