201571030143 小学四则运算练习软件项目报告
GitHub地址:https://github.com/t-Poison/Sweet-ly
实验要求:
我们从小学就开始学习四则运算,现在要完成一个包含3到5个数字的四则运算练习的命令行软件开发,软件的基本功能要求如下:
- 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
- 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
- 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
- 当程序接收的参数为4时,以下为输出文件示例。
一、需求分析
- 程序需要输入参数n,确定输出算式的个数;
- 生成有3~5个运算符的两位数运算表达式;
- 表达式的结果不能是小于0的数,也不能是小数;
- 将运算结果以及学号输出到文本文档中。
二、功能设计
- 输入n后,在0~100随机生成n个表达式;
- 将运算表达式的计算结果以及学号输出保存到result.txt。
三、设计实现
程序流程图如下所示:
四、测试运行
如下图所示,运行Main.java文件后,当输入n为10时,随机产生运算式,并同时在result.txt文件中输出结果。
五、核心代码
1 //创建流文件,并将学号写入 2 File writename = new File("result.txt"); // 相对路径,如果没有则要建立一个新的result。 3 writename.createNewFile(); // 创建新文件 4 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); 5 out.write("201571030143\r\n"); // \r\n即为换行
1 for(int i=1;i<=n;i++) 2 { 3 int a=(int)(Math.random()*100); 4 int b=(int)(Math.random()*100); 5 int a1=(int)(Math.random()*100); 6 int b1=(int)(Math.random()*100); 7 int c=(int)(Math.random()*4); 8 switch(c) 9 { 10 case 0: 11 while(true){ 12 a1= (int) (Math.random()*100 + 0); 13 b1= (int) (Math.random()*100 + 1); 14 if(a1%b1==0) 15 { 16 System.out.println(a+"+"+b+"+"+a1+"/"+b1+"="); 17 out.write(a+"+"+b+"+"+a1+"/"+b1+"="+(a+b+a1/b1)+"\r\n"); 18 break; 19 //count++; 20 } 21 } 22 break; 23 case 1: 24 if(a<b) 25 { 26 int temp=a; 27 a=b; 28 b=temp; 29 } 30 System.out.println("("+a+"-"+b+")"+"+"+a1+"*"+b1+"="); 31 out.write("("+a+"-"+b+")"+"+"+a1+"*"+b1+"="+((a-b)+a1*b1)+"\r\n"); 32 break; 33 case 2: 34 System.out.println(a + " * " + b+"+" +a1+"+ "+b1+" = "); 35 out.write(a + " * " + b+"+" +a1+"+ "+b1+" = "+(a*b+a1+b1)+"\r\n"); 36 break; 37 case 3: 38 while(true){ 39 a = (int) (Math.random()*100 + 0); 40 b = (int) (Math.random()*100 + 1); 41 if(a%b==0) 42 { 43 if(a/b+a1>=b1) 44 System.out.println(a + " / " + b +"+"+ a1+"-"+b1+" = " ); 45 out.write(a + " / " + b +"+"+ a1+"-"+b1+" = " +(a/b+a1-b1)+"\r\n"); 46 break; 47 //count++; 48 } 49 50 } 51 } 52 out.flush(); // 把缓存区内容压入文件 53 }
六、总结
1.本次的项目实验做的不是很顺利,由于平时很少用java写程序,刚拿到题目时分析了很久,才渐渐对java语言熟悉起来。本次程序我用了一个for循环实现了运算式的生成,但是也是在一步步的设计中琢磨出来的,将运算结果写入文件的部分,起初写的相对路径的写法是错误的,查找了资料后才掌握了正确的方法。在随机生成运算式的部分,加减乘除也是随机生成的,开始的时候只写了两个数之间的四则运算,但是老师的题目要求三到五个运算符,由于我开始未作程序设计,导致自己的思路定势在上述代码的设计上,于是投机取巧又加了两个运算符,并将运算符号写死,但是其中的数字都是随机产生的,表达式的结果中也没有负数和小数出现。
2.通过本次实验,我认识到在开发一个项目程序时,必须先要做好需求分析,虽然看似简单,但是很重要。在写代码的时候,先要做代码设计,想好每一步应该做的,不能直接就上手开始写。在这次实验中,代码是一步一步写出来的,也算是有收获吧,在之后的学习中,我也会将该程序功能完善,希望下次能有所进步。
七、展示PSP
PSP2.1 |
任务内容 |
计划完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
15 |
25 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
20 |
Development |
开发 |
200 |
360 |
·· Analysis |
需求分析 (包括学习新技术) |
10 |
15 |
· Design Spec |
· 生成设计文档 |
8 |
10 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
8 |
10 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
15 |
15 |
· Design |
具体设计 |
30 |
45 |
· Coding |
具体编码 |
180 |
260 |
· Code Review |
· 代码复审 |
12 |
20 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
20 |
30 |
Reporting |
报告 |
30 |
45 |
·· Test Report |
· 测试报告 |
10 |
15 |
· Size Measurement |
计算工作量 |
6 |
6 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
10 |
20
|