zoukankan      html  css  js  c++  java
  • 高分小学计算器

    高分小学计算器

    一、预估与实际

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

    二、需求分析

    我通过网络的方式了解到,小学一年级数学有如下的几个特点:

    • 特点1

      • 小学一年级:20以内不进位的加减法运算。
    • 特点2

      • 小学二年级:10以内的乘除法运算。
    • 经过分析,我认为,这个程序应当:
      -加减法使用的数字小于20
      -乘除法使用的数字在10以内

    三、设计

    1. 设计思路

    • 题目采用随机数的方法给出
    • 题目的答案存于数组
    • 利用比特流将答案和问题写入文件
    • 需要设计三个过程,一年级、二年级、输出。

    2. 实现方案

    写出具体实现的步骤

    比如:

    • 准备工作:先在Github上创建仓库,克隆到本地...
    • 技术关键点:
      • 通过if、else判断条件来做continue继续下次循环还是break跳出整个循环。
      • 利用随机数random()来产生题目。
      • 第二位随机数根据第一位的个位数来限制最大取值范围。
      • FileOutputStream的write()方法来写入文件。
      • SimpleDateFormat的方法format()来获取当前系统时间。

    四、编码

    • 遇到要循环输入的问题,使用无线循环,然后通过if、else判断条件来做continue继续下次循环还是break跳出整个循环。
      • 问题:出现死循环
    • 利用随机数random()来产生题目,再用两个字符串数组来存储题目和答案,除法多一个余数存储数组。
      -问题:出现数组空值或者越界
    • 第二位随机数根据第一位的个位数来限制最大取值范围,即可产生无进制的数学题目。
    • 将字符串数组转换成byte,再用FileOutputStream的write()方法来写入文件。
    • SimpleDateFormat的方法format()来获取当前系统时间。
      请说明你如何按照设计思路进行编码,并记录你在开发中遇到的问题,与解决过程

    1. 调试日志

    • 想要循环进程从头开始,代码在cmd中运行会导致死循环,问题在于没给再一次输入参数,所以参数一直保持在循环条件,解决方法是加一个控制台输入。
    • 数组出现越界和空值的问题,给出现空值的数组赋上初值,越界的数组根据0和最后一个数字进行判断哪个地方出错,将有涉及数组的下表参数都从0开始,避免混乱。
    • cmd输入文件的未换行,经过查询知道cmd换行符/r/n

    2. 关键代码

    if(m == 1) {											//用随机数的方法来产生题目
    					for(int i = 0;i < n;i++){
    						int a = (int) (Math.random()*20);
    						int b = (int) (Math.random()*(20-a));
    						int c = (int) (Math.random()*2);
    						if(c == 0) {
    							System.out.println("("+(i+1)+")"+a+"+"+b+"=");;
    							questionlist[i] = "("+(i+1)+")"+a+"+"+b+"=";
    							answerlist[i] = " "+(a+b);
    							
    							}
    						else {
    							b = (int) (Math.random()*a+1);
    							System.out.println("("+(i+1)+")"+a+"-"+b+"=");
    							questionlist[i] = "("+(i+1)+")"+a+"-"+b+"=";
    							answerlist[i] = " "+(a-b);
    							}	
    						byte[] ba = questionlist[i].getBytes();			//利用比特流输入文件
    						String pa ="
    ";
    						byte[] ta = pa.getBytes(); 
    						in.write(ba);
    						in.write(ta);
    						}
    					}
    				else  {
    					for(int i = 0;i < n;i++){
    						int a = (int) (Math.random()*9+1);
    						int b = (int) (Math.random()*9+1);
    						int c = (int) (Math.random()*2);
    						if(c == 0) {
    							System.out.println("("+(i+1)+")"+a+"*"+b+"=");
    							questionlist[i] = "("+(i+1)+")"+a+"*"+b+"=";
    							answerlist[i] = " "+(a*b);
    						}
    						else {
    							
    							System.out.println("("+(i+1)+")"+a+"÷"+b+"=");
    							questionlist[i] = "("+(i+1)+")"+a+"÷"+b+"=";
    							answerlist[i] = " "+(a/b);
    							yushulist[i] = " "+(a%b);
    						}
    						byte[] ba = questionlist[i].getBytes();
    						String pa ="
    ";
    						byte[] ta = pa.getBytes(); 
    						in.write(ba);
    						in.write(ta);
    					}
    				}
    
    • 使用随机数的方法来产生题目和字符串数组存储题目。

    3. 代码规范

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

    • 第一条不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
    • 第二条左小括号和字符之间不出现空格;同样的,有小括号和字符之间也不出现空格。
    • 第三条任何二目、三木运算符的左右两边都需要加一个空格。

    五、测试

    • 输入规定范围外的数
      • 输入-1,提示请输入大于0的正整数。
      • 输入0或1来选贼继续出题或者退出,输入3,提示请输入大于0的正整数。
      • 多次出题,未出现预定外的题目。

    六、总结

    -.敲代码总容易将简单的问题复杂化,我觉得写完应该认真排查,将不必要的代码简化。现在也许只有一百行左右的代码,但是养成好习惯,使用好代码规范,精简的代码有助于以后写代码。

  • 相关阅读:
    php RabbitMQ使用
    phalcon: 开启模板缓存和缓存路径
    phalcon:整合官方多模块功能,方便多表查询
    mysql: 模糊查询 feild like keyword or feild like keyword , concat(feild1,feild2,feild3) like keyword
    php的http数据传输get/post...
    java大数字操作:BigInteger,BigDecimal(浮点型)
    DecimalFormat数据格式函数
    MySQL比like语句更高效的写法locate position instr find_in_set
    mysql中使用instr替换like
    mysql中的多行查询结果合并成一个
  • 原文地址:https://www.cnblogs.com/jiowww/p/9627825.html
Copyright © 2011-2022 走看看