Скачать презентацию Проверка данных вводимых пользователем Для проверки данных вводимых Скачать презентацию Проверка данных вводимых пользователем Для проверки данных вводимых

9.Проверка данных, вводимых пользователем.ppt

  • Количество слайдов: 9

Проверка данных, вводимых пользователем Для проверки данных, вводимых пользователем, вы можете воспользоваться стандартными конструкциями Проверка данных, вводимых пользователем Для проверки данных, вводимых пользователем, вы можете воспользоваться стандартными конструкциями для принятия решений. Давайте рассмотрим пример, в котором пользователь должен ввести свой возраст в ответ на запрос программы. Очевидно, что возраст должен удовлетворять следующим условиям. должен быть числом ограничим введенное значение диапазоном значений для типа данных Byte - то есть введенное значение не может быть больше 256 и меньше 0. скорее всего, он не превысит 100 лет, но, учитывая то, что нашей программой могут пользоваться и долгожители (если верить статистике, некоторые доживают и до 150) переспросим пользователя, уверен ли он в том, что ввел именно это значение, и, если он согласится, примем его. Так же мы ограничим количество возможных попыток для ввода возраста тремя. Добавим в документ Microsoft Word две кнопки. Одну из них назовем cmd_Age. Input и подпишем как Введите ваш возраст, вторую назовем cmd_Inp. Age_Easy и подпишем как Простой ввод возраста. Для проверок создадим несколько пользовательских функций, реализующих их. Такой подход очень удобен, так как позволяет уменьшить количество сложночитаемых вложенных конструкций If-Then. Else и делает работу с программой и ее отладку проще.

1. Функция, которая проверяет, соответствует ли введенное число нашим требованиям: Public Function Is. Good. 1. Функция, которая проверяет, соответствует ли введенное число нашим требованиям: Public Function Is. Good. Num(var_Inp) As Boolean 'Функция возвращает True, если введенное 'число подходит, иначе - False If Is. Numeric(var_Inp) = True _ And Val(var_Inp) > 0 _ And Val(var_Inp) < 255 _ Then Is. Good. Num = True Else Is. Good. Num = False End If End Function

2. Функция, которая проверяет введенное число и возвращает True, если оно больше 100. Public 2. Функция, которая проверяет введенное число и возвращает True, если оно больше 100. Public Function Is. More 100(var_Inp) As Boolean 'Функция возвращает True, если введенное число 'более 100 If Val(var_Inp) > 100 Then Is. More 100 = True Else Is. More 100 = False End If End Function

3. Функция, которая возвращает строку с описанием которую допустил пользователь при вводе возраста. Public 3. Функция, которая возвращает строку с описанием которую допустил пользователь при вводе возраста. Public Function Not. Number(var_Inp) As String 'Определяет, что именно ввел пользователь 'вместо ожидаемого числа и возвращает 'строку для вывода сообщения об ошибке 'Если не выполнится ни одно из условий 'программа выдаст общее сообщение об 'ошибке ввода данных Not. Number = "Ошибка ввода данных" 'Если ей удастся определить тип ошибки 'будет выведено более точное сообщение If var_Inp = "" Then Not. Number = "Вы забыли ввести возраст" End If If Val(var_Inp) < 0 Then Not. Number = "Вы ввели отрицательное число" End If If Is. Numeric(var_Inp) = False Then Not. Number = "Вы ввели не число" End If If Val(var_Inp) > 255 Then Not. Number = "Вы ввели слишком большое число" End If End. ошибки,

4. Текст программы, которая использует вышеописанные проверки введенного пользователем возраста. Private Sub cmd_Age. Input_Click() 4. Текст программы, которая использует вышеописанные проверки введенного пользователем возраста. Private Sub cmd_Age. Input_Click() 'Переменная для ввода пользователм Dim str_Inp 'Сюда запишем возраст после проверки Dim num_Age As Byte 'А здесь будем хранить ответ пользователя на 'Вопрос о том, уверен ли он в том, что ему 'Больше 100 лет Dim Is. You. More 100 As Variant 'В этой переменной будем хранить количество 'Неправильных попыток ввода 'Если оно превысит 3 - выходим из программы Dim num_Inp. Try As Byte 'Эта переменная нужна для того, чтобы 'определить, окончен ли опрос пользователя Dim bool_Flag As Boolean bool_Flag = False 'Этот цикл будет длиться до тех пор, 'пока пользователь не введет верное значение 'или пока не совершит максимальное число 'попыток Do str_Inp = Input. Box("Введите ваш возраст") If num_Inp. Try > 3 Then Msg. Box "Вы совершили более 3 ошибок" Exit Sub End If num_Inp. Try = num_Inp. Try + 1 функции для

