• 个人项目 — 小学四则运算 “软件”之初版


    • 作业要求地址:http://www.cnblogs.com/xiangxuer/p/9695909.html
    • github地址:https://github.com/lawnlawn/home/tree/master/untitled

       1.时间计划与实际使用时间

    PSP2.1 Personal Software Process Stages 预计hour 实际hour
    Planning 计划 0.1 0.1
    · Estimate 估计这个任务需要多少时间 5 6.1
    Development 开发 0.3 0.4
    · Analysis 需求分析 (包括学习新技术) 0.4 0.4
    · Design Spec 生成设计文档 0.3 0.3
    · Design Review 设计复审 0.2 0.3
    · Coding Standard 代码规范 0.1 0.1
    · Design 具体设计 0.3 0.3
    · Coding 具体编码 2 2
    · Code Review 代码复审 0.3 0.3
    · Test 测试(自我测试,修改代码,提交修改) 0.3 0.3

      2.求分析:  

        作业需求:

          为任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数。

        题目分析:

          ▶ 编程语言为java;

          ▶ 题目数量由用户给出;

          ▶ 四则运算的题目要求:两个运算符,3个数值,数值必须是100以内的正整数

          ▶ 结果要求:答案为正数

          ▶ 计分功能

          ▷ 扩展需求:可以出有真分数的题目,可处理用户的真分数输入

      2.代码规范

          命名规范:使用匈牙利命名法

          程序风格:程序按照阶梯式编写,括号习惯使用其一个括号在语句后面,结尾括号另占一行

          注释规范:函数头的注释(“功能”,“返回值”),在一些关键的语句上面进行注释

      3.具体设计

         ◻设计两个类:main类用于程序的运行,practice类用于程序逻辑的编写

         ◻ practice类中的方法有:

             ◇ getTotal() : 用于对数据进行运算

             ◇ getNum(): 用于获取随机数

             ◇ getSymbol() :用于或缺随机运算符

             ◇newTitle(): 用于创建一道四则运算题目

         ◻ newTitle()  四则运算题目的生成方法的逻辑:

            ◇ 使用Math.random()得到三个1-100的随机整数 x,y,z

            ◇ 使用Math.random()得到两个1-4的随机数,1234分别代表+-*/ ,为op1,op2

              ◇  判断运算符优先级,遵循“先加减后乘除”的运算法则

            ◇  判断运算结果是否为负数,若是则重新运行该方法,否则输出运算式

            ◇  返回值为运算结果

         ◻ getTotal() 方法中的对除法进行“分母不能为0”的规定

         ◻ main类中对分数进行计算,

            ◇ 获取题目数量

            ◇ 将总分设置为100

            ◇ 定义变量right记录用户答对题目的数量

            ◇ 题目数量/题目总分*用户答对题目的数量

      4.具体编码

          将整个四则运算分为两段,根据其优先级进行选择哪段开始先计算

          /*
            判断运算符优先级
             */
            int level1 = opLevel(op1);
            int level2 = opLevel(op2);
            if (level2>level1){
                 total = getTotal(y, z, op2);
                 answer = getTotal(x,total, op1);
            }else {
                 total = getTotal(x, y, op1);
                 answer = getTotal(total,z, op2);
            }

          

     /**
         * 函数功能:对数据进行运算
         * 返回值:计算答案
         */
        public int getTotal(int x,int y,String symbol){
            int total = 0;
            switch(symbol){
                case "+":
                    total = x + y;
                    break;
                case "-":
                    total = x-y;
                    break;
                case "*":
                    total = x*y;
                    break;
                case "/":
                    if(y==0){
                        newTitle();
                    }else if(x<y){
                        total=0;
                    }else {
                        total = x/y;
                    }
                    break;
            }
            return total;
        }

          ◗ 对于扩展要求,真分数的求和没能做出来,因为感觉做到这里的时候感觉代码差不多定型了,如果要再改的话感觉变动较大,同时可能需要换另外一种思考方法和逻辑

      5.测试

          测试其实自己能发现较多的问题,例如一开始没考虑除法分母不能为0的问题,用户输入没有进行容错等问题等等,测试于整个项目而言的重要性是比较重的,但是在此次的项目中对测试方面只是进行了较为简单的后期完善,问题测出来了但代码上蛮多没解决。

      6.项目运行结果截图

      

  • 相关阅读:
    javascript变量作用域、匿名函数及闭包
    SenchaTouch2中navigation下嵌入list无事件响应问题解决
    Fedora17安装SSH
    25个必须记住的SSH命令
    linux下安装hadoop
    Fedora17实现图形界面root登录
    virtualBox利用已创建的vdi文件克隆快速创建新虚拟机
    printf/scanf格式修饰符
    windowsServer2003服务器上修改ftp端口号
    为ckeditor添加行距的功能(转载)
  • 原文地址:https://www.cnblogs.com/lawn/p/9761805.html
Copyright © 2020-2023  润新知