§ 20. Создание приложений

20.5. Создание приложения «Калькулятор»

Создание калькулятора начнем с конструирования формы. На форме нужно разместить: поле Edit для ввода/вывода чисел, 10 кнопок с цифрами, 4 кнопки с арифметическими действиями, кнопку «=» и кнопку «С» — очистить (пример 20.17).

При нажатии на кнопку с цифрой программа должна дописать эту цифру к числу в поле Edit. При нажатии на кнопку с арифметическим действием нужно запомнить число, которое в данный момент находится в поле Edit и очистить поле для ввода второго числа. Числа будем хранить в двух переменных n1, n2 типа int. Знак операции будем хранить в переменной znak типа char. Переменные описываются как глобальные. При нажатии на кнопку «=» выполняется арифметическое действие и выводится результат.

Для отображения кнопок можно использовать компонент BitBtn, тогда кнопки могут содержать рисунок на поверхности (например, изображения с цифрами). Свойство для размещения рисунка — Glyph.

Установить значение bsDialog для свойства BorderStyle формы. В этом случае граница формы не позволит менять ее размеры.

Коды функций обработчиков приведены в примере 20.18.

Для каждой кнопки на форме нужно создать обработчик события OnClick.

Обработчики событий для всех цифровых кнопок будут идентичны.

Обработчики для кнопок арифметических действий будут отличаться только значением запоминаемой операции.

Основные вычисления происходят в обработчике кнопки «=». Преобразуем в число n2 значение поля Edit и выполняем арифметическую операцию в зависимости от значения переменной znak. После чего обнуляем переменные.

В обработчике кнопки «С» (от англ. clear — очистить) происходит обнуление переменных и очистка поля Edit.

Созданный калькулятор имеет большое количество ограничений в своей работе, поскольку рассчитан на вычисления только с натуральными числами.

Пример 20.17. Форма на этапе конструирования:

Пример 20.18. Обработчики событий:

//описание глобальных переменных

int n1, n2;

char znak;

 

void __fastcall TForm1::

Button10Click(TObject *Sender)

{

  //приписывание цифры к числу

  Edit1->Text = Edit1->Text + '0';

}

 

void __fastcall TForm1::

Button1Click(TObject *Sender)

{

  Edit1->Text = Edit1->Text + '1';

}

Для остальных цифровых кнопок нужно изменить только '1' на соответствующую цифру.

void __fastcall TForm1::

Button12Click(TObject *Sender)

{

  n1 = StrToInt(Edit1->Text);

  //запоминание знака операции

  znak = '+';

  Edit1->Clear();

}

Для остальных кнопок со знаками арифметических действий нужно изменить только '+' на соответствующий знак.

void __fastcall TForm1::

Button16Click(TObject *Sender)

{

  n2 = StrToInt(Edit1->Text);

  switch (znak){

  case '+': {

    Edit1->Text = IntToStr(n1 + n2);

    break;

  }

  case '-': {

    Edit1->Text = IntToStr(n1 - n2);

    break;

  }

  case '*': {

    Edit1->Text = IntToStr(n1 * n2);

    break;

  }

  case '/': {

    Edit1->Text = IntToStr(n1 / n2);

      break;

  }

  }

  n1 = 0;

  n2 = 0;

  znak = ' ';

}

 

void __fastcall TForm1::

Button11Click(TObject *Sender)

{

  Edit1->Clear();

  n1 = 0;

  n2 = 0;

  znak = ' ';

}