一、需求分析:
编写一个适合小学生计算的四则运算小程序,程序相关参数可以定制,并把生成的等式存储到外部result.txt文件中。
二、功能实现:
·基本功能
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(3)题目数量可定制
(4)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
(5)生成的运算题存储到外部文件result.txt中
·拓展功能
(1)对输出的等式进行了优化:通过给所有的为负值的操作数添加括号,极大的提高了等式的整洁度,增强了等式的可读性。
三、设计实现:
(1)利用rand.nextInt()语句和(int) (Math.random()*number);语句实现随机数的生成
int a = rand.nextInt(100);//在0-100的范围内随机生成整数int b = rand.nextInt(100);//在0-100的范围内随机生成整数
Asum[i]=(int) (Math.random()*number1); Bsum[i]=(int) (Math.random()*number1);
(2)将四则运算符储存到char类型的数组中,利用(int) (Math.random()*number)语句随机生成四则运算式;
char Opera[]= {‘+‘,‘-‘,‘*‘,‘/‘};//Opera[0]~Opera[3]依次输出“+”,“-”,“*”,“/” int r=(int) (Math.random()*number3);//判断输出+,-,*,/
(3)利用PrintStream sun = new PrintStream("d:/result.txt");语句将生成的等式保存在result.txt文档中;
PrintStream ps = new PrintStream("d:/result.txt"); System.setOut(ps);
(4)利用int number1 = reader.nextInt();实现题目数量可控;
System.out.println("输入等式的数量"); int number2 = reader.nextInt(); int Bsum[]=new int[number2];
(5)实现操作数数值范围可控;
System.out.println("输入控制数范围"); int number1 = reader.nextInt(); int Asum[]=new int[number1];
(6)实现负值运算;
char Opera2[]= {‘ ‘,‘-‘};//Opera[0]~Opera[1]依次输出“ (空格)”,“-” int n=(int) (Math.random()*number4);//第一个数值是否为负数 int m=(int) (Math.random()*number4);//第二个数值是否为负数
(7)实现给全部负值加括号;
char Opera3[]= {‘ ‘,‘(‘,‘)‘};//Opera[0]~Opera[2]依次输出“ (空格)”,“(”,“)” int r=(int) (Math.random()*number3);//判断输出+,-,*,/
(8)实现等式的除重操作;
Asum[0]=(int) (Math.random()*number1); Bsum[0]=(int) (Math.random()*number2); for(int i=1;i<number2;) { Asum[i]=(int) (Math.random()*number1); Bsum[i]=(int) (Math.random()*number1); if(Asum[i]!=Asum[i-1]) { i++; } }
四、测试运行:
(1)基本需求测试运行
(2)拓展需求测试运行
五、比较满意的代码片段:
char Opera[]= {‘+‘,‘-‘,‘*‘,‘/‘};//Opera[0]~Opera[3]依次输出“+”,“-”,“*”,“/” char Opera2[]= {‘ ‘,‘-‘};//Opera[0]~Opera[1]依次输出“ (空格)”,“-” char Opera3[]= {‘ ‘,‘(‘,‘)‘};//Opera[0]~Opera[2]依次输出“ (空格)”,“(”,“)” for(int i=0;i<number2;i++) { int n=(int) (Math.random()*number4);//第一个数值是否为负数 int m=(int) (Math.random()*number4);//第二个数值是否为负数 int r=(int) (Math.random()*number3);//判断输出+,-,*,/ System.setOut(ps); System.out.printf("%c%c%d%c%c%c%c%d%c=\r",Opera3[n*1],Opera2[n],Asum[i],Opera3[n*2],Opera[r],Opera3[m*1],Opera2[m],Bsum[i],Opera3[m*2]); System.out.println(); }
六、总结:
对新技术的学习能力还需要加强。把所有的方法和对象都放到了一个类中进行了实现,代码的结构层次不明显。
七、PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(h) | 实际完成需要的时间(h) |
---|---|---|---|
Planning | 计划 | 0.5 | 1 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 18.3 | 27.4 |
Development | 开发 | 5 | 8 |
·· Analysis | 需求分析 (包括学习新技术) | 3 | 5 |
· Design Spec | · 生成设计文档 | 0.5 | 0.6 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0.5 | 0.5 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 0.2 | 0.4 |
· Design | 具体设计 | 2 | 2 |
· Coding | 具体编码 | 2 | 2 |
· Code Review | · 代码复审 | 1 | 1.5 |
· Test | · 测试(自我测试,修改代码,提交修改) | 3 | 6 |
Reporting | 报告 | 0.5 | 0.5 |
·· Test Report | · 测试报告 | 0.2 | 0.2 |
· Size Measurement | 计算工作量 | 0.2 | 0.2 |
· Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 0.5 | 0.5 |
原文地址:https://www.cnblogs.com/sunshuaiqun/p/11524998.html