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

Github项目地址:

                                    https://github.com/J777lh7/Calc_Demo

一、需求分析

       1.程序可接收一个输入参数n,然后随机产生n道加减乘除练习题。每个数字在 0 和 100 之间,运算符在3个到5个之间。

       2.为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。

       3.练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt中,不要输出额外信息,文件目录与程序目录一致。

       4.当程序接收的参数为4时,以下为输出文件示例。

                                                

      5.支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。

二、功能分析

      1.随机产生n道四则运算题,n只能在1到1000之间,不能是其他。

      2.计算出表达式的结果,并且运算过程中不能出现负数和非整数。

      3.将随机产生的题目及正确答案和学号保存在result.txt文件中。

三、设计实现

                               

 

四、测试运行

  运行Main.java文件,先对输入的异常参数进行处理,后输入参数n为10,生成result.txt文件,截图如下。

Eclipse下:

           

cmd下:

五、核心代码

1.根据输入的范围获取随机数 

1 public static int getNumber(int max){  
2         int number = 0;  
3         Random ran = new Random();  
4         number = ran.nextInt(max+1);  
5         return number;  
6     }

2.获取每个节点的运算结果,并检验除法 。当除数为0 或不能整除时,将该运算符随机变换成其他三种运算符。

 1 public String getResult(){  
 2         if(hasChild()){  
 3             switch(str){  
 4                 case "+":  
 5                     return String.valueOf(Integer.parseInt(getLchild().getResult()) + Integer.parseInt(getRchild().getResult()));  
 6                 case "-":  
 7                     return String.valueOf(Integer.parseInt(getLchild().getResult()) - Integer.parseInt(getRchild().getResult()));  
 8                 case "*":  
 9                     return String.valueOf(Integer.parseInt(getLchild().getResult()) * Integer.parseInt(getRchild().getResult()));  
10                 case "/":  
11                     if(getRchild().getResult().equals("0")){  
12                         while(str.equals("/")){  
13                             str = String.valueOf(Ran.getOperator());  
14                         }  
15                         return this.getResult();  
16                     }  
17                     else if(Integer.parseInt(getLchild().getResult()) % Integer.parseInt(getRchild().getResult()) != 0){  
18                         while(str.equals("/")){  
19                             str = String.valueOf(Ran.getOperator());  
20                         }  
21                         return this.getResult();  
22                     }  
23                     else  
24                         return String.valueOf(Integer.parseInt(getLchild().getResult()) / Integer.parseInt(getRchild().getResult()));  
25             }  
26         }  
27         return str;  
28     }       

3.主函数

 1 import java.io.BufferedWriter;
 2 import java.io.File;
 3 import java.io.FileWriter;
 4 import java.io.IOException;
 5 import java.util.*;
 6 
 7 public class Main {    
 8     public static void main(String args[]) throws IOException{  
 9         BinaryTree bTree;
10         Scanner in = new Scanner(System.in);
11         int n=-1;
12         while(n<1||n>1000)
13         {    
14             try
15             {
16                 n=in.nextInt();
17              }
18             catch(Exception e)
19             {
20                  System.out.println("请输入1~1000以内的数字");
21                  in.next();
22                  n=-1;
23              }
24             if((n<1||n>1000)&&n!=-1)
25                  System.out.println("请输入1~1000以内的数字");
26         }      
27         String str="result.txt";
28         String str1="201571030133";
29         BufferedWriter bw = new BufferedWriter(new FileWriter(str));
30         writeToFile(str,str1+'
');
31         for(int i = 0; i < n; i++){  
32             bTree = new BinaryTree(2);  
33             bTree.createBTree();  
34             String result = bTree.CalAndVal();
35             if(Integer.parseInt(result)<0)
36             {
37                 i--;
38             }
39             else
40             {
41                 writeToFile(str,bTree.toString() + "=" + result+'
'); 
42             }
43              
44         }  
45     }  
46     public static void writeToFile(String filePath, String content) {
47 
48         try{
49             BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath),true));
50             writer.write(content);
51             writer.close();
52         }catch(Exception e){
53             e.printStackTrace();
54         }
55     }
56 }  

六、总结

        这次项目,由于个人基础比较薄弱,长时间未接触Java编程,无法独立完成项目,很是吃力。程序对网上大神程序进行参考,并在同学的帮助下基本实现项目要求。项目中还有许多不足,希望通过今后的学习改进完善。本次作业最大的收获就是发现了很多自己知识不足,也知道了今后学习努力方向。  

 

七、生成PSP

 

PSP2.1

任务内容

计划完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

15

25

·       Estimate

·  估计这个任务需要多少时间,并规划大致工作步骤

15

25

Development

开发

320

440

·       Analysis

  需求分析 (包括学习新技术)

10

20

·       Design Spec

·  生成设计文档

5

5

·       Design Review

·  设计复审 (和同事审核设计文档)

15

10

·       Coding Standard

  代码规范 (为目前的开发制定合适的规范)

10

15

·       Design

  具体设计

30

40

·       Coding

  具体编码

200

270

·       Code Review

·  代码复审

15

30

·       Test

·  测试(自我测试,修改代码,提交修改)

35

50

Reporting

报告

40

75

·       Test Report

·  测试报告

15

35

·       Size Measurement

  计算工作量

10

10

·       Postmortem & Process Improvement Plan

·  事后总结 ,并提出过程改进计划

15

30

 

原文地址:https://www.cnblogs.com/jlh777/p/8603933.html