一个纯C实现的图形化计算器

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

一个纯C实现的图形化计算器,可以鼠标点击操作

#include"graphics.h"
#include"dos.h"
#include"stdio.h"
#include"math.h"
union REGS i,o;
char *text[]={ "7","8","9","*",
       "4","5","6","/",
       "1","2","3","+",
       "0","00",".","-",
      "M","M+","M-","+/-",
      "MR","MC","x^2","sr",
      "OFF","AC","CE","="};
 
int k=0,pass,op,prop,newnum=1,bt,memo=1,d=0,sq;
long double num=0,accum,m;
 
 
void normalbutton(int ,int ,int ,int,char**);
 
void main()
 
{
int gd=DETECT,gm,x1,x2,y1,y2,i,j,maxx,maxy,x,y,button;
char *text1[]={""","T","o"," ","K","n","o","w"," ","a","b","o",
     "u","t"," ","m","e"," ","l","o","g","o","n"," ",":"};
char *text2[]={"w","w","w",".","g","e","o","c","i","t","i","e","s",
    ".","c","o","m","/","t","a","l","k","d","e","e","p",
    "e","s","h"};
 
initgraph(&gd,&gm,"");
 
if(initmouse()==0)
 {
  closegraph();
  restorecrtmode();
  printf("
Mouse driver not loded");
  exit(1);
  }
  showmouseptr();
//  x=y=50;
  movemouseptr(&x,&y);
 
setbkcolor(11);
setcolor(1);
rectangle(198,140,417,163);
rectangle(199,141,418,164);
rectangle(197,139,416,162);
rectangle(185,130,430,450);
rectangle(184,129,431,451);
rectangle(182,127,433,454);
rectangle(181,126,434,453);
 
 
//setfillstyle(SOLID_FILL,3);
//bar(200,142,415,161);
 
outtextxy(200,50,"A Calculator in C");
outtextxy(200,100,"Press OFF button to exit....");
y1=140;
y2=160;
 
    for(j=0;j<7;j++)
 {
  x1=200;
  x2=235;
  y1+=40;
  y2+=40;
 
   for(i=0;i<4;i++)
  {
   normalbutton(x1,x2,y1,y2,text);
   x1+=60;
   x2+=60;
   }
 }
 
 
 while(1)
  {
 
 
    getmousepos(&button,&x,&y);
 
 
    y1=140;
    y2=160;
/*
    if( (x>400&&x<450) && (y>400&&y<420) )
  { if((button & 1)==1)
      { sound(500);
    delay(5);
    exit();
      }
  }
*/
    for(j=0;j<7;j++)
 {
  x1=200;
  x2=235;
  y1+=40;
  y2+=40;
 
   for(i=0;i<4;i++)
  {
 
     if((x<x2&&x>x1)&&(y<y2&&y>y1))
   {
    if((button & 1)==1)
     {  gotoxy(28,10);
     // printf("%d",ch=*text[j*4+i]);
     // printf("char is %c",ch);
    bt=j*4+i;
 // printf("char is %d",j*4+i);
    setcolor(11);
    outtextxy(x1+12,y1+7,text[j*4+i]);
 
    if(num>pow(10.0,18))
    exit();
    sound(500);delay(10);nosound();
    delay(250);
    sound(400);delay(10);
    nosound();
     switch (bt)
     {
     case  8 :
       addnum(1);
       break;
     case  9 :
       addnum(2);
       break;
     case  10 :
       addnum(3);
       break;
     case  4 :
       addnum(4);
       break;
     case  5 :
       addnum(5);
       break;
     case  6 :
       addnum(6);
       break;
     case  0 :
       addnum(7);
       break;
     case  1 :
       addnum(8);
       break;
     case  2 :
       addnum(9);
       break;
     case  12 :
       addnum(0);
       break;
     case  11 :
       // plus
       operation(1);
       break;
 
     case  15 :
       // minus
       operation(2);
       break;
     case  3 :
       // multiplication
       operation(3);
       break;
     case  7 :
       // division
       operation(4);
       break;
     case 13:
       doublezero();
       break;
     case  14 :
       decimal();
       break;
 
     case 16:
       mem();
       break;
     case 20:
       recallmem();
       break;
     case 19:
       plusminus();
       break;
     case 17:
       plusm();
       break;
     case 18:
       minusm();
       break;
     case 21:
       clearm();
       break;
     case 22 :
       square();
       break;
     case 23:
 
       sqroot();
       break;
     case 24:
      // OFF
       hidemouseptr();
       setcolor(1);
       for(j=0;j<20;j++)
     {
    for(i=75;i<481;i+=20)
 
       line(0,0+i+j,640,j+0+i);
 
       delay(100);
     }
       setcolor(14);
       outtextxy(225,200,"Thanks for using it !");
       delay(2000);
       setcolor(13);
    for(j=0;j<20;j++)
     {
    for(i=0;i<640;i+=20)
 
       line(0+i+j,0,j+0+i,640);
 
       delay(100);
     }
       setcolor(1);
 
       for(i=0;i<25;i++)
      {
    outtextxy(75+10*i,200,text1[i]);
       sound(3000);
       delay(50);
       nosound();
      }
       for(i=0;i<29;i++)
      {
    outtextxy(125+10*i,225,text2[i]);
       sound(3000);
       delay(50);
       nosound();
      }
       
 
       delay(2500);
       sound(5000);
       delay(10);
       exit();
       break;
     case 25:
      allclear();
      break;
 
     case 26:
      clear();
      break;
 
     case 27:
     //  equalto
       operation(5);
       break;
 
 
 
     }
     setcolor(1);
    outtextxy(x1+12,y1+7,text[j*4+i]);
 
     }
   }
    x1+=60;
    x2+=60;
 
   }
 
 }
 
  }
 
 
 
}
 
void normalbutton(int x1,int x2,int y1,int y2,char **text)
{
setcolor(15);
rectangle(x1-2,y1-2,x2+1,y2+1);
rectangle(x1-1,y1-1,x2+2,y2+2);
setcolor(7);
rectangle(x1,y1,x2+2,y2+2);
rectangle(x1,y1,x2+1,y2+1);
 
setfillstyle(SOLID_FILL,14);
bar(x1,y1,x2,y2);
setcolor(1);
outtextxy(x1+12,y1+7,text[k]);
k++;
}
/* initmouse */
initmouse()
{
 i.x.ax=0;
 int86 (0x33,&i,&o);
 return(o.x.ax);
}
hidemouseptr()
{
     i.x.ax=2;
     int86(0x33,&i,&o);
}
 
/* displays mouse pointer */
showmouseptr()
{
 i.x.ax=1;
 int86(0x33,&i,&o);
 return 0;
}
 
/*gets mouse coordinates and button status*/
 
getmousepos(int *button,int *x,int *y)
{
 i.x.ax=3;
 int86(0x33,&i,&o);
 *button=o.x.bx;
 *x=o.x.cx;
 *y=o.x.dx;
 return 0;
}
/* Move mouse ptr to x,y */
movemouseptr(int *x,int *y)
{
 i.x.ax=4;
 int86(0x33,&i,&o);
 o.x.cx=*x;
 o.x.dx=*y;
 return 0;
}
 
addnum(int pass)
{   if(sq)
    newnum=1;
 
    if(newnum)
      {      if(d)
    {
      num=pass/(pow(10.0,d));
      d++;
      newnum=0;
    }
     else
    {  num=pass;
       newnum=0;
    }
      }
    else
    {
    /*  if(num==0)
      {    if(d)
    {
      num=num+pass/(pow(10.0,d));
      d++;
    }
      else
      num=pass;
       }
    */
    //   else
       {    if(d)
    {
       if(num<0)
     num=num-pass/(pow(10.0,d));
       else
     num=num+pass/(pow(10.0,d));
      d++;
    }
    else
    {
    num=num*10+pass;
    }
    }
     }
 printf("%25.5Lf",num);
}
 
operation(int opr)
{  long double pnum;
   pnum=num;
 
   if(newnum && (prop != 5) && memo)
   {
   }
   else
  {  newnum=1;
     d=0;
     sq=0;
     switch(prop)
    {
     case 1:
    accum=accum+pnum;
    break;
     case 2:
    accum=accum-pnum;
    break;
     case 3:
    accum=accum*pnum;
    break;
     case 4:
    accum=accum/pnum;
    break;
     default:
       accum=pnum;
     }
  }
    prop=opr;
    num=accum;
 printf("%25.5Lf",num);
}
 
allclear()
{
 sq=0;
 accum=0;
 num=0;
 d=0;
 newnum=1;
 printf("%25.5Lf",num);
}
 
mem()
{
 m=num;
}
recallmem()
{
 memo=0;
 printf("%25.5Lf",m);
 num=m;
}
plusminus()
{ if(num!=0)
  { num*=-1;
    printf("%25.5Lf",num);
  }
}
 
 
plusm()
{
m+=num;
}
minusm()
{
m-=num;
}
clearm()
{
m=0;
}
decimal()
{
 if(!d)
  {d=1;
    if(newnum==1)
    {
     num=0;
    }
  printf("%25.5Lf",num);
  }
}
 
square()
{ sq=1;
 num*=num;
 printf("%25.5Lf",num);
// newnum=1;
}
sqroot()
{ sq=1;
 num=pow(num,0.5);
 printf("%25.5Lf",num);
// newnum=1;
}
doublezero()
{
 if(d)
   {
    // num=num+pass/(pow(100.0,d));
     d++;
     d++;
   }
 else
  num*=100;
 printf("%25.5Lf",num);
}
 
clear()
{
num=0;
printf("%25.5Lf",num);
}

标签: isp

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:SQL计算两个日期之间的工作天数(除过周六日的天数)

下一篇:c++使用win32 api windows下遍历文件夹