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

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
原文地址:https://www.cnblogs.com/hkbx/p/8613333.html