java计算器.docx
- 文档编号:11209058
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:64
- 大小:192.24KB
java计算器.docx
《java计算器.docx》由会员分享,可在线阅读,更多相关《java计算器.docx(64页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 计算器