Ass1_A simple code for caculator by using java_832102214_陈正罡

The Link Your Classhttps://bbs.csdn.net/forums/ssynkqtd-04
The Link of Requirement of This Assignmenthttps://bbs.csdn.net/topics/617332156
The Aim of This AssignmentCreate a calculator with a visual interface.
MU STU ID and FZU STU ID<21124965_832102214>

PSP form

Personal Software Process StagesEstimated Time(minutes)Actual Time(minutes)
Planning4030
• Estimate3020
Development2010
• Analysis1020
• Design Spec2030
• Design Review3040
• Coding Standard4030
• Design3020
• Coding2010
• Code Review1020
• Test2030
Reporting3040
• Test Repor4030
• Size Measurement3040
• Postmortem & Process Improvement Plan3020
Sum400390

Problem-solving ideas

1.I recalled the programming language I had learned.
2.I decided to use the most familiar Java.
3.I searched for the technology I needed.

Design

在这里插入图片描述

Code

import java.util.*;

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

public class calculation4 extends JFrame {
	private static final long serialVersionUID = 1L;//实现序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性

	Container c = getContentPane(); // 用于固定宽度并支持响应式布局的容器
	StringBuilder number1 = new StringBuilder(""); // 储存第1个数字字符串
	StringBuilder number2 = new StringBuilder(""); // 储存第2个数字字符串
	StringBuilder operator = new StringBuilder(""); // 储存运算符
	StringBuilder result = new StringBuilder(""); // 储存运算结果
	JTextField numbershow = new JTextField("0"); // 数字显示区域,初始显示为"0"

	public static void main(String[] args) { // 主方法
		// 除键(C):在计算中按下此键将清除除存储器内容外的所有数值和计算符号,即可以重新开始输入计算.
		// 清除键(CE):在计算中按下此键将清除除存储器内容外的上一步内容,即可以重新输入按CE前输入的数字(含多位数)或计算符号.
		calculation4 c1 = new calculation4();
		c1.setVisible(true);
	}

	public calculation4() { // 计算器构造方法
		setTitle("计算器");
		setBounds(100, 100, 260, 245);
		setResizable(false);
		setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		createNumberShow(); // 创建数字显示区域
		createClearButtons();// 创建Backspace,CE,C等三个按钮
		createButtonArea(); // 创建数字按钮区域
	}

	private void createNumberShow() { // 创建数字显示区域的方法

		numbershow.setHorizontalAlignment(JTextField.RIGHT);
		numbershow.setBounds(5, 0, 245, 22);
		numbershow.setEnabled(false);
		numbershow.setDisabledTextColor(Color.BLACK);
		c.add(numbershow);
	}

	private void createClearButtons() { // 创建Backspace,CE,C等三个按钮的方法

		JButton[] clearbutton = new JButton[3];
		String[] clearbuttontext = { "Backspace", "CE", "C" };
		for (int i = 0; i < 3; i++) {
			clearbutton[i] = new JButton();
			clearbutton[i].setText(clearbuttontext[i]);
			clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
			clearbutton[i].setMargin(new Insets(0, 0, 0, 0));
			clearbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
			clearbutton[i].setForeground(Color.blue);
			clearbutton[i].setBounds(48 + i * 68, 30, 63, 22);
			clearbutton[i].setForeground(Color.red);
			c.add(clearbutton[i]);
		}

		clearbutton[0].addActionListener(new ActionListener() {// 为Backspace按钮添加监听器

			public void actionPerformed(ActionEvent e) {
				if (number1.toString().equals("")) { // 如果未做任何输入
					showNumber(numbershow, number1); // 显示number1
				} else if (operator.toString().equals("")) { // 如果只输入了number1

					number1.deleteCharAt(number1.toString().length() - 1);// 将number1的最后一个字符去掉
					showNumber(numbershow, number1); // 显示number1

				} else if (number2.toString().equals("")) { // 如果只输入了number1和operator
					showNumber(numbershow, number1); // 不作任何处理,显示number1

				} else { // 如果输入了number1、operator、number2

					number2.deleteCharAt(number2.toString().length() - 1);// 将number2的最后一个字符去掉
					showNumber(numbershow, number2); // 显示number2
				}
			}
		});

		clearbutton[1].addActionListener(new ActionListener() {// 为CE按钮添加监听器

			public void actionPerformed(ActionEvent e) {
				if (number1.toString().equals("")) { // 如果未做任何输入
					showNumber(numbershow, number1); // 显示number1
				} else if (operator.toString().equals("")) { // 如果只输入了number1

					number1.setLength(0); // 清除number1
					showNumber(numbershow, number1); // 显示number1

				} else if (number2.toString().equals("")) { // 如果输入了number1和operator

					showNumber(numbershow, number2); // 不作任何处理,显示number2

				} else { // 如果输入了number1、operator、number2
					number2.setLength(0); // 清除number2
					showNumber(numbershow, number2); // 显示number2
				}
			}
		});

		clearbutton[2].addActionListener(new ActionListener() {// 为C按钮添加监听器
			public void actionPerformed(ActionEvent e) { // 将所有储存清零
				number1.setLength(0);
				number2.setLength(0);
				operator.setLength(0);
				numbershow.setText("0.");
				result.setLength(0);
			}
		});
	}

	private void createButtonArea() { // 创建数字按钮区域的方法
		JPanel ButtonArea = new JPanel();
		ButtonArea.setBounds(5, 55, 245, 125);
		ButtonArea.setLayout(new GridLayout(4, 5, 5, 5));
		c.add(ButtonArea);
		JButton[] numberbutton = new JButton[20];
		String[] numberbuttontext = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/X",
				"0", "+/-", ".", "+", "=" };

		for (int i = 0; i <= 19; i++) { // 使用循环为这20个按钮添加标识
			numberbutton[i] = new JButton(numberbuttontext[i]);
			ButtonArea.add(numberbutton[i]);
			if (i % 5 == 3 || i == 19) {// 操作符按钮设置为红色
				numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);// 文本居中
				numberbutton[i].setMargin(new Insets(0, 0, 0, 0));// 构件在显示区的上,左,下,右的空白区0
				numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
				// name表示的是字体的样式,常用的字体有Times New Roman、Symbol、宋体、楷体等。
				// style表示的是字体的风格,默认是正常Font.PLAIN,有加粗Font.BLOD,有斜体Font.INTALIC
				// 可以加粗+斜体Font.BLOD + Font.INTALIC
				numberbutton[i].setForeground(Color.red);
			} else { // 其它设置为蓝色

				numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
				numberbutton[i].setMargin(new Insets(0, 0, 0, 0));
				numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
				numberbutton[i].setForeground(Color.blue);
			}
		}

		int[] numbers = { 15, 10, 11, 12, 5, 6, 7, 0, 1, 2 };// 该数组分别代表0-9等数字在numberbuttontext数组中序号
		for (int i = 0; i <= 9; i++) { // 使用循环为这0-9这十个数字按钮添加监听器
			final String str = String.valueOf(i); // 封装,将括号里面这个 i 的值转换成一个‘String’类型的值

			numberbutton[numbers[i]].addActionListener(new ActionListener() {// 为0-9按钮添加监听器

				public void actionPerformed(ActionEvent e) {
					if (operator.toString().equals("")) { // 没有输入operator之前
						add(number1, str); // 只设置number1的值
						showNumber(numbershow, number1); // 只显示number1的值
					} else { // 输入operator之后
						add(number2, str); // 只设置number2的值
						showNumber(numbershow, number2); // 只显示number2的值
					}
				}
			});
		}

		numberbutton[16].addActionListener(new ActionListener() { // 为"+/-"按钮添加监听器
			public void actionPerformed(ActionEvent e) {
				if (operator.toString().equals("")) { // 没有输入operator之前
					add(number1, "+/-"); // 只设置number1的值
					showNumber(numbershow, number1); // 只显示number1的值
				} else { // 输入operator之后
					add(number2, "+/-"); // 只设置number2的值
					showNumber(numbershow, number2); // 只显示number2的值
				}
			}
		});

		numberbutton[17].addActionListener(new ActionListener() { // 为"."按钮添加监听器
			public void actionPerformed(ActionEvent e) {
				if (operator.toString().equals("")) { // 在输入operator之前,只显示number1的值
					add(number1, ".");
					showNumber(numbershow, number1);
				} else { // 在输入operator之后,只显示number2的值
					add(number2, ".");
					showNumber(numbershow, number2);
				}
			}
		});

		numberbutton[18].addActionListener(new ActionListener() { // 为"+"按钮添加监听器
			public void actionPerformed(ActionEvent e) {
				operator.setLength(0);
				operator.append("+");
			}
		});

		numberbutton[13].addActionListener(new ActionListener() { // 为"-"按钮添加监听器

			public void actionPerformed(ActionEvent e) {
				operator.setLength(0);
				operator.append("-");
			}
		});

		numberbutton[8].addActionListener(new ActionListener() { // 为"*"按钮添加监听器

			public void actionPerformed(ActionEvent e) {
				operator.setLength(0);
				operator.append("*");
			}
		});

		numberbutton[3].addActionListener(new ActionListener() { // 为"/"按钮添加监听器

			public void actionPerformed(ActionEvent e) {
				operator.setLength(0);
				operator.append("/");
			}
		});

		numberbutton[19].addActionListener(new ActionListener() { // 为"="按钮添加监听器

			public void actionPerformed(ActionEvent e) {
				if (number1.toString().equals("")) {// 当number1为空时
					showNumber(numbershow, number1);
				} else if (operator.toString().equals("")) { // 当number1不为空,而operator为空时
					showNumber(numbershow, number1);
				} else if (number2.toString().equals("")) {

                    // 当number1、operator均不为空,而number2为空时        
					switch (operator.toString()) {
					case ("+"): {
						number2.append(number1.toString());// 1=2
						double d = Double.parseDouble(number1.toString()) + Double.parseDouble(number2.toString());
						result.setLength(0);
						result.append(d);
						showNumber(numbershow, result);
						number1.setLength(0);
						number1.append(d);
					}
						break;

					case ("-"): {
						number2.append(number1.toString());
						double d = Double.parseDouble(number1.toString()) - Double.parseDouble(number2.toString());
						result.setLength(0);
						result.append(d);
						showNumber(numbershow, result);
						number1.setLength(0);
						number1.append(d);
					}
						break;

					case ("*"): {
						number2.append(number1.toString());
						double d = Double.parseDouble(number1.toString()) * Double.parseDouble(number2.toString());
						result.setLength(0);
						result.append(d);
						showNumber(numbershow, result);
						number1.setLength(0);
						number1.append(d);
					}
						break;

					case ("/"): {
						number2.append(number1.toString());
						double d = Double.parseDouble(number1.toString()) / Double.parseDouble(number2.toString());
						result.setLength(0);
						result.append(d);
						showNumber(numbershow, result);
						number1.setLength(0);
						number1.append(d);
					}
						break;
					}
				} else {

                    // 当number1、operator、number2均不为空时
					switch (operator.toString()) {
					case ("+"): {
						double d = Double.parseDouble(number1.toString()) + Double.parseDouble(number2.toString());
						result.setLength(0);
						result.append(d);
						showNumber(numbershow, result);
						number1.setLength(0);
						number1.append(d);
					}
						break;

					case ("-"): {
						double d = Double.parseDouble(number1.toString()) - Double.parseDouble(number2.toString());
						result.setLength(0);
						result.append(d);
						showNumber(numbershow, result);
						number1.setLength(0);
						number1.append(d);
					}
						break;

					case ("*"): {
						double d = Double.parseDouble(number1.toString()) * Double.parseDouble(number2.toString());
						result.setLength(0);
						result.append(d);
						showNumber(numbershow, result);
						number1.setLength(0);
						number1.append(d);
					}
						break;

					case ("/"): {
						double d = Double.parseDouble(number1.toString()) / Double.parseDouble(number2.toString());
						result.setLength(0);
						result.append(d);
						showNumber(numbershow, result);
						number1.setLength(0);
						number1.append(d);
					}
						break;
					}
				}
			}
		});

		numberbutton[14].addActionListener(new ActionListener() { // 为"1/x"按钮添加监听器

			public void actionPerformed(ActionEvent e) {
				if (number1.toString().equals("")) { // 没有输入number1时
					numbershow.setText("输入非法0");
				} else if (operator.toString().equals("")) { // 输入了number1,但没有输入operator

					if (Double.parseDouble(number1.toString()) == 0) { // 如果number1的值为零
						numbershow.setText("除数不能为零");
					} else { // 如果number1的值不为零

						double d = 1 / (Double.parseDouble(number1.toString()));
						number1.setLength(0);
						number1.append(d); // 将number1的值开放并存储
						showNumber(numbershow, number1);
					}
				} else if (number2.toString().equals("")) { // 输入了number1、operator,但没有输入number2

					double d = 1 / (Double.parseDouble(number1.toString()));
					number2.append(d);// 将number1的值开放并存储
					showNumber(numbershow, number2);
				} else { // 输入了number1、operator,number2

					double d = 1 / (Double.parseDouble(number2.toString()));
					number2.setLength(0);
					number2.append(d);// 将number2的值开放并存储
					showNumber(numbershow, number2);
				}
			}
		});

		numberbutton[9].addActionListener(new ActionListener() { // 为"%"按钮添加监听器

			public void actionPerformed(ActionEvent e) {
				if (number1.toString().equals("")) { // 没有输入number1时
					numbershow.setText("输入非法0");
				} else if (operator.toString().equals("")) { // 输入了number1,但没有输入operator

					if (Double.parseDouble(number1.toString()) == 0) { // 如果number1的值为零
						numbershow.setText("0");
					} else { // 如果number1的值不为零

						double d = (Double.parseDouble(number1.toString()) / 100);
						number1.setLength(0);
						number1.append(d); // 将number1的值开放并存储
						showNumber(numbershow, number1);
					}
				} else if (number2.toString().equals("")) { // 输入了number1、operator,但没有输入number2

					double d = (Double.parseDouble(number1.toString()) / 100);
					number2.append(d);// 将number1的值开放并存储
					showNumber(numbershow, number2);
				} else { // 输入了number1、operator,number2

					double d = (Double.parseDouble(number2.toString()) / 100);
					number2.setLength(0);
					number2.append(d);// 将number2的值开放并存储
					showNumber(numbershow, number2);
				}
			}
		});

		numberbutton[4].addActionListener(new ActionListener() { // 为"sqrt"按钮添加监听器

			public void actionPerformed(ActionEvent e) {

				if (number1.toString().equals("")) {// 没有输入number1时
					showNumber(numbershow, number1);
				} else if (operator.toString().equals("")) {// 输入了number1,但没有输入operator

					if (Double.parseDouble(number1.toString()) < 0) {// number1小于0
						numbershow.setText("函数输入无效");
					} else {// number1大于0

						double d = Math.sqrt(Double.parseDouble(number1.toString()));
						number1.setLength(0);
						number1.append(d);// 将number1的值开放并存储
						showNumber(numbershow, number1);
					}
				} else if (number2.toString().equals("")) {// 输入了number1、operator,但没有输入number2

					double d = Math.sqrt(Double.parseDouble(number1.toString()));
					number2.append(d);// 将number1的值开放并存储
					showNumber(numbershow, number2);
				} else {// 输入了number1、operator、number2

					double d = Math.sqrt(Double.parseDouble(number2.toString()));
					number2.setLength(0);
					number2.append(d);// 将number2的值开放并存储
					showNumber(numbershow, number2);
				}
			}
		});
	}

	public void add(StringBuilder s1, String s2) { // 定义按钮输入后数字字符串变化的方法
		if (s2.equals("+/-")) {// 定义输入"+/-"后数字字符串的变化
			if (s1.toString().equals("") || s1.toString().equals("0")) {// 如果数字字符串为空或者0,那么不发生变化
				s1.append("");
			} else {// 如果数字字符串不为空也不为0,那么在数字字符串前增加或删除"-"字符

				if (s1.toString().startsWith("-")) {
					s1.deleteCharAt(0);
				} else {
					s1.insert(0, "-");
				}
			}
		}

		if (s2.equals(".")) {// 定义输入"."后数字字符串的变化
			if (s1.toString().indexOf(".") == -1) {// 查找数字字符串中是否含有"."字符,如果没有则执行以下代码
				if (s1.toString().equals("")) {// 如果数字字符串为空,那么将数字字符串设置为"0."
					s1.setLength(0);
					s1.append("0");
				} else {
					s1.append(".");
				}
			} else {// 如果有,则不发生变化

				s1.append("");
			}
		}
		if (s2.equals("0")) {// 定义输入"0"后数字字符串的变化
			if (s1.toString().equals("0")) {// 当数字的字符串为"0"时,不发生变化
				s1.append("");
			} else {// 当数字的字符串吧为"0"时,在其字符串后增加"0"

				s1.append("0");
			}
		}
		for (int i = 1; i < 10; i++) {// 通过循环,定义输入1-9后数字字符串的变化
			String str = String.valueOf(i);

			if (s2.equals(str)) {// 定义输入1-9后数字字符串的变化
				if (s1.toString().equals("0")) {
					s1.setLength(0);
					s1.append(str);
				} else

					s1.append(str);
			}
		}
	}

	public void showNumber(JTextField j, StringBuilder s) {// 定义数字显示区域如何显示数字字符串的方法

		if (s.toString().equals("") == true || s.toString().equals("0") == true) {
			j.setText("0.");
		} else if (s.toString().indexOf(".") == -1) {

			j.setText(s.toString() + ".");
		} else {
			j.setText(s.toString());
		}
	}
}

Displaying

2023-10-06 16-23-08

Summarize

This experiment let me learn how to use Java to make a simple graphical calculator, and learn to write articles using MK statements, which is a great help for website production.

Github link

Github Repository

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值