一个大气又可爱的算术题

一、预估与实际

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。
posted on 2018-09-11 17:12  同学钱掉了你还要不要  阅读(226)  评论(1编辑  收藏  举报