其他分享
首页 > 其他分享> > 四则运算 ------(计应192-张先良)

四则运算 ------(计应192-张先良)

作者:互联网

PSP阶段

预计花费时间(小时) 实际花费时间
计划 2 2
明确需求和其他相关因素,估计每个阶段的时间成本 1 1
开发 8 8.5
需求分析 1 1
代码规范 1 1
具体设计 1 1
具体编码 2 1.5
代码复审 1 1.5

测试(自测、修改代码、提交修改)

2 2.5

 

 

 

 

计划:

  在刚拿到项目时,对项目进行分析,提出问题

需求分析:

  给出题目,

  输入结果,

  对比结果,

  保存正确的题目数量

具体设计

  首先随机生成数字和表达式   

  然后输入自己的计算结果,并与正确结果进行比较

  最终将每一题的结果都显示在界面中,并计算正确率

具体编码和代码规范

  表达式和计算结果

package operations;

import java.text.DecimalFormat;
import java.util.Random;

public class Oper {
static char[] cha = { '+', '-', '*', '/' };// 加减乘除数组

static Random random = new Random();
static double num1 = random.nextInt(100);
static double num2 = random.nextInt(100);
static char c = cha[random.nextInt(4)];

public static String exercises() {
num1 = random.nextInt(100);
num2 = random.nextInt(100);
c = cha[random.nextInt(4)];

if (c == '/') {
while (num2 == 0) {
num2 = random.nextInt(100);
}
return (int) num1 + "" + c + "" + (int) num2 + "=";
}

return (int) num1 + "" + c + "" + (int) num2 + "=";
}

public static Double res() {
double result = 0;
switch (c) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;

default:
break;
}
DecimalFormat df = new DecimalFormat("#.#");//除法运算小数位过多时保留一位小数
result = Double.valueOf(df.format(result));// 转换为一位小数后表达式会转变成字符串,将其转变为double类型
return result;
}
}

    界面设计

package operations_GUI;

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;

import operations.Oper;

public class Snippet {
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];// 存放表达式的文本框的数组

static int i = 0;// 用于记录写了几道题,十题为一组

static int right = 0;// 用于记录写对几道题

public static void main(String[] args) {
jf.setSize(800, 600);
jf.setLayout(new BorderLayout());
jf.setLocationRelativeTo(null);

pan1.setBackground(Color.WHITE);
pan1.setSize(800, 150);
pan1.setLayout(new FlowLayout());

JTextField jtf = new JTextField(20);// 用于存储表达式
str = Oper.exercises();// 将表达式赋值给str
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 = 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 reset = new JButton("再做一遍");// 用于清空所有信息,重新做题

pan3.add(jt);
pan3.add(reset);

jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (jtf_result.getText().equals("")) {
jTextFields[i].setText(str + jtf_result.getText() + " × 正确结果为:" + Oper.res());
} else if (Oper.res() == Double.parseDouble(jtf_result.getText())) {
jTextFields[i].setText(str + jtf_result.getText() + " √");
right++;
} else {
jTextFields[i].setText(str + jtf_result.getText() + " × 正确结果为:" + Oper.res());
}
i++;
str = Oper.exercises();
jtf.setText(str);
jtf_result.setText("");
jtf_result.requestFocus();// 用来获取焦点

if (i == 10) {
jb.setEnabled(false);
jt.setText("你答对了" + right + "道题,答错了" + (10 - right) + "道题,正确率为:" + (right / 10.0));
if (right >= 8) {
JOptionPane.showMessageDialog(null, "恭喜你,答对了" + right + "道题");
}
}
}
});

reset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
str = Oper.exercises();
jtf.setText(str);
for (int i = 0; i < 10; i++) {
jTextFields[i].setText("");
}
jt.setText("");
i = 0;
right = 0;
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);
}
}

  结果:

          

 

代码复审

  首先使用debug一步一步的检查,对一些细节进行了修改,

  然后将重复使用两次或两次以上的代码抽取成一个方法,减少代码的长度,增加可阅读性

 

总结

  对于基础知识的掌握还需要更加的熟练,需要加以练习

 

标签:static,张先良,计应,str,import,------,new,jtf,result
来源: https://www.cnblogs.com/hnzj-jy192-/p/14829440.html