口算大作战!!!

口算大作战!!!

                       ---个人作业1

孩子心算特别好??? 多半是练了!

一、预估与实际

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

 

二、需求分析 

小学一年级需求分析

我通过网络搜索 小学教学大纲 ( 人教版2011人教新课标版2014 )的方式了解到,小学一年级数学加减法有如下的几个特点:

  • 特点1:只有百位以内的加减且有限制
  • 特点2:有个位数的加减法
  • 特点3:当第一个数为两位数的时候,那么它只能加减一个整十数,或者个位数(在二年级教学大纲中才有百位以内的任意加减)

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

  • 条件1:数字应小于100
  • 条件2:有个位数的加减
  • 条件3:当第一个数为两位数时,题目应当输出为这个两位数加减一个整十数或者个位数
  • 条件4:运算结果也应在100以内

小学二年级需求分析

在分析二年级数学的时候,我还是通过查询上面的教学大纲及(二年级人教版2011人教新课标版2014的目录),了解到了一下几个特点:

  • 特点1:乘法只有表内乘法,即乘法口诀表的内容
  • 特点2:除法也是表内除法
  • 特点3:同时除法还有一个新要求,就是有余数的除法,但把除数和商都限制在了一位数(人教版2011关于余数的除法是在 三年级 ,而人教新课标2014则提前到了二年级下)

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

  • 条件1:乘法的两个数字应大于0小于10
  • 条件2:除法包括乘法口诀表的内容,也包括有余数的除法
  • 条件3:在有余数的除法中,要求余数小于除数

  

三、设计

1. 设计思路

  • 在程序刚开始的设计阶段,因为要考虑一年级及二年级的问题,计划是先写一年级的内容,再去完成二年级的内容,所以我选择了模块化。分别有一个运算父类(提供四则运算需要用到的变量,以及对于变量的get()和set()方法),四个加减乘除的运算类(分别继承运算父类),一个文件I/O的输出类,一个主方法
  • 使用集合来临时保存题目,答案紧接着题目存储在集合里
  • 主方法有四个任务:
    • 接受输入的参数
    • 对输入的参数进行判断并提供相应的错误提示
    • 针对年级选择符合本年级的四则运算类
    • 调用输出类完成题目输出
  • 四则运算类则分别产生符合本年级教学大纲的口算题目
  • 输出类专门负责输出out.txt文档

    2. 实现方案

  • 准备工作:先在Github上创建仓库,克隆到本地,在本地新建PSP4331文件夹,在eclipes中创建工程
  • 技术关键点:
    • 如何用命令行接受参数(main函数中的args数组可以接收命令行参数)
    • 如何输出out.txt文件(使用I/o对文件输出)
    • 判断参数的正确性(正则表达式)
    • 在一年级题目中如何让两位数加减整十数及个位数
    • 除法能否变成反向的乘法(可以变成反向的乘法,先得到口诀表内的乘法 A * B = C, 然后判断是否 随机 产生一个余数D,最后结果变成(C+D)/A=B...D,或者是 C/A = B,但在产生 余数 的时候需判断 D 是否小于 除数 A)【ps:一开始我是打算这样实现的,但在当时还没想到要判断 余数 是否 小于除数,就出问题了,而且好像有点麻烦的感觉,所以那时就改成了现在的办法--(正向的除法,先直接产生一个 被除数 和一个 个位数的除数,再直接判断 商 是否为 个位 和 除数 是否小于 被除数)】

四、编码

请说明你如何按照设计思路进行编码,并记录你在开发中遇到的问题,与解决过程

1. 调试日志

记录编码调试的日志,请记录下开发过程中的 debug 历程

  • 只输入一个参数时:无法多次运行
    • 原因:在减法运算类中,rand.nextInt()里的值不确定
    • 修复:在A-B中,本来B是直接随机一个小于A的数,后来改成,判断随机出来的B是否大于A,如果大于,则两数交换
  • 无法识别超过规定题数的错误,无法识别0001的错误:
    • 原因:判断题数的正则表达式出错
    • 修复:修改正则表达式

2. 关键代码

请展示一段程序的关键代码,并解释代码的作用

firstNumber=rand.nextInt(100);
        if((firstNumber/10)>0) //第一个加数是两位数的时候  (根据教学大纲,两位数只能加个位数或者整十数)
        {
            do {
                secondNumber=rand.nextInt(10);        //输出一个个位数
                int n=0;
                n=rand.nextInt(2);         //用n随机判断第二个加数(即上一步随机的个位数)是否需要变成整十数   0:不变  1:变
                if(n==0) 
                    answerNumber=firstNumber+secondNumber; // n=0,第二个加数是不需要变成整十数,直接加,得出答案
                else                             //第二个加数需要变成整十数
                {
                    secondNumber=secondNumber*10; //把第二个加数*10变成整十数,再与第一个数相加
                    answerNumber=firstNumber+secondNumber;  //得出答案
                }   
            }while(answerNumber>=100); //判断答案是否超过100
        }
        else {                 //第一个加数是一位数
            do {
                secondNumber=rand.nextInt(100); //第二个数只要随机到100以内的任意数即可
                answerNumber=firstNumber+secondNumber; //得出答案
                }while(answerNumber>=100);//判断答案是否大于100
        }
        answerSet.add("("+testNumber+")"+" "+firstNumber+" + "+secondNumber+" =");//把结果输出的集合中
        answerSet.add(" "+answerNumber); //把答案输出到集合中        
    }

这是我用来生成一年级加法的思想,因为一年级加法只能是:个位数+个位数,十位数+个位数,十位数+整十数
所以我用了上面的代码来产生一个符合要求的题目,减法运算同理。但我觉得,这种分类分步的方法有点复杂,应该还有更简单的办法

3. 代码规范

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

  • 第一条:代码中的命名均不能以下划线或美元符号开始,也不以一下划线或美元符号结束
  • 第二条:代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式
  • 第三条:类名使用UpperCamelCase风格
  • 第四条:方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格
  • 第五条:杜绝完全不规范的缩写,避免忘文不知义,都以英文单词命名

五、测试

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

六、总结

请总结过程中的教训和经验,思考

  • 程序不仅仅只是编码,在开始编码前应该还有很多工作要做,要分析需求,设计好文档,才能在完成的时候符合要求
  • 编码前要先构思,有一个大致的方向
  • 测试是很有用的事情,虽然有很多数据要输入,很麻烦,但却是程序完成所必不可少的过程,需要通过测试来发现潜在的bug
  • 重构代码还是不怎么理解,对于这方面的知识还要加强
  • try catch不怎么会用,对异常理解不多
  • 对于代码的注释也要有,要在关键点做好标记,方便后续查看

猜你喜欢

转载自www.cnblogs.com/JQvQJ/p/9615647.html