java计算器.docx

上传人:b****7 文档编号:11209058 上传时间:2023-02-25 格式:DOCX 页数:64 大小:192.24KB
下载 相关 举报
java计算器.docx_第1页
第1页 / 共64页
java计算器.docx_第2页
第2页 / 共64页
java计算器.docx_第3页
第3页 / 共64页
java计算器.docx_第4页
第4页 / 共64页
java计算器.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

java计算器.docx

《java计算器.docx》由会员分享,可在线阅读,更多相关《java计算器.docx(64页珍藏版)》请在冰豆网上搜索。

java计算器.docx

java计算器

 

目录:

摘要……………………………………………………………………3.

实训题目………………………………………………………………3

实验环境………………………………………………………………3

进度安排………………………………………………………………3

设计步骤………………………………………………………………3

设计功能模块图…………………………………………………………3

布局界面………………………………………………………………4

按键功能………………………………………………………………5

数字按钮的实现…………………………………………………………5

操作符的实现……………………………………………………………5

记忆功能按钮的实现……………………………………………………6

撤销清除按钮的实现……………………………………………………6

小数点的优化…………………………………………………………7

测试……………………………………………………………………7

功能完善………………………………………………………………11

实验心得………………………………………………………………12

参考文献………………………………………………………………12

 

摘要:

本计算器可以进行十进制下的四则运算(加、减、乘、除)、开根号、百分号、求倒数,还可以实现数值的符号转换及计算器有关内存操作。

Backspace表示退格,CE表示将当前文本框内数据清除,C表示文本框内数据清除,同时var,answer清0。

此外还提供了“编辑”、“帮助”两个菜单项,使用者可通过使用菜单项实现某些功能。

一、实验题目

计算器

二、实验环境:

中金B601机房

三、进度安排

星期一

需求分析,阅读相应的参考程序

星期二

编写布局和界面

星期三

编写按键和功能代码

星期四

小数点功能及测试

星期五

综合调试,撰写课程设计报告

四、设计步骤

1、设计功能模块图:

2、布局界面

1)、利用JavaGUI布局,使用其中的Swing和AWT;

Awt是Java提供的用来建立和设置Java的图形用户界面的基本工具。

AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件。

Swing用来创建图形界面。

导入Swing;如:

importjavax.swing.JButton;

设计窗体,窗体名称Calculator2继承ActionListener接口。

JFrameframe//JFrame是带有标题和边框的顶层窗口。

可以使用frame=newJFrame("计算器")设置计算器的标题栏;

JTextFieldtextAnswer;//JTextField是一个轻量级组件,它允许编辑单行文本。

程序中使用textAnswer=newJTextField(15);

textAnswer.setText("");

textAnswer.setEditable(false);

textAnswer.setBackground(newColor(255,255,255))

设置输入框的属性。

JPanelpanel,panel1,panel2,panel3;//JPanel是一般轻量级容器。

程序中使用:

panel=newJPanel();

frame.getContentPane().add(panel);

panel1=newJPanel();

panel2=newJPanel();

panel.setLayout(newBorderLayout());

传入一个布局对象作为参数来创建一个面板,该面板采用的是布局是BorderLayout布局,也就是默认的,是上下左右中布局的。

JMenuBarmainMenu;//菜单栏的实现。

将JMenu对象添加到菜单栏以构造菜单。

程序中使用panel.add(mainMenu,BorderLayout.NORTH);将菜单栏添加到面板并设置菜单栏的位置。

JTextFieldtextMemory;//JTextField是一个轻量级组件,它允许编辑单行文本。

JLabellabelMemSpace;//JLabel用于短文本字符串或图像或二者的显示区。

标签不对输入事件作出反应。

JButtonbuttonBk,buttonCe,buttonC;//JButton"push"按钮的实现。

通过Action可配置按钮,并进行一定程度的控制。

使用button=newJButton("");button.setForeground(newColor(255,0,0));的方法设置各个按钮显示的名称和按钮的颜色。

例如:

buttonBk=newJButton("Backspace");

buttonBk.setForeground(newColor(255,0,0));

JMenueditMenu,helpMenu;//JMenu菜单的该实现是一个包含JMenuItem的弹出窗口,用户选择JMenuBar上的项时会显示该JMenuItem。

JMenuItemcopyItem,pasteItem,tItem,sItem,numberGroup,topHelp,aboutCal;//菜单中的项的实现。

菜单项本质上是位于列表中的按钮。

当用户选择“按钮”时,则执行与菜单项关联的操作。

DecimalFormatdf;//设置数据输出精度

booleanclickable;//控制当前能否按键

doublememoryd;//使用内存中存储的数字

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

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

Stringcopy;//做复制用

JTextAreahelp;//帮助

五、按键功能

1、数字按钮功能的实现

主要支持的数字:

0、1、2、3、4、5、6、7、8、9,如图1所示:

图1计算器主界面

2、操作符的实现:

主要支持的操作符有:

+、-、*、/、%、sqrt。

支持错误提示。

要求提供图形化操作界面。

例如'-'操作:

if(temp==buttonSub){

switch(prekey){

case0:

answerd+=Double.parseDouble(textAnswer.getText());

break;

case1:

answerd-=Double.parseDouble(textAnswer.getText());

break;

case2:

answerd*=Double.parseDouble(textAnswer.getText());

break;

case3:

if(Double.parseDouble(textAnswer.getText())==0){

textAnswer.setText("除数不能为零");

clickable=false;

}else

answerd/=Double.parseDouble(textAnswer.getText());

break;

default:

answerd=Double.parseDouble(textAnswer.getText());

}

textAnswer.setText("");

prekey=key=1;

}

3、记忆功能按钮的实现:

具备记忆数据,取记忆,清记忆,复制,粘贴等功能。

'MC'的操作,将内存清0

‘MR'的操作,将存储器中的信息输出

'M+'的功能,将当前文本框里的数据和存储器中数据相加后,再存入存储器

'MS'的操作,将当前文本框内容保存入内存,显示'M',如图2所示:

如图2'MS'的操作

以下是'MS'的操作的代码:

if(temp==buttonMS&&clickable==true){

booleanisDot=false;

textMemory.setText("M");

for(inti=0;i

if('.'==textAnswer.getText().charAt(i)){

isDot=true;

break;

}

//如果是double,则存入memoryd(double存储器)

if(isDot==true){

memoryd=Double.parseDouble(textAnswer.getText());

memoryi=0;//保证存储器中存放最新的值

}

//如果是int,则存入memoryi(int存储器)

else{

memoryi=Integer.parseInt(textAnswer.getText());

memoryd=0;//保证存储器中存放最新的值

}

}

4)、撤销清除按钮的实现

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

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

按下'C'按钮,文本框内数据清除,同时var,answer清0,代码如下所示:

if(temp==buttonC){

vard=answerd=0;

textAnswer.setText("");

clickable=true;

}

六、小数点的优化

本程序为了使进行含小数点的操作时,为了避免异常,所以进行了小数点的优化。

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

if(temp==buttonDot&&clickable==true){

booleanisDot=false;

if(textAnswer.getText().length()==0)

isDot=true;

for(inti=0;i

if('.'==textAnswer.getText().charAt(i)){

isDot=true;

break;

}

if(isDot==false)

textAnswer.setText(textAnswer.getText()+".");

}

if((temp==buttonAdd||temp==buttonSub||temp==buttonMul||temp==buttonDiv)

&&clickable==true){

七、测试

1)、连续输入运算符

输入中如果有操作非法,比如按下两次'+',捕获异常,如图3所示:

catch(Exceptione){

textAnswer.setText("操作非法");

clickable=false;

}

图3非法操作捕获异常

2)、负数不能开根号,当输入负数要求开根号时,会提示异常,如图4所示:

图4负数开根号

代码如下所示:

//开根号运算,其中包括负数不能为开根号的代码:

if(temp==buttonSqrt&&clickable==true){

Strings=textAnswer.getText();

if(s.charAt(0)=='-'){

textAnswer.setText("负数不能开根号");

clickable=false;

}

else

textAnswer.setText(Double.toString(java.lang.Math.sqrt(Double.

parseDouble(textAnswer.getText()))));

}

3)、除数不能为0,当输入除数为0时,会提示异常,如图5所示:

图5输入除数为0

'/'操作的代码如下,其中包括除数不能为0的代码:

if(temp==buttonDiv){

switch(prekey){

case0:

answerd+=Double.parseDouble(textAnswer.getText());

break;

case1:

answerd-=Double.parseDouble(textAnswer.getText());

break;

case2:

answerd*=Double.parseDouble(textAnswer.getText());

break;

case3:

if(Double.parseDouble(textAnswer.getText())==0){

textAnswer.setText("除数不能为零");

clickable=false;

}

else

answerd/=Double.parseDouble(textAnswer.getText());

break;

default:

answerd=Double.parseDouble(textAnswer.getText());

}

textAnswer.setText("");

prekey=key=3;

}

4)、零不能求倒数,当输入0要求求倒数时,会提示异常,如图6所示:

图60求倒数

//倒数运算,其中包含0不能求倒数的代码:

if(temp==buttonDao&&clickable==true){

if(textAnswer.getText().charAt(0)=='0'&&

textAnswer.getText().length()==1){

textAnswer.setText("零不能求倒数");

clickable=false;

}

else{

booleanisDec=true;

inti,j,k;

Strings=Double.toString(1/Double.parseDouble(textAnswer.getText()));

for(i=0;i

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

break;

for(j=i+1;j

if(s.charAt(j)!

='0'){

isDec=false;

break;

}

if(isDec==true){

Stringstemp="";

for(k=0;k

stemp+=s.charAt(k);

textAnswer.setText(stemp);

}

else

textAnswer.setText(s);

}

}

5)、程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),本次设计精度采用doublefloat,能满足一般使用。

八、功能完善

我在本计算器的功能中又添加了菜单栏的功能,在菜单栏中添加“编辑”、“帮助”两个按钮,当按下这两个按钮时会出现对应的下拉菜单。

在“编辑”的下拉菜单中又有两个功能,分别是“复制”和“粘贴”。

如图7所示;在帮助的下拉菜单中我设置了两个选项:

包括“帮助主题”和“关于本计算器”的功能选项。

如图8所示:

图7菜单栏编辑选项

图8菜单栏帮助选项

菜单栏“帮助”选项中的“帮助主题”中的内容,如图9所示:

图9帮助主题

“帮助主题”的代码如下所示:

topHelp=newJMenuItem("帮助主题(H)");

topHelp.addActionListener(this);

help=newJTextArea(5,20);

scrollHelp=newJScrollPane(help);

help.setEditable(false);

help.append("执行简单计算\n");

help.append("1.输入计算的第一个数字。

\n");

help.append("2.单击“+”执行加、“-”执行减、“*”执行乘或“/”执行除。

\n");

help.append("3.输入计算的下一个数字。

\n");

help.append("4.输入所有剩余的运算符和数字。

\n");

help.append("5.单击“=”。

\n");

九、实验心得

通过了这几天的课程设计,对于我这个编程新手来说,还的确有些困难.不过有志者事竟成。

首先,我需要了解一些基本的术语。

程序是计算机执行的一系列的指令。

这些指令说明了计算机要做什么,究竟是用文字处理、电子表格、玩游戏还是其他用途。

然后,我还要去图书馆查阅资料,找一些与这次课设有关的内容作参考,以便能更方便的完成课设的内容。

另外,我还去网上查阅了一些资料,充实一下自己,一切都准备好了,我就可以完成我的计算器程序设计报告了。

在这次编程中,更加深我对事件监听,各方法的实现功能,还有布局方式及常用的GUI标准组件有了更深刻的认识.

我完成了这次JAVA课程设计,让我懂得在设计的过程中最好能自己解决问题,这样可以增强自己解决问题的能力,同时增强记忆.。

不过这只是我学习路上的驿站。

我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习工作中去。

十、参考文献

[1]耿祥义,《VA大学实用教程实验指导》,子工业出版社2005-03

[2]郑莉,Java语言程序设计,清华大学出版社2006-04

[3]王克宏,《JAVA语言入门》,清华大学出版社1996

[4]徐谡,Java应用与开发案例教程,清华大学出版社

[5]王克宏,《JAVA语言Applet编程技术》清华大学出版社199

附录:

packagecalculator;

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

importjava.text.DecimalFormat;

publicclassCalculatorimplementsActionListener{//导入动作监听接口

//设计面板中的单位

JFrameframe;

JTextFieldtextAnswer;

JPanelpanel,panel1,panel2,panel3;

JMenuBarmainMenu;

JTextFieldtextMemory;

JLabellabelMemSpace;//labelMemSpace单纯做摆设,控制面板的形状

JButtonbuttonBk,buttonCe,buttonC;

JButtonbutton[];

JButtonbuttonMC,buttonMR,buttonMS,buttonMAdd;

JButtonbuttonDot,buttonAddAndSub,buttonAdd,buttonSub,buttonMul,

buttonDiv,buttonMod;

JButtonbuttonSqrt,buttonDao,buttonEqual;

JMenueditMenu,viewMenu,helpMenu;

JMenuItemcopyItem,pasteItem,tItem,sItem,numberGroup,topHelp,aboutCal;

DecimalFormatdf;//设置数据输出精度

booleanclickable;//控制当前能否按键

doublememoryd;//使用内存中存储的数字

intmemoryi;

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

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

Stringcopy;//做复制用

JTextAreahelp;//帮助

JScrollPanescrollHelp;

//构造函数

publicCalculator(){

clickable=true;

answerd=0;

frame=newJFrame("计算器");

df=newDecimalFormat("0.##############");//设置数据输出精度(对于double型值)

textAnswer=newJTextField(15);

textAnswer.setText("");

textAnswer.setEditable(false);

textAnswer.setBackground(newColor(255,255,255));

panel=newJPanel();

frame.getContentPane().add(panel);

panel1=newJPanel();

panel2=newJPanel();

panel.setLayout(newBorderLayout());

//设计整个面板

mainMenu=newJMenuBar();

editMenu=newJMenu("编辑(E)");

helpMenu=newJMenu("帮助(H)");

copyItem=newJMenuItem("复制(C)Ctrl+C");

copyItem.addActionListener(this);

pasteItem=newJMenuItem("粘贴(V)Ctrl+V");

pasteItem.addActionListener(this);

editMenu.add(copyItem);

editMenu.add(pasteItem);

topHelp=newJMenuItem("帮助主题(H)");

to

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1