admin 管理员组

文章数量: 887053


2023年12月24日发(作者:mid函数功能与语法)

目 录

1、 摘要

2、 概要设计

3、 详细设计

4、 测试分析

5、 总结

6、 参考文献

1

【前言】

Java不依赖平台的特点使得它受到广泛的关注,Java已成为网络时代最重要的语言之一。Java 语言不仅是一门正在被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门基础语言。目前,很多新的技术领域都涉及Java语言,国内外许多大学已将Java语言列入了本科教学计划,掌握Java已经成为共识。

本次课程设计就是利用java语言来编写简单的计算器,能进行加、减、乘、除四则运算,下面给出了该设计的理论分析和具体步骤。

一、摘要

本计算器可以进行简单的四则运算(加、减、乘、除),但仅限于十进制下。“Backspace”按钮表示退格,“CE”按钮表示清除当前文本框内的数据,“C”按钮表示清除文本框内数据,同时var、answer清零。该程序可在JCreator环境下直接运行。

二、概要设计

2

1、自定义说明

(1)类名:Calculator

作用:主类

继承的父类:JFrame类

实现的接口:ActionListener类

public class Calculator extends JFrame implements ActionListener

{

private static String[] btnTexts =

{"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","+/-"};

//定义数组bstTexts来存放计算器上的各个按钮

Button button[] = new Button[16];

Button BkButton,CeButton,CButton,EqButton;

boolean clickable; //控制当前能否按键

double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)

short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算

DecimalFormat df; //设置数据输出精度

private JTextField displayField = new JTextField(" "); //计算结果显示区

public Calculator()

{

………

}

public void actionPerformed(ActionEvent event)

{

3

………

}

}

(2)方法名:Calculator

作用:设置窗体布局

public Calculator()

{

//Frame frame = new Frame("Calculator");

super("Calculator"); //显示主窗口标题“Calculator”

df = new DecimalFormat("0.00000000"); //设置数据输出精度(对于double型值)

BkButton = new Button("Backspace");

eground();

CeButton = new Button("CE");

tForeground();

CButton = new Button("C");

eground();

EqButton = new Button("=");

eground(); //将“Backspace”、“CE”、”C”、“=”显示为红色

ionListener(this);

nListener(this);

ionListener(this);

ionListener(this);

izontalAlignment(); //将计算结果显示在displayField的右面

JPanel p1 = new JPanel(new FlowLayout()); //以FlowLayout布局p1

(BkButton);

(CeButton);

(CButton);

(EqButton); //设置四个按钮:"Backspace","CE","C","="

4

JPanel p2 = new JPanel(new GridLayout(2,1)); //以GridLayout布局p2

(displayField);

(p1); //加入显示结果的JTextField和p1

JPanel p3 = new JPanel(new GridLayout(4,4)); //以GridLayout布局p3

for(int i = 0;i < ;i++)

{

button[i] = new Button(btnTexts[i]); //将数组btnTexts[]的值赋给数组button[]

button[i].setForeground(); //组件button的前景色显示蓝色

(button[i]);

button[i].addActionListener(this);

}

Container cp = tentPane(); //采用默认的BorderLayout布局cp

(p2,);

R);

}

(3)方法名:actionPerformed

作用:设置各个按钮的行为

public void actionPerformed(ActionEvent event)

