结对编程1----基于java的四则运算生成器

小组成员:王震(201421123054)、王杰(201421123055)
Coding地址:https://git.coding.net/w934707136/Pairing-operations.git

一、题目描述

我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

  1. 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
  2. 有计时功能,能显示用户开始答题后的消耗时间。
  3. 界面支持中文简体/中文繁体/英语,用户可以选择一种;

二、需求分析

  1.有计时功能:在答题结束时,能够显示用户答题所用时间。

  2.有语言切换功能:界面可以支持中文简体、中文繁体、英语的切换

  3.有相应的界面区域以及按钮等。

三、程序设计

主要流程图:

四则运算Calculator类:

GUI类:

四、代码展示

四则运算实现相关代码:

  加法

Calculator add(Calculator r){  // 加法运算
        int a = r.getNumerator();
        int b = r.getDenominator();
        int newNumerator = numerator * b + denominator * a;
        int newDenominator = denominator * b;
        Calculator result = new Calculator(newNumerator,newDenominator);
        return result;
    }

  减法

Calculator sub(Calculator r){  // 减法运算
        int a = r.getNumerator();
        int b = r.getDenominator();
        int newNumerator = numerator * b - denominator * a;
        int newDenominator = denominator * b;
        Calculator result = new Calculator(newNumerator,newDenominator);
        return result;
    } 
    

  乘法

Calculator muti(Calculator r){ // 乘法运算
        int a = r.getNumerator();
        int b = r.getDenominator();
        int newNumerator = numerator * a;
        int newDenominator = denominator * b;
        Calculator result = new Calculator(newNumerator,newDenominator);
        return result;
    }

  除法

Calculator div(Calculator r){  // 除法运算
        int a = r.getNumerator();
        int b = r.getDenominator();
        int newNumerator = numerator * b;
        int newDenominator = denominator * a;
        Calculator result = new Calculator(newNumerator,newDenominator);
        return result;
    }

  分数:

      int numerator;  // 分子
      int denominator; // 分母     
       void setNumeratorAndDenominator(int a, int b){  // 设置分子和分母
        int c = f(Math.abs(a),Math.abs(b));         // 计算最大公约数
        numerator = a / c;
        denominator = b / c;
        if(numerator<0 && denominator<0){
            numerator = - numerator;
            denominator = - denominator;
        }
    }

 

 

计时器相关代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
               
               Calculator cal = new Calculator();
               String h=InputField.getText();
                int g = Integer.parseInt(h);  
                String[] all={""};
                all=cal.answer();
                c=all[5];
                jTextField1.setText("("+all[1]+")"+all[2]+"("+all[4]+")"+"=");
                IntputField2.setText("");
                answer.setText("");
                congratulations.setText("");
                now=System.currentTimeMillis();
                i++;
             
    }
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
       over=System.currentTimeMillis();
        now1=((over-now) / (1000 * 60 * 60) % 60)+":"+((over-now)/ (1000 * 60)% 60)+":"+((over-now)/ 1000 % 60);
       String a=now1+"";
       jTextField7.setText(a);
    }

语言选择相关代码:

jMenu1.setText("文字转换");
        jMenu1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenu1ActionPerformed(evt);
            }
        });

        jMenuItem2.setText("英语");
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem2ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem2);
        jMenu1.add(jSeparator1);

        jMenuItem3.setText("中文简体");
        jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem3ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem3);

        jMenuItem1.setText("中文繁体");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });

GUI界面相关代码:

 private javax.swing.JTextField InputField;
    private javax.swing.JTextField IntputField2;
    private javax.swing.JTextField answer;
    private javax.swing.JTextField congratulations;
    private javax.swing.JTextField good;
    private javax.swing.JButton jButton1;//开始做题按钮
    private javax.swing.JButton jButton2;//查看答案按钮
    private javax.swing.JButton jButton3;//结束答题按钮
    private javax.swing.JButton jButton4;//下一题按钮
    private javax.swing.JLabel jLabel1;//四则运算生成器标签
    private javax.swing.JLabel jLabel10;//正确答案标签
    private javax.swing.JLabel jLabel2;//请输入题数标签
    private javax.swing.JLabel jLabel3;//题目标签
    private javax.swing.JLabel jLabel4;//下一题标签
    private javax.swing.JLabel jLabel5;//你的答案是标签
    private javax.swing.JLabel jLabel6;//答题数标签
    private javax.swing.JLabel jLabel7;//错题数标签
    private javax.swing.JLabel jLabel8;//正确率标签
    private javax.swing.JLabel jLabel9;//所用时间标签
    private javax.swing.JMenu jMenu1;//文字转换选择菜单
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;//中文繁体选项
    private javax.swing.JMenuItem jMenuItem2;//英语选项
    private javax.swing.JMenuItem jMenuItem3;//中文简体选项
    private javax.swing.JPanel jPanel1;//界面格局
    private javax.swing.JPopupMenu jPopupMenu1;
    private javax.swing.JPopupMenu jPopupMenu2;
    private javax.swing.JRadioButtonMenuItem jRadioButtonMenuItem1;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JPopupMenu.Separator jSeparator2;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField7;
    private javax.swing.JTextField mistake;
    private javax.swing.JTextField title1;

 四、测试

开始做题:

  错题

  对题

  结束

  切换文字

五、实验小结

  对于本次实验,开始初期对于计时器的实现,比较陌生,后通过百度以及询问同学,可以通过System.currentTimeMillis()获取计算机时间进行实现,但是还是实现的不够完美,无法令其直接显示出来;

  对于图形界面设计,也是存在一些问题,导致编写的时候,对应的按钮与实际无法真正的联系,比如存在问题:只有点击答案才会累加错题数,只有下一题才会累加答题数;这个问题会在后续继续完善;

  对于本次结对实验,与队友合作,虽然有时存在意见分歧,但是通过讨论选择一些较优的方案,在编写代码时,遇到难点,两人一起看书查资料,运行测试,往往自己无法发现问题,队友总能发现出来,这些在未来工作中应该是必不可少的。

  

 

 

 

PSP:

Personal Software Process Stages

Time (h) Senior

Student

Time (h)

计划

0.5 0.7
估计这个任务需要多少时间 8 10.2
开发 3 2.7
需求分析(包括学习新技术) 0.5 1.5
生成设计文档 0 0
设计复审 0 0
代码规范 0.5 0.7
具体设计 0.2 0.4
具体编码 2 3
代码复审 0.3 0.2
测试(自我测试,修改代码,提交修改) 0.5 0.6
报告 0.5 0.8
测试报告 0.1 0.1
计算工作量 0.1 0.1
并提出过程修改计划 0.1 0.1
posted @ 2017-03-15 08:49  王大节  阅读(565)  评论(0编辑  收藏  举报