⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculater.txt

📁 this program written in c++ and it is a small calculator that make many operations
💻 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 + -