20194629 自动生成四则运算题第一版报告
一、需求分析
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)剔除重复算式, 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
- 是否包含乘法和除法
- 操作数数值范围可控(如操作数 在100以内 还是1000以内)
- 操作数是否含负数
(5)生成的运算题存储到外部文件result.txt中
二、功能设计
基本功能:自动生成四则运算试题
扩展功能:(1)算出答案
(2)用户可以自己选择用加减,乘除,正负
三、设计实现
Java语言实现,软件myeclipse,其中随机生成数字需使用到Math.random()函数,并通过for,switch等控制语句实现条件的各种选择问题。
四、测试运行
1.包含加减,不含乘除,不含正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能
2.包含加减乘除,不含正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能
3.包含加减、正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能
4.包含加减、乘除、正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能
五、代码片段
1.所需要引用的Java包
1 import java.io.BufferedWriter; 2 import java.io.FileNotFoundException; 3 import java.io.FileWriter; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 import java.io.Writer; 7 import java.util.Scanner;
2.判断是否随机出带负数的算术题
if(zf==0){ //判断zf是否等于0,若等于则不出带负号的运算 n1=(int) (Math.random()*size); n2=(int)(Math.random()*size); str = n2+""; }else if(zf==1) {//若zf等于1时,则出带负号的运算 n1=(int)(Math.random()*(2*size+1)-100); n2=(int)(Math.random()*(2*size+1)-100); if(n2<0){ str = "(" + n2 + ")"; }else{ str = n2+""; } }
3.加减乘除
sum=(int)(Math.random()*4); switch(n){ case 0:sum=n1+n2; p='+'; if(n1+n2<=100){ bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+""); bw.newLine(); break; } case 1:sum=n1-n2; p='-'; if(n1-n2<100){ bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+""); bw.newLine(); } break; case 2:sum=n1*n2; p='*'; switch(r){ case 1: if(n1*n2<=100){ bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+""); bw.newLine(); break; } case 0: i--;//回指到随机抽到的前一个的运算符,进行判断运算 continue; } case 3:sum=n1/n2; p='/'; switch(r){ case 1: bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+""); bw.newLine(); break; case 0: i--; continue; }
4.剔除重复
a1[i]=n1;//算式第一个操作数放在数组a1里 a2[i]=p;//算式操作符放在数组a2里 a3[i]= n2;//算式第二个操作数放在数组a3里 int pd= 0; //判断重复 for(int j=i;j>0&&j<5;j--){//算式第一个数是否重复 if(a2[i]==a2[j-1]){//比较操作符是否重复 if(a3[i]==a3[j-1]){//比较算式第二个数是否重复 pd=1;//重复pd赋值为1
}
}
}
5.生成外部result.txt文件
Writer fw = null; fw = new FileWriter("d:\\result.txt"); BufferedWriter bw=new BufferedWriter(fw);//写入文件 bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+""); bw.close();
六、总结
刚开始看到题目的时候觉得毫无头绪,有一点无从下手的感觉,后来和同学讨论学习,慢慢的先把基本的框架搭建出来,把基本的变量都设置出来并赋值,实现最基本功能,再根据需求划分模块,一点一点的把每个模块的功能依次实现,最后进行整合测试,最后完成需求里所有功能,过程虽然有点难熬,但是还是让我学习到了不少东西。
七、psp
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
10 |
15 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
300 |
400 |
Development |
开发 |
40 |
40 |
Analysis |
需求分析 (包括学习新技术) |
60 |
90 |
Design Spec |
生成设计文档 |
30 |
30 |
Design Review |
设计复审 (和同事审核设计文档) |
10 |
5 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
5 |
3 |
Design |
具体设计 |
30 |
50 |
Coding |
具体编码 |
60 |
90 |
Code Review |
代码复审 |
5 |
10 |
Test |
测试(自我测试,修改代码,提交修改) |
20 |
20 |
Reporting |
报告 |
10 |
10 |
Test Report |
测试报告 |
15 |
30 |
Size Measurement |
计算工作量 |
5 |
5 |
Postmortem & Process Improvement Plan |
事后总结 ,并提出过程改进计划 |
10 |
20 |