Лабораторная работа 5

Проект Windows Калькулятор

Составьте проект Windows Калькулятор. В качестве кнопок используйте компоненты SpeedButton. В качестве строки ввода значений используйте Statictext

 

 

Кнопки от 0 – до 9 формируют число в строку в StaticText .

Нажатие кнопки с соответствующей цифрой добавляет ее к содержимому строки в StaticText.

 

В файле реализации нужно объявить следующие глобальные переменные:

double a = 0, b = 0, zn = 0;

int op=0, DS = 0, z=0, dn = 0, d=0, kn=0, key=0;

AnsiString t1="", t2="", t3="";

Обработчик события на нажатие кнопки «5»:

if (dn!=1)

{

if ((StaticText1->Caption == "0,") ||

(StaticText1->Caption == FloatToStrF(a,ffGeneral,12,5)) ||

(StrToFloat(StaticText1->Caption) == a))

{

StaticText1->Caption = "";

StaticText1->Caption = StaticText1->Caption+"5,";

}

 else

 if (DS==0)

 {

 StaticText1->Caption = StaticText1->Caption-",";

 StaticText1->Caption = StaticText1->Caption+"5,";}

 else

 StaticText1->Caption = StaticText1->Caption+"5";

if (z==1)

kn=1;

d=1;

}

Обработчик события нажатия кнопки «=»

if (dn!=1)

{

DS=0;

key=0;

z=1;

if (kn==1)

{

b=StrToFloat(StaticText1->Caption);

switch (op)

{

 case 1: a=a+b; break;

 case 2: a=a-b; break;

 case 3: a=a*b; break;

 case 4: if (b==0)

{

StaticText1->Caption = "Íà íóëü äåëèòü íåëüçÿ";

dn = 1;

}

else

a=a/b; break;

}

if (dn!=1)

{

t1=FloatToStrF(a,ffGeneral,12,5);

if (t1.Pos(DecimalSeparator) != 0)

StaticText1->Caption = FloatToStrF(a,ffGeneral,12,5);

else

StaticText1->Caption = FloatToStrF(a,ffGeneral,12,5)+",";

}

kn=0;

}

op=4;

a=StrToFloat(StaticText1->Caption);

d=0;

}

Обработчик события нажатия на кнопку выбора действия «+»

if (dn!=1)

{

DS=0;

key=0;

z=1;

if (kn==1)

{

b=StrToFloat(StaticText1->Caption);

switch (op)

{

 case 1: a=a+b; break;

 case 2: a=a-b; break;

 case 3: a=a*b; break;

 case 4: if (b==0)

{

StaticText1->Caption = "На нуль делить нельзя";

dn = 1;

}

else

a=a/b; break;

}

if (dn!=1)

{

t1=FloatToStrF(a,ffGeneral,12,5);

if (t1.Pos(DecimalSeparator) != 0)

StaticText1->Caption = FloatToStrF(a,ffGeneral,12,5);

else

StaticText1->Caption = FloatToStrF(a,ffGeneral,12,5)+",";

}

kn=0;

}

op=1;

a=StrToFloat(StaticText1->Caption);

d=0;

}

Обработчик события нажатия на кнопку «BackSpace»

{

if (dn!=1)

{

 if (d!=0)

 {

 t1 = t2 = t3 = StaticText1->Caption;

  if (StaticText1->Caption.Length()==2)

  {

  StaticText1->Caption = "0,";

  }

  else

  {

  if (StaticText1->Caption.Length()==3)

   {

    while (t2.Length()!=1)

   {

   t2.Delete(t3.Length(),1);

   t3=t2;

   }

    if (t2=="-")

    {

    StaticText1->Caption = "0,";

    }

    else

    {

    t2 = t3 = StaticText1->Caption;

    while (t2.Length()!=1)

    {

    t2.Delete(t3.Length()-1,1);

    t3=t2;

    }

     if (t2==",")

     {

     t1.Delete(StaticText1->Caption.Length()-1,1);

     StaticText1->Caption = t1;

     }

     else

     {

     t1.Delete(StaticText1->Caption.Length(),1);

     StaticText1->Caption = t1;

     }

     }

     }

     else

     {

     while (t2.Length()!=1)

     {

     t2.Delete(t3.Length()-1,1);

     t3=t2;

     }

     if (t2==",")

     {

     t1.Delete(StaticText1->Caption.Length()-1,1);

     StaticText1->Caption = t1;

     }

     else

     {

     t1.Delete(StaticText1->Caption.Length(),1);

     StaticText1->Caption = t1;

     }

     }

    }

  }

 }

Обработчик события нажатия на кнопку «C»

StaticText1->Caption = "0,";

a=b=key=op=DS=kn=z=dn=d=0;

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