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

📄 小型科学计算器.txt

📁 JAVA写计算器程序,有点像Windows的计算器 可以实现加.减.乘.除.平方.开方等运算 是我们课程设计时用的一个
💻 TXT
字号:
                                        

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);
 }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -