201571030143 小学四则运算练习软件项目报告

时间:2023-02-14 13:07:23

  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时,以下为输出文件示例。

                201571030143 小学四则运算练习软件项目报告

一、需求分析 

  • 程序需要输入参数n,确定输出算式的个数;
  • 生成有3~5个运算符的两位数运算表达式;
  • 表达式的结果不能是小于0的数,也不能是小数;
  • 将运算结果以及学号输出到文本文档中。

二、功能设计

  • 输入n后,在0~100随机生成n个表达式;
  • 将运算表达式的计算结果以及学号输出保存到result.txt。

三、设计实现

  程序流程图如下所示:

201571030143 小学四则运算练习软件项目报告

四、测试运行

  如下图所示,运行Main.java文件后,当输入n为10时,随机产生运算式,并同时在result.txt文件中输出结果。

                 201571030143 小学四则运算练习软件项目报告

五、核心代码

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