zoukankan      html  css  js  c++  java
  • 结对项目-四则运算“软件”之升级版

          一、程序基本要求如下:

    • 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100。
    • 用户可以输入答案
    • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

          二、扩展方向(8选4)

       1、可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8

    •    2、用户答题结束以后,程序可以显示用户答题所用的时间
    •    3、用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
    •    4、程序可以出单个整数阶乘的题目:如:4!=24

         三、时间记录表

    PSP2.1

    Personal Software Process Stages

    Time Senior Student(h)

    Time(h)

    Planning

    计划

    1.5

    1

    · Estimate

    估计这个任务需要多少时间

    16

    18.1

    Development

    开发

    2

    3

    · Analysis

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

    1.5

    3

    · Design Spec

    生成设计文档

    0

    0

    · Design Review

    设计复审

    0.2

    0.3

    · Coding Standard

    代码规范

    0.4

    0.2

    · Design

    具体设计

    2

    2.5

    · Coding

    具体编码

    3

    6

    · Code Review

    代码复审

    1

    0.8

    · Test

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

    0.5

    0.5

    Reporting

    报告

    0

    0

    Test Report

    测试报告

    0.2

    0.2

    ·workload

    计算工作量

    0.2

    0.3

    ·correction

    并提出过程改进计划

    0.3

    0.3      

    四、结对过程

    1.结对成员

    • 刘庆松:把在控制台运行程序转成简单的可视化程序,程序可以出单个整数阶乘的题目:如:4!=24功能,用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数功能
    • 赵铭杰:对用户开始进行答题进行计时处理,在最后结束答题后,会提示所用的总时间;对随机生成的负数进行规范化处理,在负数的位置匹配括号。

    2.开发环境

    调试并编写代码

    3. 结对照片

    4. 部分代码及运行截图

     窗口布局文件代码(start.java)

    复制代码
             JFrame frame = new Start();
                frame.setTitle("四则运算");
                frame.setSize(300, 200);
                frame.setLocationRelativeTo(null);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
    复制代码

     随机生成数值和符号的核心代码(start.java)

    复制代码
          int sign1 = (int) (Math.random() * 3); //产生0-3的随机数
                int sign2 = (int) (Math.random() * 3); //产生0-3的随机数
                int x = -(int) (Math.random() * 99)+(int) (Math.random() * 99);
                int y = -(int) (Math.random() * 99)+(int) (Math.random() * 99);
                int z = -(int) (Math.random() * 99)+(int) (Math.random() * 99);
                int j = 1 + (int) (Math.random() * 9);
                int sign3 = 1 + (int) (Math.random() * 3);
                String result = "";
    复制代码

     通过递归计算阶乘的结果功能代码(EasyOperation.java)

    复制代码
    public  int jiecheng(int number){
            if (number <= 1)
                return 1;
            else
                return number * jiecheng(number - 1);
        }
    }
    复制代码

     生成题目计算答案的功能代码(EasyOperation.java)

    复制代码
    public  double count1(int x,int y,int z,int sign1,int sign2){
            double result=0;
            if((sign1==0)&&(sign2==0)){ result=x+y+z; }
            if((sign1==0)&&(sign2==1)){ result=x+y-z; }
            if((sign1==0)&&(sign2==2)){ result=x+y*z; }
            if((sign1==0)&&(sign2==3)){ result=x+y/z; }
            if((sign1==1)&&(sign2==0)){ result=x-y+z; }
            if((sign1==1)&&(sign2==1)){ result=x-y-z; }
            if((sign1==1)&&(sign2==2)){ result=x-y*z; }
            if((sign1==1)&&(sign2==3)){ result=x-y/z; }
            if((sign1==2)&&(sign2==0)){ result=x*y+z; }
            if((sign1==2)&&(sign2==1)){ result=x*y-z; }
            if((sign1==2)&&(sign2==2)){ result=x*y*z; }
            if((sign1==2)&&(sign2==3)){ result=x*y/z; }
            if((sign1==3)&&(sign2==0)){ result=x/y+z; }
            if((sign1==3)&&(sign2==1)){ result=x/y-z; }
            if((sign1==3)&&(sign2==2)){ result=x/y*z; }
            if((sign1==3)&&(sign2==3)){ result=x/y/z; }
            String test =new DecimalFormat("0.0").format(result);
            result = Double.valueOf(test);
            return result;
        }
    复制代码

    生成“题目“”的字符串功能代码(EasyOperation.java)

    复制代码
     public  String count(int x,int y,int z,int sign1,int sign2){
            String result="";
            String sign3="";
            String sign4="";
            String x1 = String.valueOf(x);
            String y1 = String.valueOf(y);
            String z1 = String.valueOf(z);
            if(x<0)x1="("+x1+")";
            if(y<0)y1="("+y1+")";
            if(z<0)z1="("+z1+")";
            switch(sign1){
                case 0:sign3="+";break;
                case 1:sign3="-";break;
                case 2:sign3="x";break;
                case 3:sign3="/";break;
                default:sign3="+";
            }
            switch(sign2){
                case 0:sign4="+";break;
                case 1:sign4="-";break;
                case 2:sign4="x";break;
                case 3:sign4="/";break;
                default:sign4="+";
            }
            result=x1+sign3+y1+sign4+z1;
            return result;
        }
    复制代码

    运行界面截图(start.java)

    用户答案判断提示(EasyOperation.java)

     

    统计用时提示(TimerCount.java)

    提示用户答题数已超过五题(start.java)

    五、总结与心得

    这次最大的难点是把程序可视化,我的步骤是先把程序功能完善,再套入JFrame窗体框架进行可视化,但是难度太大了,我要把每个部分的代码进行重组,还要学会局部刷新,想象如何编程窗体代码才能得到最终运算结果,想了一天一夜才弄了这么一个简陋的窗体。我把原来的两个class拆分成3个class,要把所有方法进行重新构造。这次的困难让我深刻认识要不断练习熟能生巧才能养成编程思维,使程序一开始便有一个方便易写的框架出来。我会继续努力。

  • 相关阅读:
    android语音识别 android.speech 包分析
    [Android]MIT App Inventor
    How C/C++ Debugging Works on Android
    Android JNI相关
    Google非官方的Text To Speech和Speech Recognition的API
    Cygwin/MinGW
    VoxForge collect transcribed speech for use with Free and Open Source Speech Recognition Engines
    Voice Search/Actions for Android
    如何查看网页编码
    [转]Python__builtin__与__builtins__的区别与关系(超详细,经典)
  • 原文地址:https://www.cnblogs.com/lqscmz/p/9845339.html
Copyright © 2011-2022 走看看