20194629 自动生成四则运算题第一版报告

  

一、需求分析 

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

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

(3)题目数量可定制

(4)相关参数可控制

  •  是否包含乘法和除法
  •  操作数数值范围可控(如操作数 在100以内   还是1000以内)
  •  操作数是否含负数    

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

二、功能设计

  基本功能:自动生成四则运算试题

  扩展功能:(1)算出答案

       (2)用户可以自己选择用加减,乘除,正负

 三、设计实现

      Java语言实现,软件myeclipse,其中随机生成数字需使用到Math.random()函数,并通过for,switch等控制语句实现条件的各种选择问题。

四、测试运行

  1.包含加减,不含乘除,不含正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能

  

     2.包含加减乘除,不含正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能

   

    3.包含加减、正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能

 

   4.包含加减、乘除、正负,两个操作数,选择操作数范围和题目数量并去掉重复的功能

 

 五、代码片段

 1.所需要引用的Java包

1    import java.io.BufferedWriter;
2   import java.io.FileNotFoundException;
3   import java.io.FileWriter;
4   import java.io.IOException;
5   import java.io.PrintWriter;
6   import java.io.Writer;
7   import java.util.Scanner;

 2.判断是否随机出带负数的算术题

if(zf==0){ //判断zf是否等于0,若等于则不出带负号的运算
  n1=(int) (Math.random()*size);
  n2=(int)(Math.random()*size);
  str = n2+"";
}else if(zf==1) {//若zf等于1时,则出带负号的运算
    n1=(int)(Math.random()*(2*size+1)-100);
    n2=(int)(Math.random()*(2*size+1)-100);
    if(n2<0){
      str = "(" + n2 + ")";
    }else{
      str = n2+"";
     }
}

3.加减乘除

 sum=(int)(Math.random()*4);
        switch(n){
            case 0:sum=n1+n2;
                   p='+';
               if(n1+n2<=100){
                   bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+"");
                   bw.newLine();
                    break;
                   }
            case 1:sum=n1-n2;
                 p='-';
                if(n1-n2<100){
                    bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+"");
                    bw.newLine();
              }    
                break;          
            case 2:sum=n1*n2;
                   p='*';
                   switch(r){
                      case 1:  if(n1*n2<=100){
                          bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+"");
                          bw.newLine();
                    break;
                }
                      case 0:
                           i--;//回指到随机抽到的前一个的运算符,进行判断运算
                           continue;
               }     
                 
            case 3:sum=n1/n2;
                 p='/';
                 switch(r){
                      case 1:     bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+""); 
                                  bw.newLine();
                               break;
                      case 0:
                             i--;
                             continue;            
            }

4.剔除重复

a1[i]=n1;//算式第一个操作数放在数组a1里
a2[i]=p;//算式操作符放在数组a2里
a3[i]= n2;//算式第二个操作数放在数组a3里
int pd= 0; //判断重复
for(int j=i;j>0&&j<5;j--){//算式第一个数是否重复
if(a2[i]==a2[j-1]){//比较操作符是否重复
   if(a3[i]==a3[j-1]){//比较算式第二个数是否重复
       pd=1;//重复pd赋值为1 
    }
  }
}
 

5.生成外部result.txt文件

 Writer fw = null;
    fw = new FileWriter("d:\result.txt");
    BufferedWriter bw=new BufferedWriter(fw);//写入文件

 bw.write("第"+(i+1)+"题: "+n1+""+p+""+str+"="+sum+"");

 bw.close();

六、总结

  刚开始看到题目的时候觉得毫无头绪,有一点无从下手的感觉,后来和同学讨论学习,慢慢的先把基本的框架搭建出来,把基本的变量都设置出来并赋值,实现最基本功能,再根据需求划分模块,一点一点的把每个模块的功能依次实现,最后进行整合测试,最后完成需求里所有功能,过程虽然有点难熬,但是还是让我学习到了不少东西。

七、psp

PSP2.1

任务内容

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

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

Planning

计划

10

15

Estimate

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

300

400

Development

开发

40

40

Analysis

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

60

90

Design Spec

生成设计文档

30

30

Design Review

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

10

5

Coding Standard

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

5

3

Design

具体设计

30

50

Coding

具体编码

60

90

 Code Review

代码复审

5

10

Test

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

20

20

Reporting

报告

10

10

Test Report

测试报告

15

30

Size Measurement

计算工作量

5

5

Postmortem & Process Improvement Plan

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

10

20

原文地址:https://www.cnblogs.com/jingxueyan/p/11521935.html