湖 南 农 业 大 学
Java课程设计报告
计算器软件设计
学生姓名:
学 号:
年级专业:
指导老师:
学 院:
湖南·长沙
提交日期:2007年12月
目 录
1. 前言………………………………………………………………………………2
2.概要设计………………………………………………………………………3
2.1 开发环境……………………………………………………………………3
2.2 计算器功能…………………………………………………………………3
2.3 界面设计……………………………………………………………………3
2.4 类uml图…………………………………………………………………4
3. 详细设计………………………………………………………………………4
3.1 使用的java类的说明…………………………………………………4
3.2 类的主要方法……………………………………………………………5
3.2.1 处理按了运算符后的计算……………………………………………5
3.2.2 处理输入字符…………………………………………………………6
3.2.3 进制的转换……………………………………………………………6
3.2.4 设计总体认识…………………………………………………………7
3.2.5 程序流程图……………………………………………………………8
4. 运行结果…………………………………………………………………………8
5. 测试分析…………………………………………………………………………9
5.1 程序运行情况………………………………………………………………9
5.2 程序异常处理………………………………………………………………9
6. 源程序…………………………………………………………………………9
参考文献…………………………………………………………………………27
致 谢…………………………………………………………………………27
摘要:该程序是一个图形界面的简单的java计算器,具有良好的界面,使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。可以进行简单的四则运算(加、减、乘、除,以及开平方)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格, clear表示初始化,sqrt表示开平方,界面为灰白对称。
关键字:java、计算器类、方法、事件
1 前言
随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。Java基本版本叫Java 2标准版(Java 2 Standard Edition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。Java 2移动版(The Java 2 Mobile Edition,J2ME)包含创建无线Java应用程序的API。还有Java 2企业版(The Java 2 Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。
Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。Java语言去掉了C++语言的一些容易引起错误的特性。Java语言的特点有:面向对象、跨平台、安全性、多线程和图形功能强。
2 概要设计
2.1开发环境
开发平台:Microsoft Windows XP Professional Service Pack 2
开发工具:JBuilder 2007 + JDK 1.6.0_02
2.2计算器功能
功能 1:按下数字键在液晶平上会显示数字,这时计算器最基本的功能。
功能 2:在任何时候按下“±”键,计算器文本框上的数字置反号。
功能 3:第一次按下“运算”键,再按下数字键,将重新输入第二个数字。再次按下“运 算”键,将算出前两个数字运算的结果,然后按下数字,将又重新输入新的数字。
功能 4:输入数字后,按下“等于”键,将仍输出原来的数 输入运算符和第二个数字后再按下“=”键,将得到二者运算的结果,然后又重复功能 3 和功能 4 。
功能 5:按下清除“C”键,数据被全部清楚。
2.3界面设计
图2.3 计算器面板
2.4类 UML图
ArrayStackChar UML图如图2.3A所示:
ArrayStackDouble UML图如图2.3B所示
图2.4A 图2.4B
3详细设计
3.1计算器使用的Java类的说明
类名: 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是否要在输入数据的时候刷新,初始为否
程序的设计参考了Sun Java网站里的大量实例,比如Layout的使用、Event的处理、Components的添加与应用等等。其中:
public class NewCalc extends JFrame implements ActionListener
语句实现了ActionListener接口,因此可以调用addActionListener(this)方法对按钮进行点击监听,在下面的public void actionPerformed(ActionEvent e)方法里面对各个点击事件进行处理。
3.2类的主要方法
3.2.1处理按了运算符后的计算:
public void js() throws This_number_too_big
{if (mark=='n')
{mark=ch; /
data=Double.parseDouble(lab.getText());
Refresh=true;
}
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=ch;
Refresh=true;
number=lab.getText().length();
// System.out.println(lab.getText());
if (data>Double.MAX_VALUE)
{throw new This_number_too_big(); }
}
}
3.2.2处理输入字符:
{if(Refresh==true)
{lab.setText("0"); number=0; Refresh=false;}
if(lab.getText().charAt(0)=='0'&& lab.getText().length()==1)
{lab.setText(Character.toString(ch)); number++;}
else
if(number } 3.2.3八进制或十六进制转换成十进制I: public 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 } 3.2.4设计的总体认识 ●JAVA设计的摘要 ●JAVA设计的目录结构 ●JAVA设计的概要和详细设计 ●JAVA设计的版权意识 ●JAVA设计需要编译的环境 ●JAVA设计的实用性 3.2.5程序流程图 图3绘制计算器方法PAD图 4运行结果 图4 计算结果显示 5测试分析 5.1程序运行情况: 程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。然后进行,重制归零的处理。 5.2 程序异常处理: 当结果超出Double.MAX_VALUE时,将抛出一个This_number_too_big 类的异常对象,这个是我自定义的一个异常类它继承自Exception 类,然后使用try-catch去捕捉这个异常,异常的处理如下: 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"); } //如果出现异常则初始化效果如同clear键 6 程序清单: import java.awt.*; import java.awt.event.*; class This_number_too_big extends Exception { }// 自定义的一个结果溢出异常类 // ActionLintsner是所有的父类,其它可以监听的事件都可以被它捕获 // ItemListener用于捕获带有item的组件产生的事件,如ComboBox,CheckBox,RadioButton,ToggleButton class hejiang extends Frame implements ItemListener, ActionListener { public hejiang() { addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } // 给窗口注册一个事件,当你点了窗口右上方的叉号时,此方法被调用 }); } static hejiang mainFrame = new hejiang(); // 创建一个mainFrame static Label lab1 = new Label("0"); 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 hejiang..."); 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); lab1.setAlignment(Label.RIGHT); // 对齐方式 lab1.setBackground(Color.lightGray); // 背景色 lab1.setForeground(Color.BLUE); // 前景色 lab1.setFont(new Font("Serief", Font.BOLD, 18));// 字体设置 lab1.setBounds(14, 75, 216, 40); mainFrame.add(lab); mainFrame.add(lab1); CheckboxGroup grp = new CheckboxGroup(); ckb8.setCheckboxGroup(grp); ckb10.setCheckboxGroup(grp); ckb16.setCheckboxGroup(grp); ckb8.setBounds(14, 115, 55, 25); // setBounds()方法是可以设定控件的大小和位置 ckb10.setBounds(69, 115, 55, 25); ckb16.setBounds(124, 115, 65, 25); ckb8.setState(false); ckb10.setState(true); ckb16.setState(false); mainFrame.add(ckb8); mainFrame.add(ckb10); mainFrame.add(ckb16); pnl1.setBounds(18, 180, 120, 150); pnl2.setBounds(144, 180, 40, 150); pnl3.setBounds(14, 140, 170, 36); pnl4.setBounds(190, 140, 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, 350); 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(); } if (length == 19) { lab1.setText(goto_10(lab1.getText(), 8L)); number = lab1.getText().length(); } if (length == 14) { lab1.setText(goto_10(lab1.getText(), 16L)); number = lab1.getText().length(); } length = 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); deposit(ch); 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 < length) { 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); } else break; } 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)); else lab .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 public 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);// 将简化的字符串转化为长整形给lg while (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; 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++; } else if (number < length) { 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;// 则设置下一次输入的时候要刷新lab number = 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 String display=""; private void deposit(char code){ switch (code) { case 'c': display=""; break;// 初始化 case '+': display=display+code; break; case '-': display=display+code; break; case '*': display=display+code; break; case '/': display=display+code; break; case '1': display=display+code; break; case '2': display=display+code; break; case '3': display=display+code; break; case '4': display=display+code; break; case '5': display=display+code; break; case '6': display=display+code; break; case '7': display=display+code; break; case '8': display=display+code; break; case '9': display=display+code; break; case 'A': display=display+code; break; case 'B': display=display+code; break; case 'C': display=display+code; break; case 'D': display=display+code; break; case 'E': display=display+code; break; case 'F': display=display+code; break;} lab1.setText(display);} }// end class hejiang 参考文献 林良信 《Java JDK 6 学习笔记》 刘浦迎 谢春 《java程序设计实用教程》 科学出版社 张白一 崔尚林 《面向对象程序设计—java》 西安电子科技大学出版社 潘浩 李芙玲 《Java程序设计》 清华大学出版社 致 谢 经过一个学期的JAVA学习,对JAVA编程有了一定的认识,在做这个课程设计的时候,刚开始感觉自己无从下手,不知道该怎么开始,很茫然。最终利用网络资源和查阅图书馆的书籍,在傅老师和同学的指导和讨论下,经过一段时间终于完成了这个设计。当程序运行结束看到弹出的计算器的界面时,感到很欣慰,虽然只是一个小小的东西,但却是自己起步的成就,从中学到了很多书本知识不能体现的东西,对JAVA的学习有了一定的兴趣。也通过这次的程序设计感觉到自己平时对于编程实际操作的贫乏,没有把书本上的知识真正的掌握牢固。