zoukankan      html  css  js  c++  java
  • 20194667+自动生成四则运算题第一版报告

    一、需求分析 

      (1)自动生成10道100以内的2个操作数的四则运算算式(+ - *  /),要求运算结果也在100以内

      (2)剔除重复算式。  2 + 3 =    和  2 + 3 =     是重复算式      2 + 3 =   和   3 + 2 =  不属于重复算式

      (3)题目数量可定制

      (4)相关参数可控制

                是否包含乘法和除法

                操作数数值范围可控(如操作数 在100以内   还是1000以内)

                操作数是否含负数    

       (5)生成的运算题存储到外部文件result.txt中

    二、功能设计

      基本功能:  1.题目数量可定制

                               2.二则和四则运算可选

                               3.操作数数值范围可控

                               4.操作数是否含负数 

                               5.重复算式可过滤

    三、设计实现

    本次设计只用到一个主类,其中包含了主方法和其他方法共同实现程序的相关功能    

      。判断是否需要负数的方法   

      。判断是否需要包含乘除的方法  

      。获取算式得数的方法

      。主方法   

    四、测试运行    

     

      

      五、代码片段

    • package math;

    • import java.io.BufferedWriter;

    • import java.io.File;

    • import java.io.FileOutputStream;

    • import java.io.IOException;

    • import java.io.OutputStreamWriter;

    • import java.util.ArrayList;

    • import java.util.List;

    • import java.util.Random;

    • import java.util.Scanner;

      public class SuanShi {  

    •  public static void main(String[] args) {    

    •   try {       Scanner sc = new Scanner(System.in);    

    •    System.out.println("这是一个自动生成四则运算试题的程序。接下来请选择相关的参数。");    

    •    System.out.println("请输入要生成题目的数量(数量>1)");     

    •  int num = sc.nextInt();    

    •    System.out.println("请选择是否包含乘除法(包含请输入1,不包含请输入0)");    

    •    int LevelFlg = sc.nextInt();     

    •  System.out.println("请选择结果是否包含负数(包含请输入1,不包含请输入0)");   

    •     int MinusFlg = sc.nextInt();     

    •  System.out.println("请选择结果的最大范围(比如100,200,1000)");    

    •    int maxNumFlg = sc.nextInt();              //生成对象,然后调用它的方法     

    •  SuanShi SuanShi=new SuanShi();    

    •    List<Equation> from = new ArrayList<Equation>();       //调用生成算式的程序,参数分别为 题目数量,是否含有乘除法,是否含有负数,最大的结果范围     

    •  from = SuanShi.createEquation(num,LevelFlg,MinusFlg,maxNumFlg);       //在控制台上展示算式    

    •    SuanShi.showEquation(from);       //将算式保存到文件中     

    •  SuanShi.saveEquation(from);

           } catch (Exception e){      

    •     System.out.println("Error!" + e);        

    •   System.exit(0);      }  }   // 生成算式  

    •    public List<Equation> createEquation(int num , int LevelFlg,int MinusFlg,int maxNumFlg) {

           List<Equation> from = new ArrayList<Equation>();      //通过一个死循环来循环生成算式,然后检查是否符合条件,将满足条件的算式添加到list中,满足数量后跳出循环      

    •    while(true) {             Random rand = new Random();        

    •      int operator = rand.nextInt(LevelFlg == 1 ? 4 : 2) + 1;// 是否乘除可控       

    •       int numA = rand.nextInt(maxNumFlg) + 1;        

    •      int numB = rand.nextInt(maxNumFlg) + 1;             //将生成的算式放入对象中       

    •       Equation equation = new Equation(numA,numB,operator);             //检查生成的竖式符合条件吗        

    •      if(check(from,equation,MinusFlg,maxNumFlg)) {             // 将产生的并且通过检查的算式添加到List集合中     

    •         from.add(equation);             };             //满足最大数量num后跳出循环         

    •     if(from.size()>=num) break;              

    •        }       

    •   return from;  

    •    }

          // 在控制台上展示算式

    •     public  void showEquation(List<Equation> from) {         

    •    System.out.println("结果如下:");    

    •      for(int i=0;i<from.size();i++) {    

    •   System.out.println(from.get(i).printAnswer());  

    •     }    

    • }

          // 保存算式  

    •    public  void saveEquation(List<Equation> from) {   

    •    BufferedWriter bufferedWriter = null;   

    •    String path = "D:\homework\result.txt" ;   

    •    try{       File file = new File(path);    

    •   if (!file.getParentFile().exists()) {  

    •      file.getParentFile().mkdirs();    

    •   }       file.createNewFile();             // 获取该文件的缓冲输出流        

    •      bufferedWriter = new BufferedWriter               (new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));             // 写入信息     

    •         bufferedWriter.write("以下为本次程序生成的试题,共有"+from.size()+"道题 ");      

    •  for (int i=0;i<from.size();i++) {        //依次写入本地文件中           bufferedWriter.write(i+1+". "+from.get(i).printAnswer()+" ");   

    •     }       bufferedWriter.flush();// 清空缓冲区       bufferedWriter.close();// 关闭输出流       

    •       System.out.println("文件保存完毕!");    

    •  }catch (IOException e) {      e.printStackTrace();   

    •    }finally {             }     }         //检查生成的算式是否正确。   

    •   public  boolean check(List<Equation> from, Equation equation,int MinusFlg,int maxNumFlg) {    

    •  boolean result = true;      //判断新生成的算式是否超过最大范围   

    •    if(equation.getResult()>maxNumFlg) result = false;      //判断新生成的算式是否有负数    

    •  if(MinusFlg==0       &&equation.getResult()<0) result = false;      //判断新生成的算式是否和以前的重复    

    •  for(int i=0;i<from.size()-1;i++) {    

    •   if(from.get(i).getNumA()==equation.getNumA()    

    •    &&from.get(i).getNumB()==equation.getNumB()    

    •    &&from.get(i).getOperator()==equation.getOperator()) result = false;}      //输出通过检查的算式  

    •  return result;    

    •       } }

    六、总结

     通过本次练习,学到了许多知识。经过一步步需求分析到功能的一步步实现,虽然编写过程中有很多地方不清楚,但通过网上查找和询问他人慢慢的弄明白了,收获颇多。

    七、PSP

     

      

    PSP2.1

    任务内容

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

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

    Planning

    计划

    20

    25

    ·       Estimate

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

    10

    20

    Development

    开发

    300

    480

    ··       Analysis

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

    10

    20

    ·       Design Spec

    ·  生成设计文档

    0

    0

    ·       Design Review

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

    0

    0

    ·       Coding Standard

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

    10

    15

    ·       Design

      具体设计

    15

    20

    ·       Coding

      具体编码

    300

    420

    ·       Code Review

    ·  代码复审

    10

    10

    ·       Test

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

    10

    20

    Reporting

    报告

    10

    15

    ··       Test Report

    ·  测试报告

    15

    20

    ·       Size Measurement

      计算工作量

    0

    0

    ·       Postmortem & Process Improvement Plan

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

    10

    20

      

  • 相关阅读:
    eclipse设置字体大小
    如何利用服务器下发的Cookie实现基于此Cookie的会话保持
    Docker学习笔记_安装和使用Python
    Docker学习笔记_安装和使用mysql
    Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/images/json: dial unix /var/run/docker.sock: conne
    Ubuntu18.04创建新的系统用户
    Docker学习笔记_安装和使用nginx
    Docker安装和使用Tomcat
    虚拟机ubuntu18.04设置静态IP
    我学习参考的网址
  • 原文地址:https://www.cnblogs.com/GXTSTAY/p/11522820.html
Copyright © 2011-2022 走看看