Здравствуйте, читатели, на связи снова Алёна. Нужно, наверное сразу предупредить - у меня и в мыслях нет вести учебный блог, давать уроки и всё такое. Это просто дневник программистки, и именно - начинающей, но если вдруг захотите задать вопрос, или дать совет - добро пожаловать в комментарии.
Ну а теперь - пошел наш рассказ. О Visual Basic, и первом проекте. Не совсем, конечно, первом, но открывающася форма и её покраска в разные цвета - не в счёт. А вот калькулятор - это уже серьёзно.
Первое задание было - написать программу для выполнения основных арифметических действий между двумя числами, то есть - сложение, вычитание, умножение и деление. Сложностей никаких, тем более в моём самоучителе всё это расписано, ну и потом идут уже дополнительные задания - самостоятельно добавить кнопку "сброс", изменить размеры кнопок и текстовых окон, и тому подобные вещи, которыми мне заниматься было просто лень (тем более что лет восемь назад я всё это уже проходила). Гораздо интереснее мне показалась идея сделать калькулятор симпатичным внешне, и привлекательным внутри - чтобы и глаз радовал, и функционал не пострадал. Потому что первый вариант выглядел вот так (рис 1).
Конечно, это никуда не годится, решила я. Создала новый проект, и начала творить дизайн, который уже сотворил Майкрософт - то есть перетаскивать элементы управления на форму, приводить кнопки в одинаковое состояние и расставлять их на форме. Мда, поумничать всё же придётся, рассказать, что такое форма...
Форма - это то самое окно Windows. Все окна - это формы, а кнопки, текстовые окна, полосы прокрутки и т.д. - элементы управления, которые в Visual Studio находятся слева, на всплывающей (точнее, выплывающей) вкладке, откуда их и перетаскиваем. Мышкой, на форму. Той же мышкой меняем размер и расположение - как и любого окна Windows. Получилось симпатичненько, не хуже, чем у Билла Гейтса))))). А чтобы не путаться в коде, сразу поменяла всем элементам свойство Name (чтобы кнопка "Плюс" в программе называлась "Plus" а не "Button12", и свойство Text - чтобы на ней было написано "+", а не опять-таки "Button12". Это делается в окне свойств, в правом нижнем углу экрана. Вот такой получился результат (рис 2).
Пора приступать к коду? Да не тут-то было, сперва алгоритм. Для первого калькулятора он очень прост, да и код не сложнее (рис 2).
Ввести первое число.
Ввести второе число.
Выполнить действие.
Вывести результат.
Как видите, программировать пришлось только кнопки действий и кнопку "Сброс". И использовать функцию Val(), для того, чтобы перевести набранные в текстовых полях символы цифр из текстового формата в числовой - иначе при сложении 3+2 у нас бы получалось не 5, а 32, то есть к строке "3" добавилась бы строка "2".
Порядок действий пользователя в этом калькуляторе:
Щёлкнуть мышкой на поле "Первое число"
Набрать число.
Щёлкнуть мышкой на поле "Второе число"
Набрать число.
Щёлкнуть мышкой на кнопке арифметической операции.
Посмотреть результат и щёлкнуть мышкой по кнопке "Сброс", чтобы очистить все поля ввода и вывода.
Как это всё работает, смотрите вот тут, в ролике.
А теперь возьмёмся за мой калькулятор. Алгоритм будет почти таким же, только с дополнениями, и порядок действий пользователя тоже будет отличаться.
Алгоритм:
Ввести первое число
Закончить ввод первого числа
Ввести второе число
Выполнить действие и вывести результат
Порядок действий:
Ввести число, нажимая цифровые клавиши на калькуляторе (пока буду кликать мышкой)
Нажать клавишу арифметической операции (заканчивается ввод первого числа)
Ввести второе число, так же, как и первое.
Нажать "Равно"
Работа пользователя упрощается - не нужно щёлкать по текстовым полям и набирать числа с клавиатуры, нужно просто двигать по эрану курсор, кликая на соответствующие клавиши. А вот алгоритм будет намного сложнее, хотя пока этого не видно. Давайте разбираться.
Запрограммировать клавишу "1", (у меня она называется But1), труда не составит, в процедуру щелчка по клавише достаточно записать код Vyvod.Text = 1. Но если нажать клавишу ещё раз - в окне вывода (я его так и назвала, "Vyvod") всё так же останется "1", а ведь должно быть "11". Значит, при нажатии клавиши "1" нужно не выводить в окне, а прибавлять к тому, что там уже есть, вот таким образом:
a = "1"
Vyvod.Text = Vyvod.Text + a
а - это переменная типа String (строка), и для каждой цифровой клавиши она будет иметь свое значение - для But1 - "1", для But2 - "2" и так далее. Но пока обойдусь единицей, двойкой и клавишей сложения и равно.
Клавиша сложения, несмотря на название, ничего не будет складывать, она будет переводить содержимое поля Vyvod в числовой формат и очищать это поле, вот таким кодом:
х = Val(Vyvod.Text)
Vyvod.Clear()
x - переменная типа Double (число с плавающей точкой, по-простому - десятичное дробное число).
А операцию сложения и вывода результата будет делать клавиша "Равно". И заодно "обнулять" переменную х.
Vyvod.Text = x + Val(Vyvod.Text)
x = 0
Теперь программа будет работать, но - только на сложение, и числа мы сможем вводить исключительно из единиц и двоек. И ещё - после первого нажатия "Равно" в окне вывода остается результат, что не позволяет начать новую операцию. Например, мы сложили 12 и 4 - получилось 16. Теперь нужно сложить 2 и 121 - нажимаем 2, и наблюдаем в окне вывода 162. Значит, нужна клавиша "Сброс". Добавляем ещё одну кнопку, и в процедуре щелчка по ней пишем:
Vyvod.Clear()
x = 0
А теперь думаем о том, как научить калькулятор не только складывать, но ещё вычитать, делить и умножать. Самое простое решение - ввести ещё одну переменную, которая будет работать как идентификатор арифметической операции, и использовать условный оператор If
Код для клавиши сложения будет выглядеть так:
y = 1
х = Val(Vyvod.Text)
Vyvod.Clear()
y - это и есть переменная-идентификатор. Для вычитания y будет равен 2, для умножения и деления - 3 и 4 соответственно. А код для клавиши "Равно" приобретёт такой вот вид:
If y = 1 Then
Vyvod.Text = x + Val(Vyvod.Text)
x = 0
End If
If y = 2 Then
Vyvod.Text = x - Val(Vyvod.Text)
x = 0
End If
If y = 3 Then
Vyvod.Text = x * Val(Vyvod.Text)
x = 0
End If
If y = 4 Then
Vyvod.Text = x / Val(Vyvod.Text)
x = 0
End If
y = 0
Небольшая расшифровка, как этот самый If работает:
Если y = 1 то
Vyvod.Text = x+ Val(Vyvod.Text)
x = 0
Конец блока "если" (собственно, If и переводится как "если").
Поскольку "y" будет равен либо 1, либо 2, либо 3, либо 4 - при нажатии на клавишу "равно" программа выберет нужный вариант действий. пропустив все остальные.
Вот теперь всё работает, как надо, только не хватает ещё кое-чего - возможности вводить дробные числа. И если при вводе числа первой цифрой вводится 0 - калькулятор должен воспринимать это как сигнал, что число будет дробным, И я это сделала, написав для клавиши запятой:
a = "."
Vyvod.Text = Vyvod.Text + a
а для нуля:
If Vyvod.Text = "" Then
a = "0."
Vyvod.Text = Vyvod.Text + a
Else
a = "0"
Vyvod.Text = Vyvod.Text + a
End If
Здесь в блоке If появилось слово Else (иначе). Перевожу на русский: если в окне вывода нет текста, ввести символы "0" и ".", иначе - добавить к тексту символ "0". И вот теперь вообще как надо всё работает, особенно на итоговом видео это видно)))))
И все-таки кое-чего я не учла. Осталась возможность ввода символов с клавиатуры, если кликнуть мышкой по окну вывода, и есть возможность деления на ноль - при этом программа, скорее всего, зависнет. Так что теперь буду думать над "защитой от дурака". Да и код чересчур громоздкий - должно быть более изящное решение. и оно найдется, я даже не сомневаюсь.