zoukankan      html  css  js  c++  java
  • 口算大作战!!!

    口算大作战!!!

    ---个人作业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:在有余数的除法中,要求余数小于除数
    ![](https://images2018.cnblogs.com/blog/1472368/201809/1472368-20180911145824803-1830597451.png)

    三、设计

    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不怎么会用,对异常理解不多
    • 对于代码的注释也要有,要在关键点做好标记,方便后续查看
  • 相关阅读:
    Docker镜像和容器
    Docker介绍
    Ansible实战:部署分布式日志系统
    Ansible之roles介绍
    Ansible之tags介绍
    Ansible之迭代、模板
    linux jenkins安装(四)
    linux maven安装(三)
    linux tomcat安装(二)
    linux JDK安装(一)
  • 原文地址:https://www.cnblogs.com/JQvQJ/p/9615647.html
Copyright © 2011-2022 走看看