51Testing软件测试论坛

标题: 一个java计算器程序 [打印本页]

作者: 330254601    时间: 2012-5-23 11:08
标题: 一个java计算器程序
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
//***************************************************************************************
//以上部分为引用java swing的包(对应步骤:1 引用需要的包和类。)
//***************************************************************************************

public class Tuo {
         //以下定义好需要的一些变量
         //////////////////////////////////////////////////////////////////////
         String str1="0";  //运算数1  初值一定为0  为了程序的安全
         String str2="0";  //运算数2
         String fh="+"; //运算符
         String jg="";//结果
         
         //状态开关  重要
         int k1=1;//开关1 用于选择输入方向  将要写入str2或 str2
         int k2=1;//开关2 符号键 次数  k2>1说明进行的是2+3-9+8 这样的多符号运算
         int k3=1;//开关3 str1  是否可以被清0  ==1时可以  !=1时不能被清0
         int k4=1;//开关4 str2  同上
         int k5=1;//开关5  控制小数点可否被录入  ==1时可以  !=1 输入的小数点被丢掉
         JButton jicunqi; //寄存器  记录 是否连续按下符号键
         Vector vt=new Vector(20,10);
         
        //***************************************************************************************
         JFrame frame=new JFrame("sunshine---计算器"); //步骤2   定义一个顶层的容器
        //***************************************************************************************
         
         //定义输入框按钮什么的
         JTextField jg_TextField=new JTextField(jg,20);//20列
         JButton clear_Button=new JButton("清除"); //清除按钮
         JButton button0=new JButton("0"); //按钮0
         JButton button1=new JButton("1"); //按钮1
         JButton button2=new JButton("2"); //按钮2
         JButton button3=new JButton("3");
         JButton button4=new JButton("4");
         JButton button5=new JButton("5");
         JButton button6=new JButton("6");
         JButton button7=new JButton("7");
         JButton button8=new JButton("8");
         JButton button9=new JButton("9");
         JButton button_Dian=new JButton("."); //按钮.
         JButton button_jia=new JButton("+");
         JButton button_jian=new JButton("-");
         JButton button_cheng=new JButton("*");
         JButton button_chu=new JButton("/");
         JButton button_dy=new JButton("=");
         
         ////////////////////////////////////////////////////////////////////////////////////////////////
作者: 330254601    时间: 2012-5-23 11:09
本帖最后由 330254601 于 2012-5-23 16:18 编辑

////////////////////////////////////////////////////////////////////////////////////////////////
         /**
          * 主程序的入口
          * @param args
          */
         public static void main(String[] args)
         {
                 Tuo tuo=new Tuo(); //初始化本类,创建一个本类的实例,默认调用本类的构造函数
         }

