java图形界面简单计算器设计
需求分析:
设计一个简单的计算器类(类型),要求:
(1) 点击按钮进行输入。
(2) 可以进行加、减、乘、除运算。
(3) 有一定的排错功能。
12.2概要设计:
本程设计思路: 计算器的构建用java的话还是挺容易的,用组件将各个需要的按钮放上去,然后监听事件,有按钮按下去的时间就实现相应的错做,或是显示,或是进行计算。并且使用字符串来实现记忆功能。
程序流程图(如左图):
12.3 详细设计与编码:
见上传程序。
12.4 调试分析:
这题在写监听事件的时候,很是费了大的功夫。由于对java一些功能及用法还不是很熟练,所以是碰到了不少的问题。像是显示计算结果的方法就不会,是是参考了别人的实验才弄出来的。
程序执行的结果:
错误检测
当被除数为0时显示:原文请找腾讯752018766辣,文-论'文.网http://www.751com.cn
12.5 用户使用说明:
点击按钮进行计算。
12.6 设计心得:
写计算器的实验,大家都感觉是用栈会比较好。但是由于java本身自带的栈说实在的我是真不懂应该怎么将它继承来使用,如果是自己再写的话那就更加麻烦了。所以就投机取巧了,使用字符串来代替。
这个计算器能实现的功能并不多,本来是想实现成计算公式的那种计算器,但是在结合的时候有点小麻烦,而且时间也不是太多了,所以就没有实现了,有空再细细研究。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Calculator extends Applet implements ActionListener
{
Label display = new Label();
String com[] = { "C", "sqrt", "+", "-", "7", "8", "9", "*", "4", "5", "6",
"/", "1", "2", "3","=", "0", "." };
Button b[];
Panel panel, bboard;
boolean inputState; //输入状态指标值
boolean isFloat; //浮点数指标值
String memory = ""; //用以暂存数值
String symbol =""; //用以暂存运算符号
double num1, num2;
final int len = 15; //最大显示的位数
// applet初始化
public void init()
{
panel = new Panel();
bboard = new Panel();
GridLayout bgl = new GridLayout(0, 4, 2, 2);
bboard.setLayout(bgl); //bboard面板建立格式配置管理
b = new Button[com.length];
for(int j = 0; j < com.length; j++)
{
b[j] = new Button(com[j]);
bboard.add(b[j]); //按钮加至bboard面板
b[j].addActionListener(this);
}
BorderLayout pgl = new BorderLayout(0, 10);
panel.setLayout(pgl);
panel.add(display, "North"); //放置显示区
display.setBackground(Color.WHITE);
panel.add(bboard, "Center"); //放置按钮区
panel.setBackground(Color.blue);
this.setBackground(Color.blue);
add(panel);
display.setAlignment(Label.RIGHT);
display.setText("0");
inputState = true; //设定为输入状态
}
// 按下按钮时
public void actionPerformed(ActionEvent e)
{
String click = e.getActionCommand();
if(click.equals("C")) //清除
{
display.setText("0"); //归零
inputState = true; //为输入状态
isFloat = false; //设为非浮点数
memory = ""; //清除记忆的数字
symbol = ""; //清除记忆的符号
}
else if(click.equals("0") || click.equals("1") || click.equals("2") ||
click.equals("3") || click.equals("4") || click.equals("5") ||
click.equals("6") || click.equals("7") || click.equals("8") ||
click.equals("9") )
{
pressNum(click);
}
else if(click.equals("."))
{
if (display.getText().indexOf(click) < 0) //显示区内没有小数点
if(display.getText().length() < len) //而且位数未达最大
display.setText(display.getText()+click);
}
else if(click.equals("+") || click.equals("-") || click.equals("*") ||
click.equals("/") || click.equals("=") || click.equals("sqrt") )
{
pressSymbol(click);
inputState = false;
}
}
// 按下数字时
void pressNum(String s)
{
if(inputState) //若为输入状态
{
if(display.getText().length() < len) //还未超过位数
{
if(display.getText() != "0")
display.setText(display.getText()+s); //若原值不为零,加至字串尾端
else
display.setText(s); //若原值为零,以新键入值取代
}
}
else //若不为输入状态
{
display.setText(s); //显示新键入的数值
inputState = true; //设定为输入状态
}
}
// 按下运算符号时
void pressSymbol(String s)
{
num1 = parseDouble ( display.getText() );
if( s == "sqrt" ) //如果按下的是开根号
{
double dTemp = Math.sqrt(num1);
isFloat = true;
display.setText( getNumStr(dTemp) ); //设定显示的数目
memory = "";
symbol = "";
return;
}
else if( s == "=") //如果按下的是等号
{
if(inputState && memory != "") //之前有储存数值,而且为输入状态
{
//计算结果
display.setText( getNumStr( cal( symbol ) ) );
}
memory = "";
symbol = "";
}
else //如果按下的是四则运算符号
{
if(memory == "") //如果之前没有储存数值
{
memory = display.getText();
symbol = new String(s);
}
else
{
//计算结果
display.setText( getNumStr( cal( symbol ) ) );
memory = display.getText();
symbol = new String(s);
}
}
}
// 四则运算
double cal(String s)
{
//判断输入的运算元是否带有小数点
if (display.getText().indexOf(".") > 0 || memory.indexOf(".") > 0)
isFloat = true;
else
isFloat = false;
num1 = parseDouble(display.getText());
num2 = parseDouble(memory);
if(s.equals("+"))
return num2+num1;
else if(s.equals("-"))
return num2-num1;
else if(s.equals("*"))
return num2*num1;
else
return num2/num1;
}
// 将数值转换字串
String getNumStr(double d)
{
String s;
if(d > 999999999999999L) //超过位数时
{
showStatus("出错!");
memory ="";
return "0";
}
if(isFloat) //若为浮点数时
{
原文请找腾讯752018766辣,文-论'文.网http://www.751com.cn {
long temp = (long) d;
return ""+temp;
}
}
// 将字串转换成倍精数
double parseDouble(String s)
{
Double d = new Double(s);
return d.doubleValue();