charch='0';
charemp[80],sum[80],*e,*s;
doubleyuan=0.;
select()
{
if(where_chu)key=47;
elseif(where_cheng)key=42;
elseif(where_jian)key=45;
elseif(where_jia)key=43;
elseif(where_num1)key=49;
elseif(where_num2)key=50;
elseif(where_num3)key=51;
elseif(where_enter)key=ENTER;
elseif(where_num4)key=52;
elseif(where_num5)key=53;
elseif(where_num6)key=54;
elseif(where_dot)key=46;
elseif(where_num7)key=55;
elseif(where_num8)key=56;
elseif(where_num9)key=57;
elseif(where_num0)key=48;
elseif(where_kai)key=32;
elseif(where_guan)key=EXCAPE;
elseif(where_fuhao)key=MINUS;
elseif(where_zhishu)key=EXP;
elsekey=0;
}
voidwelcome()*欢迎界面*
{
char*Info="\n\n\n\
\n\Welcometousethiscalculator!
\
\n\
\n\
\n\
Inthiscalculator,bothkeyboardandmousecanbeused.\n\n\
KEYS:
\n\
ThankstoMyBOBO,\
I\
Butitwasreallyanefforformetomakethosethingsclear.\n\
I\n\
\n\
\n\n\
GOODLUCK!
\0";
while(*Info++!
='\0'&&bioskey
(1)==0)
{
sound(300);
nosound();
printf("%c",*(Info-1));
delay(10000);
}
}
voidmain()
{
voidinitialmouse(void);*初始化鼠标*
doublechar_to_float(char*p);*浮点数转换成浮点数*
inti,flag=0;*输入结果标记*
doublet;
intinput();
intgd=DETECT,gm;
initgraph(&gd,&gm,"");*初始化屏幕为图形模式*
rmouse();*初始化鼠标*
Area();
e=emp;
s=sum;
welcome();
initialmouse();
x=120;*结果输出位置*
y=1;
while
(1)*始终记录用户的命令和操作*
{
reg_b=0;
do{
showmouse();*显示鼠标的光标*
if(reg_b)select();*检测鼠标的左键按钮*
}while(reg_b==0&&bioskey
(1)==0);
if(bioskey
(1)!
=0)key=input();
switch(key)*各种操作功能选择*
{
caseEXCAPE:
bar(guan);
delay(8000);
initialmouse();
exit(0);
case47:
*³ý·¨*
bar(chu);
delay(8000);
initialmouse();
if(ch!
='0')
{
switch(ch)
{
case'':
{
if(char_to_float(emp)==0.0)
{
ch='0';
flag=0;
dian=0;
emp[0]='\0';
sum[0]='\0';
e=emp;
s=sum;
outtextxy(x+30,y+40,"error!
!
!
!
!
");
break;
}
yuan=char_to_float(sum)char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+38,y+40,sum);
break;
}
case'*':
*³Ë·¨*
{
yuan=char_to_float(sum)*char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
break;
}
case'+':
*¼Ó·¨*
{
yuan=char_to_float(sum)+char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
break;
}
case'-':
*¼õ·¨*
{
if(char_to_float(sum)>=char_to_float(emp))
{
yuan=char_to_float(sum)-char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=char_to_float(emp)-char_to_float(sum);
sprintf(sum,"-%0.10f",yuan);
}
outtextxy(x+30,y+40,sum);
emp[0]='\0';
}
}
}
else{
if(flag==0)
{
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);
}
elseouttextxy(x+30,y+40,sum);
}
ch='';
flag=0;
emp[0]='\0';
e=emp;
dian=0;
break;
case42:
*°´ÏÂ*ºÅ*
{
bar(cheng);
delay(8000);
initialmouse();
if(ch!
='0')
{
switch(ch)
{
case'':
yuan=char_to_float(sum)char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'*':
yuan=char_to_float(sum)*char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'+':
yuan=char_to_float(sum)+char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'-':
if(char_to_float(sum)>=char_to_float(emp))
{
yuan=char_to_float(sum)-char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=char_to_float(emp)-char_to_float(sum);
sprintf(sum,"-%0.10f",yuan);
}
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
}
}
else
{
if(flag==0)
{
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);
e=emp;
}
else
}
outtextxy(x+30,y+40,sum);
ch='*';
flag=0;
dian=0;
break;
}
case45:
*°´ÏÂ-ºÅ*
bar(jian);
delay(8000);
initialmouse();
if(ch!
='0')
{
switch(ch){
case'':
yuan=char_to_float(sum)char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'*':
yuan=char_to_float(sum)*char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'+':
yuan=char_to_float(sum)+char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'-':
if(char_to_float(sum)>=char_to_float(emp)){
yuan=char_to_float(sum)-char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=char_to_float(emp)-char_to_float(sum);
sprintf(sum,"-%0.10f",yuan);
}
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
}
}
else{
if(flag==0)
{
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);
e=emp;
}
else
outtextxy(x+30,y+40,sum);
}
ch='-';
flag=0;
dian=0;
break;
case43:
bar(jia);
delay(8000);
initialmouse();
if(ch!
='0'){
switch(ch){
case'':
yuan=char_to_float(sum)char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'*':
yuan=char_to_float(sum)*char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'+':
yuan=char_to_float(sum)+char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'-':
if(char_to_float(sum)>=char_to_float(emp)){
yuan=char_to_float(sum)-char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
}
else{
yuan=char_to_float(emp)-char_to_float(sum);
sprintf(sum,"-%0.10f",yuan);
}
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
}
}
else{
if(flag==0)
{
outtextxy(x+30,y+40,emp);
stpcpy(sum,emp);
e=emp;
}
else
outtextxy(x+30,y+40,sum);
}
ch='+';
flag=0;
dian=0;
break;
case'm':
bar(fuhao);
delay(8000);
initialmouse();
for(i=0;i<=79;i++)
{
if(emp[i]=='\0')
break;
}
if(flag==0){
*e='-';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
elseouttextxy(x+30,y+40,sum);
break;
case49:
*°´ÏÂ1*
bar(num1);
delay(8000);
initialmouse();
for(i=0;i<=79;i++)
{
if(emp[i]=='\0')
break;
}
if(flag==0){
*e='1';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
elseouttextxy(x+30,y+40,sum);
break;
case50:
bar(num2);
delay(8000);
initialmouse();
for(i=0;i<=79;i++)
{
if(emp[i]=='\0')
break;
}
if(flag==0){
*e='2';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
elseouttextxy(x+30,y+40,sum);
break;
case51:
bar(num3);
delay(8000);
initialmouse();
for(i=0;i<=79;i++)
{
if(emp[i]=='\0')
break;
}
if(flag==0){
*e='3';e++;*e='\0';
outtextxy(x+30,y+40,emp);
}
elseouttextxy(x+30,y+40,sum);
break;
caseEXP:
*×ÔÈ»¶ÔÊý*
bar(zhishu);
delay(8000);
initialmouse();
if(flag==1&&ch=='0')yuan=exp(char_to_float(sum));
elseyuan=exp(char_to_float(emp));
sprintf(emp,"%0.10f",yuan);
outtextxy(x+30,y+40,emp);
flag=0;
dian=0;
break;
caseENTER:
bar(enter);
delay(8000);
initialmouse();
if(ch!
='0')
{
switch(ch)
{
case'':
yuan=char_to_float(sum)char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'*':
yuan=char_to_float(sum)*char_to_float(emp);
sprintf(sum,"%0.10f",yuan);
outtextxy(x+30,y+40,sum);
emp[0]='\0';
e=emp;
break;
case'+':
yuan=c