java计算器程序设计报告(含源代码)
java实现简易计算器 有报告和源码

Java课程设计报告题目模拟计算器_____________ _ 学生姓名 _____________________ 指导教师 ______________________ 学院 _信息科学与工程学院_______ 专业班级 ______________ __ 完成时间 _2015-1-17_________ ____ _目录第一章需求分析 (3)1.1 任务要求 (3)1.2 实现的功能........................................ 错误!未定义书签。
第二章总体设计 (4)2.1 总体结构 (4)2.2 模块关系 (4)2.3 按钮功能说明 (4)第三章详细设计 (6)3.1界面设计 (6)3.1.1 窗口设计 (6)3.1.2 面板设计 (8)3.2 计算功能设计 (9)3.2.1 数据显示事件 (10)3.2.2 加减乘除等计算事件 (11)3.2.3 复位、回退、时间显示事件 (12)3.2.4 集合及其计算操作事件 (13)3.2.5 三角函数计算事件 (14)3.3 优化设计 (15)第四章调试分析 (16)4.1 问题分析 (16)4.2 功能改进 (16)第五章运行结果 (18)5.1 功能显示 (18)5.1 细节特色.......................................... 错误!未定义书签。
第六章课程设计总结 (24)参考文献 (24)第一章需求分析1.1任务要求设计实现一个模拟计算器,能进行整数的加、减、乘、除等四则运算。
1.2 实现的功能(1)能进行简单的实数加、减、乘、除运算(2)能进行度数与弧度数的转换,可以进行三角函数sin,cos,tan的计算(3)能实现幂操作,所以乘方,开方,立方,求倒数等都能实现(4)能够求一定范围内的数阶乘(5)能显示数学上常用常数π和e,(6)能实现数据存储即集合操作,可以输入数据,求和,求平均值,方差(7)也能删除集合中的数据(8)能显示时间(9)能复位清0和回退(10)有使用帮助菜单和作者信息(11)有异常报错处理第二章总体设计2.1 总体结构本程序主要涉及的类有CaculatorFrame,窗口框架类,可以添加面板及菜单栏;CaculatorPanel,面板类,往上面添加显示框,按钮等组件,确定组件的布局;各种监听事件类,用来实现计算功能;help和information类,使用帮助类和作者信息类。
Java课程设计报告计算器

Java课程设计报告-计算器第一部分设计的内容要求1.1 Windows自带计算器版面设计1.2计算器计算功能算法实现第二部分设计思想2.1根据图形用户界面设计方法设计计算器版面。
①容器类(窗口--Window类,面板--Panel类),框架类--Frame,Button类,Label类,TextField类等类的构造方法,菜单(菜单栏、菜单项)的建立于应用。
②事件处理机制:监听器类WinClose(),actionPerformed()。
2.2计算器计算功能实现,即按钮监听器的实现自定义变量:x,y为操作数,op为操作符。
根据单击按钮不同进行不同的操作,详见处理按钮单击事件方法actionPerformed(ActionEvent e)(计算功能算法)流程图。
第三部分详细设计3.2处理按钮单击事件方法actionPerformed(ActionEvent e)(计算器计算功能算法)流程图:第四部分运行效果图4.1运行初始图:4.2 计算功能测试图:-1+23.4 将textp中数据赋给yN Y单击”1”~”9”将单击数字插入到textp中数据后,并将textp中数据赋给y 将textp赋0,并str.stelength(0);结束4.2 数学分组功能测试图:第五部分心得与体会5.1 Java是一门实践性很强的编程语言,每学习到一个新的知识点应当及时动手编写程序,提高动手能力,加深对语言的理解。
5.2 根据Java图形用户界面设计方法设计计算器版面有很多种设计方法,学习过程中应灵活变通,使版面的设计更简单易懂。
5.3 本次设计的计算器还有不足之处,首先还没有实现科学型的计算功能,其次还没有键盘输入功能,因此还应继续努力,更加完善计算器的功能。
第六部分附录6.1计算器计算功能算法(按钮"="):if(e.getSource()==b26) // "="{str.setLength(0);switch(op){case 0 :if(flag==1)textp.setText(String.valueOf(x+y));else{str.setLength(0);str.append(x+y);fun();}break;case 1 :if(flag==1)textp.setText(String.valueOf(x-y)); else{str.setLength(0);str.append(x-y);fun();}break;case 2 :if(flag==1)textp.setText(String.valueOf(x*y)); else{str.setLength(0);str.append(x*y);fun();}break;case 3 :if(y==0){textp.setText("除数不能为零");str.setLength(0);y=0;}else{if(flag==1)textp.setText(String.valueOf(x/y)); else{str.setLength(0);str.append(x/y);fun();}}break;}}6.2 fun()函数(数学分组功能)public void fun(){flag=0;int t=0;StringBuffer temp;String sstr=str.toString();if(sstr.trim().indexOf("-")==1){temp=new StringBuffer(str.substring(1));t=1;}elsetemp=new StringBuffer(str.substring(0));if(sstr.trim().indexOf(".")==-1){int j=temp.length();for(int i=j;i>3;){temp.insert(i-3,",");i=i-3;}if(t==0)textp.setText(temp.toString());elsetextp.setText('-'+temp.toString());}else{int i=sstr.indexOf('.');StringBuffer s1=new StringBuffer(sstr.substring(0,i));StringBuffer s2=new StringBuffer(sstr.substring(i+1));for(int j=s1.length();j>3;){s1.insert(j-3,",");j=j-3;}if(t==0)textp.setText(s1.toString()+'.'+s2.toString());elsetextp.setText('-'+s1.toString()+'.'+s2.toString());}}。
用JAVA编写的计算器程序的设计报告

目录目录 (1)1 需求分析 (1)1.1 计算器的基本功能: (1)1.1.1 加法运算:用数字按钮和“+”按钮进行运算; (1)1.1.2 减法运算:用数字按钮和“-”按钮进行运算; (1)1.1.3 乘法运算:用数字按钮和“*”按钮进行运算; (1)1.1.4 除法运算:用数字按钮和“/”按钮进行运算; (1)1.2 退格键和清零键: 用”Backspace”和”C”按钮实现; (1)1.3 计算器的科学计算方法: (1)1.3.1 开方:用数字按钮和“Sqrt”按钮进行运算; (1)1.3.2 百分比:用数字按钮和“%”按钮进行运算; (1)1.3.3 求倒数:用数字按钮和“1/x”按钮进行运算; (1)2 设计 (2)2.1 用户界面设计 (2)2.1.1 该计算器程序的设计:用户界面包括Swing组件,不过程序中大都使用的是AWT组件. import java.awt.*; (2)2.1.2 在AWT组件, (2)2.1.3 这个界面设计中包含了两个接口,单击事件监听器接ActionListener口和键盘事件监听器接口(KeyListener). (4)2.1.4 程序设计中,使用了布局管理: (4)2.2 概要设计 (4)2.2.1 Calculator类中的类名是Calculator.它的功能是使用图形用户来实现计算器的界面设计和运算功能以及一些科学运算方法. (4)2.2.2 main主类.中调用了cal.display来实现计算器的功能 . (4)3 实现 (4)4 测试 (16)4.1 实现加法运算:4+12=16 (17)4.2 实现减法运算:22-11=11 (17)4.3 实现乘法运算:3*9=27 (18)4.4 实现除法运算:64/32=2 (18)4.5 用”C’实现清零功能: (19)4.6 用”Backspace”实现退格功能: (20)4.7 求倒数:1/4=0.25 (20)5 总结和体会............................................... 错误!未定义书签。
JAVA课程设计简单的计算器(含代码)

Java程序课程设计任务书一、主要任务与目标1. 掌握java语言2. 创建一个简单的计算器,具有简单人机交互界面,易于操作,便于进行数据之间的简单运算。
二、具体要求(包括技术要求等):1)能够实现基本的加、减、乘、除四则运算及开方,乘方运算;2)如输入数据时,出现错误,可以修改;3)运算结果能正确显示;可以清零;4)拥有登陆注册功能;5)可以查看历史记录;学习并掌握以下技术:Java、awt,swing等熟练使用以下开发工具:Jdk,JCreate 等实现计算器的上述的功能。
三、计划进度1.12月28日—12月29日:搜集资料、查阅文献,确定选题2.12月30日--12月31日:需求分析,系统设计,系统功能模块完善3.1月1日--1月3日:编程实现系统、系统测试与修改4.1月4日-- 1月6日:课程设计报告撰写5.1月7日-- 1月8日:课程设计报告答辩四、主要参考文献[1] 耿祥义,张跃平.java大学实用教程(第二版).电子工业出版社.2008年5月目录JA V A程序课程设计任务书 (I)目录 (II)第1章引言 (1)1.1课程设计内容 (1)1.2任务分工 (1)第2章计算器定义 (2)2.1计算器登陆注册界面概述 (2)2.1.1 计算器功能概述 (2)2.1.2 计算结果的储存与查看功能概述 (2)2.2本章小结 (2)第3章计算器的具体实现 (3)3.1界面设计 (3)3.1.1用户登陆界面图 (3)3.1.3 计算器主界面 (8)3.2计算功能实现 (9)3.4本章小结 (14)第4章结束语 (14)致谢 (15)参考文献 (15)附录源代码 (15)/****************引用数据包里的类与方法******************************/ (15)第1章引言1.1 课程设计内容这是我组设计的计算器会有一些独特的功能,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个功能:(1)数据计算处理功能点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除四则运算及三角函数,开方,乘方运算;如果输入有误时可以按C撤销后重新输入新数据,有储存修改键;(2)查询功能查询功能可以迅速方便地查找到相应时段的执行的操作及结果。
JAVA编写的计算器源代码

JAVA编写的计算器源代码// Calculator.javaimport javax.swing.*; // 引入swing库import java.awt.*; // 引入awt库import java.awt.event.*; // 引入awt.event库public class Calculator extends JFrame implements ActionListener//定义按钮private JButton zero;private JButton one;private JButton two;private JButton three;private JButton four;private JButton five;private JButton six;private JButton seven;private JButton eight;private JButton nine;private JButton point;private JButton equal; private JButton plus; private JButton minus; private JButton multiply; private JButton divide; private JButton backspace; private JButton ac;private JButton ce;private JButton sqrt; private JButton sqr;private JButton plus_minus; private JButton delete; private JButton sin;private JButton cos;private JButton tan;private JButton log;private JButton nfactorial; private JButton cubic; private JButton coln;private JButton factorial;//定义文本框private JTextField resulttext;// 定义boolean变量boolean clrdisp = true; // 昵称确定是否清除计算器显示boolean isCalculate = false; // 是否可以执行计算// 定义String变量,用于存储操作符String optr;//定义存储第一个操作数double num1;//初始化构造函数public Calculato//设置布局setLayout(new BorderLayout();//创建面板JPanel northPanel = new JPanel(;JPanel centerPanel = new JPanel(;JPanel southPanel = new JPanel(;//设置面板布局northPanel.setLayout(new FlowLayout(); centerPanel.setLayout(new GridLayout(4, 5)); southPanel.setLayout(new FlowLayout();//设置计算器显示resulttext = new JTextField(28); northPanel.add(resulttext);resulttext.setEditable(false);//初始化按钮zero = new JButton("0");one = new JButton("1");two = new JButton("2");three = new JButton("3");four = new JButton("4");five = new JButton("5");six = new JButton("6");seven = new JButton("7");eight = new JButton("8");nine = new JButton("9");point = new JButton(".");equal = new JButton("=");plus = new JButton("+");minus = new JButton("-"); multiply = new JButton("*"); divide = new JButton("/"); backspace = new JButton("<-"); ac = new JButton("AC");ce = new JButton("CE");sqrt = new JButton("sqrt");sqr = new JButton("sqr");plus_minus = new JButton("+/-");。
java课设计算器报告

java课设计算器报告随着计算机的快速发展,计算机科学正在成为21世纪最重要的学科之一。
同时,作为计算机科学的一部分,Java语言也正在发展壮大。
因此,Java的课程也随之增加,如程序设计,软件工程,数据库,机器学习等等。
作为一名Java专业的学生,在学习课程的同时,我也做了一次课程设计,即实现一个Java算法计算器,如加,减,乘,除以及整数,小数,次方,根号等功能。
首先,我们需要完成一些准备工作,即使用Java语言实现功能。
为了实现上述功能,我们按照以下步骤进行:首先,使用if..else 语句来判断输入是操作数还是操作符;其次,使用switch语句来实现操作;最后,使用System.out.print()函数将结果显示在控制台中。
在实现完上述步骤之后,算法计算器功能就完成了,我们可以开始进行测试。
在测试过程中,我们输入各种操作数和操作符,并检查计算器是否能够正确计算出结果,并且检查算法是否能够实现各种功能,如加减乘除等。
我们最终实现了加减乘除,整数,小数,次方,根号等功能,在测试中结果都正确,证明算法可以实现预期的功能。
最后,总结一下这次实现Java算法计算器的过程:首先,我们使用if..else语句和switch语句来实现功能;其次,我们使用System.out.print()函数来显示结果;最后,在测试中结果都正确,证明算法可以实现预期的功能。
本次实验表明,当我们使用编程语言实现算法时,可以正确地实现我们预期的功能。
本次实验也使我对Java语言有了更深的理解,并且也使我对算法的原理有了更深的认识。
综上所述,我们实现的Java算法计算器可以满足本次实验的需要,具有正确的功能,并且在实验过程中,我们也对算法和Java语言都有了更深的了解。
java课程设计--计算器(带源码)

b6.addActionListener(this);
p2.add(b14);
b14.addActionListener(this);
p2.add(b7);
b7.addActionListener(this);
p2.add(b8);
b8.addActionListener(this);
5.实验方法与步骤:
程序源码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
publicclassCalculatorimplementsActionListener {
JButtonb1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,
sum=sum* d;
tf.setText(String.valueOf(sum));
}elseif(("/").equals((String)stElement())) {
sum=sum/ d;
tf.setText(String.valueOf(sum));
}elseif(("=").equals((String)stElement())) {
}
if(e.getActionCommand() =="x")//乘号的实现;
{
if(("+").equals((String)stElement())
|| ("-").equals((String)stElement())
java 计算器课程设计报告包含代码

课题名称:简单计算器的应用学生指导教师课题名称简单计算器的应用设计时间设计地点设计目的一、课题介绍1、课题要求(1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号;复位按钮;(2)完成整数、实数的四则运算(加、减、乘、除);(3)通过按钮点击实现数据的复位(清零);(4)实数运算中小数位的精度一致。
2、课题设计思想对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,18个按钮,总体界面用BorderLayout布局。
文本框放置在最NORTH,然后0到9以及+,-,*,/的按钮放置到一个面板Panel中,添加到整体布局的CENTER,界面设计完成。
布局设计好后再添加按钮事件。
对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。
这是计算器中的一种:简单计算器,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除求模四则运算;还能通过用户自己在文本框中输入数字,进行简单运算;如果输入有误时可以按Clear撤销后重新输入新数据。
二、详细设计过程1、界面设计界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用awt中的BorderLayout和GridLayout布局管理方式,窗体名称jisuan继承JFrameActionListener接口,并实现public void actionPerformed(ActionEvent e){}方法。
定义菜单、菜单条、菜单项、按钮、文本框、容器,设置为private类型。
定义变量double memoryd;//使用内存中存储的数字;DecimalFormat df;//保留小数位数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JA V A课程设计之计算器设计报告含源代码|计算机数据库课程设计|精品课程网站设计|课程设计网报告总结心得本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格, clear 表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。
题目:计算器目录1.摘要2.概要设计3.详细设计4.测试分析5.参考文献一、摘要本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格, clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。
二、概要设计(1)自定义类说明*********************************************************** 类名: This_number_too_big ** 作用: 自定义的异常类,用来处理计算结果溢出 ** 继承的父类: Exception类 ** 实现的接口: 没有 ***********************************************************class This_number_too_big extends Exception{}//自定义的一个结果溢出异常类*********************************************************** 类名: Jsp2003 ** 作用: 主类。
** 继承的父类: Frame类 ** 实现的接口: ItemListener类,ActionListener类 ***********************************************************class Jsp2003 extends Frame implements ItemListener,ActionListener{public int number=0,length=18;//number是用来记录输入的数字个数,//length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制 public char mark='n';//设置运算符号为没有即为‘n’,它的值是‘+’‘-’‘*’‘/’public double data=0;//设置运算数据为零public char ch;//用来临时存放所按按钮的第一个字符public boolean Refresh=false;//设置lab是否要在输入数据的时候刷新,初始为否主要方法说明:------------------------------------------------------------------------------------------------//用来处理按了运算符后的计算-public void js() throws This_number_too_big //指定由method抛出异常{if (mark=='n') //没有运算符{mark=ch; //,则设置运算符为刚刚输入的字符,data=Double.parseDouble(lab.getText());//则设置运算数据为lab的值Refresh=true;//则设置下一次输入的时候要刷新lab}else //如果采用的是连续运算(即没有使用‘=’号)则运行下面的语句{switch (mark) //根据运算符计算结果,并把结果保存到data{ case '+': data+=Double.parseDouble(lab.getText()); break;case '-': data-=Double.parseDouble(lab.getText()); break;case '*': data*=Double.parseDouble(lab.getText()); break;case '/': data/=Double.parseDouble(lab.getText()); break;}lab.setText(Double.toString(data)); //显示运算结果mark=ch;//设置运算符为刚刚按下的运算符Refresh=true;//则设置下一次输入的时候要刷新labnumber=lab.getText().length();//设置输入的字符个数// System.out.println(lab.getText());//用来调试用的if (data>Double.MAX_VALUE)//如果data超过double类型的最大值则抛出自定义的一个异常类{throw new This_number_too_big(); }}}//end js() method----------------------------------------------------------------------------------------------------public void enter()//处理输入字符{if(Refresh==true)//如果已经设置了运算符则在下一次输入数据的时候要把以前lab的内容清除掉{lab.setText("0"); number=0; Refresh=false;}if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)//如果lab的内容为0则,lab的内容将被所输入的字符代替,//否则直接在lab的内容后面加上所输入的字符{lab.setText(Character.toString(ch)); number++;}elseif(number{number++;lab.setText(lab.getText()+ch);}}//end enter() method--------------------------------------------------------------------------------------------------------//八进制或十六进制转换成十进制Ipublic String goto_10(String s,long l)//参数s:是要转换的字符串,由于输入的控制,保证了字符串的合法性;//参数l:使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16;{ String str=s; //用来转换的字符串long j=l; //表示进制long lg=0,jing=1;//lg用来记录权乘和,jing用来记录位权char cha;//临时记录要转换的字符for(int i=1;i<=str.length();i++){ cha=str.charAt(str.length()-i);switch(cha){ case '1': lg=lg+1*jing;break;case '2': lg=lg+2*jing;break;case '3': lg=lg+3*jing;break;case '4': lg=lg+4*jing;break;case '5': lg=lg+5*jing;break;case '6': lg=lg+6*jing;break;case '7': lg=lg+7*jing;break;case '8': lg=lg+8*jing;break;case '9': lg=lg+9*jing;break;case 'A': lg=lg+10*jing;break;case 'B': lg=lg+11*jing;break;case 'C': lg=lg+12*jing;break;case 'D': lg=lg+13*jing;break;case 'E': lg=lg+14*jing;break;case 'F': lg=lg+15*jing;break;}jing*=j; //位权升一级,为下次使用做好准备}return Long.toString(lg);}//end String goto_10() method}(2)程序流程图三、详细设计import java.awt.*;import java.awt.event.*;class This_number_too_big extends Exception{}//自定义的一个结果溢出异常类class Jsp2003 extends Frame implements ItemListener,ActionListener {public Jsp2003() {addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {dispose();System.exit(0);}});}static Jsp2003 mainFrame = new Jsp2003();static Label lab=new Label("0");static Panel pnl1=new Panel(new GridLayout(4,3,3,3));static Panel pnl2=new Panel(new GridLayout(4,1,3,3));static Panel pnl3=new Panel(new GridLayout(1,2,3,3));static Panel pnl4=new Panel(new GridLayout(6,1,3,3));static Button bt9=new Button("9");static Button bt8=new Button("8");static Button bt7=new Button("7");static Button bt6=new Button("6");static Button bt5=new Button("5");static Button bt4=new Button("4");static Button bt3=new Button("3");static Button bt2=new Button("2");static Button bt1=new Button("1");static Button bt0=new Button("0");static Button btdot=new Button(".");static Button btequ=new Button("=");static Button btadd=new Button("+");static Button btsub=new Button("-");static Button btmul=new Button("*");static Button btdev=new Button("/");static Button btA=new Button("A");static Button btB=new Button("B");static Button btC=new Button("C");static Button btD=new Button("D");static Button btE=new Button("E");static Button btF=new Button("F");static Checkbox ckb8=new Checkbox("八进制");static Checkbox ckb10=new Checkbox("十进制");static Checkbox ckb16=new Checkbox("十六进制");static Button btc=new Button("clear");static Button btt=new Button("backspace");public int number=0,length=18;//number是用来记录输入的数字个数,length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制public char mark='n'; //设置运算符号为没有即为‘n’,它的值是‘+’‘-’‘*’‘/’ public double data=0; //设置运算数据为零public char ch; //用来临时存放所按按钮的第一个字符public boolean Refresh=false;//设置lab是否要在输入数据的时候刷新,初始为否public static void main(String args[]) {System.out.println("Starting Jsp2003...");lab.setAlignment(Label.RIGHT);lab.setBackground(Color.lightGray);lab.setForeground(Color.BLUE);lab.setFont(new Font("Serief",Font.BOLD,18));lab.setBounds(14,33,216,40);mainFrame.add(lab);CheckboxGroup grp=new CheckboxGroup();ckb8.setCheckboxGroup(grp);ckb10.setCheckboxGroup(grp);ckb16.setCheckboxGroup(grp);ckb8.setBounds(14,75,55,25);ckb10.setBounds(69,75,55,25);ckb16.setBounds(124,75,65,25);ckb8.setState(false);ckb10.setState(true);ckb16.setState(false);mainFrame.add(ckb8);mainFrame.add(ckb10);mainFrame.add(ckb16);pnl1.setBounds(14,140,120,150);pnl2.setBounds(144,140,40,150);pnl3.setBounds(14,100,170,36);pnl4.setBounds(190,100,40,190);pnl1.add(bt7);pnl1.add(bt8);pnl1.add(bt9);pnl1.add(bt4);pnl1.add(bt5);pnl1.add(bt6);pnl1.add(bt1);pnl1.add(bt2);pnl1.add(bt3);pnl1.add(bt0);pnl1.add(btdot);pnl1.add(btequ);pnl2.add(btadd);pnl2.add(btsub);pnl2.add(btmul);pnl2.add(btdev);pnl3.add(btt);pnl3.add(btc);pnl4.add(btA);pnl4.add(btB);pnl4.add(btC);pnl4.add(btD);pnl4.add(btE);pnl4.add(btF);btA.enable(false);btB.enable(false);btC.enable(false);btD.enable(false);btE.enable(false);btF.enable(false);mainFrame.add(pnl1);mainFrame.add(pnl2);mainFrame.add(pnl3);mainFrame.add(pnl4);mainFrame.setResizable(false); mainFrame.setLayout(null); mainFrame.setSize(240,300 ); mainFrame.setTitle("计算器"); mainFrame.setVisible(true);ckb8.addItemListener(mainFrame); ckb10.addItemListener(mainFrame); ckb16.addItemListener(mainFrame); //把事件聆听者向各个组键注册bt1.addActionListener(mainFrame); bt2.addActionListener(mainFrame); bt3.addActionListener(mainFrame); bt4.addActionListener(mainFrame); bt5.addActionListener(mainFrame); bt6.addActionListener(mainFrame); bt7.addActionListener(mainFrame); bt8.addActionListener(mainFrame); bt9.addActionListener(mainFrame); bt0.addActionListener(mainFrame); btadd.addActionListener(mainFrame); btsub.addActionListener(mainFrame); btmul.addActionListener(mainFrame); btdev.addActionListener(mainFrame); btt.addActionListener(mainFrame);btc.addActionListener(mainFrame);btdot.addActionListener(mainFrame);btequ.addActionListener(mainFrame);btA.addActionListener(mainFrame);btB.addActionListener(mainFrame);btC.addActionListener(mainFrame);btD.addActionListener(mainFrame);btE.addActionListener(mainFrame);btF.addActionListener(mainFrame);}// end main() mothed//---------------------------------------------//checkbox 事件的处理public void itemStateChanged(ItemEvent e){ mark='n';Refresh=false;//规定当进制转换时以前输入的运算符失效if (ckb8.getState()==true){ btA.enable(false);btB.enable(false);btC.enable(false);btD.enable(false);btE.enable(false);btF.enable(false);bt9.enable(false);bt8.enable(false);btdot.enable(false);btadd.enable(false);btmul.enable(false);btsub.enable(false);btdev.enable(false);btequ.enable(false);//在八进制的情况下对有些按件的管理if(length==18) { lab.setText(goto10_8(lab.getText())); number=lab.getText().length();}if(length==14) { lab.setText(goto_10(lab.getText(),16L)); lab.setText(goto10_8(lab.getText()));number=lab.getText().length();}//将其他进制转换成八进制length=19;//在八进制下允许输入数字个数最多为19位}if(ckb10.getState()==true){ btA.enable(false);btB.enable(false);btC.enable(false);btD.enable(false);btE.enable(false);btF.enable(false);bt9.enable(true);bt8.enable(true);btdot.enable(true);btadd.enable(true);btmul.enable(true);btsub.enable(true);btdev.enable(true);btequ.enable(true);//在十进制的情况下对有些按件的管理if(length==19) { lab.setText(goto_10(lab.getText(),8L)); number=lab.getText().length();}if(length==14) { lab.setText(goto_10(lab.getText(),16L)); number=lab.getText().length();}//进制转换成十进制length=18;//在十进制下允许输入数字个数最多为18位}if(ckb16.getState()==true){ btA.enable(true);btB.enable(true);btC.enable(true);btD.enable(true);btE.enable(true);btF.enable(true);bt9.enable(true);bt8.enable(true);btdot.enable(false);btadd.enable(false);btmul.enable(false);btsub.enable(false);btdev.enable(false);btequ.enable(false);//在十六进制的情况下对有些按件的管理if(length==18) { lab.setText(goto10_16(lab.getText())); number=lab.getText().length();}if(length==19) { lab.setText(goto_10(lab.getText(),8L));lab.setText(goto10_16(lab.getText()));number=lab.getText().length();}//将其他进制转换成十六进制length=14;//在十六进制下允许输入数字个数最多为14位}//end itemStateChanged(ItemEvent e) method//------------------------------------------------------------//按钮事件的处理public void actionPerformed(ActionEvent m){Button btn=(Button) m.getSource();ch=btn.getLabel().charAt(0);switch (ch){ case 'c': {lab.setText("0"); number=0; mark='n'; Refresh=false;}break;//初始化case '1': enter(); break;case '2': enter(); break;case '3': enter(); break;case '4': enter(); break;case '5': enter(); break;case '6': enter(); break;case '7': enter(); break;case '8': enter(); break;case '9': enter(); break;case '0': {if(Refresh==true) { lab.setText("0"); number=0; Refresh=false; }if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)break;if(number{number++;lab.setText(lab.getText()+ch);} else break;} break;case 'A': enter(); break;case 'B': enter(); break;case 'C': enter(); break;case 'D': enter(); break;case 'E': enter(); break;case 'F': enter(); break;case '.': {if(Refresh==true) {lab.setText("0"); number=0; Refresh=false;}if(lab.getText().indexOf('.')== -1){number++;lab.setText(lab.getText()+ch);}elsebreak;}break;case 'b': {if(number==0) break;else{if(--number==0) {lab.setText("0"); number=0;}else{if (number!=1) lab.setText(lab.getText().substring(0,number)); elselab.setText(Character.toString(lab.getText().charAt(0)));}}}break;case '+': try{ js();}catch(This_number_too_big e){lab.setText("0"); number=0; mark='n';Refresh=false; System.out.println("The number is too big");} break; //如果出现异常则初始化效果如同clear键case '-': try{ js();}catch(This_number_too_big e){lab.setText("0"); number=0; mark='n';Refresh=false; System.out.println("The number is too big");} break; //如果出现异常则初始化效果如同clear键case '*': try{ js();}catch(This_number_too_big e){lab.setText("0"); number=0; mark='n';Refresh=false; System.out.println("The number is too big");} break; //如果出现异常则初始化效果如同clear键case '/': try{ js();}catch(This_number_too_big e){lab.setText("0"); number=0; mark='n';Refresh=false; System.out.println("The number is too big");} break; //如果出现异常则初始化效果如同clear键case '=': try{ js();}catch(This_number_too_big e){lab.setText("0"); number=0; mark='n';Refresh=false; System.out.println("The number is too big");} break; //如果出现异常则初始化效果如同clear键}}//end actionPerformed(ActionEvent e) method//八进制或十六进制转换成十进制I//-------------------------------------Infinitypublic String goto_10(String s,long l)//参数s:是要转换的字符串,由于输入的控制,保证了字符串的合法性;//参数l:使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16;{String str=s; //用来转换的字符串long j=l; //表示进制long lg=0,jing=1;//lg用来记录权乘和,jing用来记录位权char cha;//临时记录要转换的字符for(int i=1;i<=str.length();i++){cha=str.charAt(str.length()-i);switch(cha){case '1': lg=lg+1*jing;break;case '2': lg=lg+2*jing;break;case '3': lg=lg+3*jing;break;case '4': lg=lg+4*jing;break;case '5': lg=lg+5*jing;break;case '6': lg=lg+6*jing;break;case '7': lg=lg+7*jing;break;case '8': lg=lg+8*jing;break;case '9': lg=lg+9*jing;break;case 'A': lg=lg+10*jing;break;case 'B': lg=lg+11*jing;break;case 'C': lg=lg+12*jing;break;case 'D': lg=lg+13*jing;break;case 'E': lg=lg+14*jing;break;case 'F': lg=lg+15*jing;break;}jing*=j; //位权升一级,为下次使用做好准备}return Long.toString(lg);}//end String goto_10() method//十进制转换成十六进制//-------------------------------------public String goto10_16(String s)//参数s:是要转换的字符串,由于输入的控制,保证了字符串的合法性;{ String str=s; //用来转换的字符串String st=new String();//用来记录16进制值的字符串long ch; //每次取余有的值int k; //将每次取余有的值转换成整形,用来选择转换的16进制字符long lg;//用来转换的10进制数if(str.charAt(0)=='-') //如果有负号则出去负号str=str.substring(1,str.length()-1);if(str.indexOf('E')!= -1)//如果是科学计数值则出去小数点和E后面的数str=str.charAt(0)+str.substring(2,str.indexOf('E'));if (str.indexOf('.')!= -1)//如果有小数点则出去小数点及小数点后面的内容str=str.substring(0,str.indexOf('.'));lg=Long.parseLong(str);//将简化的字符串转化为长整形给lgwhile (lg>=16){ ch=lg%16;k=(int)ch;switch (k){case 10: st="A"+st;break;case 11: st="B"+st;break;case 12: st="C"+st;break;case 13: st="D"+st;break;case 14: st="E"+st;break;case 15: st="F"+st;break;default: st=Long.toString(ch)+st;}lg=lg/16;}k=(int)lg;switch (k){case 10: st="A"+st;break;case 11: st="B"+st;break;case 12: st="C"+st;break;case 13: st="D"+st;break;case 14: st="E"+st;break;case 15: st="F"+st;break;default: st=Long.toString(lg)+st;}return st;}//end goto10_16() method//-----------------------------------------------//十进制转换成八进制?public String goto10_8(String s)//参数s:是要转换的字符串,由于输入的控制,保证了字符串的合法性;{ String str=s;String st=new String();long j=8,ch;long lg;if(str.charAt(0)=='-') //如果有负号则出去负号str=str.substring(1,str.length()-1);if(str.indexOf('E')!= -1)//如果是科学计数值则出去小数点和E后面的数str=str.charAt(0)+str.substring(2,str.indexOf('E'));if (str.indexOf('.')!= -1)//如果有小数点则出去小数点及小数点后面的内容str=str.substring(0,str.indexOf('.'));lg=Long.parseLong(str);while (lg>=j){ ch=lg%j;st=Long.toString(ch)+st;lg=lg/j;}st=Long.toString(lg)+st;return st;}//end goto10_8() method//--------------------------------//输入字符public void enter(){if(Refresh==true)//如果已经设置了运算符则在下一次输入数据的时候要把以前lab的内容清除掉{lab.setText("0"); number=0; Refresh=false;}if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)//如果lab的内容为0则,lab的内容将被所输入的字符代替,否则直接在lab的内容后面加上所输入的字符{lab.setText(Character.toString(ch)); number++;}elseif(number{number++;lab.setText(lab.getText()+ch);}}//end enter() method//-------------------------------------//用来处理按了运算符后的计算-public void js() throws This_number_too_big //指定由method抛出异常{if (mark=='n') //没有运算符{mark=ch; //,则设置运算符为刚刚输入的字符,data=Double.parseDouble(lab.getText());//则设置运算数据为lab的值Refresh=true;//则设置下一次输入的时候要刷新lab}else //如果采用的是连续运算(即没有使用‘=’号)则运行下面的语句{switch (mark) //根据运算符计算结果,并把结果保存到data{ case '+': data+=Double.parseDouble(lab.getText()); break;case '-': data-=Double.parseDouble(lab.getText()); break;case '*': data*=Double.parseDouble(lab.getText()); break;case '/': data/=Double.parseDouble(lab.getText()); break;}lab.setText(Double.toString(data)); //显示运算结果mark=ch;//设置运算符为刚刚按下的运算符Refresh=true;//则设置下一次输入的时候要刷新labnumber=lab.getText().length();//设置输入的字符个数// System.out.println(lab.getText());//用来调试用的if (data>Double.MAX_VALUE)//如果data超过double类型的最大值则抛出自定义的一个异常类{throw new This_number_too_big(); }}}//end js() method//---------------------------//public void answer() throws This_number_too_big //指定由method抛出异常{if (mark=='n'){}else{switch (mark){case '+': data+=Double.parseDouble(lab.getText()); break;case '-': data-=Double.parseDouble(lab.getText()); break;case '*': data*=Double.parseDouble(lab.getText()); break;case '/': data/=Double.parseDouble(lab.getText()); break;}lab.setText(Double.toString(data));mark='n';}if (data>Double.MAX_VALUE) //如果data超过double类型的最大值则抛出自定义的一个异常类{throw new This_number_too_big();}Refresh=false;number=lab.getText().length();}//end answer() method//---------------------------}//end class Jsp20034.测试分析(1)程序运行情况:程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。