个人工作流程 计应192 第四组 孔旭凯

个人工作流程

PSP阶段 预计时间(h)

实际时间(h)

计划 1  0.5
  • 明确需求和其他相关因素,估计每个阶段的时间成本
1   0.5
开发  18.5  19
  • 需求分析
 1  0.5
  • 生成设计文档
 1  1.5
  • 设计复审(和同事审核设计文档)
 1  0.5
  • 代码规范(为目前的开发制定合适的规范)
 0.5  0.5
  • 具体设计
 2  3
  • 具体编码
 8 10
  • 代码复审
 2  1
  • 测试(自测、修改代码、提交修改)
 3  2

报告

 4  3
  • 测试报告
 2  1
  • 计算工作量
 1  1
  • 事后总结,并提出过程改进计划
 1  1

 

1、计划:

  编写一个软件,可以完成对100以内的加减法进行出题,并能通过测试来记录成绩和答题时间

2、需求分析:

  用户需求:作为一名小学生家长,希望有一个软件,能够自动给出100以内的加减运算,并判断答案,统计正确率,以便能够减轻我的压力

  软件需求:①、软件给的数字范围应该是0~100的整数;

       ②、软件能够自动随机给出N组题,并且题目不能重复;

       ③、在用户完成题目后,软件能够自动判断用户完成的结果和完成时间;

       ④、软件还可以根据用户的完成结果来和用户进行不同的互动

3、生成设计文档

4、设计复审

5、代码规范:

  使用的eclipse工具,代码比较规范

6、具体设计:

  先生成两个随机数,将这两个随机数进行运算,作为一个表达式;

 创建一个页面,有若干个按钮可以控制开始和结束,将表达式传入页面当中,由用户来进行运算,最后进行统计结果。

7、具体代码

package operation;

import java.util.Random;

public class JiSuan {
    // 定义一个数组,用来存储“+”“-”符号
    static String[] str = { "+", "-" };
    // 创建随机数对象
    static Random random = new Random();
    // 创建两个0~100的随机数num1和num2
    static int num1 = random.nextInt(101);
    static int num2 = random.nextInt(101);
    // 将数组str中的元素随机赋值给s
    static String s = str[random.nextInt(2)];

    // 创建一个习题方法,返回一个字符串类型的表达式(生成的是习题表达式)
    public static String xiti() {
        // 创建随机数对象num1和num2和随机运算符号
        num1 = random.nextInt(101);
        num2 = random.nextInt(101);
        s = str[random.nextInt(2)];
        //当运算符号为减号时,判断num1和num2的大小,如果num1<num2,则需要重新随机生成num1
        if(s=="-"){
            while(num1<num2) {
                num1 = random.nextInt(101);
            }
            // 返回一个字符串类型的运算表达式
            return num1 + "" + s + "" + num2 + "=";
        }
        // 返回一个字符串类型的运算表达式
        return num1 + "" + s + "" + num2 + "=";
    }

