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
版权声明:本文标题:java课程设计报告(完整版) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1703393999h449346.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论