| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
w427
10年前发布

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

一个纯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);  }