zoukankan      html  css  js  c++  java
  • 第四次作业:个人项目-小学四则运算 “软件”之初版

    这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

    我的github远程仓库的地址:https://github.com/Wzh1997/Software-Engineering

    一:要求

     

    像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。

     

    具体要求

      任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如23 - 3 * 4 = 11

    扩展要求

    1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。

    2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等

    二:设计

    1.模块:主类中包含四个方法,出题,计算,判断对错,判断字符串是否都为数字。

    2.数据结构:采用了数组将操作数,操作符分别存放;

    3.计算方式:将存题目的字符串数组按顺序遍历,将数字存入操作数数组,将“+”,“-”符号存出操作符数组,当便利到“*”,“/”号 时,则将“*”,“/”符号两边的数取出运算,将的数存入操作数数组。当题目遍历完后则进行计算,因为在前面我们已经对*,/进行运算,所以操作符数组中只有加减号。然后每次将操作数数组中的前两位i取出,将一位符号取出,进行运算,得数存入第二数的数组位置,以此类推。

        例:操作数数组:2,3,6,4,9

          操作符数组:+,-,+,+

          2+3=5    操作数数组:空,5,6,4,9      5+6=11    操作数数组:空,空,11,4,9

                 操作符数组:空,-,+,+               操作符数组:空,空,+,+

     

    之所以采用这种计算方式,是因为便于日后对计算方式的拓展,如增加操作数的数量,带括号的题目等;

    三:主要代码

    public static float jisuan(String[] timu){
    
            float[] shu=new float[10];//用于存操作数的数组
            String[] fu=new String[10];//用于存操作符的数组
            int shu_top=-1;//操作数数组尾部标记
            int fu_top=-1;//操作符数组尾部标记
    
    
    
    
            for (int i=0;i<5;i++){
                if(isNumer(timu[i])){//判断timu[i]是否为数字
                    shu_top++;
                    //将timu[i]转为整型,存入数组中
                    shu[shu_top]=Integer.valueOf(timu[i]).intValue();
                }
                else if (timu[i]=="*"){//如果是*号,将操作数数组尾部的一个数取出,与*号后的数字相乘,的数再放入操作数数组
    
                    float a=shu[shu_top];
                    shu_top--;
    
                    float b=Integer.valueOf(timu[i+1]).intValue();
    
                    shu_top++;
                    shu[shu_top]=a*b;
    
                    i++;
    
    
                }
                else if (timu[i]=="/"){//如果是/号,将操作数数组尾部的一个数取出,与*号后的数字相除,的数再放入操作数数组
                    float a=shu[shu_top];
                    shu_top--;
    
                    float b=Integer.valueOf(timu[i+1]).intValue();
    
                    shu_top++;
                    shu[shu_top]=a/b;
    
                    i++;
                }
                else {//将操作符放入数组
                    fu_top++;
                    fu[fu_top]=timu[i];
                }
            }
    
    
            //不断将操作数数组中的前两个数取出,将一个操作符取出,进行计算
            //得数放到第二个数的位置,操作符数组为空,则操作数中的数为答案
            int i=0;
            int j=0;
            while (i!=shu_top){
                float a=shu[i];
                float b=shu[i+1];
    
                String fuhao=fu[j];
                if (fuhao=="+"){
                    shu[i+1]=a+b;
                }else {
                    shu[i+1]=a-b;
                }
    
                i=i+1;
                j=j+1;
            }
    
    
            return shu[shu_top];
        }

    四:结果展示

    五:时间表

    PSP2.1 Personal Software Process Stages Time Senior Student Time
    Planning 计划 8 6
    · Estimate 估计这个任务需要多少时间 12 10
    Development 开发 60 120
    · Analysis 需求分析 (包括学习新技术) 8 10
    · Design Spec 生成设计文档 0 0
    · Design Review 设计复审 3 5
    · Coding Standard 代码规范 4 3
    · Design 具体设计 10 13
    · Coding 具体编码 35 30
    · Code Review 代码复审 10 9
    · Test 测试(自我测试,修改代码,提交修改) 15 30
    Reporting 报告 9 6
    · 测试报告 0 0
    · 计算工作量 5 2
    · 并提出过程改进计划 0 0

    六:心得

      在这次编写程序中,发现自己在编码过程中不够细心,常漏写,写错等等,以及对一些逻辑判断得不够准确。总体的设计在程序编写中也是很重要的,觉得自己的总体的设计,一些类的划分方面做得不够好,代码逻辑不够清晰。自己应该加强对面向对象的理解,加强对程序总体规划的技能。

    
    
  • 相关阅读:
    一般处理程序(ashx)
    添加水印
    一般处理程序(ashx)的增删改查
    ASP.NET简介
    泛型反射
    委托事件
    词法分析器作业
    代理模式
    python 之面向对象的三大特性
    python之封装
  • 原文地址:https://www.cnblogs.com/wzh1997/p/9788165.html
Copyright © 2011-2022 走看看