    // 创建一个运算的方法,返回一个结果
    public static int jieguo() {
        // 先初始化结果为0
        int result = 0;
        // 通过switch语句判断随机生成的运算符号s是哪种,并进行运算
        switch (s) {
        case "+":
            result = num1 + num2;
            break;
        case "-":
            result = num1 - num2;
            break;
        }
        return result;
    }
}
package operation;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class YeMian {
    /*
     * jtf_result.getText() 用户给出的答案 
     * JiSuan.jieguo() 计算机计算的答案
     * redo        按钮:再做一遍
     * jt          显示做题结果的文本框
     */
    // 设置一个页面,可以用图形化界面容器JFrame来实现
    static JFrame jf = new JFrame(); // 主界面
    static JPanel pan1 = new JPanel(); // 主界面最上方面板
    static JPanel pan2 = new JPanel(); // 主界面中间面板
    static JPanel pan3 = new JPanel(); // 主界面最下方面板
    // 声明一个字符串类型的表达式,用来接收计算类传来的字符串表达式
    static String str = "";
    // 声明一个文本框类型的数组,用来在页面存储表达式
    static JTextField[] jTextFields = new JTextField[10];
    // 初始化一个变量i,i用来存储写了几道题
    static int i = 0;
    // 初始化一个变量right,right用来存储答对了几道题
    static int right = 0;
    
    static long begin=0;
    static long end= 0;

    public static void main(String[] args) {
        // 设置主页面格式
        jf.setSize(800, 600);
        jf.setLayout(new BorderLayout());
        jf.setLocationRelativeTo(null);
        // 设置上方格式
        pan1.setBackground(Color.YELLOW);
        pan1.setSize(800, 150);
        pan1.setLayout(new FlowLayout());
        // 创建一个JTextField对象jtf,用于显示单行文本(20表示列数,用于计算文本宽度)
        JTextField jtf = new JTextField(20);
        // 将JiSuan类中xiti方法得到的表达式赋值给str
        str = JiSuan.xiti();
        // 将str作为参数传到数组jtf当中
        jtf.setText(str);

        jtf.setSize(400, 100);
        jtf.setEditable(false);
        jtf.setLocation(300, 25);
        jtf.setFont(new Font("微软雅黑", 1, 20));
        pan1.add(jtf);
        // 创建一个JTextField对象jtf_result,用于输入计算结果
        JTextField jtf_result = new JTextField(5);
        jtf_result.setFont(new Font("微软雅黑", 1, 20));
        pan1.add(jtf_result);
        // 创建一个按钮,点击按钮后生成下一个表达式
        JButton jb = new JButton("下一题");
        pan1.add(jb);

        // 设置中间布局
        pan2.setLayout(new GridLayout(5, 2));
        // 利用循环生成表达式
        for (int i = 0; i < 10; i++) {
            jTextFields[i] = new JTextField();
            // 设置文本框字体
            jTextFields[i].setFont(new Font("微软雅黑", 1, 20));
            // 设置文本框为不可编辑
            jTextFields[i].setEditable(false);
            // 循环生成文本框,并将文本框添加到中间面板中
            pan2.add(jTextFields[i]);
        }

        // 设置用于显示做题结果的文本框
        JTextField jt = new JTextField(40);
        jt.setFont(new Font("微软雅黑", 1, 15));
        jt.setEditable(false);
        // 用于清空所有信息,并重新开始答题
        JButton redo = new JButton("再做一遍");
        // 将文本框和按钮添加到页面底部布局中
        pan3.add(jt);
        pan3.add(redo);

        // 添加一个按钮事件
        jb.addActionListener(new ActionListener() {
            // 编写一个程序运行的方法,判断用户答题成绩
            public void actionPerformed(ActionEvent arg0) {    
                // 当用户没有输入答案时
                if (jtf_result.getText().equals("")) {
                    jTextFields[i].setText(str + jtf_result.getText() + "      × 正确结果为:" + JiSuan.jieguo());
                    // 当用户给的答案和计算机给的答案相同时
                } else if (jtf_result.getText().equals(JiSuan.jieguo()+"")) {
                    jTextFields[i].setText(str + jtf_result.getText() + "      √");
                    right++;
                    // 当用户给的答案和计算机给的答案不同时
                } else {
                    jTextFields[i].setText(str + jtf_result.getText() + "      × 正确结果为:" + JiSuan.jieguo());
                }
                // 变更下一题
                i++;
                str = JiSuan.xiti();
                jtf.setText(str);
                jtf_result.setText("");
                jtf_result.requestFocus();
                // 判断10题是否全部做完时
                if (i == 10) {
                    //记录程序结束的时间
                    end= System.currentTimeMillis();
                    
                    jb.setEnabled(false);
                    // 输出成绩
                    jt.setText("你答对了" + right + "道题,答错了" + (10 - right) + "道题,正确率为:" + (right / 10.0)+",耗费时间"+((end-begin)/1000)+"秒");
                    // 如果答对了10道题
                    if(right==10) {
                        JOptionPane.showMessageDialog(null, "全部回答正确,你真棒");
                    }else if(right>7){
                        JOptionPane.showMessageDialog(null, "恭喜你答对了" + right + "道题"+" Great!");
                    }else if (right>4) {
                        JOptionPane.showMessageDialog(null, "你答对了" + right + "道题"+"加油!");
                    }else {
                        JOptionPane.showMessageDialog(null, "You are a loser,加油,你是最没用的!");
                    }
                }
            }
        });
        //当点击再做一次时,调用此方法
        redo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                //重新对文本框传递表达式
                str = JiSuan.xiti();    
                jtf.setText(str);
                //遍历文本框数组,将数组中的内容初始化
                for (int i = 0; i < 10; i++) {
                    jTextFields[i].setText("");
                }
                //初始化文本框、答题数、答对的题数
                jt.setText("");
                i = 0;
                right = 0;
                begin=System.currentTimeMillis();
                
                //更改按钮为可用的
                jb.setEnabled(true);
            }
        });
        //将面板添加到界面里,然后设置可见
        jf.add(pan1, BorderLayout.NORTH);
        jf.add(pan2, BorderLayout.CENTER);
        jf.add(pan3, BorderLayout.SOUTH);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        //记录程序开始的时间
        begin = System.currentTimeMillis();
        }
        
    }

 

8、代码复审:

  使用开发工具,能够快捷的找出程序的缺陷并进行修改

9、测试

个人工作流程    计应192 第四组  孔旭凯

10、测试报告:刚开始,程序出现许多问题,例如界面出不来;两个数字相减后出现负数;输入正确答案判定为错误;耗费时间累加,不初始化等等,

但是在朋友的帮助下,问题一个个解决了

11、计算工作量

12、总结:

  在刚开始的时候觉得做一个0~100的加减运算的程序十分简单,而且老师也对需求分析有所提示,在完成具体设计之前感觉都很顺利,但到具体设计时,发现自己寸步难行,在控制台上输出加减运算十分容易,但是要做一个页面,在页面上让用户计算却十分艰难,发现自己能力非常欠缺;在朋友的帮助下,渐渐有了思路,但代码的编写总是红色的线到处横行,最终在朋友的帮助下得以完成。但程序还不够完美,存在一些缺陷,可以再进行修改提升。

  有些东西看着十分简单,但是动手去做的时候却毫无头绪,根本不像看上去那么简单,自己的能力不够,对于语言的掌握不牢靠,有的都不认识,下一步要更加努力学习,提高自身水平。

  加油!我们是最没用的!!!

 

上一篇:小学生四则运算(计应192陈莉莉)


下一篇:小学生口算题卡-----计应192虎世博