{

boolean sign = false; //判断是否是double型数参与运算,是为true,不是为false

Object temp = rce();

try

{

for (int i = 0; i <= 9; i++) //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后

5

if (temp == button[i] && clickable == true)

t(t() + ng(i));

//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'

if (temp == button[14] && clickable == true)

{

……….

}

if ( (temp == button[10] || temp == button[11] || temp ==

button[12] || temp == button[13]) && clickable == true)

{

//'+'操作

if (temp == button[10])

{

…………

}

//'-'操作

if (temp == button[11])

{

…………

}

//'*'操作

if (temp == button[12])

{

…………

}

//'/'操作

if (temp == button[13])

{

…………

}

//'='操作

if (temp == EqButton && clickable == true)

{

…………

}

//按下'+/-'按钮时处理

6

if (temp == button[15] && clickable == true)

{

…………

}

//按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除

if (temp == BkButton && clickable == true)

{

…………

}

//按下'CE'按钮,将当前文本框内数据清除

if (temp == CeButton)

{

………

}

//按下'C'按钮,文本框内数据清除,同时var,answer清0

if (temp == CButton)

{

………

}

}

//输入中如果有操作非法,比如按下两次'+',捕获异常

catch (Exception e)

{

t("操作非法");

clickable = false;

}

2、界面设计

下图为该程序运行时的界面截图:

7

三、详细设计

以下为该程序的主要代码:

import .*;

import .*;

import .*;

import .*;

imalFormat;

public class Calculator extends JFrame implements ActionListener

{

private static String[] btnTexts

{"0","1","2","3","4","5","6","7","8","9","+","-","*","/",".","+/-"};

Button button[] = new Button[16];

Button BkButton,CeButton,CButton,EqButton;

boolean clickable; //控制当前能否按键

double vard, answerd; //用来保存double型数据的中间值(vard)和最后结果(answerd)

short key = -1, prekey = -1; //key用来保存当前进行何种运算,prekey用来保存前次进行何种运算

DecimalFormat df; //设置数据输出精度

=

8

private JTextField displayField = new JTextField(" ");//计算结果显示区

public Calculator()

{

super("Calculator"); //显示主窗口标题“Calculator”

df = new DecimalFormat("0.00000000"); //设置数据输出精度(对于double型值)

BkButton = new Button("Backspace");

eground();

CeButton = new Button("CE");

eground();

CButton = new Button("C");

eground();

EqButton = new Button("=");

eground(); //将“Backspace”、“CE”、”C”、“=”显示为红色

ionListener(this);

ionListener(this);

ionListener(this);

ionListener(this);

izontalAlignment(); //将计算结果显示在displayField的右面

JPanel p1 = new JPanel(new FlowLayout()); //以FlowLayout布局p1

(BkButton);

(CeButton);

(CButton);

(EqButton); //设置三个按钮:"Backspace","CE","C","="

JPanel p2 = new JPanel(new GridLayout(2,1)); //以GridLayout布局p2

(displayField);

(p1); //加入显示结果的JTextField和p1

9

JPanel p3 = new JPanel(new GridLayout(4,4)); //以GridLayout布局p3

for(int i = 0;i < ;i++)

{

button[i] = new Button(btnTexts[i]); //将数组btnTexts[]的值赋给数组button[]

button[i].setForeground(); //组件button的前景色示蓝色

(button[i]);

button[i].addActionListener(this);

}

Container cp = tentPane(); //采用默认的BorderLayout布局cp

(p2,);

(p3,);

}

//设置各个按钮行为

public void actionPerformed(ActionEvent event)

{

boolean sign = false; //判断是否是double型数参与运算,是为true,不是为false

Object temp = rce();

try

{

for (int i = 0; i <= 9; i++) //如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后

if (temp == button[i] && clickable == true)

t(t()

ng(i));

+

//按下'.'按钮时,判断当前文本框内字符串中含不含'.',如果已含,则不允许再插入'.'

10

if (temp == button[14] && clickable == true)

{

boolean isDot = false;

if (t().length() == 0)

isDot = true;

for (int i = 0; i < t().length(); i++)

if ('.' == t().charAt(i))

{

isDot = true;

break;

}

if (isDot == false)

t(t() + ".");

}

if ( (temp == button[10] || temp == button[11] || temp ==

button[12] || temp == button[13]) && clickable == true)

{

//'+'操作

if (temp == button[10])

{

switch (prekey)

{

case 0:

answerd += ouble(t());

break;

case 1:

answerd -= ouble(t());

break;

case 2:

answerd *= ouble(t());

break;

case 3:

if (ouble(t()) == 0)

{

t("除数不能为零");

clickable = false;

}

else

answerd

ouble(t());

break;

default:

/=

11

le(t());

}

t("");

prekey = key = 0;

}

//'-'操作

if (temp == button[11])

{

switch (prekey)

{

case 0:

answerd += ouble(t());

break;

case 1:

answerd -= ouble(t());

break;

case 2:

answerd *= ouble(t());

break;

case 3:

if (ouble(t()) == 0)

{

t("除数不能为零");

clickable = false;

}

else

answerd /=

ouble(t());

break;

default:

answerd = ouble(t());

}

t("");

prekey = key = 1;

}

//'*'操作

if (temp == button[12])

{

switch (prekey)

{

case 0:

12

answerd += ouble(t());

break;

case 1:

answerd -= ouble(t());

break;

case 2:

answerd *= ouble(t());

break;

case 3:

if (ouble(t()) == 0)

{

t("除数不能为零");

clickable = false;

}

else

answerd /=

ouble(t());

break;

default:

answerd = ouble(t());

}

t("");

prekey = key = 2;

}

//'/'操作

if (temp == button[13])

{

switch (prekey)

{

case 0:

answerd += ouble(t());

break;

case 1:

answerd -= ouble(t());

break;

case 2:

answerd *= ouble(t());

break;

case 3:

if (ouble(t()) == 0)

{

t("除数不能为零");

13

clickable = false;

}

else

answerd /=

ouble(t());

break;

default:

answerd = ouble(t());

}

t("");

prekey = key = 3;

}

}

//'='操作

if (temp == EqButton && clickable == true)

{

//如果连续按'=',则进行连续运算

if (prekey == 5)

{

if (key == 0)

{

answerd += vard;

t((answerd));

}

if (key == 1)

{

answerd -= vard;

t((answerd));

}

if (key == 2)

{

answerd *= vard;

t((answerd));

}

if (key == 3)

{

if (ouble(t()) == 0)

{

t("除数不能为零");

clickable = false;

}

14

else

{

answerd /= vard;

t((answerd));

}

}

}

else

{

vard = ouble(t());

if (key == 0)

{

prekey = -1;

answerd += ouble(t());

t((answerd));

}

if (key == 1)

{

prekey = -1;

answerd -= ouble(t());

t((answerd));

}

if (key == 2)

{

prekey = -1;

answerd *= ouble(t());

t((answerd));

}

if (key == 3)

{

prekey = -1;

if (ouble(t()) == 0)

{

t("除数不能为零");

clickable = false;

}

else

{

answerd /= ouble(t());

t((answerd));

}

}

15

}

prekey = 5;

}

//按下'+/-'按钮时处理

if (temp == button[15] && clickable == true)

{

boolean isNumber = true;

String s = t();

for (int i = 0; i < (); i++)

if (! ((i) >= '0' && (i) <= '9' || (i)

== '.' || (i) == '-'))

{

isNumber = false;

break;

}

if (isNumber == true)

{

//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉

字母处

else

t('-' + s);

}

}

//按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除

if (temp == BkButton && clickable == true)

if ((0) == '-')

{

t("");

for (int i = 1; i < (); i++)

{

char a = (i);

t(t() + a);

}

}

//如果当前字符串第一个字符不是符号,则添加一个符号在首

16

{

String s = t();

t("");

for (int i = 0; i < () - 1; i++)

{

char a = (i);

t(t() + a);

}

}

//按下'CE'按钮,将当前文本框内数据清除

if (temp == CeButton)

{

t("");

clickable = true;

}

//按下'C'按钮,文本框内数据清除,同时var,answer清0

if (temp == CButton)

{

vard = answerd = 0;

t("");

clickable = true;

}

}

//输入中如果有操作非法,比如按下两次'+',捕获异常

catch (Exception e)

{

t("操作非法");

clickable = false;

}

}

public static void main(String args[])

{

Calculator calculator = new Calculator();

aultCloseOperation(_ON_CLOSE);

e(300,200);

ible(true);

}

17

}

四、测试分析

(1)程序运行情况

该程序正常的响应按钮事件,能进行简单的加、减、乘、除四则运算,在输入之前须先进行清零处理,然后再输入数值进行运算。但输入的数值不宜过大,否则不能正常显示。同时用df来设置数据的输出精度,精确到小数点后八位数字。如果输入中有非法操作时,比如两次按下“+”,就会出现异常情况,我在程序中使用了try—catch捕捉输入中抛出的异常对象,然后进行重置归零的处理。

(2)程序异常处理

当输入中有非法操作时,比如两次按下“+”运算,会出现异常情况,我在程序中使用了try—catch捕捉输入中抛出的异常对象,然后进行重置归零的处理。相应的程序代码如下:

try

{

……

}

//如果输入中有操作非法,比如两次按下“+”,捕获异常

catch(Exception e)

{

18

t(“操作非法”);

clickable = false;

}

五、总结

18周的java课程设计结束了,虽然选的题目有点儿简单---“用java编程实现一个简单的计算器,能进行四则运算”,但感觉收获还是挺多的,通过学习自己扩充了很多的知识点。刚开始的时候不知道从何处下手,到图书馆借书、从网上查找相关的程序...渐渐的有了思路,虽然设计出来的程序有些是从别处转来的,不是自己写的,但是在转的过程中对出现的问题都能及时得到解决,感觉挺好的....通过这周的课程设计,我意识到好的学习方法的重要性,在学习中要学会主动,不要什么东西都指望别人,要靠自己去细心观察,多问自己一个为什么,多动手查查、看看,这样自己学到手的东西才会更多!

六、参考文献

1、《Java应用与开发案例教程》 徐谡 清华大学出版社

2、《零起点Java应用编程》 Philip Heller 电子工业出版社

3、《Java完美编程(第3版)》 Walter Savitch 清华大学出

19

版社

4、《Java大学英语教程(第六版)》 H.M Deitel & P.J Deitel

电子工业出版社

20


本文标签: 按钮 程序 进行 数据 显示