Простой калькулятор-00
Ставим задачу:
1 программа должна складывать, вычитать, умножать и делить целые числа.
2 программа должна выводить полученный результат в виде
строки.
Ввод цифровых значений и арифметических действий будем
осуществлять с помощью кнопок. Потребуется 16 кнопок Button.
Вывод результата и визуализацию введенных цифровых значений будим осуществлять с помощью метки Label.
Будим использовать одну метку.
Переносим на форму компонент Label и изменяем его свойства
AutoSize - false;
Caption - очищаем;
Color - clWhite;
Left - 18;
Top - 24;
Height - 33;
Width - 345;
Далее переносим кнопки и располагаем их в соответствии с
фото:

у кнопок изменяем свойства
Caption - пишем цифры и знаки действий.
Кнопка "С" - сброс цифрового значения при ошибке набора
Кнопка "=" - вывод результата
Теперь переходим к форме. Изменяем (уменьшаем) её размеры так чтобы компоненты расположились по центру.
Изменяем свойства Form1:
BorderStyle - bsToolWindow;
Caption - Калькулятор ;
Font - жирный, размер - 14;
Далее сохраняем проект
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// Глобальная переменная number1 для хронения первой цифры
UnicodeString number1;
// Глобальная переменная number2 для хронения второй цифры
UnicodeString number2;
// Глобальная переменная znak для хронения арефметического действия
UnicodeString znak;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
/*
конкатенация (склеивание, сложение) строки
находящейся в свойстве Label1->Caption с литеральной
константой "1" . Так мы набираем нужную нам строку цифр
*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "1";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "2";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "3";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "4";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "5";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "6";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "7";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "8";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button9Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "9";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button11Click(TObject *Sender)
{
Label1->Caption = Label1->Caption + "0";
}
//---------------------------------------------------------------------------
/*
Если была сделана ошибка при наборе цифры
очищаем её то-есть свойству Label1->Caption присваиваем пустую строку
*/
void __fastcall TForm1::Button10Click(TObject *Sender)
{
Label1->Caption = "";
}
//----------------------------------------------------------------------------
/*
Вводим знак операции над цифрами
Присваиваем (копируем) строку в свойстве Label1->Caption в переменную
number1 первая строка цифр сформирована и готова к использованию
очищаем свойство Label1->Caption подготавливая его к вводу второй строки цифр
*/
void __fastcall TForm1::Button13Click(TObject *Sender)
{
znak = "+";
number1 = Label1->Caption;
Label1->Caption = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button14Click(TObject *Sender)
{
znak = "-";
number1 = Label1->Caption;
Label1->Caption = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button15Click(TObject *Sender)
{
znak = "*";
number1 = Label1->Caption;
Label1->Caption = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button16Click(TObject *Sender)
{
znak = "/";
number1 = Label1->Caption;
Label1->Caption = "";
}
//---------------------------------------------------------------------------
/*
Подсчитываем результат и выводим в метку
Присваиваем (копируем) строку в свойстве Label1->Caption в переменную
number2 вторая строка цифр сформирована и готова к использованию
Если переменные number1, number2, znak не пустые строки (!= "") то
в них содержатся первая, вторая строка цифр и арифметический знак и
значит можно переходить к вычислениям
если переменная znak равна (==) литеральной константе "+" то будем складывать
Сначала строка цифр number2 преобразуется в целое число с помощью функции
StrToInt(number2); далее идёт преобразование StrToInt(number1);
после этого идёт сложение целых чисел и наконец результат присваивается
свойству Label1->Caption мы видим результат
здесь есть один нюанс Label1->Caption имеет тип UnicodeString а мы ему
присваиваем целое число типа int здесь могла бы быть ошибка но компилятор
сам способен сделать преобразование типов по этому ошибки не возникает (пример не явного преобразования
типов)
обратное преобразование int в UnicodeString компилятор не делает
*/
void __fastcall TForm1::Button12Click(TObject *Sender)
{
number2 = Label1->Caption;
if(number1 != "" & number2 != "" & znak != ""){
if(znak == "+"){Label1->Caption = StrToInt(number1) + StrToInt(number2); }
if(znak == "-"){Label1->Caption = StrToInt(number1) - StrToInt(number2); }
if(znak == "*"){Label1->Caption = StrToInt(number1) * StrToInt(number2); }
if(znak == "/"){Label1->Caption = StrToInt(number1) / StrToInt(number2); }
number2 = "";
znak = "";
number1 = Label1->Caption;
return;
}
number2 = "";
znak = "";
number1 = "";
Label1->Caption = "";
ShowMessage("Не достаточно данных повторите ввод сначала");
}
//---------------------------------------------------------------------------
============================================
|