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

📄 tcalculator.java

📁 JAVA编程语言学习中的计算器编程代码实验
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*; 
import java.lang.*;
class tcalculator extends Frame implements ActionListener {
	/*以下代码定义面板中的单位*/
	TextField result,mtext;
	Panel panel1,panel2,panel3,panel4;
	MenuBar menu;
	Menu edit, view, help; 
	MenuItem copy, paste, tcal, scal, group, mhelp, about;
	Button back,ce,c;
	Button num[];
	Button mc, mr, ms, madd,dot, aors, add, sub, mul,div, percent,sqrt, recip, equal,sure;
	double memo,tran1,tran2,cp;
	int sign=0;
	boolean cpable;
	Dialog dia;
	Label l1,l2,l3;
	
	/*以下构造函数*/
	public tcalculator() {
		super("计算器");
		result = new TextField(15);//用来显示数字 
        result.setText(""); 
        result.setEditable(true); 
        result.setBackground(new Color(255, 255, 255));
        panel1 = new Panel(); 
        add(panel1,BorderLayout.CENTER);
        panel2 = new Panel(); 
        panel3 = new Panel(); 
        panel1.setLayout(new BorderLayout());
        /*设计菜单栏*/
        menu=new MenuBar();
        /*设计编辑菜单*/ 
        edit=new Menu("编辑(E)");
        copy=new MenuItem(" 复制(C) Ctrl+C");  
        paste=new MenuItem(" 粘贴(V) Ctrl+V");
        edit.add(copy); 
        edit.add(paste);
        /*设计查看菜单*/   
        view=new Menu("查看(V)");
        tcal=new MenuItem("●标准型(T)"); 
        scal=new MenuItem(" 科学型(S)");
        group=new MenuItem(" 数字分组(I)");         
        view.add(tcal); 
        view.add(scal); 
        view.addSeparator();         
        view.add(group);
        /*设计帮助菜单*/   
        help=new Menu("帮助(H)");
        mhelp=new MenuItem("帮助主题");
        view.addSeparator();
        about=new MenuItem("关于计算器");
        help.add(mhelp); 
        help.add(about); 
        menu.add(edit); 
        menu.add(view); 
        menu.add(help);
        setMenuBar(menu); //将菜单栏添加到窗体中
        /*将文本框以及面板panel2添加到面板panel1中,panel1布局为方位布局*/        
        panel1.add(result, BorderLayout.CENTER); 
        panel1.add(panel2, BorderLayout.SOUTH); 
        panel2.setLayout(new BorderLayout());
        mtext=new TextField(3);//用于显示内存运算的文本框
        mtext.setEditable(false);//显示内存运算的文本框不可编辑
        mtext.setBackground(new Color(217, 217, 217));
        back=new Button("Backspace"); 
        /*设计Backspace、CE、C按钮*/ 
        ce=new Button("CE"); 
        c=new Button("C");
        /*将Backspace、CE、C按钮以及面板panel3、panel4添加到panel2,panel2的布局为方位布局*/ 
        panel2.add(panel3, BorderLayout.NORTH); 
        panel3.setLayout(new FlowLayout(FlowLayout.RIGHT)); 
        panel3.add(mtext);
        panel3.add(back); 
        panel3.add(ce); 
        panel3.add(c);
        panel4=new Panel(); 
        panel2.add(panel4, BorderLayout.CENTER);
        /*设计数字按钮、小数点按钮、'+/-'按钮*/
        num=new Button[10];
        for (int i = 0; i < num.length; i++) { 
            num[i] = new Button(Integer.toString(i)); 
            num[i].setForeground(Color.blue); 
        }
        dot= new Button("."); 
        dot.setForeground(Color.blue); 
        aors=new Button("+/-"); 
        aors.setForeground(Color.blue);
        /*设计加减乘除以及'='按钮*/ 
        add=new Button("+"); 
        add.setForeground(Color.red); 
        sub=new Button("-"); 
        sub.setForeground(Color.red); 
        mul = new Button("*"); 
        mul.setForeground(Color.red); 
        div = new Button("/"); 
        div.setForeground(Color.red);
        equal = new Button("="); 
        equal.setForeground(Color.red);
        /*设计开方、百分数、倒数按钮*/
        sqrt = new Button("sqrt"); 
        sqrt.setForeground(Color.blue);  
        percent = new Button("%"); 
        percent.setForeground(Color.blue); 
        dao = new Button("1/x"); 
        dao.setForeground(Color.blue);
        /*设计内存运算按钮*/ 
        mc= new Button("MC"); 
        mc.setForeground(Color.red); 
        mr=new Button("MR"); 
        mr.setForeground(Color.red); 
        ms=new Button("MS"); 
        ms.setForeground(Color.red); 
        madd= new Button("M+"); 
        madd.setForeground(Color.red);
        /*将有关运算的按钮添加到panel4中,panel4为网格布局*/ 
        panel4.setLayout(new GridLayout(4, 6,3,3)); 
		panel4.add(mc); 
		panel4.add(num[7]); 
		panel4.add(num[8]); 
		panel4.add(num[9]); 
		panel4.add(div); 
		panel4.add(sqrt); 
		panel4.add(mr); 
		panel4.add(num[4]); 
		panel4.add(num[5]); 
		panel4.add(num[6]); 
		panel4.add(mul); 
		panel4.add(percent); 
		panel4.add(ms); 
		panel4.add(num[1]); 
		panel4.add(num[2]); 
		panel4.add(num[3]); 
		panel4.add(sub); 
		panel4.add(dao); 
		panel4.add(madd); 
		panel4.add(num[0]); 
		panel4.add(aors); 
		panel4.add(dot); 
		panel4.add(add); 
		panel4.add(equal);
		/*将功能按钮添加监听*/
		back.addActionListener(this);
		ce.addActionListener(this);
		c.addActionListener(this);
        for (int i = 0; i < num.length; i++){
        	num[i].addActionListener(this);
        }   
        dot.addActionListener(this);
        add.addActionListener(this);
        sub.addActionListener(this);
        mul.addActionListener(this);
        div.addActionListener(this);
        equal.addActionListener(this);
        percent.addActionListener(this);
        dao.addActionListener(this);
        sqrt.addActionListener(this);
        aors.addActionListener(this);
        mc.addActionListener(this);
        mr.addActionListener(this);
        ms.addActionListener(this);
        madd.addActionListener(this);
        copy.addActionListener(this);
        paste.addActionListener(this);
        tcal.addActionListener(this);
        scal.addActionListener(this);
        about.addActionListener(this);
        /*实现窗口的关闭*/
        addWindowListener(new WindowAdapter(){
        public void  windowClosing(WindowEvent e) {tcalculator.this.dispose(); }
       } 
     );    
   }
   /*事件处理*/
    public void actionPerformed(ActionEvent e){
   	    Object t=e.getSource();//获取事件来源
   	    try {
   	    	/*实现退格功能*/
	   	    if (t==back) {
	   	      String s=result.getText();
	   	      result.setText("");
	   	      for (int i=0;i<s.length()-1;i++){
	   	      	char a=s.charAt(i);
	   	      	result.setText(result.getText()+a);
	   	      	}
	   	      }
	   	     /*实现第二个数的清空*/ 
	   	    if (t==ce)
	   	      result.setText("");
	   	    /*实现所有清空*/  
	   	    if (t==c) {
	   	      result.setText("");
	   	      tran1=0;
	   	      tran2=0;
	   	    }
	   	    /*实现数字的输入*/     
	   	    for (int i=0;i<=9;i++)
	   	      if (t==num[i])
	   	        result.setText(result.getText()+i);
	   	    /*实现小数点的输入*/    
	   	    if (t==dot) {
	   	      boolean isdot=false;
	   	        for (int i=0;i<result.getText().length();i++) 
	   	      	    if (result.getText()==""||'.'== result.getText().charAt(i)) {
	   	      	      isdot=true;
	   	      	      break;
	   	      	  }
	   	      if (isdot==false)
	   	        result.setText(result.getText()+".");	   
	   	    }
	   	    /*实现'+/-'的输入*/
	   	    if (t==aors) {
	   	    	String s=result.getText();
	   	    	if (s.charAt(0)=='-') {
	   	    		result.setText("");
	   	    		for (int i=1;i<s.length();i++){
	   	    			char a=s.charAt(i);
	   	    			result.setText(result.getText()+a);   	    			
	   	    		}
	   	    	}
	   	    	else 
	   	    	   	result.setText("-"+s);
	   	    }
	   	    /*实现加减乘除的功能*/
	   	    if (t==add||t==sub||t==mul||t == div) {
	   	    	/*加*/ 
	            if (t==add) { 
	               tran1=Double.parseDouble(result.getText()); 
	               result.setText(""); 
	               sign=1; 
	            }
	            /*减*/ 
	            if (t == sub) { 
	               tran1=Double.parseDouble(result.getText()); 
	               result.setText(""); 
	               sign=2; 
	            }
	            /*乘*/ 
	            if (t==mul) { 
	               tran1=Double.parseDouble(result.getText()); 
	               result.setText(""); 
	               sign=3; 
	            }
	            /*除*/ 
	            if (t == div) { 
	               tran1=Double.parseDouble(result.getText()); 
	               result.setText(""); 
	               sign=4; 
	            } 
	        }
	        /*根据运算符号,实现等号的功能*/ 
	        if (t == equal) {
	           tran2=Double.parseDouble(result.getText());
	           switch (sign) {
	           	case 1://加法
	           	  tran1+=Double.parseDouble(result.getText());
	           	  result.setText(""+tran1);
	           	  break;
	           	case 2://减法
	           	  tran1-=Double.parseDouble(result.getText());
	           	  result.setText(""+tran1);
	           	  break;
	           	case 3://乘法
	           	  tran1*=Double.parseDouble(result.getText());
	           	  result.setText(""+tran1);
	           	  break;
	           	case 4://除法
	           	  if (tran2==0) {
	           		 result.setText("除数不能为零");
	           	     break;
	           	  } 
	           	  else 
	           	     tran1/=Double.parseDouble(result.getText());	
	           	     result.setText(""+tran1);
	           	     break;
	           }
	        }
	        /*实现开方功能*/
	        if (t==sqrt) {
	        	tran2=Double.parseDouble(result.getText());
	        	if (tran2<0) 
	        		result.setText("负数无法开方");
	            else {
	            	tran2=Math.sqrt(tran2);
	        		result.setText(""+tran2);
	            }
	        }
	        /*实现求百分数的功能*/
	        if (t==percent) {
	        	if (tran1==0) {
	        		String s=result.getText();
	        		result.setText(s);
	        	}
	        	else  {
	        	   tran2=Double.parseDouble(result.getText());
	        	   tran2=tran2/100.0; 
	               result.setText(""+tran2); 
	        	}
	        }
	        /*实现求倒数*/
	        if (t==dao) {
	        	tran2=Double.parseDouble(result.getText());
	        	if (tran2==0) 
	        		result.setText("0不可求倒数");
	        	else {
	        	    tran2=1.0/tran2;
	        	    result.setText(""+tran2);
	        	}    
	        }
	        /*实现内存运算*/
	        if (t==mc) {//内存清空
	        	memo=0;
	        	mtext.setText("");	
	        }
	        if (t==mr) {//读取内存
	        	if (memo!=0)
	        	result.setText(""+memo);   
	        }
	        if (t==ms) {//写入内存
	        	memo=Double.parseDouble(result.getText());
	        	mtext.setText("M");
	        }
	        if (t==madd) {//显示的数字与内存数求和,并存入内存
	        	tran2=Double.parseDouble(result.getText());
	        	memo=memo+tran2;
	        }
	        /*实现编辑菜单中的复制功能*/
	        if (t==copy){
	        	cp=Double.parseDouble(result.getText());
	        	cpable=true;  	
	        }
	        /*实现编辑菜单中的粘贴功能*/
	        if (t==paste){
	        	if (cpable==true)
	        	result.setText(""+cp);
	        	else 
	        	  result.setText(result.getText());
	        }
	        /*以下为一些修饰功能*/
	        if (t==tcal){//点击"查看"菜单中的"标准型"
	        	dia=new Dialog(tcalculator.this,"消息");
	        	sure=new Button("确定");
	        	l1=new Label("欢迎使用标准计算器");
	        	l1.setAlignment(Label.CENTER);
	        	dia.setLayout(new BorderLayout());
	        	dia.add("Center",l1);
	        	dia.add("South",sure);
	        	dia.setSize(200,100);
	        	dia.setVisible(true);
	        	sure.addActionListener(new ActionListener(){
	        		public void actionPerformed(ActionEvent x) {
	        			dia.dispose();
	        		}
	        	});
	        }
	        if (t==scal){//点击"查看"菜单中的"科学型"
	        	dia=new Dialog(tcalculator.this,"消息");
	        	sure=new Button("确定");
	        	l1=new Label("敬请期待科学型计算器,感谢使用!");
	        	l1.setAlignment(Label.CENTER);
	        	dia.setLayout(new BorderLayout());
	        	dia.add("Center",l1);
	        	dia.add("South",sure);
	        	dia.setSize(200,100);
	        	dia.setVisible(true);
	        	sure.addActionListener(new ActionListener(){
	        		public void actionPerformed(ActionEvent x) {
	        			dia.dispose();
	        		}
	        	});
	        }
	        if (t==about){//点击"帮助"菜单中的"关于计算器"
	        	dia=new Dialog(tcalculator.this,"消息");
	        	sure=new Button("确定");
	            l1=new Label("感谢丁振凡老师");
	        	l2=new Label("感谢开发人员:");
	        	l3=new Label("谢治宇、白正清、高项荣、王晓林、许青松");
	        	l1.setFont(new Font("隶书",Font.PLAIN,18));
	        	l2.setFont(new Font("隶书",Font.PLAIN,18));
	        	l3.setFont(new Font("隶书",Font.PLAIN,18));
	        	l1.setAlignment(Label.CENTER);
	        	l2.setAlignment(Label.CENTER);
	        	l3.setAlignment(Label.CENTER);
	        	dia.setLayout(new GridLayout(4,1));
	        	dia.add(l1);
	        	dia.add(l2);
	        	dia.add(l3);
	        	dia.add(sure);
	        	dia.setSize(400,300);
	        	dia.setVisible(true);
	        	sure.addActionListener(new ActionListener(){
	        		public void actionPerformed(ActionEvent x) {
	        			dia.dispose();
	        		}
	        	});
	        } 	
        }	catch(Exception ex){
        	result.setText("操作错误!");//异常的处理方式
        }
        	
   }
   /*主方法的调用*/    
   public static void main(String args[]) { 
        Frame x=new tcalculator();
        x.setSize(500,250);
        x.setVisible(true); 
   }  
}

⌨️ 快捷键说明

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