欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

小学生快乐寒暑假

程序员文章站 2024-01-16 12:28:52
一个大气又可爱的算术题 一、预估与实际 | PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | | | | | | | Planning | 计划 | 500 | 750 | | • Estimate | • 估计这个任 ......

一个大气又可爱的算术题

一、预估与实际

psp2.1 personal software process stages 预估耗时(分钟) 实际耗时(分钟)
planning 计划 500 750
• estimate • 估计这个任务需要多少时间 500 750
development 开发 400 480
• analysis • 需求分析 (包括学习新技术) 50 50
• design spec • 生成设计文档 10 15
• design review • 设计复审 10 10
• coding standard • 代码规范 (为目前的开发制定合适的规范) 30 50
• design • 具体设计 30 30
• coding • 具体编码 240 350
• code review • 代码复审 20 20
• test • 测试(自我测试,修改代码,提交修改) 30 45
reporting 报告 30 50
• test repor • 测试报告 20 20
• size measurement • 计算工作量 10 10
• postmortem & process improvement plan • 事后总结, 并提出过程改进计划 30 30
合计 750

二、需求分析

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

  • 特点1
  • 小学一年级的数学题只有加减法运算。
  • 特点2
  • 相减不会产生负数。
  • 特点3
  • 小学二年级的数学题为四则运算。
  • 特点4
  • 除法商不能有小数,并且除法的除数不能为0。

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

  • 通过命令行输入数据。
  • 程序需要判断年级,从而随机出不同的题目。
  • 生成的式子的符号也需要判断,如果不符合,需要重新输入,因为首次输入为命令行输入,所以需要加入写入数据的代码。
  • 将生成的式子写入到.txt文本中,最后从cmd中打开文本。
  • 使用的数字小于100

三、设计

1. 设计思路

说明你如何设计这个程序

  • 需要判断是否存在txt文件,如果不存在需要自动生成一个。
  • 生成不同年级的题目需要判断语句去判断。
  • 根据年级的不同随机生成不同的符号。
  • 判断式子是否合理。
  • 合理,计算,写入txt文档中。
  • 如果需要继续出题用循环判断。

2. 实现方案

写出具体实现的步骤

  • 准备工作:先在github上创建仓库,克隆到本地.
  • 在本地仓库新建psp6343文件夹,创建源文件mathexam6343.java
  • 判断输入条件是否正确,运用while循环加if语句的判断。
  • 用数组储存产生的随机数,并且写入到txt文本中。
  • 技术关键点:数字的判断,符号的判断,式子是否成立,数据写入txt中,字符的转换。

四、编码

  • 生成随机数 math.random()
  • if语句判断年级,符号,题目规范
  • io流写入

1. 调试日志

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

  • 一年级减法数学计算,有答案为负数的。
    解决方案:判断第一个传入的数是否大于第二个传入的数,如果小于,符号由“-”变为“+”。

  • 输入年级时,如果输入1或者2以外的数,程序不会运行。
    解决方案:用while循环判断输入是否合理,如果不对,重新输入。

  • 二年级除法计算,除数生成了0.
    解决方案:在生成随机数时+1.

  • 输入题目个数时,输入负数,会报错。
    解决方案:判断是否大于0且个数不超过9999.否则重新输入。

2. 关键代码

    if(n[1]==1) {                               //判断年级
        for(int i =1;i<=n[0];i++) {             //通过for循环产生随机数,并且将随机数写入数组
        int a=(int)(math.random()*100+1);   
        as[i] = a;                                                  
        int c=(int)(math.random()*100+1);
        {
            if(c%2==1) {                        //判断符号
                cs[i] = '-';
            }
            else  {
                cs[i] = '+';
                }
        }                       
        int b=(int)(math.random()*100+1);       //b值
        bs[i] = b;
        
        if(c%2==1 && a<b) {
            int answer = a+b;
            cs[i]='+';
            ds[i]=(char) answer;
        }
        
        else if(c%2==1 ) {
            int answer = a-b;
            ds[i] = (char) answer;

        }
        else {
            int answer =a+b;                    //判断式子是否
            ds[i] = (char) answer;

        }
    }
    }   
    for(int i=1;i<=n[0];i++) {                      //通过for循环把数组里的数字写入txt中
        try {
            bw.write(string.valueof("("+i+")"));
            bw.write(string.valueof(as[i]));    
            bw.write(string.valueof(cs[i]));    
            bw.write(string.valueof(bs[i]));
            bw.newline();
        } catch (ioexception e) {                   //捕获异常
            e.printstacktrace();
        }           
    }

3. 代码规范

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

  • 类名统一,txt文件名统一。
  • 类名首字母大写。
  • 备注代码功能。
  • 代码缩进对齐。- 左小括号和字符之间不出现空格。
  • 循环嵌套换行,使代码对应。

五、测试

测试编号 具体输入 预期结果 实际结果
1 10 1 输出10题一年级题目 符合预期
2 -5 1 提示重新输入一个数 符合预期
3 -5 -1 提示重新输入两个数 符合预期
4 5 - 1 提示重新输入一个数 符合预期
5 -5 程序报错,停止运行 符合预期

六、总结

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

  • 是否使用了“软件开发的基本策略:分而治之”,是否需要用重构。
    使用了“软件开发的基本策略:分而治之”,没有使用重构。
  • “高质量的设计、规范的编码以及有效的测试是保证软件产品质量的三个重要方面”,你是否采用了相关的手段,是否需要重构
    适当采用。
  • 从开始计划到写完代码需要很长的一段时间。在编写过程中,需要用到很多基础的知识,但是由于知识运用的不熟练需要花去更长的时间去写,所以
    基础学习很重要。在计划时候想好思路,会节省很多的时间,并且会减少后面添加代码带来的bug。