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

Posted 杨柳堤上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2016012026+小学四则运算练习软件项目报告相关的知识,希望对你有一定的参考价值。

项目代码地址:https://coding.net/u/liuseshz/p/Week2_2/git?public=true

一.需求分析

 

(1)       随机生成所需n道加减乘除练习题,以符号“+-*÷”表示。

(2)       题中每个数字为 0 和 100 之间的整数

(3)       运算符在3个到5个之间

(4)       每个练习题必包含不少于两种运算符

(5)       运算过程与结果不能出现负数与非整数

(6)       学号,练习题及正确计算结果输出至目标txt文件,输出不含其它信息。

 

二.功能设计

基本功能

(1)随机生成输入参数为n的n道100以内加减乘除运算(分别使用符号+-*÷来表示)。(2)实现3到5个运算符,两种以上的运算,计算过程不包含负数与非整数。

附加功能(暂不考虑)

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

(2)加入支持真分数加减法的出题与运算,支持运算时分数的自动化简。

三.设计实现

在不考虑附加功能的情况下,分成生成与计算两部分。

 随机数与随机运算符生成,用Random函数实现

char[] sign = { ‘+‘, ‘-‘, ‘*‘, ‘÷‘};
        // 用数组存运算符
        Random random = new Random();
        int m = random.nextInt(3) + 3;
        //随机生成3-5个运算符数
        int index=(int)(Math.random()* m);
        char a[]=new char[m-1];
        int num[]=new int[5];     
   
        for(int i=0;i<m+1;i++)
          {
            num[i]=(int) ( Math.random() *100 );
            //随机取一百内整数
            for(int j=0;j<m;j++)
            {
                a[j]=sign[index];
                //随机取运算符
            }
            }

算式生成

 if (m==3)
         {
             System.out.println(num[0]+a[0]+num[1]+a[1]+num[2]+a[2]+num[3]+"="+sum);
         }
         //运算符个数为3时的运算式
         if (m==4)
         {
             
             System.out.println(num[0]+a[0]+num[1]+a[1]+num[2]+a[2]+num[3]+a[3]+
                     num[4]+"="+sum);
         }
        //运算符个数为4时的运算式
         if (m==5)
         {
             System.out.println(num[0]+a[0]+num[1]+a[1]+num[2]+a[2]+num[3]+a[3]+
                     num[4]+a[4]+num[5]+"="+sum);
         }
         //运算符个数为5时的运算式

 

四.算法详解

 由于算法知识匮乏,整个代码结构中只用到了简单的判断语句,没有考虑括号的问题,计算时准备使用逆波兰的后缀表示法,但在套用时遇到了困难,最后使用了很繁琐的办法。

下面是百度到的后缀表达式算法。

class PostToResult{
    private String post;   //中缀表达式转换得到的后缀表达式
    private Stack<integer> stack;   //用于得到计算结果的栈

    public PostToResult(String post, Stack<integer> stack) {
        this.post = post;
        this.stack = stack;
    }
 
    //由后缀表达式得到四则运算结果的实现过程
    public void operate(){
        String[] strArr = post.split(" ");
        for(int i = 0; i < strArr.length; i++){
            String temp = strArr[i];
            if(isDigital(temp)){
                stack.push(Integer.valueOf(temp));
            }else{
                int result = compute(temp);
                stack.push(result);
            }
        }
    }
 
    private int compute(String str){
        int re = 0;
        int m = stack.pop();
        int n = stack.pop();
        switch(str){
        case "+" :
            re = n + m;
            break;
        case "-" :
            re = n - m;
            break;
        case "*" :
            re = n * m;
            break;
        case "/" :
            re = n / m;
            break;
        default :
            break;
        }
        return re;
    }
 
    private boolean isDigital(String str){
        char[] chArr = str.toCharArray();
        int len = chArr.length;
        int count = 0;
        for(int i = 0; i < len; i++){
            if(chArr[i] >= ‘0‘ && chArr[i] <= ‘9‘)
                count++;
        }
        return count == len;
    }
 
    public int getResult() {
        return stack.pop();
    }
}

五.测试运行

 

六.代码展示

 

七.总结

由于Java基础不怎么好,长时间没有用的关系,写代码时仿佛是在重学,在编码时一直磕磕绊绊。之前的习惯不太好,每次写完代码都几乎不测试,只是简单的运行一下,在很多时候就直接跳过了。这次测试时反反复复对代码进行修改纠错,结果还是不尽人意。在网上参考了各路网友的代码,可能是之前没好好学的原因,也不怎么看得懂。此次作业过后,我认为我应该加强自己的编码能力,重拾Java,多打代码,尽早摆脱啥都不会的窘境。

八.展示PSP

PSP2.1

任务内容

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

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

Planning

计划

10

10

·        Estimate

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

10

10

Development

开发

315

688

·        Analysis

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

30

60

·        Design Spec

·         生成设计文档

5

8

·        Design Review

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

0

0

·        Coding Standard

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

10

10

·        Design

·         具体设计

20

40

·        Coding

·         具体编码

180

480

·        Code Review

·         代码复审

30

30

·        Test

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

40

60

Reporting

报告

30

26

·         Test Report

·         测试报告

10

8

·         Size Measurement

        

 

·         计算工作量

10

8

·         Postmortem & Process Improvement Plan

        

 

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

10

10

以上是关于2016012026+小学四则运算练习软件项目报告的主要内容,如果未能解决你的问题,请参考以下文章

201571030122/201571030129《小学四则运算练习软件软件需求说明》结对项目报告

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

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

201571030121《小学四则运算练习软件软件需求说明》结对项目报告

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

201571030120/201571030119《小学四则运算练习软件软件需求说明》结对项目报告