Найти в Дзене
Alyona Verden. Поговорим...

Дневник начинающей программистки#2. Проект "Калькулятор" в Visual Studio на Visual Basic

Здравствуйте, читатели, на связи снова Алёна. Нужно, наверное сразу предупредить - у меня и в мыслях нет вести учебный блог, давать уроки и всё такое. Это просто дневник программистки, и именно - начинающей, но если вдруг захотите задать вопрос, или дать совет - добро пожаловать в комментарии.

Ну а теперь - пошел наш рассказ. О Visual Basic, и первом проекте. Не совсем, конечно, первом, но открывающася форма и её покраска в разные цвета - не в счёт. А вот калькулятор - это уже серьёзно.

Первое задание было - написать программу для выполнения основных арифметических действий между двумя числами, то есть - сложение, вычитание, умножение и деление. Сложностей никаких, тем более в моём самоучителе всё это расписано, ну и потом идут уже дополнительные задания - самостоятельно добавить кнопку "сброс", изменить размеры кнопок и текстовых окон, и тому подобные вещи, которыми мне заниматься было просто лень (тем более что лет восемь назад я всё это уже проходила). Гораздо интереснее мне показалась идея сделать калькулятор симпатичным внешне, и привлекательным внутри - чтобы и глаз радовал, и функционал не пострадал. Потому что первый вариант выглядел вот так (рис 1).

-2

Конечно, это никуда не годится, решила я. Создала новый проект, и начала творить дизайн, который уже сотворил Майкрософт - то есть перетаскивать элементы управления на форму, приводить кнопки в одинаковое состояние и расставлять их на форме. Мда, поумничать всё же придётся, рассказать, что такое форма...

Форма - это то самое окно Windows. Все окна - это формы, а кнопки, текстовые окна, полосы прокрутки и т.д. - элементы управления, которые в Visual Studio находятся слева, на всплывающей (точнее, выплывающей) вкладке, откуда их и перетаскиваем. Мышкой, на форму. Той же мышкой меняем размер и расположение - как и любого окна Windows. Получилось симпатичненько, не хуже, чем у Билла Гейтса))))). А чтобы не путаться в коде, сразу поменяла всем элементам свойство Name (чтобы кнопка "Плюс" в программе называлась "Plus" а не "Button12", и свойство Text - чтобы на ней было написано "+", а не опять-таки "Button12". Это делается в окне свойств, в правом нижнем углу экрана. Вот такой получился результат (рис 2).

-3

Пора приступать к коду? Да не тут-то было, сперва алгоритм. Для первого калькулятора он очень прост, да и код не сложнее (рис 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". И вот теперь вообще как надо всё работает, особенно на итоговом видео это видно)))))

И все-таки кое-чего я не учла. Осталась возможность ввода символов с клавиатуры, если кликнуть мышкой по окну вывода, и есть возможность деления на ноль - при этом программа, скорее всего, зависнет. Так что теперь буду думать над "защитой от дурака". Да и код чересчур громоздкий - должно быть более изящное решение. и оно найдется, я даже не сомневаюсь.