'Если введенное число подходит If Is. Good. Num(str_Inp) = True Then 'Проверяем - не 'Если введенное число подходит If Is. Good. Num(str_Inp) = True Then 'Проверяем - не больше ли оно 100 If Is. More 100(str_Inp) = False Then 'Если не больше - просто устанавливаем 'флаг выхода в True 'и записываем возраст в переменную num_Age bool_Flag = True num_Age = CByte(str_Inp) Else 'Если возраст больше 100 - переспросим Is. You. More 100 = _ Msg. Box("Вам точно больше 100? ", vb. Yes. No) 'Если пользователь не ошибся, 'Установим флаг выхода 'и запишем возраст в num_Age If Is. You. More 100 = vb. Yes Then bool_Flag = True num_Age = CByte(str_Inp) End If Else 'Если пользователь изначально ввел 'неподходяще число, 'сгенерируем с помощью функции Not. Number 'сообщение об ошибке и выведем его Msg. Box (Not. Number(str_Inp)) End If Loop Until bool_Flag = True Msg. Box ("Ваш возраст: " + Str(num_Age)) End Sub

Работа с ошибками времени выполнения Выше мы рассмотрели метод борьбы с ошибками, который заключался Работа с ошибками времени выполнения Выше мы рассмотрели метод борьбы с ошибками, который заключался в их предотвращении. Но что делать, если в ходе работы программы происходит ошибка, для предотвращения которой ничего сделано не было? В этой ситуации нам поможет перехват и обработка ошибок времени выполнения. Давайте рассмотрим ситуацию, которая гарантированно вызовет ошибку - деление на 0. Добавим в документ Microsoft Word кнопку с именем cmd_Simple. Input, подпишем ее как Отсутствие перехвата ошибок. Напишем простую программу (поместив ее в обработчик события Click кнопки cmd_Simple. Input), которая запрашивает у пользователя два числа, делит одно на другое и выводит результат деления. Следующий код реализует эту функциональность: Dim num_A Dim num_B Dim num_C num_A = Input. Box("Введите число A") num_B = Input. Box("Введите число B") num_C = num_A / num_B Msg. Box ("А, деленое на В равняется: " + Str(num_C))

Чтобы организовать обработку ошибок в программе нужно расположить перед потенциально опасным участком (в нашем Чтобы организовать обработку ошибок в программе нужно расположить перед потенциально опасным участком (в нашем случае - перед строкой, где происходит деление) оператор такого вида: On Error Go. To Идентификатор_обработчика Идентификатор обработчика ошибок - это номер или (что предпочтительнее) метка строки в коде текущей процедуры, куда должно быть передано управление при возникновении ошибки. Обработчик ошибок должен находиться в текущей процедуре. Использовать в качестве идентификатора обработчика имя процедуры или функции нельзя В обработчике можно исправить ошибку, предложить пользователю выполнить какие-то действия или просто вывести сообщение об ошибке и завершить работу программы. В обработчике ошибок можно использовать оператор Resume - он возвращает управление в строку, в которой произошла ошибка. После того, как опасный участок программы пройден, обработку ошибок желательно отключить - это можно сделать такой командой: On Error Go. To 0 Так же при обработке ошибок можно пользоваться командой On Error Resume Next Эта команда подавляет вывод сообщения об ошибке, просто

Для работы с ошибками, возникающими при выполнении программы, существует специальный объект - Err. Он Для работы с ошибками, возникающими при выполнении программы, существует специальный объект - Err. Он содержит информацию об ошибках времени выполнения. У этого объекта есть несколько важнейших методов и свойств Метод Clear очищает информацию об ошибках в объекте Err. Метод Raise позволяет сгенерировать ошибку, указав в качестве параметра ее номер и некоторые другие, необязательные, данные. Эта возможность полезна при тестировании программ, оснащенных обработчиками ошибок, чтобы разработчик мог произвольно генерировать те или иные ошибки. Номера ошибок находятся в диапазоне 0 - 65535. В частности, номера 0 - 512 зарезервированы за системными ошибками, 513 65535 - за ошибками, коды которых пользователь может назначать самостоятельно. Например, для вызова ошибки несоответствия типов переменных (она возникает при попытке записать в числовую переменную строковое значение и в других случаях), которая имеет код 13, достаточно выполнить такую команду: Err. Raise (13) Свойство Number содержит номер ошибки. Обычно этот номер используют для выбора действия в обработчике ошибок. Свойство Description содержит текстовое описание ошибки