201571030117小学四则运算练习软件项目报告
github地址:https://github.com/iylong/sizeyunsuan
初次读到《构建之法》中用代码实现随机产生小学生四则运算,我也想过,用什么方法实现,但并没有结果,也不过是脑海中一闪而过,
并没有深刻思考这个问题,当看到老师布置的作业时,感觉有点小兴奋,因为脑海中有过思考,但是仔细一想,其实也不是太容易,
java语言具体怎么实现,用户界面?太繁琐,只是一个输出并写入txt文件,并不是答题系统,用不着这么费劲,时间并不多,所以只能靠基础了,
随着一步一步测试,终于完成了,下面详细说说。
一、需求分析
- 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
- 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
- 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
- 当程序接收的参数为4时,以下为输出文件示例。
2018010230
13+17-1=29
11*15-5=160
3+10+4=1
15/5+3-2=4
二、附加功能
软件附加功能要求如下:(请有余力的同学完成)
支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。(5分)
扩展程序功能支持真分数的出题与运算,例如:1/6 + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1/6=2/3,而非4/6。(5分)
三、功能分析
- 程序接受一个随机数p,选择运算式类型(整式,分式,带括号)
- 程序接受一个随机数x,随机产生x道运算式
- 程序可以输出运算时及正确答案
- 将表达式存入到文件“result.txt”中。
四、测试运行
五、核心代码
1 public class jisuan { 2 public static String yuefen(int a,int b){ 3 int y = 1; 4 for(int i=a;i>=1;i--){ 5 if(a%i==0&&b%i==0){ 6 y = i; 7 break; 8 } 9 } 10 int z = a/y; 11 int m = b/y; 12 if(z==0) { 13 return "0"; 14 } 15 return ""+z+"/"+m; 16 }
1 if(p==1){ 2 System.out.println("请输入数量"); 3 Scanner scan2=new Scanner(System.in); 4 x=scan2.nextInt(); 5 int answer[]=new int [x]; 6 System.out.println("201571030117"); 7 for(i=0;i<x;i++){ 8 int a=(int)(Math.random()*100);//随机生成一个1-10的整数 9 int b=(int)(Math.random()*100);//随机生成一个1-10的整数 a>b 10 int f=(int)(Math.random()*100);//随机生成一个1-10的整数 11 if(b>a){ 12 int temp=a; 13 a=b; 14 b=temp; 15 } 16 int c=(int)(Math.random()*4);//随机生成一个1-4的整数,0表示加法,1表示减法,2表示乘法,3表示除法, 17 if(c==0) 18 { 19 d1=a+b+f; 20 question1=a+"+"+b+"+"+f; 21 } 22 if(c==1) 23 { 24 d1=a-b+f; 25 question1=a+"-"+b+"+"+f; 26 } 27 if(c==2) 28 { 29 d1=a*b*f; 30 question1=a+"*"+b+"*"+f; 31 } 32 if(c==3) 33 { 34 b=decide(a, b); 35 d1=a/b+f; 36 question1=a+"/"+b+"+"+f; 37 } 38 answer[i]=d1; 39 result1.add(question1+"="+d1); 40 } 41 //测试输出list的值 42 for ( int k = 0; k < result1.size(); k++){ 43 System.out.println(result1.get(k)); 44 } 45 WriteToFile write=new WriteToFile("result.txt",result1); 46 System.out.println("写入成功!"); 47 }
六、总结
以上就是整个过程,虽然没容易,但是收获颇多,虽然用java写项目,但是好长时间没用来写这些,感觉还是收获颇丰,总体来说,c++写习惯了,对java的封装,集成,多线程等用的还是不好,总是感觉把java程序写出了C语言的味道。
六、展示PSP
|
任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) | |
Planning | 计划 |
20 | 30 | |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 |
30 | 30 | |
Developmet | 开发 | 325 | 465 | |
Analysis | 需求分析(包括学习新技术) | 20 | 20 | |
Design Spec | 生成设计文档 |
10 | 10 | |
Design Review | 设计复审(和同事审核设计文档) |
20 | 20 | |
Coding Standard | 代码规范 | 5 | 5 | |
Design | 具体设计 | 30 | 20 | |
Coding | 具体编码 | 200 | 350 | |
Code Review | 代码复审 | 10 | 10 | |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 30 | |
Reporting | 报告 | 32 | 35 | |
Test Report | 测试报告 | 20 | 20 | |
Size Measurement | 计算工作量 |
2 | 5 | |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改机计划 | 10 | 10 |