MathExamLv2—— 陈卓楠 211606358 陈映宏 211606355

一、预估与实际

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
• Estimate • 估计这个任务需要多少时间 10 20
Development 开发
• Analysis • 需求分析 (包括学习新技术) 60 100
• Design Spec • 生成设计文档 30 40
• Design Review • 设计复审 20 20
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 20 20
• Design • 具体设计 80 120
• Coding • 具体编码 200 480
• Code Review • 代码复审 30 45
• Test • 测试(自我测试,修改代码,提交修改) 200 300
Reporting 报告
• Test Repor • 测试报告 10 10
• Size Measurement • 计算工作量 10 10
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 20 25
合计 690 1195

二、需求分析

在个人项目中完成的小学数学出题程序,运行良好,在家长群中赢得了不错的口碑。现在应家长的要求,增加新的功能:小学三年级四则混合运算。经过前期的使用,家长们学会提需求了,小学三年级四则混合运算的要求如下:

  • 运算符在2~4个【进一步细化要求:至少两个不同的运算符】
  • 可以加括号
  • 减法运算的结果不能有负数
  • 除法运算除数不能为0,不能有余数

经过分析,我认为,这个程序应当:

  • 根据用户输入的参数生成相应数量的题目..
  • 利用Random语句实现随机生成的整数、分子、分母以及加减乘除
  • 添加多个运算符的算式

三、设计

1. 设计思路

说明你如何设计这个程序

  • 通过随机数来实现整数以及分数
  • 通过随机数结合if条件语句实现加减乘除四个运算符号

2. 实现方案

具体实现的步骤

  • 准备工作:先在Github上创建仓库,克隆到本地
    技术关键点:
  • 通过用户输入的答案与式子答案进行比较,判断对错,对的返回正确并统计,错的返回错误并附上正确答案但不统计
  • 将统计正确的题目数量除以用户最初输入的题目数量得到正确率并输出

1. 调试日志

  • 在测试时发现忽略了四则运算的先后运算顺序
  • 括号无法显示出来
  • 出现负数

2. 关键代码

                  else{
                      if(data1%data2==0 && data2!=0) //判断data1能否被data2整除,且除数data2不能为0
                   {
                  if(operator[num2]=="+")//乘除的优先级高于加减,所以可以顺着往下计算
                  {
                      result=data1/data2+data3;
                      System.out.println(str+"="+result);
                      
                  }
                 else if(operator[num2]=="-")
                 {
                     if(data1/data2>=data3)//判断data1/data2的商是否大于data3
                     {
                         result=data1/data2-data3;
                         System.out.println(str+"="+result);
                          
                     }
                     else{
                         number++;//不符合条件就将表达式的个数加1,进行下一个表达式的计算
                     }
                 }
                 else if(operator[num2]=="*")
                 {
                     result=data1/data2*data3;
                     System.out.println(str+"="+result);
                     
                 }
                 else{
                     int result1=data1/data2;
                     if(result1%data3==0 && data3!=0)//判断data1/data2的商能否整除data3,且data3不能为0
                     {
                         result=data1/data2/data3;
                         System.out.println(str+"="+result);
                         
                     }
                     else{
                         number++;
                     }
                 }
             }
             else{
                 number++;
             }
         }

3. 代码规范

请给出本次实验使用的代码规范:

  • 第一条:未定义的常量不可使用在代码中
  • 第二条:不可输入非数字的答案,若输入非数字的答案,则结束程序
  • 第三条:异常进行手动处理,不抛出

五、测试

请思考并记录你认为必要的测试点,并记录测试用例与测试结果

六、总结

通过这次结对作业,我们两人发现自身还有许许多多的不足,以后还需要多多练习,多多思考,多练习敲代码提升自己的速度,而且巩固自己的基础知识,并且逐渐深入学习,希望下次能够更加努力