Лабораторная работа 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;
Аналогично
реализуйте все необходимые обработчики нажатия на соответствующие кнопки.