题目描述:

不知道大家是否尝试过这样一种开发模式:你有一个伙伴,你们坐在一起,并肩作战,面对着同一台显示器,使用着同一键盘,同一个鼠标,你们一起思考,一起分析,一起编程?这次,就让我们来体验一下结对编程的魅力!

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

记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。

有计时功能,能显示用户开始答题后的消耗时间。

界面支持中文简体/中文繁体/英语,用户可以选择一种;

在软件开发中,我们需要大量使用工具来辅助设计,每个环节大家都要善于学习和使用工具。

任务分配:

林凯201421123075(本人)

      1. 页面的设计和编程;

林俊鹏201421123076(队友):

      1. 页面的设计和编程,后端java程序;

package myapp;
import java.util.Random;
import java.util.Scanner;

import javax.swing.plaf.synth.SynthSpinnerUI;

public class Arithmetic {
    String question;
    String answer;

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    public String getAnswer() {
        return answer;
    }

    public void setAnswer(String answer) {
        this.answer = answer;
    }

    static String oper1(char op,int integer,int numerator,int denominator)//整数和分数的运算
    {
    String rst;
    int temp1 = 0;
    if(op=='+')
    {
        return rst=((integer*denominator+numerator)+"")+'/'+(denominator+"");
    }
    if(op=='-')
    {
        return rst=((integer*denominator-numerator)+"")+'/'+(denominator+"");
    }
    if(op=='*')
    {
        for(int i=2;(integer*numerator)>=i;i++)
        if((integer*numerator)%i==0 && denominator%i==0)
        {
            temp1=(integer*numerator);
            temp1/=i;
            denominator/=i;
            i--;
        }
        return rst=(temp1+"")+'/'+(denominator+"");
    }
    if(op=='÷')
    {
        for(int i=2;(integer*denominator)>=i;i++)
        if((integer*denominator)%i==0 && numerator%i==0)
        {
            temp1= integer*denominator;
            temp1/=i;
            numerator/=i;
            i--;
        }
        return rst=temp1+""+'/'+numerator+"";
    }
    return null;
    }

    static String oper2(char op,int integer1,int integer2)//整数和整数的运算
    {
    String rst;
    if(op=='+')
    {
        return rst = (integer1 + integer2)+"";
    }
    if(op=='-')
    {
        return rst = (integer1 - integer2)+"";
    }
    if(op=='*')
    {
        return rst = (integer1 * integer2)+"";
    }
    if(op=='÷')
    {
        for(int i=2;integer1>=i;i++)
        if(integer1%i==0 && integer2%i==0)
        {
            integer1/=i;
            integer2/=i;
            i--;
        }
        return rst = (integer1) +"" + '/' + (integer2)+"";
    }
    return null;
    } 

    static String oper3(char op,int numerator1,int denominator1,int numerator2,int denominator2)//分数和分数的运算
    {
    String rst;
    int temp1,temp2;
    if(op=='+')
    {
        temp1 = numerator1 * denominator2 + numerator2 * denominator1;
        temp2 = denominator1 * denominator2;
        for(int i=2;temp1>=i;i++)
        if(temp1%i==0 && temp2%i==0)
        {
            temp1/=i;
            temp2/=i;
            i--;
        }
        return rst=(temp1)+""+'/'+(temp2)+"";
    }
    if(op=='-')
    {
        temp1 = numerator1 * denominator2 - numerator2 * denominator1;
        temp2 = denominator1 * denominator2;
        for(int i=2;temp2>=i;i++)
        if(temp1%i==0 && temp2%i==0)
        {
            temp1/=i;
            temp2/=i;
            i--;
        }
        return rst=(temp1)+""+'/'+(temp2)+"";
    }
    if(op=='*')
    {
        temp1 = numerator1 * numerator2;
        temp2 = denominator1 * denominator2;
        for(int i=2;temp1>=i;i++)
        if(temp1%i==0 && temp2%i==0)
        {
            temp1/=i;
            temp2/=i;
            i--;
        }
        return rst=(temp1)+""+'/'+(temp2)+"";
    }
    if(op=='÷')
    {
        temp1 = numerator1 * denominator2;
        temp2 = denominator1 * numerator2;
        for(int i=2;temp1>=i;i++)
        if(temp1%i==0 && temp2%i==0)
        {
            temp1/=i;
            temp2/=i;
            i--;
        }
        return rst=(temp1)+""+'/'+(temp2)+"";
    }
    return null;
    }

    public static Arithmetic getArithmetic(){

        Arithmetic arithmetic = new Arithmetic();
        int max=20;
        int min=1;
        int n;//题目数量
        char operation[]={'+','-','*','÷'}; //定义运算符号
        int operand[]={1,2,3,4};//1,2为整数和整数运算;3为整数和分数运算;4为分数和分数运算;
        Random random = new Random();

        int integer1 = random.nextInt(max)%(max-min+1) + min;
        int integer2 = random.nextInt(max)%(max-min+1) + min;
        int numerator1 = random.nextInt(max)%(max-min+1) + min;
        int denominator1 = random.nextInt(max)%(max-min+1) + min;
        int numerator2 = random.nextInt(max)%(max-min+1) + min;
        int denominator2 = random.nextInt(max)%(max-min+1) + min;

        char tempoperation = operation[random.nextInt(4)%(4)];
        int  tempoperand = operand[random.nextInt(4)%(4)];
        String question ="";
        String answer = "";
        if(tempoperand == 1 || tempoperand == 2){//整数和整数

            question = integer1+""+tempoperation+integer2+"=";
            answer = oper2(tempoperation,integer1,integer2);
        }
        if(tempoperand == 3){   //整数和分数
            question = integer1+""+ tempoperation + numerator1+"/"+denominator1+"=";
            answer = oper1(tempoperation,integer1,numerator1,denominator1);
        }
        if(tempoperand == 4){   //分数和分数
            question = numerator1+"/"+denominator1 + "" + tempoperation + numerator2+"/"+denominator2+"=";
            answer = oper3(tempoperation,numerator1,denominator1,numerator2,denominator2);
        }
        arithmetic.question=question;
        arithmetic.answer = answer;
        return arithmetic;
}

