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

coding.net源码仓库地址:https://git.coding.net/sanmiaooo/sizeyunsuan.git

 

一、 需求分析

1.程序可从命令行接收一个输入参数n,然后随机产生n道+-*/习题

2.每个数字在 0 和 100 之间

3.运算符在3个到5个之间并且每道练习题至少要包含2种运算符

4.所出的练习题在运算过程中不得出现负数与非整数

5.使用JAVA编程语言

6.将学号和生成的练习题及对应答案输出到文件“result.txt”中,不输出额外信息

附加需求

1.产生带括号的四则运算并求解,算式中存在的括号必须大于2个,且不得超过运算符的个数

2.扩展程序功能支持真分数的出题与运算,运算过程中都为最简真分数

二、 功能设计

基本功能用户输入的参数n随机产生n道符合要求的四则混合运算练习题,自动算出答案,式子与答案以文档的形式呈现

扩展功能产生带括号的四则运算并求解,运算过程中都为最简真分数

注意只能用JAVA进行编译,可使用的JDK版本为 jdk8u161,可使用的JRE版本为jre8u161,不得使用除限定版本jdk与jre外的额外依赖包

三、设计实现

共包含两个类文件

main函数:主函数,接收命令行参数并启动程序,负责输出到result.txt文件

Lib是辅助类,compute是支持带括号的整数加减乘除运算,fraction是负责真分数加减运算

采用模块化编程,方便调试,当运行报错时,可以分别测试每一个模块

四、算法详解   ·main函数(主函数)

import java.io.PrintStream;
public class Main{
    public static void main(String[] args){
        int n=Integer.parseInt(args[0]);
        
        if(n<1||n>1000){
            System.out.println("无法识别,请输入1000以内的正整数");
        }else{
            System.out.println("创建成功!");
        
        try {
            PrintStream ps = new PrintStream("../result.txt");
            System.setOut(ps);
        }catch(Exception e){
            System.out.println("文件创建失败");
        }
        System.out.println("2016012009");
        Lib.count(n);
        }    
    }
}

五、 测试运行         输出到result.txt文件

六、代码展示  

找最大公约数

 
public static int max(int a, int b) // 找最大公约数
    {
        int k, l, p;
        if (a < b) {
            l = a;
            a = b;
            b = l;
        }
        while (b != 0) {
            k = a % b;
            a = b;
            b = k;
        }
        p = a;
        return p;
    }

整数运算

整数运算
    static public void compute(int n) {
        String arr = "";
        for (int j = 0; j < n; j++) {
            char[] oper = { '+', '-', ' ', '*', '/' };
            Random random = new Random();
            int th = random.nextInt(3) + 3; // 3-5个运算符
            int s = random.nextInt(5);
            int a = random.nextInt(100);
            int b = random.nextInt(100);
            int sum = 0;
            if (oper[s] == ' ') {
                s++;
            }
            if (oper[s] == '-') {
                while (a - b < 0) {
                    a = random.nextInt(100);
                    b = random.nextInt(100);
                }
                sum = a - b;
            }
            if (oper[s] == '/') {
                if (b == 0)
                    b++;
                while (a % b != 0) {
                    a = random.nextInt(100);
                    b = random.nextInt(99) + 1;
                }
                sum = a / b;
            }
            if (oper[s] == '+') {
                sum = a + b;
            }
            if (oper[s] == '*')
                sum = a * b;
            arr = a + "" + oper[s] + "" + b;
            System.out.print("(" + arr);
            int k = 1;
            for (int i = 1; i < th; i++) {

                int s1 = random.nextInt(5);
                int b1 = random.nextInt(100);
                a = sum;  //更新sum
                if (oper[s1] == ' ') {
                    s1++;
                }
                if (oper[s1] == '-') {
                    while (a - b1 < 0) {
                        b1 = random.nextInt(100);
                    }
                    sum = a - b1;
                }
                if (oper[s1] == '/') {
                    if (b1 == 0)
                        b1++;
                    while (a % b1 != 0) {
                        b1 = random.nextInt(99) + 1;
                    }
                    sum = a / b1;
                }
                if (oper[s1] == '+')
                    sum = a + b1;
                if (oper[s1] == '*')
                    sum = a * b1;
                String arr1 = "";
                arr1 = "" + oper[s1] + "" + b1;
                if (i == 1) {
                    k = s;
                    if (s1 - k >= 2) {
                        System.out.print(")" + arr1);
                    } else {
                        System.out.print(arr1);
                    }
                }

                if (i != 1) {
                    if (s1 - k >= 2) {
                        System.out.print(")" + arr1);
                    } else {
                        System.out.print(arr1);
                    }
                    k = s1;
                }
            }
            System.out.println("=" + sum);
        }
    }

七、PSP展示

 

任务内容

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

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

Planning

计划

10

30

·        Estimate

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

8*60

13.5*60

Development

开发

7*60

12*60

·        Analysis

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

60

5*60

·        Design Spec

·         生成设计文档

20

10

·        Design Review

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

30

10

·        Coding Standard

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

10

10

·        Design

·         具体设计

30

30

·        Coding

·         具体编码

3*60

4*60

·        Code Review

·         代码复审

30

30

·        Test

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

60

120

Reporting

报告

60

1.5*60

·         Test Report

·         测试报告

15

30

·         Size Measurement

·         计算工作量

15

15

·         Postmortem & Process Improvement Plan

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

30

45

八、总结

·在本次实验中,主要在代码完成、调试中花了很多时间。一方面我对于Java语法结构、类的定义、函数的构造等知识方面都严重匮乏。另一方面还是对于软件工程这门课理解略有偏差

·最初只是实现这个四则运算的过程,就遇到了很多阻碍,一直查资料,修改,问同学,再修改,把我一个急性格的人,被它磨得无可奈何

·我是个笨蛋,在jdk和jre配置环境时把path删了,用了3个小时重装的系统,下载原来的软件又用了不少时间,一天的心情也浪费了,此愚蠢问题坚决杜绝

·虽然写出大体代码,但bug不断,一直补来补去,直至最终代码形成,着实松了一口气,我完成的不只是一次作业,更是一次挑战

原文地址:https://www.cnblogs.com/sanmiao/p/8646340.html