结对编程:小学四则运算

1.作业基本信息

这个作业属于哪个课程软件工程3班
这个作业要求在哪里结对编程:小学四则运算
项目成员周盟棋 3121005065
刘伟键 3121005045
这个作业的目标实现一个自动生成小学四则运算题目的命令行程序
代码仓库arithmetic

2.PSP表格

PSPPersonal Software Process Stages预计耗时(分钟)实际耗时(分钟)
Planning计划2030
· Estimate估计这个任务需要多少时间2030
Development开发9201070
· Analysis需求分析 (包括学习新技术)3060
· Design Spec生成设计文档2010
· Design Review设计复审2010
· Coding Standard代码规范 (为目前的开发制定合适的规范)2010
· Design具体设计3030
· Coding具体编码500600
· Code Review代码复审120150
· Test测试(自我测试,修改代码,提交修改)180200
Reporting报告110120
· Test Report测试报告6060
· Size Measurement计算工作量2030
· Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划3030
合计10501220

3.效能分析

在这里插入图片描述
在这里插入图片描述

//消耗最大的函数:生成题目函数
    public MathTopic generateOneMathProblem(int range) {
        MathTopic mathTopic = new MathTopic();
        //获得随机运算法数量
        int operatorNum = RandomTopicUtils.getRandomNum(1, 3);
        List<String> operatorList = new ArrayList<String>();
        String operator = null;
        //给运算符赋值
        for (int i = 0; i < operatorNum; i++) {
            operator = OperatorConstant.operatorMap.get((Integer) RandomTopicUtils.getRandomNum(1, 4));
            operatorList.add(operator);
        }
        //给运算值赋值
        List<String> numList = new ArrayList<String>();
        int flag = 0;
        for (int i = 0; i < operatorList.size() + 1; i++) {
            flag = RandomTopicUtils.getRandomNum(0, 1);
            if (flag == 0) {
                //生成分数
                numList.add(RandomTopicUtils.generateFraction(range));
            } else {
                //生成自然数
                numList.add(RandomTopicUtils.generateNaturalNumber(range));
            }
        }
        mathTopic.setData(numList);
        mathTopic.setOperator(operatorList);
        mathTopic.setTopicString(null);
        //答案为负则再次生成
        if(getAnswer(mathTopic).contains("-")){
            return generateOneMathProblem(range);
        }else{
            mathTopic.setTopicString(generateExerciseStr(mathTopic));
            mathTopic.setAnswer(getAnswer(mathTopic));
            return mathTopic;
        }
    }

4.设计实现过程

方法备注
OperatorConstant保存常量
MathTopic数学题目对象
MathExceptionnotImproperFraction()承载错误信息
MathTopicGenerator
  • generateOneMathProblem(int range)
  • generateExerciseStr(MathTopic mathTopic)
  • getAnswer(MathTopic mathTopic)
  • getMathTopicList(int mathProblemsNum, int range)
生成题目器
FileUtils
  • writeInFile(List mathTopicList)
  • checkAnswer()
文件工具类
RandomTopicUtils
  • getRandomNum(int min, int max)
  • generateNaturalNumber(int range)
  • generateFraction(int range)
  • DaiFractionToFalseFraction(String operand)
  • FalseFractionToDaiFraction(String operand)
  • checkFraction(String operand)
  • About(String operand)
  • getMaxCommonFactor(Integer num1, Integer num2)
  • getDenominato(String fraction)
  • getMolecule(String fraction)
  • reductionFraction(String operand1, String operand2)
  • BinocularOperation(String operand1, String operand2, String operator)
随机生成题目工具
Mainmain(String[] args)主程序运行类

在这里插入图片描述

5.代码说明

//关键代码展示
public MathTopic generateOneMathProblem(int range) {
        MathTopic mathTopic = new MathTopic();
        //获得随机运算法数量
        int operatorNum = RandomTopicUtils.getRandomNum(1, 3);
        List<String> operatorList = new ArrayList<String>();
        String operator = null;
        //给运算符赋值
        for (int i = 0; i < operatorNum; i++) {
            operator = OperatorConstant.operatorMap.get((Integer) RandomTopicUtils.getRandomNum(1, 4));
            operatorList.add(operator);
        }
        //给运算值赋值
        List<String> numList = new ArrayList<String>();
        int flag = 0;
        for (int i = 0; i < operatorList.size() + 1; i++) {
            flag = RandomTopicUtils.getRandomNum(0, 1);
            if (flag == 0) {
                //生成分数
                numList.add(RandomTopicUtils.generateFraction(range));
            } else {
                //生成自然数
                numList.add(RandomTopicUtils.generateNaturalNumber(range));
            }
        }
        mathTopic.setData(numList);
        mathTopic.setOperator(operatorList);
        mathTopic.setTopicString(null);
        //答案为负则再次生成
        if(getAnswer(mathTopic).contains("-")){
            return generateOneMathProblem(range);
        }else{
            mathTopic.setTopicString(generateExerciseStr(mathTopic));
            mathTopic.setAnswer(getAnswer(mathTopic));
            return mathTopic;
        }
    }

6.测试运行

在这里插入图片描述
在这里插入图片描述

7.项目小结

在这次经历的结对项目中,我们双方能够明确地知道正在工作的目标,并一起为了实现这个目标而努力工作。过程中也有一些bug,会通过双方的交流去解决,这是个人项目所不能体验的,所以这次的结对编程对我们来说是一个宝贵的经验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值