实验名称:简单四则运算

Github地址:https://github.com/wulezha/Sizyunsuan/tree/master

1、实验目的与要求

(1)掌握软件项目个人开发流程。

(2)掌握Github上发布软件项目的操作方法。

2、实验内容和步骤
 
任务1:
尝试按照《构建之法》第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习的命令行软件开发题目参考:http://www.cnblogs.com/xinz/p/7417960.html
软件基本功能要求如下:
  • 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
  • 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
  • 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt中,不要输出额外信息,文件目录与程序目录一致。
  • 当程序接收的参数为4时,以下为输出文件示例。

3.软件附加功能要求如下:(请有余力的同学完成)
  • 支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。(5分)
  • 扩展程序功能支持真分数的出题与运算,例如:1/6 + 1/8 + 2/323/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1/6=2/3,而非4/6。(5分)

4.需求分析:

  1. 自动生成小学四则运算,需要用到随机数,用随机数随机生成数字,能够随机生成符号加减乘除(除数不为0)。
  2. 支持分数和整数的四则运算,同样是利用随机数分别生成分子与分母(分母不为0).

5.功能设计:

  1. 根据用户输入的参数生成相应数量的题目。
  2. 利用Random语句实现随机生成的整数、分子、分母以及加减乘除。
  3. 根据用户选择生成难易程度不同的题。

6.设计实现:

1.实现100以内的两位数以及三位数的混合运算。

7.测试运行:下面是我的测试结果截图

 

 

8.核心代码:

复制代码package sizeyunsuan2;
import java.util.Scanner;
public class Caculator {
     public static void main(String[] args) {
        System.out.println("0表示结束运算,1代表加减运算,2代表乘除运算,3代表混合运算,请选择:");
        Yunsuan bn=new Yunsuan();
        Jiajian an=new Jiajian();
          Chengchu cn=new Chengchu();
          Hunhe dn=new Hunhe();
 Scanner in=new Scanner(System.in);
          int L=in.nextInt();
         
          if(L==0)
          {
              bn.Showme();
          }
          if(L==1)
          {
              System.out.println("当M=10时表示两位数的加减运算,M=100时表示三位数的加减运算...请选择");
              int M=in.nextInt();
              an.setM(M);
              System.out.println("请输入需要打印多少道题,10的倍数:");
              int N=in.nextInt();
              an.setN(N);
              an.Showme();
          }
          if(L==2)
          {
              System.out.println("当M=10时表示两位数的乘除运算,M=100时表示三位数的乘除运算...请选择");
              int M=in.nextInt();
              cn.setM(M);
              System.out.println("请输入需要打印多少道题,10的倍数:");
              int N=in.nextInt();
              cn.setN(N);
              cn.Showme();
          }
          if(L==3)
          {
              System.out.println("当M=10时表示两位数的混合运算,M=100时表示三位数的混合运算...请选择");
              int M=in.nextInt();
              dn.setM(M);
              System.out.println("请输入需要打印多少道题,10的倍数:");
              int N=in.nextInt();
              dn.setN(N);
              dn.Showme();
          }
         
      }
 
  }
  class Yunsuan
  {
      public int N;
      public int getN() {
          return N;
      }
      public void setN(int n) {
          N = n;
      }
      public int M;
      public int getM() {
          return M;
      }
      public void setM(int m) {
          M = m;
      }
      //int a,b;
      public void Showme()
      {
          System.out.println("结束运算。");
      }
  }
  class Jiajian extends Yunsuan
  {
      public char o[]={'+','-'};
      public void Showme()
      {
          for(int i=0;i<N/10;i++)
          {
              for(int j=0;j<10;j++)
              {
                int a=(int)(Math.random()*M)+1;
                 int b=(int)(Math.random()*M)+1;
                 int c=(int)(Math.random()*2);
                 System.out.print(a);
                 System.out.print(o[c]);
                 System.out.print(b+"=  ");
             }
             System.out.println();
         }
     }
 }
 class Chengchu extends Yunsuan
 {
     public char p[]={'*','/'};
     public void Showme()
     {
         for(int i=0;i<N/10;i++)
         {
             for(int j=0;j<10;j++)
             {
                 int a=(int)(Math.random()*M)+1;
                 int b=(int)(Math.random()*M)+1;
                 int c=(int)(Math.random()*2);
                 System.out.print(a);
                 System.out.print(p[c]);
                 System.out.print(b+"=  ");
             }
             System.out.println();
         }
     }
 }
 class Hunhe extends Yunsuan
 {
     public char m[]={'+','-','*','/'};
     public void Showme()
     {
         for(int i=0;i<N/10;i++)
         {
             for(int j=0;j<10;j++)
             {
                 int a=(int)(Math.random()*M)+1;
                 int b=(int)(Math.random()*M)+1;
                 int d=(int)(Math.random()*M)+1;
                 int f=(int)(Math.random()*M)+1;
                 int c=(int)(Math.random()*4);
                 int e=(int)(Math.random()*4);
                 int g=(int)(Math.random()*4);
                 System.out.print(a);
                 System.out.print(m[c]);
                 System.out.print(b);
                 System.out.print(m[e]);
                 System.out.print(d);
                 System.out.print(m[g]);
                 System.out.print(f+"=  ");
             }
             System.out.println();
}
    }
}

9.总结:通过一周的学习软件工程的个人项目做完了,由于很久没有在用JAVA,几乎对JAVA的知识点已经忘的一干二净了,通过重看JAVA书,参考网上的代码总算好不容易完成这次的任务,因为是第一次软件工程个人项目,所以有太多东西不会,以后会努力做得更好。

10.展示PSP

PSP2.1

任务内容

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

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

Planning

计划

10

15

·       Estimate

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

10

8

Development

开发

100

80

··       Analysis

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

10

15

·       Design Spec

·  生成设计文档

5

30

·       Design Review

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

0

0

·       Coding Standard

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

3

20

·       Design

  具体设计

60

100

·       Coding

  具体编码

100

200

·       Code Review

·  代码复审

7

5

·       Test

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

13

21

Reporting

报告

30

50

··       Test Report

·  测试报告

5

3

·       Size Measurement

  计算工作量

10

5

·       Postmortem & Process Improvement Plan

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

5

3

 11.实验总结:因为JAVA基础没有学好在加很久没有接触JAVA这次感觉有点吃力,课后仔细阅读了JDK帮助文档和JAVA的学习笔记和学习视频,通过从网上查阅大量的参考资料完成了这次作业,做得可能有些功能不符合老师的实验要求但是我会努力一次比一次更好,以后不会的问题我会找方法去解决,而不是不去尝试就放弃,很感谢老师给我们又给了一次机会,并让我们了解了学习是要去不断尝试或许做出来的结果并没有想象中的好,但是做过以后多多少少会有自己的一点收获。