zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    Excel导入
    Git 操作命令
    java线程池
    jquery 初始化数据 添加html 第一次玩0.0
    设计模式六大原则之二:里氏替换原则
    升级指令
    strtok和strtok_r(转载)
    docker进阶之路-基础篇 | 二:portainer安装与基本使用
    docker进阶之路-基础篇 | 一:环境搭建
    集群式Quartz定时任务框架实践
  • 原文地址:https://www.cnblogs.com/jlh777/p/8603933.html
Copyright © 2011-2022 走看看