MathExam

MathExam v9.999

一、预估与实际

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

二、需求分析

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

  • 特点1:一年级的加减法都是在0-100间进行计算的
  • 特点2:都是整数,没有小数
  • 特点3:没有负数
  • 特点4:二年级乘法与除法源于九九乘法中的计算
  • 特点5:除法中除数不能为0

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

  • 加减法使用的数字为0-100
  • 生成减法时注意结果不能为负数
  • 乘法题只生成乘法表中有的

三、设计

1. 设计思路

  • 程序有一个类,主要有四个方法,用于实现以下几个目的:
    • 随机生成所需的数字
    • 对题目进行计算
    • 将题目与答案写入文档中
  • 算法的关键:
    • 判断输入的格式是否正确并给予提示
    • 如何按照正确的格式将题目写入文档

2. 实现方案

  • 准备工作:先在Github上创建仓库,克隆到本地,编写代码后通过git远程上传到Github上
  • 思路:通过创建数组保存题目所需的两个数以及计算后的答案,最后按照格式写入文档中,另外在输入题数与年级时,需判断输入的格式是否正确,不正确时应给予相应的提示
  • 技术关键点:1.如何随机生成一个数字;2.如何判断输入的格式是否符合要求

四、编码

1. 调试日志

首先从键盘输入一个数n,然后创建三个大小为n的整型数组和一个字符数组分别来记录题目所需的两个数、计算结果以及符号,之后随机生成n组数和符号,然后进行计算,最后按照格式将题目与答案写入文档中

  • 问题:第一次出的减法的题目中存在结果为负数的题目,后对其进行了修改,再没有对输入的数判断格式,后添加了判断其是否为数字的方法,当输入错误时给予提醒并重新输入

2. 关键代码

			for (int i = 0; i < a.length; i++) {
				a[i]=(int)(Math.random()*101);
				b[i]=(int)(Math.random()*101);
				t=(int)(Math.random()*2);
				while(a[i]<b[i]&&t==1) {
					a[i]=(int)(Math.random()*101);
					b[i]=(int)(Math.random()*101);
					t=(int)(Math.random()*2);
				}
				if(t==0) d[i]='+';
				else d[i]='-';
			}
		}
		if(m==2) {
			for (int i = 0; i < a.length; i++) {
				t=(int)(Math.random()*2);
				if(t==0) {
					a[i]=(int)(Math.random()*10);
					b[i]=(int)(Math.random()*10);
				}
				else {
					a[i]=(int)(Math.random()*82);
					b[i]=(int)(Math.random()*9)+1;
				}
				if(t==0) d[i]='*';
				else d[i]='/';
			}
		}```
随机生成我们所需要的数字

### 3. 代码规范

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

- 第一条:在 if/else/for/while/do 语句中必须使用大括号。 即使只有一行代码,避免使用单行的形式: if (condition) statements;
- 第二条:表达异常的分支时, 少用 if-else 方式。如果非得使用 if()...else if()...else...方式表达逻辑,避免后续代码维护困难, 请勿超过 3 层
- 第三条:有 try 块放到了事务代码中, catch 异常后,如果需要回滚事务,一定要注意手动回滚事务
- 第四条:在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度
- 第五条:Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。
- 第六条:方法名首字母小写


## 五、测试
- 输入:10
              1(正确)
- 输入:10 0/001/asdad/   545 45 4/
			  1(请输入正确的题数)
- 输入:10
			1 0/001/asdasd/3(请输入正确的年级)
- 输入:10 0/001/wqd/     4554  5 6 /
			1 0/002/4/   1     /4  55  6/(请输入正确的题数与年级)			
## 六、总结
注意将每个功能的代码单独写成一个方法,便于查看和理解;尽量将代码简化优化,减少不必要的变量的使用,选用更优的算法,避免开辟不必要的空间内存;注意理清代码的层次与结构,以及每个方法之间的联系
原文地址:https://www.cnblogs.com/txq1997/p/9630152.html