一個純C實現的圖形化計算器

w427 9年前發布 | 1K 次閱讀 C/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[j4+i]); // printf("char is %c",ch); bt=j4+i; // printf("char is %d",j4+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); }</pre>

 本文由用戶 w427 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!