📄 calculater.txt
字号:
//including the required files
#include<iostream.h>
#include<string.h>
#include<graphics.h>
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
class win;
win* const screen=(win *)0;
enum bs{up,p};
enum boolean{f,t};
class win
{
protected:
win *ptown;
int left,top,right,bot;
int del;
int delcolor;
int ccolor;
public:
win(win *pt,int l,int t, int r,int b,int dc,int cc);
void display();
};
class bor: public win
{
public:
bor(win *pt,int l,int t,int r,int b,int dc=BLUE,int cc=DARKGRAY)
:win(pt,l,t,r,b,dc,cc)
{}
};
class button : public win
{
private:
char text[20];
bs butstat;
int poly[12];
public:
button(win* pt,int l,int t,int r,int b,int cc=BLACK,char* tx=" ")
:win(pt,l,t,r,b,BLACK,cc)
{
strcpy(text,tx);
butstat=up;
}
void click();
void display();
};
class output : public win
{
public:
output(win* pt,int l,int t,int r,int b,int dc=BLUE,int cc=WHITE)
:win(pt,l,t,r,b,dc,cc)
{}
void text(char *);
void num(double);
};
win::win(win *pt,int l,int t,int r,int b,int dc,int cc)
{
ptown=pt;
left=l;
top=t;
right=r;
bot=b;
delcolor=dc;
ccolor=cc;
del=((right-left)+(bot-top))/150+3;
if(ptown !=screen)
{
left=left+ptown->left;
right=right+ptown->left;
top=top+ptown->top;
bot=bot+ptown->top;
}
}
void win::display()
{
setfillstyle(SOLID_FILL,delcolor);
setcolor(delcolor);
bar(left,top,right,bot);
setfillstyle(SOLID_FILL,ccolor);
setcolor(ccolor);
bar(left+del+1,top+del,right-del-1,bot-del);
}
void button::click()
{
butstat=p;
button::display();
clock_t end=5+clock();
while(clock()<end)
;
butstat=up;
button::display();
}
void button::display(void)
{
win::display();
moveto(left+del*4,top+del*2);
setcolor(BLACK);
outtext(text);
setcolor(BLUE);
if(butstat==up)
{
//1 st point
poly[0]=left;
poly[1]=top;
//2 nd point
poly[2]=right;
poly[3]=top;
//
poly[4]=right-del;
poly[5]=top+del;
poly[6]=left+del;
poly[7]=top+del;
poly[8]=left+del;
poly[9]=bot-del;
poly[10]=left;
poly[11]=bot;
}
else
{
poly[0]=right;
poly[1]=top;
poly[2]=right;
poly[3]=bot;
poly[4]=left;
poly[5]=bot;
poly[6]=left+del;
poly[7]=bot-del;
poly[8]=right-del;
poly[9]=bot-del;
poly[10]=right-del;
poly[11]=top+del;
}
fillpoly(6,poly);
}
void output::text(char *ptstring)
{
display();
moveto(left+del*2,top+del*2);
setcolor(BLACK);
outtext(ptstring);
}
void output::num(double d)
{
char buffer[80];
sprintf(buffer,"%16.2lf",d);
output::text(buffer);
}
void main()
{
int gd,gm;
detectgraph(&gd,&gm);
initgraph(&gd,&gm," ");
setwritemode(COPY_PUT);
bor bor1(screen,240,30,480,330);
output out1(&bor1,20,20,220,60,BLACK,WHITE);
button b0(&bor1,30,230,65,265,DARKGRAY,"0");
button b1(&bor1,30,180,65,215,DARKGRAY,"1");
button b2(&bor1,78,180,113,215,DARKGRAY,"2");
button b3(&bor1,127,180,162,215,DARKGRAY,"3");
button b4(&bor1,30,130,65,165,DARKGRAY,"4");
button b5(&bor1,78,130,113,165,DARKGRAY,"5");
button b6(&bor1,127,130,162,165,DARKGRAY,"6");
button b7(&bor1,30,80,65,115,DARKGRAY,"7");
button b8(&bor1,78,80,113,115,DARKGRAY,"8");
button b9(&bor1,127,80,162,115,DARKGRAY,"9");
button addbtn(&bor1,175,230,225,265,BLUE,"+=");
button clrbtn(&bor1,127,230,162,265,BLUE,"c");
button dotbtn(&bor1,78,230,113,265,BLUE,".");
button subbtn(&bor1,175,180,210,215,BLUE,"-");
button mulbtn(&bor1,175,130,210,165,BLUE,"*");
button divbtn(&bor1,175,80,210,115,DARKGRAY,"/");
bor1.display();
b0.display();
b1.display();
b2.display();
b3.display();
b4.display();
b5.display();
b6.display();
b7.display();
b8.display();
b9.display();
addbtn.display();
clrbtn.display();
dotbtn.display();
subbtn.display();
mulbtn.display();
divbtn.display();
const char ESC=27;
char dstring[80];
char tempbuf[80];
int numchars=0;
char ch;
char oper;
boolean isfirst=t;
boolean chain=f;
double num1,num2,ans;
while((ch=getch())!=ESC)
{
if(ch>='0'&& ch<='9'||ch=='.')
{
switch(ch)
{
case '0':b0.click();
break;
case '1':b1.click();
break;
case '2':b2.click();
break;
case '3':b3.click();
break;
case '4':b4.click();
break;
case '5':b5.click();
break;
case '6':b6.click();
break;
case '7':b7.click();
break;
case '8':b8.click();
break;
case '9':b9.click();
break;
case '.':dotbtn.click();
break;
}
dstring[numchars++]=ch;
dstring[numchars]='\0';
if(atof(dstring)>9999999999.99||numchars>11)
dstring[--numchars]='\0';
out1.text(dstring);
}
else if(ch=='/'||ch=='*'||ch=='-'||ch=='+'||ch=='=')
{
strcpy(tempbuf,dstring);
numchars=0;
dstring[numchars]='\0';
out1.text(dstring);
if(isfirst)
{
num1=(chain)? ans:atof(tempbuf);
isfirst=f;
switch (ch)
{
case '/':divbtn.click();oper='/';break;
case '*':mulbtn.click();oper='+';break;
case '-':subbtn.click();oper='-';break;
case '+':
case '=':addbtn.click();oper='+';break;
}
}
else
{
addbtn.click();
num2=atof(tempbuf);
switch(oper)
{
case '/':ans=num1/num2;break;
case '*':ans=num1*num2;break;
case '-':ans=num1-num2;break;
case '+':ans=num1+num2;break;
}
if(ans>9999999999.99)
out1.text("Overflow");
else
{
out1.num(ans);
num1=ans;
}
isfirst=t;
chain=t;
}
}
else if(ch=='c'||ch=='C')
{
clrbtn.click();
isfirst=t;
chain=f;
numchars=0;
dstring[numchars]='\0';
out1.num(0.0);
}
}
closegraph();
restorecrtmode();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -