基于JavaJDK的简易计算器含源文件.docx
- 文档编号:8575123
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:21
- 大小:201.27KB
基于JavaJDK的简易计算器含源文件.docx
《基于JavaJDK的简易计算器含源文件.docx》由会员分享,可在线阅读,更多相关《基于JavaJDK的简易计算器含源文件.docx(21页珍藏版)》请在冰豆网上搜索。
基于JavaJDK的简易计算器含源文件
Java课程设计
设计题目 基于JavaJDK的计算器
设计时间 2017
学生姓名 冯明宇
学生学号 140404211
所在班级 1402班
指导教师 申静
摘要
计算器在我们的生活中常常会使用到,本次课程设计,利用课堂所学到的知识,通过界面以及其中的逻辑处理,完成了基本的四则运算的处理。
通过awt包或者swing包中的界面设计,实现了通过界面来显示输入过程和运算结果,同时也使设计出来的计算器符合人性化的基本要求。
面向对象的思想从很大程度上可以让程序的思路更加清晰,而且可重用性很高。
关键词java;计算器;四则运算;面向对象;
目录
一.课设题目及要求…………………………………………………………….1
1.1课设题目描述……………………………………………………………...1
1.2基本要求…………………………………………………………………...1
二.功能描述及设计方案……………………………………………………….1
2.1计算器功能描述……………………………………………………….…..1
2.2设计思想及方案…………………………………………………………...1
三.程序说明…………………………………………………………………….3
3.1界面设计…………………………………………………………………...3
3.1.1UI组件创建与初始化………………………………………..……...3
3.1.2在窗体中添加UI组件…………………………………………..……4
3.2添加事件响应逻辑………………………………………………………..6
3.3计算逻辑实现……………………………………………………………..7
四.运行效果及存在的不足…………………………………………………….9
4.1运行效果…………………………………………………………………..10
4.2存在的不足………………………………………………………………..10
五.结果分析及心得体会………………………………………………………11
六.参考文献…………………………………………………………………....12
七.源程序附录…………………………………………………………………12
一.课设题目及要求
1.1课设题目描述
在JavaJDK平台上设计并实现一个基于窗口界面的计算器
1.2基本要求
该计算器可以运算两个两位数的加减乘除运算,可以通过点击窗口的按键来实现所有操作(包括输入数字和运算符号以及作为计算等等),输入过程及运算结果都要与按键所在同一窗口中呈现
二.功能描述及设计方案
2.1计算器功能描述
本次课程设计的计算器具有能够进行加、减、乘、除四则基本运算的基本功能,并且通过自己的努力为此计算器添加了两个附加的功能:
清零和异常处理机制,即除数为0以及只单击运算符运算的算法错误,并且能很好的实现其功能。
2.2设计思想及方案
2.2.1设计思想概述
要制作一个计算器,首先需要知道它由哪些部分组成。
结构上来说,一个简单的图形界面,需要由界面组件、组件的事件监听器(响应各类事件的逻辑)和具体的事件处理逻辑组成。
2.2.2设计方案结构图
基本运算功能方案图
异常处理机制功能方案图
设计好实现方案后,接下来,我们首先需要制作界面部分。
这部分主要的工作就是创建各个界面组件对象,对其进行初始化,以及控制各组件之间的层次关系和布局大
小
三.程序说明
3.1界面设计与实现
3.1.1UI组件创建和初始化
(1)、面板
JPaneltxtpanel:
用于放置文本框
Panelbtnpanel:
用于放置按钮(0-9和+,-,*,/,=)
(2)、显示部分
a.第一个面板:
txtpanel
位置以及排列方式BorderLayout.NORTH
txtpanel.add(txtinput):
添加文本框到txtpanel面板中
b.第二个面板:
btnpanel
排列方式:
setLayout(gl)
(3)、基本按钮
btnpanel.add(b7)btnpanel.add(b8)btnpanel.add(b9);
btnpanel.add(multiply)btnpanel.add(b4)btnpanel.add(b5);
btnpanel.add(b6)btnpanel.add(divide)btnpanel.add(b1);
btnpanel.add(b2)btnpanel.add(b3)btnpanel.add(add);
btnpanel.add(b0).add(bdes)btnpanel.add(equal);
btnpanel.add(subtract)
以上是在第二个面板btnpanelH中添加的0到9和+,-,*,/,=的按钮。
首先我们需要将界面中要用到的UI组件作为Calculator类的成员变量在一开始声明。
主要代码如下:
//继承一个JFrame对象。
JFrame可以理解为程序的主窗体。
publicclassCalculatorextendsJFrameimplementsActionListener
{
//txtpanel用于放置文本框,btnpanel用于放置按钮
JPaneltxtpanel,btnpanel;
//创建文本框,用于显示内容
JTextFieldtxtinput;
.
.
.
//声明各个UI组件对象并初始化
publicCalculator()
{
super("基于JavaJDK的计算器");
txtpanel=newJPanel();
btnpanel=newJPanel();
//参数25表明可以显示25列的文本内容
txtinput=newJTextField(25);
//设置文本框不能编辑
txtinput.setEditable(false);
//设置文本框为右对齐,使输入和结果都靠右显示
txtinput.setHorizontalAlignment(JTextField.RIGHT);txtinput.setText("");
//数字键0到9
b1=newJButton("1");
b2=newJButton("2");
b3=newJButton("3");
b4=newJButton("4");
b5=newJButton("5");
b6=newJButton("6");
b7=newJButton("7");
b8=newJButton("8");
b9=newJButton("9");
b0=newJButton("0");
//计算命令按钮,加减乘除以及小数点,清除等
bdes=newJButton(".");
add=newJButton("+");
subtract=newJButton("-");
multiply=newJButton("*");
divide=newJButton("/");
clear=newJButton("清零");
equal=newJButton("=");
3.1.2在窗体中添加UI组件
这个计算器有两个JPanel
什么是JPanel:
JPanel是一般轻量级容器。
如上图所示,你可以将其理解为一个盛放其他UI组件的“篮子”。
JPanel位于 javax.swing 包中,为面板容器,可以加入到JFrame中,它自身是个容器,也可以把其他component(组件)加入到JPanel中,例如JButton、JTextArea、JTextField等。
在这个项目中,两个JPanel分别对应这个计算器按键除“清零”键外其他的键,另个面板则是文本框跟“清零”键。
主要代码如下:
//创建Jpanel的两个对象并初始化
//txtpanel用于放置文本框,btnpanel用于放置按钮
JPaneltxtpanel,btnpanel;
.
.
.
//将UI组件添加进容器内
getContentPane().add(txtpanel,BorderLayout.NORTH);
txtpanel.add(txtinput);
txtpanel.add(clear);
//设置该容器的布局为四行四列,边距为5像素
gl=newGridLayout(4,4,5,5);
btnpanel.setLayout(gl);
getContentPane().add(btnpanel);
//将用于计算的按钮添加到容器内
btnpanel.add(b7);
btnpanel.add(b8);
btnpanel.add(b9);
btnpanel.add(multiply);
btnpanel.add(b4);
btnpanel.add(b5);
btnpanel.add(b6);
btnpanel.add(divide);
btnpanel.add(b1);
btnpanel.add(b2);
btnpanel.add(b3);
btnpanel.add(add);
btnpanel.add(b0);
btnpanel.add(bdes);
btnpanel.add(equal);
btnpanel.add(subtract);
//设置主窗口大小
setSize(400,250);
setVisible(true);
//设置主窗口出现在屏幕上的位置
setLocation(300,200);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
布局结束后,就是计算器的难点:
事件处理程序
3.2、添加事件响应逻辑
对于计算器而言,涉及到的事件响应逻辑主要有:
数字键、加减乘除运算、等于以及清除
主要代码如下:
//绑定事件响应逻辑到各个UI组件上
publicvoidbtnCancelActionPerformed()
{txtinput.setText("");}
publicvoidactionPerformed(ActionEvente)
{try{
Objectobj=e.getSource();
if(obj==b1)
txtinput.setText(txtinput.getText()+"1");
elseif(obj==b2)
txtinput.setText(txtinput.getText()+"2");
elseif(obj==b3)
txtinput.setText(txtinput.getText()+"3");
elseif(obj==b4)
txtinput.setText(txtinput.getText()+"4");
elseif(obj==b5)
txtinput.setText(txtinput.getText()+"5");
elseif(obj==b6)
txtinput.setText(txtinput.getText()+"6");
elseif(obj==b7)
txtinput.setText(txtinput.getText()+"7");
elseif(obj==b8)
txtinput.setText(txtinput.getText()+"8");
elseif(obj==b9)
txtinput.setText(txtinput.getText()+"9");
elseif(obj==b0)
txtinput.setText(txtinput.getText()+"0");
elseif(obj==bdes)
txtinput.setText(txtinput.getText()+".");
elseif(obj==add)
{d1=Double.parseDouble(txtinput.getText());
s="+";
txtinput.setText("");
}
elseif(obj==subtract)
{d1=Double.parseDouble(txtinput.getText());
s="-";
txtinput.setText("");
}
elseif(obj==divide)
{d1=Double.parseDouble(txtinput.getText());
s="/";
txtinput.setText("");
}
elseif(obj==multiply)
{d1=Double.parseDouble(txtinput.getText());
s="*";
txtinput.setText("");
}
3.3、计算逻辑的实现
计算的逻辑要针对输入的不同运算符来对操作数进行运算,同时还要考虑到除数为0这种不合理的以及只单击运算符运算的算法错误,。
主要代码如下:
doubled1;//操作数1
doubled2;//操作数2
Strings;//运算符
.
.
.
//计算逻辑
elseif(obj==equal)
{if(s=="+")
{d2=d1+Double.parseDouble(txtinput.getText());
//显示结果
txtinput.setText(Double.toString(d2));
}
elseif(s=="-")
{d2=d1-Double.parseDouble(txtinput.getText());
//显示结果
txtinput.setText(Double.toString(d2));
}
elseif(txtinput.equals(txtinput.getText())&&obj==subtract)
{d2=d1-Double.parseDouble(txtinput.getText());
//显示结果
txtinput.setText(Double.toString(d2));}
elseif(s=="/")
{if(Double.parseDouble(txtinput.getText())==0)
//除数为零:
当除数为零时,弹出“除数不能为零”窗体
JOptionPane.showMessageDialog(this,"除数不能为0");
d2=d1/Double.parseDouble(txtinput.getText());
txtinput.setText(Double.toString(d2));
}
elseif(s=="*")
{d2=d1*Double.parseDouble(txtinput.getText());
txtinput.setText(Double.toString(d2));
}
}
}
catch(Exceptionouch)
//错误输入:
当只单击运算符时,弹出“错误输入”窗体
{JOptionPane.showMessageDialog(null,"错误输入","error",
JOptionPane.ERROR_MESSAGE);}
}
四.效果及存在的问题
4.1运行效果
(1)加法运算功能:
例如12+14=
先输入12,在按+,在输入14在按=,结果如下图
(2)减法运算功能:
例如26-14=
先输入26,在按-,在输入14,在按=,结果如下图
(3)乘法运算功能:
例如25*15=
先输入25,在按*,在输入15,在按=,结果如下图
(4)除法运算功能:
例如125\5=
先输入125,在按\,在输入5,在按=,结果如下图
(5)“清零按钮”数据清除功能
清除前
清除后
(6).异常处理机制
当除数为0时
当只单击运算符号运算时
4.2本计算器存在的不足
在完成课程设计的期间,参阅了相关的书籍并在网络上查找相关的资料,对实现这个设计提供了很大的帮助。
由于目前知识方面的匮乏,本次课程设计的计算器没能够顺利实现开方运算、正余弦正切运算、阶乘运算,进制转换等高级,更复杂的数据计算功能,希望在以后的时间里丰富这方面的知识,以便更好的运用。
五.结果分析及心得体会
在这次课程设计中,我利用课堂所学的知识和通过查阅课外资料,顺利的实现了计算器的各个功能,并对其进行按键的排版、监听、处理、运算等各个步骤的亲力亲为,基本上完成了任务书上的各项内容。
虽然在这次的课程设计的过程和结果中,也存在一些的不足,但通过分析和解决,我也收获了很多。
其次,在本次的课程设计中,通过与同学们的交流,解决了不少长久以来困扰我的java语言问题,让我深切体会到了大家共同努力的重要性。
在设计这个系统的时候,我查阅了很多相关的书籍,并通过网络解决了不少问题。
通过这次课程设计,我对eclipse的开发环境和使用也有了更多的认识和了解,让我对java语言的认识又加深了一步,不仅使我学会了如何查阅资料,同时也让我发现了网络这个好老师,总之收获了很多。
六.参考文献
[1] 雍俊海 《Java程序设计教程》(第三版) 清华大学出版社
[2](美)埃克尔 著,陈昊鹏 译 《Java编程思想》(第4版).机械工业出版社
[3] 李兴华 《Java从入门到精通》 人民邮电出版社 2010-4-1版
[4] 温沿书 《Java入门与实战教程》人民邮电出版社2010-03-01版
[5] 李钟尉 《Java范例完全自学手册》 人民邮电出版社 2009-10-1
七.源程序附录
packagecom.demo1;
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
publicclassCalculatorextendsJFrameimplementsActionListener
{
JPaneltxtpanel,btnpanel;//txtpanel用于放置文本框,btnpanel用于放置按钮
JTextFieldtxtinput;
JButtonb1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bdes,multiply,divide,add,
subtract,clear,equal;
GridLayoutgl;
doubled1;//操作数1
doubled2;//操作数2
Strings;//运算符
//声明各个UI组件对象并初始化
publicCalculator()
{
super("基于JavaJDK的计算器");
txtpanel=newJPanel();
btnpanel=newJPanel();
txtinput=newJTextField(25);
txtinput.setEditable(false);//设置文本框不能编辑
txtinput.setHorizontalAlignment(JTextField.RIGHT);//设置文本框为右对齐,使输入和结果都靠右显示
txtinput.setText("");
b1=newJButton("1");
b2=newJButton("2");
b3=newJButton("3");
b4=newJButton("4");
b5=newJButton("5");
b6=newJButton("6");
b7=newJButton("7");
b8=newJButton("8");
b9=newJButton("9");
b0=newJButton("0");
bde
s=newJButton(".");
add=newJButton("+");
subtract=newJButton("-");
multiply=newJButton("*");
divide=newJButton("/");
clear=newJButton("清零");
equal=newJButton("=");
//清除键的逻辑(Clear)
clear.addActionListener(newActionListener()//注册监听
{publicvoidactionPerformed(ActionEventargh)
{btnCancelActionPerformed();}
});
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
b5.addActionListener(this);
b6.addActionListener(this);
b7.addActionListener(this);
b8.addActionListener(this);
b9.addActionListener(this);
b0.addActionListener(this);
bdes.addActionListener(this);
multiply.addActionListener(this);
divide.addActionListener(this);
add.addActionListener(this);
subtract.addActionListener(this);
equal.addActionListener(this);
//将UI组件添加进容器内
getContentPane().add(txtpanel,BorderLayout.NORTH);
txtpanel.add(txtinput);
txtpanel.add(clear);
gl=newGridLayout(4,4,5,5);
btnpanel.setLayout(gl);
getContentPane().add(btnpanel);
btnpanel.add(b7);
btnpanel.add(b8);
btnpanel.add(b9);
btnpanel.add(multiply);
btnpanel.add(b4);
btnpanel.add(b5);
btnpanel.add(b6);
btnpanel.add(divide);
btnpanel.add(b1);
btnpanel.add(b2);
btnpanel.add(b3);
btnpanel.add(add);
btnpanel.add(b0);
btnpanel.add(bdes);
btnpanel.add(equal);
btnpanel.add(subtract);
setSize(400,250);
setVisible(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 JavaJDK 简易 计算器 源文件