用JAVA编写计算器程序(模拟windows计算器)

waj603870063 贡献于2014-01-02

作者 sd  创建于2007-03-18 06:46:00   修改者sd  修改于2007-03-18 06:47:00字数7513

文档摘要:用JAVA编写计算器程序(模拟Windows计算器)
关键词:

用JAVA编写计算器程序(模拟Windows计算器) import java.awt.*; import java.awt.event.*; public class Calculation extends WindowAdapter implements ActionListener {  double dResult=0;  double dNowInput=0;  double dMemory;  int  n=0; //记载小数位数  int  nOperation=1; // 记录运算符类型  int  nBitsNum=0;  //记录总共输入的位数  boolean alreadyHaveDot=false; //已经有小数点?  boolean keyAvailable=true;  boolean alreadyClickedEqueal=false; //是否按下过"="?  boolean isTempNowInput=false; //是否在计算出结果后直接按运算符将结果赋给了当前输入值?    Frame f;  Panel p1,p2,p3,p4,p5,p6;  TextField tf1,tf2;  Button b1,b2,b3,b4,b5,b6,b7,b8,b9,b0;  Button bDiv,bSqrt,bMulti,bMinus,bPercent,bPlus,bReciprocal,bEqual,bDot,bNegative;  Button bBackspace,bCE,bC,bMR,bMS,bMC,bM;    public void display()  {   f=new Frame("计算器");   f.setSize(280,213);   f.setLocation(200,200);   f.setBackground(Color.LIGHT_GRAY);   f.setResizable(false);     f.setLayout(new BorderLayout(3,3));     p1=new Panel(new GridLayout(1,3,5,5));  //用于存放backspace,ce,c三键   p2=new Panel(new GridLayout(4,5,5,5)); //用于存放数字区及附近共20键, 此处间隙设置可能不合理,以后调整   p3=new Panel(new GridLayout(5,1,5,5)); //用于存放MC,MR,MS,M+键及显示M状态文本框,此处间隙设置可能不合理,以后调整   p4=new Panel(new FlowLayout()); //用于存放p1,p2   p5=new Panel(new FlowLayout());   p6=new Panel(new FlowLayout());   p4.add(p1);   p4.add(p2);     tf1=new TextField(35);      //存放显示区   tf1.setText("0.");   tf1.setEditable(false);   p5.add(tf1);   f.add(p5,BorderLayout.NORTH);   f.add(p4,BorderLayout.CENTER);   f.add(p3,BorderLayout.WEST);     b1=new Button("1");   b2=new Button("2");   b3=new Button("3");   b4=new Button("4");   b5=new Button("5");   b6=new Button("6");   b7=new Button("7");   b8=new Button("8");   b9=new Button("9");   b0=new Button("0");     b1.addActionListener(this);   b2.addActionListener(this);   b3.addActionListener(this);   b4.addActionListener(this);   b5.addActionListener(this);   b6.addActionListener(this);   b7.addActionListener(this);   b8.addActionListener(this);   b9.addActionListener(this);   b0.addActionListener(this);     bDiv=new Button("/");   bSqrt=new Button("sqrt");   bMulti=new Button("*");   bMinus=new Button("-");   bPercent=new Button("%");   bPlus=new Button("+");   bReciprocal=new Button("1/x");   bEqual=new Button("=");   bDot=new Button(".");   bNegative=new Button("+/-");     bDiv.addActionListener(this);   bSqrt.addActionListener(this);   bMulti.addActionListener(this);   bMinus.addActionListener(this);   bPercent.addActionListener(this);   bPlus.addActionListener(this);   bReciprocal.addActionListener(this);   bEqual.addActionListener(this);   bDot.addActionListener(this);   bNegative.addActionListener(this);     p2.add(b7);   p2.add(b8);   p2.add(b9);   p2.add(bDiv);   p2.add(bSqrt);   p2.add(b4);   p2.add(b5);   p2.add(b6);   p2.add(bMulti);   p2.add(bPercent);   p2.add(b1);   p2.add(b2);   p2.add(b3);   p2.add(bMinus);   p2.add(bReciprocal);   p2.add(b0);   p2.add(bNegative);   p2.add(bDot);   p2.add(bPlus);   p2.add(bEqual);     bBackspace=new Button("Backspace");   bCE=new Button("CE");   bC=new Button("C");     bBackspace.addActionListener(this);   bCE.addActionListener(this);   bC.addActionListener(this);     p1.add(bBackspace);   p1.add(bCE);   p1.add(bC);     tf2=new TextField(2);   tf2.setEnabled(false);   tf2.setBackground(Color.LIGHT_GRAY);   bMC=new Button("MC");   bMR=new Button("MR");   bMS=new Button("MS");   bM=new Button("M+");     bMC.addActionListener(this);   bMR.addActionListener(this);   bMS.addActionListener(this);   bM.addActionListener(this);     p6.add(tf2);   p3.add(p6);   p3.add(bMC);   p3.add(bMR);   p3.add(bMS);   p3.add(bM);     f.setVisible(true);   f.addWindowListener(this);    }  public void actionPerformed(ActionEvent e)  {   //key 0 to 9   if(this.keyAvailable && e.getActionCommand().length()==1 && e.getActionCommand().compareTo("0")>=0 && e.getActionCommand().compareTo("9")<=0)   {    if(this.isTempNowInput)    {     this.dNowInput=0;     this.isTempNowInput=false;    }    this.nBitsNum++;     if(this.alreadyHaveDot==false)     this.dNowInput=this.dNowInput*10+Double.parseDouble(e.getActionCommand());    else    {     double temp=Double.parseDouble(e.getActionCommand());     for(int i=this.n;i<0;i++)     {          temp*=0.1;     }     this.dNowInput+=temp;     this.n--;    }    this.tf1.setText(Double.toString(this.dNowInput));   }   // key dot   if(this.keyAvailable && e.getActionCommand()==".")   {    if(this.alreadyHaveDot==false)    {     this.nBitsNum++;     this.alreadyHaveDot=true;     this.n=-1;    }   }   //key "+","-","*","/"   if(this.keyAvailable && e.getActionCommand()=="+" || e.getActionCommand()=="-" || e.getActionCommand()=="*" || e.getActionCommand()=="/")   {    if(this.alreadyClickedEqueal)    {     this.dNowInput=this.dResult;     this.isTempNowInput=true;    }    else    {     switch(this.nOperation)     {      case 1: this.dResult+=this.dNowInput; break;      case 2: this.dResult-=this.dNowInput; break;      case 3: this.dResult*=this.dNowInput; break;      case 4:      {       if(this.dNowInput==0)       {        tf1.setText("除数不能为零");        this.keyAvailable=false;       }       else this.dResult=this.dResult/this.dNowInput;      }     }     if(this.keyAvailable)tf1.setText(Double.toString(this.dResult));     this.dNowInput=0;    }      if(e.getActionCommand()=="+")    {     this.nOperation=1;    }    if(e.getActionCommand()=="-")    {     this.nOperation=2;    }    if(e.getActionCommand()=="*")    {     this.nOperation=3;    }    if(e.getActionCommand()=="/")    {     this.nOperation=4;    }    this.nBitsNum=0;    this.alreadyClickedEqueal=false;   }   // key "+/-"   if(this.keyAvailable && e.getActionCommand()=="+/-")   {    this.dNowInput=0-this.dNowInput;    tf1.setText(Double.toString(this.dNowInput));     }   // key "C"   if(e.getActionCommand()=="C")   {    this.nBitsNum=0;    this.dResult=0;    this.dNowInput=0;    this.alreadyHaveDot=false;    this.n=0;    this.nOperation=1;    this.keyAvailable=true;    this.alreadyClickedEqueal=false;    tf1.setText("0.");   }   // key "CE"   if(e.getActionCommand()=="CE")   {    this.nBitsNum=0;    this.dNowInput=0;    this.alreadyHaveDot=false;    this.n=0;    this.nOperation=1;    this.keyAvailable=true;    tf1.setText("0.");   }     // key "sqrt"   if(this.keyAvailable && e.getActionCommand()=="sqrt")   {    if(this.alreadyClickedEqueal)    {     if(this.dResult>=0)     {      this.dResult=Math.sqrt(this.dResult);      tf1.setText(Double.toString(this.dResult));     }     else     {      tf1.setText("函数输入无效");      this.keyAvailable=false;     }    }    else    {     if(this.dNowInput>=0)     {      this.dNowInput=Math.sqrt(this.dNowInput);      tf1.setText(Double.toString(this.dNowInput));     }     else     {      tf1.setText("函数输入无效");      this.keyAvailable=false;     }    }   }   // key "1/x"   if(this.keyAvailable && e.getActionCommand()=="1/x")   {    if(this.dNowInput==0)    {     tf1.setText("除数不能为零");     this.keyAvailable=false;    }    else    {     this.dNowInput=1/this.dNowInput;     tf1.setText(Double.toString(this.dNowInput));    }   }   // key "="   if(this.keyAvailable && e.getActionCommand()=="=")   {    this.alreadyClickedEqueal=true;    switch(this.nOperation)    {     case 1: this.dResult+=this.dNowInput; break;     case 2: this.dResult-=this.dNowInput; break;     case 3: this.dResult*=this.dNowInput; break;     case 4:     {      if(this.dNowInput==0)      {       tf1.setText("除数不能为零");       this.keyAvailable=false;      }      else this.dResult=this.dResult/this.dNowInput;     }    }    if(this.keyAvailable)tf1.setText(Double.toString(this.dResult));    }   // key "MS"   if(this.keyAvailable && e.getActionCommand()=="MS")   {    this.dMemory=this.dNowInput;    if(this.dMemory!=0)     tf2.setText("M");   }   // key "MC"   if(this.keyAvailable && e.getActionCommand()=="MC")   {    this.dMemory=0;    tf2.setText("");   }   // key "MR"   if(this.keyAvailable && e.getActionCommand()=="MR")   {    this.dNowInput=this.dMemory;    tf1.setText(Double.toString(this.dNowInput));   }   // key "M+"   if(this.keyAvailable && e.getActionCommand()=="M+")   {    this.dMemory+=this.dNowInput;    if(this.dMemory!=0)     tf2.setText("M");    else tf2.setText("");   }   // key "%"   if(this.keyAvailable && e.getActionCommand()=="%")   {    this.dNowInput=(this.dResult*this.dNowInput)/100;    tf1.setText(Double.toString(this.dNowInput));   }   // key "Backspace"   if(this.keyAvailable && e.getActionCommand()=="Backspace")   {    if(!this.alreadyClickedEqueal){     if(this.dNowInput!=0)     {      if(this.alreadyHaveDot)      {       if(this.n==-1)       {        this.alreadyHaveDot=false;        this.n=0;       }       else       {        String str,str1;        str=tf1.getText();        str1=str.substring(0,this.nBitsNum-1);        this.nBitsNum--;        this.n++;        this.dNowInput=Double.parseDouble(str1);        tf1.setText(Double.toString(this.dNowInput));            }      }      else      {       int temp;       temp=(int)(this.dNowInput/10);       this.dNowInput=(double)temp;       tf1.setText(Double.toString(this.dNowInput));      }     }    }    }  }  public static void main(String args[])  {   Calculation cal=new Calculation();   cal.display();  }  public void windowClosing(WindowEvent e)  {   System.exit(0);  } }

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档