    @Override
    public String toString() {
        return  question  + answer ;
    }

    public static void main(String[] args) {

         System.out.println(getArithmetic());
    }
}

结果显示:



码市地址:https://git.oschina.net/linjunp/lab2-atithmeticGUI

PSP:

总结:

此次是第一次结对作业,在我们的共同努力下,总算是如期完成了。结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。二人合作能互相督促避免时间浪费。1+1未必大于二,两个人只产出一份代码,时间效率上会降低,结对能更有效地交流,相互学习和传递经验。因为一个人的知识已经被其他人共享。

week2-结对编程【网页实现四则运算】的更多相关文章

  1. 结对编程项目报告--四则运算CORE

    <!doctype html> sw_lab2.mdhtml {overflow-x: initial !important;}#write, body { height: auto; } ...

  2. 2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算

    2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算 经过第一阶段的学习,同学们已经熟悉了这门语言基本的用法.在一次又一次对着电脑编写并提交代码,进行练习的时候,有没有觉 ...

  3. 20175312 2018-2019-2 《Java程序设计》结对编程练习_四则运算(第二周:整体性总结)

    20175312 2018-2019-2 <Java程序设计>结对编程练习_四则运算(第二周:整体性总结) 结对对象与其博客链接 20175309 刘雨恒:https://www.cnbl ...

  4. 20175312 2018-2019-2 《Java程序设计》结对编程练习_四则运算(第一周:阶段性总结)

    20175312 2018-2019-2 <Java程序设计>结对编程练习_四则运算(第一周:阶段性总结) 结对对象与其博客链接 20175309 刘雨恒:https://www.cnbl ...

  5. 20175208『Java程序设计』课程 结对编程练习_四则运算

    20175208 结对编程练习_四则运算(第一周) 结对成员:20175208张家华,20175202葛旭阳 一.需求分析: 实现一个命令行程序,要求: (1)自动生成指定数量的小学四则运算题目(加. ...

  6. 2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周

    2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第二周 博客要求 组内同学需各自发表博客 博客中需包含以下内容: 相关过程截图 关键代码解释 遇到的困难及解决 ...

  7. 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第三周

    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址: @王志伟 四则运算第一周博客 @仇夏四则运算第一周博客 ...

  8. 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算——第一周

    2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算 组队成员: 仇夏 学号: 20172310 博客地址:点击这里 1. 需求分析: 可生成题目: - 输入要想生成 ...

  9. 2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算

    2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算 需求分析: 支持整数,可进行多运算符运算,有优先级. 设计思路: 在有括号的情况下,先计算得出括号中的结果,如 ...

  10. 20165236 2017-2018-2 《Java程序设计》结对编程练习_四则运算

    20165236 2017-2018-2 <Java程序设计>结对编程练习_四则运算 结对小组:叶佺.郭金涛 一.需求分析: 1.能随机生成n道四则运算题目,n由使用者输入: 2.支持多种 ...

随机推荐

  1. 一个普通的 Zepto 源码分析(二) - ajax 模块

    一个普通的 Zepto 源码分析(二) - ajax 模块 普通的路人,普通地瞧.分析时使用的是目前最新 1.2.0 版本. Zepto 可以由许多模块组成,默认包含的模块有 zepto 核心模块,以 ...

  2. JAVAOO零碎--内存叠加

    子类继承父类,父类的构造方法是不能被继承的,但是在new子类对象的时候,父类的构造方法是要执行构造的,构造好了过后再来构造子类特有的属性.这也被称作是内存叠加.

  3. 关于MDK下pack的定义方法

    我们使用数据流的过程中经常会用到结构体来进行解析,这个时候就需要使用字节对齐这个概念.不同的编译器的处理方法不一样. 这里小结一下MDK里面常用的几种方法: 1. 最常见的一种 使用#pragma p ...

  4. C++数组和指针加减法和sizeof问题

    关于指针和加减法: 指针的加减法:指针的加减法,加多少或者减多少,主要是看所指对象的sizeof值. 例子: double m = 3.0; ; double *p=&m; int* p1=& ...

  5. 谈谈php依赖注入和控制反转

    要想理解php依赖注入和控制反转两个概念,就必须搞清楚如下的问题: DI--Dependency Injection   依赖注入 IoC--Inversion of Control  控制反转 1. ...

  6. vue.js语法

    Vue.js是当下很火的一个JavaScript MVVM(Model-View-ViewModel)库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更 ...

  7. Python 可迭代的对象、迭代器和生成器

    迭代是数据处理的基石.扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项.这就是迭代器模式(Iterator pattern). p.p1 { margin: 0 ...

  8. 【CentOS7】yum 软件管理

    可选命令 检查 check (检查包错误) check-update(不使用本地缓存检查更新) 安装 install localinstall groupinstall reinstall(重新安装) ...

  9. C#和NewSQL更配 —— TiDB入门(可能是C#下的全网首发)

    阅读目录 背景 TiDB是什么 环境部署 实战 性能测试 结语 一.背景 在上一篇尝试CockroachDB(传送门在此:http://www.cnblogs.com/Zachary-Fan/p/co ...

  10. BotVS开发基础—2.5 策略交互

    一.代码部分 isOpen = False; # 是否 开仓 price = 0; # 全局变量 价格 amount = 0; # 全局变量 下单量 def exec_command(command) ...