zoukankan      html  css  js  c++  java
  • 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不断,一直补来补去,直至最终代码形成,着实松了一口气,我完成的不只是一次作业,更是一次挑战

  • 相关阅读:
    Apache Maven ToolChains的使用
    小师妹学JavaIO之:文件读取那些事
    JDK9的新特性:JPMS模块化
    JDK9的新特性:String压缩和字符编码
    小师妹学JavaIO之:File copy和File filter
    JDK10的新特性:var和匿名类
    Flutter 完美的验证码输入框
    Flutter 不可错过的学习资源
    《Flutter 动画系列》组合动画
    【强烈推荐】适合Flutter初学者的完整项目
  • 原文地址:https://www.cnblogs.com/sanmiao/p/8646340.html
Copyright © 2011-2022 走看看