您的位置:首页 > 其它

第三次作业--(曹福亮,张义平)

2015-04-22 21:58 134 查看
要求:

在之前编写的四则运算程序基础之上做如下改进:

1 请参照教材Page57:4.2-4.3节中内容,修改原程序,使之符合 “代码风格和设计规范”的基本要求;

2 请采用模块化设计思想,修改之前的code,将 “计算功能” 封装起来

3 通过测试程序和API 接口,测试其简单的加法功能。

4 扩展程序功能(选做)

针对第一次作业添加功能点支持:

1). 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3

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

分析:

修改之前的代码,使代码符合代码风格和设计规范,使之更具有可观性;

对算法进行修改,使之可以计算负数;

对题目中的负数进行加括号处理,答案保留两位小数。

设计:

在一些不易看明白的地方加注释使之更易看懂;

在java编程过程使用Format功能,使代码具有一定的代码风格;

对随机数进行加工,随机产生0~200之间的数进行减100处理;

除法中若出现除数为零的情况,则对除数进行加1处理;

为了使除法可以产生小数,把随机数设置为float型。

代码实现:

/**************************************************************
*功能:四则运算程序设计
*编者:曹福亮、张义平
*最后一次修改时间:2015年4月22日
***************************************************************/

package View;

import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;

public class Show extends JFrame implements ActionListener {
// 出题部分
JLabel jl1, jl2, jl3, jl4, jl6, jl8, jl9;
JTextField jf1, jf2, jf3;
JButton jb1, jb5;
// 统计部分
JButton jb;
JTextField jl21, jl22, jl23, jl24, jl25, jl26, jl27, jl28, jl29, jl210,
jl211, jl212, jl213, jl214, jl215;
// 定义全局变量,包括随机数、答案、用户答案
float i, j; // 随机数
String a; // 答案

public Show() {
setTitle("计算加减乘除四则运算");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(874, 458);
setLocation(200, 200);
Container con = getContentPane();
JPanel pan = new JPanel();

// 出题、计算部分
jb1 = new JButton("出题");
jb1.addActionListener(this);
jl1 = new JLabel("四则运算测试题库");
jl1.setForeground(Color.BLUE);
jl1.setFont(new Font("黑体", Font.BOLD, 30));
jl2 = new JLabel("?");
jl3 = new JLabel("答案:");
jl4 = new JLabel("请输入答案:");
// jl5 = new JLabel("余数:");
jl6 = new JLabel("?");
// jl7 = new JLabel("余数:");
jl8 = new JLabel("对/错:");
jl9 = new JLabel("?");
jf1 = new JTextField(5);
jf1.setEditable(false);
jf2 = new JTextField(5);
jf2.setEditable(false);
jf3 = new JTextField(5);
// jf4 = new JTextField(5);
jb5 = new JButton("正确答案");
jb5.addActionListener(this);
Box b1 = Box.createHorizontalBox();
b1.add(jb1);
b1.add(Box.createHorizontalStrut(20));
b1.add(jf1);
b1.add(Box.createHorizontalStrut(5));
b1.add(jl2);
b1.add(Box.createHorizontalStrut(5));
b1.add(jf2);
b1.add(Box.createHorizontalStrut(5));
b1.add(jl4);
b1.add(Box.createHorizontalStrut(5));
b1.add(jf3);
// b1.add(Box.createHorizontalStrut(5));
// b1.add(jl5);
// b1.add(Box.createHorizontalStrut(5));
// b1.add(jf4);
b1.add(Box.createHorizontalStrut(20));
b1.add(jb5);
b1.add(Box.createHorizontalStrut(5));
b1.add(jl3);
b1.add(Box.createHorizontalStrut(5));
b1.add(jl6);
// b1.add(Box.createHorizontalStrut(5));
// b1.add(jl7);
// b1.add(Box.createHorizontalStrut(5));
// b1.add(jl1);
b1.add(Box.createHorizontalStrut(5));
b1.add(jl8);
b1.add(Box.createHorizontalStrut(5));
b1.add(jl9);

// 统计部分
jl21 = new JTextField("0");
jl22 = new JTextField("0");
jl23 = new JTextField("0");
jl24 = new JTextField("0");
jl25 = new JTextField("0");
jl26 = new JTextField("0");
jl27 = new JTextField("0");
jl28 = new JTextField("0");
jl29 = new JTextField("0");
jl210 = new JTextField("0");
jl211 = new JTextField("0");
jl212 = new JTextField("0");
jl213 = new JTextField("0");
jl214 = new JTextField("0");
jl215 = new JTextField("0");
jl21.setEditable(false);
jl22.setEditable(false);
jl23.setEditable(false);
jl24.setEditable(false);
jl25.setEditable(false);
jl26.setEditable(false);
jl27.setEditable(false);
jl28.setEditable(false);
jl29.setEditable(false);
jl210.setEditable(false);
jl211.setEditable(false);
jl212.setEditable(false);
jl213.setEditable(false);
jl214.setEditable(false);
jl215.setEditable(false);

Box b21 = Box.createHorizontalBox();
b21.add(new JLabel("加法题:"));
b21.add(jl21);
b21.add(Box.createHorizontalStrut(50));
b21.add(new JLabel("对:"));
b21.add(jl22);
b21.add(Box.createHorizontalStrut(50));
b21.add(new JLabel("错:"));
b21.add(jl23);

Box b22 = Box.createHorizontalBox();
b22.add(new JLabel("减法题:"));
b22.add(jl24);
b22.add(Box.createHorizontalStrut(50));
b22.add(new JLabel("对:"));
b22.add(jl25);
b22.add(Box.createHorizontalStrut(50));
b22.add(new JLabel("错:"));
b22.add(jl26);

Box b23 = Box.createHorizontalBox();
b23.add(new JLabel("乘法题:"));
b23.add(jl27);
b23.add(Box.createHorizontalStrut(50));
b23.add(new JLabel("对:"));
b23.add(jl28);
b23.add(Box.createHorizontalStrut(50));
b23.add(new JLabel("错:"));
b23.add(jl29);

Box b24 = Box.createHorizontalBox();
b24.add(new JLabel("除法题:"));
b24.add(jl210);
b24.add(Box.createHorizontalStrut(50));
b24.add(new JLabel("对:"));
b24.add(jl211);
b24.add(Box.createHorizontalStrut(50));
b24.add(new JLabel("错:"));
b24.add(jl212);

Box b25 = Box.createHorizontalBox();
b25.add(new JLabel("总 计:"));
b25.add(jl213);
b25.add(Box.createHorizontalStrut(50));
b25.add(new JLabel("对:"));
b25.add(jl214);
b25.add(Box.createHorizontalStrut(50));
b25.add(new JLabel("错:"));
b25.add(jl215);

Box b2 = Box.createVerticalBox();
b2.add(b21);
b2.add(b22);
b2.add(b23);
b2.add(b24);
b2.add(b25);

Box title = Box.createHorizontalBox();
title.add(jl1);

Box b3 = Box.createVerticalBox();
b3.add(Box.createVerticalStrut(30));
b3.add(title);
b3.add(Box.createVerticalStrut(30));
b3.add(b1);
b3.add(Box.createVerticalStrut(25));
b3.add(b2);
b3.add(Box.createVerticalStrut(25));
jb = new JButton("清除记录");
jb.addActionListener(this);
b3.add(jb);
b3.add(Box.createVerticalStrut(50));
Box zs = Box.createVerticalBox();
Box zs1 = Box.createHorizontalBox();
zs1.add(new JLabel("注:本题库出题均带有一位小数的整数,所以在输入答案时也需要输入一位小数"));
Box zs2 = Box.createHorizontalBox();
zs2.add(new JLabel("才行,如果算法是除法, 则需要进行四舍五入并保留两位有效数字。"));
zs.add(zs1);
zs.add(zs2);
b3.add(zs);
pan.add(b3);
con.add(pan);
setVisible(true);
// pack();
}

// 调用主函数,显示用户界面
public static void main(String args[]) {
Show main = new Show();

}

// 按钮监听器的动作处理
public void actionPerformed(ActionEvent e) {
// 清楚记录按钮
if (e.getSource() == jb) {
jf1.setText("");
jf2.setText("");
jf3.setText("");
// jf4.setText("");
// jl1.setText("?");
jl2.setText("?");
jl6.setText("?");
jl9.setText("?");
jl21.setText("0");
jl22.setText("0");
jl23.setText("0");
jl24.setText("0");
jl25.setText("0");
jl26.setText("0");
jl27.setText("0");
jl28.setText("0");
jl29.setText("0");
jl210.setText("0");
jl211.setText("0");
jl212.setText("0");
jl213.setText("0");
jl214.setText("0");
jl215.setText("0");
}

// 出题按钮
if (e.getSource() == jb1) {
jf3.setText("");
// jf4.setText("");
// jl1.setText("?");
jl2.setText("?");
jl6.setText("?");
jl9.setText("?");

// 产生两个随机数
Random rand = new Random();
i = rand.nextInt(200);
j = rand.nextInt(200);
i = i - 100;
j = j - 100;
if (i < 0) {
String s = Float.toString(i);
jf1.setText("(" + s + ")");

} else {
String s = Float.toString(i);
jf1.setText(s);
}
if (j < 0) {
String y = Float.toString(j);
jf2.setText("(" + y + ")");
} else {
String y = Float.toString(j);
jf2.setText(y);
}

// 产生随机算法
int f = rand.nextInt();
f = rand.nextInt(4);
if (f == 0) {
jl2.setText("+");
} else if (f == 1) {
jl2.setText("-");
} else if (f == 2) {
jl2.setText("*");
} else if (f == 3) {
jl2.setText("/");
}
}

// 判断对错且给出正确答案按钮
if (e.getSource() == jb5) {
int b, c, d, f, h, g, k, l, m, n, o, p;
int r, t, u;
r = Integer.parseInt(jl213.getText()) + 1;
jl213.setText(Integer.toString(r));
// jl1.setText("?");
double answer = 0;
String z, x, s = null;
z = jl2.getText();
x = jf3.getText();
// j = jf4.getText();

// 四则运算部分
if (z == "+") {
b = Integer.parseInt(jl21.getText()) + 1;
jl21.setText(Integer.toString(b));
answer = i + j;
a = Double.toString(answer);
} else if (z == "-") {
f = Integer.parseInt(jl24.getText()) + 1;
jl24.setText(Integer.toString(f));
answer = i - j;
a = Double.toString(answer);
} else if (z == "*") {
k = Integer.parseInt(jl27.getText()) + 1;
jl27.setText(Integer.toString(k));
answer = i * j;
a = Double.toString(answer);
} else if (z == "/") {
if (j == 0) {
j = j + 1;
n = Integer.parseInt(jl210.getText()) + 1;
jl210.setText(Integer.toString(n));
answer = i / j;
// a = Double.toString(answer);
a = String.format("%.2f", answer);
// jl1.setText("0");
} else {
n = Integer.parseInt(jl210.getText()) + 1;
jl210.setText(Integer.toString(n));
answer = i / j;
a = String.format("%.2f", answer);
}

}
jl6.setText(a);

// 系统判断对错部分
if (x.equals(a)) {
if (s == null) {
jl9.setText("对");
t = Integer.parseInt(jl214.getText()) + 1;
jl214.setText(Integer.toString(t));
if (z == "+") {
c = Integer.parseInt(jl22.getText()) + 1;
jl22.setText(Integer.toString(c));
} else if (z == "-") {
h = Integer.parseInt(jl25.getText()) + 1;
jl25.setText(Integer.toString(h));
} else if (z == "*") {
l = Integer.parseInt(jl28.getText()) + 1;
jl28.setText(Integer.toString(l));
} else if (z == "/") {
o = Integer.parseInt(jl211.getText()) + 1;
jl211.setText(Integer.toString(o));
}
}// else if (j.equals(s)) {
// jl9.setText("对");
// t = Integer.parseInt(jl214.getText()) + 1;
// jl214.setText(Integer.toString(t));
// if (z == "+") {
// c = Integer.parseInt(jl22.getText()) + 1;
// jl22.setText(Integer.toString(c));
// } else if (z == "-") {
// h = Integer.parseInt(jl25.getText()) + 1;
// jl25.setText(Integer.toString(h));
// } else if (z == "*") {
// l = Integer.parseInt(jl28.getText()) + 1;
// jl28.setText(Integer.toString(l));
// } else if (z == "/") {
// o = Integer.parseInt(jl211.getText()) + 1;
// jl211.setText(Integer.toString(o));
// }
// }
else {
jl9.setText("错");
u = Integer.parseInt(jl215.getText()) + 1;
jl215.setText(Integer.toString(u));
if (z == "+") {
d = Integer.parseInt(jl23.getText()) + 1;
jl23.setText(Integer.toString(d));
} else if (z == "-") {
g = Integer.parseInt(jl26.getText()) + 1;
jl26.setText(Integer.toString(g));
} else if (z == "*") {
m = Integer.parseInt(jl29.getText()) + 1;
jl29.setText(Integer.toString(m));
} else if (z == "/") {
p = Integer.parseInt(jl212.getText()) + 1;
jl212.setText(Integer.toString(p));
}
}
} else {
jl9.setText("错");
u = Integer.parseInt(jl215.getText()) + 1;
jl215.setText(Integer.toString(u));
if (z == "+") {
d = Integer.parseInt(jl23.getText()) + 1;
jl23.setText(Integer.toString(d));
} else if (z == "-") {
g = Integer.parseInt(jl26.getText()) + 1;
jl26.setText(Integer.toString(g));
} else if (z == "*") {
m = Integer.parseInt(jl29.getText()) + 1;
jl29.setText(Integer.toString(m));
} else if (z == "/") {
p = Integer.parseInt(jl212.getText()) + 1;
jl212.setText(Integer.toString(p));
}
}
}
}
}


运行结果:











两人合作步骤:

首先各自都题目要求进行分析,分享各自对题目的理解;

考虑到时间有限的情况下,共同得出不进行重写代码的结论;

由于我之前的代码比较独特,所以选择修改我之前的程序来完成本次作业;

在修改的过程中共同讨论需要修改和保留的地方;

进行分工合作的方式,不懂的需要上网查资料的地方,一起探讨解决方法;

最后进行代码测试,对运行结果进行测试,检测四则运算的算法是否正确。

PSP耗时:

步骤耗时百分比(%)
题目分析106
讨论2012
具体设计2515
具体代码5030
代码复审2012
测试2413
总结2012
总结:

不懂的地方太多,结果还是任性的进行了自我选择性的做题;

看到题目一次次的加大难度,我感觉有点虚了,作业来得太快,我有点承受不来!!!

作者:曹福亮   时间:2015/4/22
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: