当前位置:文档之家› 用JAVA编写计算器程序(模拟Windows计算器)

用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,p2p5=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 9if(this.keyAvailable && e.getActionCommand().length()==1 && e.getActionComman d().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 dotif(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);}}。

相关主题