51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2759|回复: 8
打印 上一主题 下一主题

[原创] 一个java计算器程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-5-23 11:08:33 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
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("=");
         
         ////////////////////////////////////////////////////////////////////////////////////////////////
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

推荐
 楼主| 发表于 2012-5-23 14:50:52 | 只看该作者
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);
                  }
         }

}
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

9#
发表于 2014-12-23 20:43:24 | 只看该作者
你好,我想问你能不能帮我做你这个计算器的Junit测试代码,QQ:2116348410@QQ.COM,无论如何,先谢谢了。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2012-5-23 14:50:34 | 只看该作者
回复 6# TesterChen


    不好意思哈,这是给别人做的一个期末题。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-25 15:40
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    6#
    发表于 2012-5-23 12:56:43 | 只看该作者
    回复 1# 330254601


        分享的精神是好的,但收费的行为是无耻的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2012-5-23 11:24:14 | 只看该作者
    //----------------小数点 ---------------------
                      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);
              
                      //关闭事件处理程序
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2012-5-23 11:14:29 | 只看该作者
    //--------符 号的事件相应代码-----------
                      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 这种计算做准备
                               }
                      }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2012-5-23 11:13:26 | 只看该作者
    本帖最后由 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);
                                        }
                               }
                      }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2#
     楼主| 发表于 2012-5-23 11:09:11 | 只看该作者
    本帖最后由 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);//设置清零按钮的大小  吗的 不好使 !!需要删除
                      
                      
                      ///////////////////////////////////////////////////////////////////////////////////////////////////////
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-7 18:20 , Processed in 0.076794 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表