         /**
          * 构造函数,初始化面板(生成面板)
          */
         public Tuo(){
                  button0.setMnemonic(KeyEvent.VK_0);//等效键
                  //其它 等效键  略,
                  //***************************************************************************************
                  //以下部分将上面定义的那些按钮呀什么的进行面板布局
                  //3)根据需要为容器设置布局管理器或使用默认布局管理器。
                  //4)将组件添加到容器内,位置自行设计。
                  //***************************************************************************************
                  
                  JPanel pan=new JPanel(); // 设置一个用于放置数字按钮的面板
                  pan.setLayout(new GridLayout(4,4,5,5));//对数字按钮面板设置布局   四行四列 边距为5像素,
                  pan.add(button7); //将上面定义的按钮加到面板上                  
                  pan.add(button8);
                  pan.add(button9);
                  pan.add(button_chu);
                  pan.add(button4);
                  pan.add(button5);
                  pan.add(button6);
                  pan.add(button_cheng);
                  pan.add(button1);
                  pan.add(button2);
                  pan.add(button3);
                  pan.add(button_jian);

/**
                  pan.add(button1);
                  pan.add(button2);
                  pan.add(button3);
                  pan.add(button_jian);
                  
                  pan.add(button4);
                  pan.add(button5);
                  pan.add(button6);
                  pan.add(button_cheng);
                  
                  pan.add(button7); //将上面定义的按钮加到面板上
                  pan.add(button8);
                  pan.add(button9);
                  pan.add(button_chu);
                  */




                  pan.add(button0);
                  pan.add(button_Dian);
                  pan.add(button_dy);
                  pan.add(button_jia);
                  pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan对象的边距
                  //////////////////////////////////////////////////////////////////////////////
                  
                  jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框 右对齐
                  JPanel pan2 = new JPanel();  //设置一个放置文本输入框的面板
                  pan2.add(jg_TextField); //添加输入框到面板
pan2.add(clear_Button); //TODO 这里添加这句
                  
                  //////////////////////////////////////////////////////////////////////////
                  JPanel pan3=new JPanel(); //为什么要 多此一句呢? 因为我不会设置 按钮的大小,设置清楚 按钮 的面板  需要删除
                  pan3.setLayout(new FlowLayout()); //需要删除
                  pan3.add(clear_Button); //需要删除
                  //clear_Button.setSize(10,10);//设置清零按钮的大小  吗的 不好使 !!需要删除
                  
                  
                  ///////////////////////////////////////////////////////////////////////////////////////////////////////
作者: 330254601    时间: 2012-5-23 11:13
本帖最后由 330254601 于 2012-5-23 16:16 编辑

///////////////////////////////////////////////////////////
                  //对顶层容器进行设置
                  frame.setLocation(300, 200); //主窗口 出现在位置
                  frame.setResizable(false);   //不能调大小
                  frame.getContentPane().setLayout(new BorderLayout());
                  
                  //将上面设置好的三个面板添加到顶层容器中
                  frame.getContentPane().add(pan2,BorderLayout.NORTH);//输入框面板放在最上面 north(北)
                  frame.getContentPane().add(pan,BorderLayout.CENTER);//数字按钮面板放在中间(center)
                  frame.getContentPane().add(pan3,BorderLayout.SOUTH);//清楚按钮面板放在最下面(south 南)   这句话要被删除

                  frame.pack();
                  frame.setVisible(true);
                  //以上是 控件 和  布局
                  //////////////////////////////////////////////////////////////////////////////////////////
                  
                  //***************************************************************************************
                  //5)为响应事件的组件编写事件处理代码。-------------采用了类中类的方式
                  //***************************************************************************************
                  //下面是事件处理 程 序
                  //--------------- 数 字 键的事件响应代码 ----------------

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!




                  class JianTing implements ActionListener {
                           public void actionPerformed(ActionEvent e){
                                    String ss=((JButton)e.getSource()).getText();
                                    jicunqi=(JButton)e.getSource();
                                    vt.add(jicunqi);   
                                    if (k1==1)
                                    {
                                             if(k3==1)
                                             {
                                                      str1="";
                                                      k5=1;//还原开关k5状态      
                                             }
                                             str1=str1+ss;
                                             //k2=1;
                                             k3=k3+1;
                                             //System.out.println(str1);
                                             jg_TextField.setText(str1);//显示
                                     
                                    } else if(k1==2){
                                             if (k4==1)
                                             {
                                                      str2="";
                                                      k5=1; //还原开关k5状态      
                                             }
                                             str2=str2+ss;
                                             //k2=2;
                                             k4=k4+1;
                                              ///////////////测试////////////////
                                             jg_TextField.setText(str2);
                                    }
                           }
                  }
作者: 330254601    时间: 2012-5-23 11:14
//--------符 号的事件相应代码-----------
                  class JianTing_fh implements ActionListener
                  {
                   public void actionPerformed(ActionEvent e)
                   {
                    String ss2=((JButton)e.getSource()).getText();
                    jicunqi=(JButton)e.getSource();
                    vt.add(jicunqi);
                    
                    if(k2==1)
                    {
                     k1=2;//开关 k1  为1时,向数1写  为2时,向数2写
                     k5=1;
                     fh=ss2;
                     k2=k2+1;//按符号键的次数
                    }
                    else
                    {
                     int a=vt.size();
                     JButton c=(JButton)vt.get(a-2);
       
                     if(!(c.getText().equals("+"))&&!(c.getText().equals("-"))&&!(c.getText().equals("*"))&&!(c.getText().equals("/"))){
                             yuns(); //计算函数
                             str1=jg;
                              k1=2;//开关 k1  为1时,向数1写  为2时,向数2写
                              k5=1;
                              k4=1;
                              fh=ss2;
                     }
                     k2=k2+1;
                     
                    }
                    
                   }
                  }
                  
                  //--------清除-------
                  class JianTing_clear implements ActionListener{
                           public void actionPerformed(ActionEvent e){
                                    jicunqi=(JButton)e.getSource();
                                    vt.add(jicunqi);
                                    k5=1;
                                    k2=1;
                                    k1=1;
                                    k3=1;
                                    k4=1;
                                    str1="0";
                                    str2="0";
                                    fh="";
                                    jg="";
                                    jg_TextField.setText(jg);
                                    vt.clear();
                           }
                  }
                  
                  //----------------等  于 ---------------------
                  class JianTing_dy implements ActionListener{
                           public void actionPerformed(ActionEvent e){
                                     jicunqi=(JButton)e.getSource();
                                     vt.add(jicunqi);
                                     yuns();
                                     k1=1; //还原开关k1状态
                                     //str1=jg;
                                     k2=1;
                                     k3=1;//还原开关k3状态
                                     k4=1; //还原开关k4状态
                                    
                                     str1=jg; //为7+5=12 +5=17 这种计算做准备
                           }
                  }
作者: 330254601    时间: 2012-5-23 11:24
//----------------小数点 ---------------------
                  class JianTing_xiaos implements ActionListener{
                           public void actionPerformed(ActionEvent e){
                                    jicunqi=(JButton)e.getSource();
                                    vt.add(jicunqi);
                                    if(k5==1){
                                             String ss2=((JButton)e.getSource()).getText();
                                             if (k1==1)
                                             {
                                              if(k3==1)
                                              {
                                               str1="";
                                               k5=1; //还原开关k5状态      
                                              }
                                              str1=str1+ss2;
                                              //k2=1;
                                              k3=k3+1;
                                              //System.out.println(str1);
                                              jg_TextField.setText(str1);//显示
                                     }else if(k1==2){
                                              if (k4==1){
                                                       str2="";
                                                       k5=1; //还原开关k5状态      
                                              }
                                              str2=str2+ss2;
                                              //k2=2;
                                              k4=k4+1;
                                               ///////////////测试////////////////
                                              jg_TextField.setText(str2);
                                             }
                                    }
                                    
                                    k5=k5+1; //
                           }
                  }
          
                  //****************************************************
                  //注册 **,将上面写的各种响应事件注册到**上
                  //当你去点击一个按钮的时候,程序就会监听到对应的动作,调用对应的响应事件
                  //****************************************************
                  JianTing_dy jt_dy=new JianTing_dy();
                  JianTing jt= new JianTing();//临听数字键
                  JianTing_fh jt_fh= new JianTing_fh();//临 听符 号键
                  JianTing_clear jt_c=new JianTing_clear(); //清除键
                  JianTing_xiaos jt_xs=new JianTing_xiaos();// 小数点 键
          
          
                  button7.addActionListener(jt);
                  button8.addActionListener(jt);
                  button9.addActionListener(jt);
                  button_chu.addActionListener(jt_fh);
                  button4.addActionListener(jt);
                  button5.addActionListener(jt);
                  button6.addActionListener(jt);
                  button_cheng.addActionListener(jt_fh);
                  button1.addActionListener(jt);
                  button2.addActionListener(jt);
                  button3.addActionListener(jt);
                  button_jian.addActionListener(jt_fh);
                  button0.addActionListener(jt);
                  button_Dian.addActionListener(jt_xs);
                  button_dy.addActionListener(jt_dy);
                  button_jia.addActionListener(jt_fh);
                  clear_Button.addActionListener(jt_c);
          
                  //关闭事件处理程序
作者: TesterChen    时间: 2012-5-23 12:56
回复 1# 330254601


    分享的精神是好的,但收费的行为是无耻的
作者: 330254601    时间: 2012-5-23 14:50
回复 6# TesterChen


    不好意思哈,这是给别人做的一个期末题。
作者: 330254601    时间: 2012-5-23 14:50
frame.addWindowListener(new WindowAdapter()
                  {
                           public void windowClosing(WindowEvent e)
                           {
                                   System.exit(0);
                           }
                          });
                 }
         
         //---------------计 算函数------------------
         public void yuns(){
                  double a2;//运算数1
                  double b2;//运算数2
                  String c=fh;// 运算符
                  double jg2=0 ;//结果
                  
                  if (c.equals("")){
                           //System.out.println("请输入运算符");
                           jg_TextField.setText("请输入运算符");
                  } else {
                           System.out.println("str1:"+str1);//调试时 使 用
                           System.out.println("str2:"+str2);//调试时 使 用
                           System.out.println("运算符:"+fh);//调试时 使 用
                           if (str1.equals(".")) //字符串 "." 转换成double型数据时 会出错  所以手工转
                                   str1="0.0";
                           if (str2.equals("."))
                                   str2="0.0";
                           a2=Double.valueOf(str1).doubleValue();
                           b2=Double.valueOf(str2).doubleValue();
                          
                           System.out.println("double型的a2:"+a2);  //调试时 使 用
                           System.out.println("double型的b2:"+b2);  //调试时 使 用
                  
                  
                           if (c.equals("+")){
                                   jg2=a2+b2;
                           }
                           if (c.equals("-")){
                                   jg2=a2-b2;
                           }
                           if (c.equals("*")){
                                   jg2=a2*b2;
                           }
                           if (c.equals("/")){
                             if(b2==0){
                                     jg2=0;//0000000000000   by 0 cu!
                             }else{
                                     jg2=a2/b2;
                             }
                           }
                  
                           System.out.println("double型a2"+fh+"b2结果:"+jg2);
                          
                           System.out.println();
                           jg=((new Double(jg2)).toString());
               
                           jg_TextField.setText(jg);
                  }
         }

}
作者: 216348410    时间: 2014-12-23 20:43
你好,我想问你能不能帮我做你这个计算器的Junit测试代码,QQ:2116348410@QQ.COM,无论如何,先谢谢了。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2