1、目录一、课设任务及要求1二、需求分析2三、设计思路3四、详细设计5五、运行调试与分析讨论9六、设计体会与小结14七、参考文献15附录16中文摘要 Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器,显示了Java的魅力:跨平台、动感的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。Java平台由Java虚拟机和Java 应用编程接口构成。Java 应用编程接口为Java应用提供了一个独立
2、于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。 Java分为三个体系J2SE,J2EE,J2ME。说起计算器,值得我们骄傲的是,最早的计算工具的诞生地是中国。在17世纪初,西方国家的计算工具才有了较大的发展,英国数学家纳皮尔发明的纳皮尔算筹,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠
3、定了良好的基础,进而成为了现代社会应用广泛的计算工具。关键词:java Java平台 计算器一、 课设任务及要求1.课设任务这次课程设计选择的题目为设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算。这次课程设计的基本要求为设计的计算器应用程序可以完成加法、减法、乘法、除法和取余运算,且有小数点、正负号、求倒数、退格和清零功能。拓展功能根据自己的能力添加。这次课程设计的我选择添加的拓展功能为开平方根,平方,立方,判断素数,求log的功能。本程序主要练习使用布局管理器设计一个计算器的界面,并练习使用事件监听器处理数据的输入,并完成相关的计算。数据和运算符号的存储采用动态链表这种数据结
4、构实现。这次课程设计选择的Java运行环境为:Windows XP sp3 +Eclipse+JDK 1.6二、需求分析1.系统功能需求分析 计算器是现在一个普遍应用的工具,能够解决许多人所无法计算的数据,节省大量宝贵的时间。2.系统功能分析为了实现计算器系统的功能主要有二个功能模块:输入、输出。3.系统设计原则基于计算器系统要具有适用性广、操作简便等特点本系统预计要达到以下几个目标:(1)、满足以上的功能要求;(2)、能够运行在常见的计算机及其配置上;三、设计思路1.关于布局问题 本次课程设计程序继承来自框架类(Frame),总体布局上选用布局管理器BorderLayout:(1)将单行文本
5、框加入到“North”区域(2)将面板panel加入到“Center”区域,同时panel包含了各种数字按钮和符号按钮。面板panel采用Girdlayout布局,选用5行*5列,将各种按钮添加到面板panel,并增加按钮监听事件。布局完成后的效果图如下:2.关于数据存储问题计算器完成的是一个数学表达式,本次课程设计我选用的是使用链表(Linkedlist类)来存储数字和运算符号。程序运行后,输入的所有数字及运算符号都全部存储在链表中,待最后运算时,再一一求出来进行计算。3.关于事件监听的处理问题计算器的各种按钮都需要一个对象来进行监视,以便对发生的事件做出处理。计算器的各种按钮通过调用相应的
6、方法将某个对象作为自己的监视器。例如计算器中的数字按钮,其方法为: AddActionListener(监视器);对于获取了监视器的数字按钮,通过相应的操作就会导致事件的发生,并通知监视器,监视器就会做出相应的处理。四、详细设计1.计算器系统主要功能模块(1)、系统主要模块实现的功能系统输入模块实现数字以及计算符号输入的功能,输出模块的结果在文本框中实现显示。(2)、系统输入窗体实现的效果系统输入窗体设计效果如图所示:上图为按数字键1234567890后,在文本框中的显示(3)、系统主要模块功能描述功能描述:菜单项“计算器”主要服务于使用者它包含了“输入”、“输出”、两个功能。输入功能:当使用
7、者将数字输入后,会出现数字的显示;当使用者将计算符号输入时候会有计算符号的录入。输出功能:点击“输出”选项后可实现计算的结果。2.系统的实现 (1)系统源文件类之间的关系 计算器系统共有3个java源文件:Calculator,NumberButton,OperationButton。主要类之间的主要关系如图下图所示计算器系统的类关系图2、系统源文件类实现的功能Calculator.java文件生成的类该JAVA文件生成的类负责创建计算器的主窗口及各种运算的实现。该类含有main方法,整个程序从此类开始执行NumberButton.java该文件生成的类负责为主类创建数字按钮对象,使用鼠标单击
8、数字按钮可依次输入参加运算的数值的各位数字OperationButton.java该文件生成的类负责为主类创建运算符号按钮对象。使用鼠标单击运算符号可选择所要进行的运算下表为表格形式序号文件名主要功能1Calculator.java该JAVA文件生成的类负责创建计算器的主窗口。该类含有main方法,整个程序从此类开始执行2NumberButton.java该文件生成的类负责为主类创建数字按钮对象,使用鼠标单击数字按钮可依次输入参加运算的数值的各位数字3OperationButton.java该文件生成的类负责为主类创建运算符号按钮对象。使用鼠标单击运算符号可选择所要进行的运算.3. 系统类的成
9、员变量及方法描述(1) 主类Calculator 成员变量Calculator类成员变量表成员变量描述变量类型名称数字按钮数组NumberButtonNumberButton运算符号按钮数组OperationButtonOperationButton小数点按钮JButton小数点按钮正负号按钮JButton正负号按钮退格按钮JButton退格按钮平方按钮JButton平方按钮清零按钮JButton清零按钮等号按钮JButton等号按钮显示计算结果JTextFieldresultShow储存数据的链表LinkedListmylist求平方根JButtonsqrt判断素数JButton素数logJ
10、Buttonlog立方按钮JButton立方按钮倒数按钮JButton倒数按钮方法Calculator类方法名称功能备注Calculator创建窗口构造方法ActionPerfomed处理ActionPerfomed事件接口方法Main程序开始运行(2)NumberButton类 成员变量NumberButton类变量成员变量描述变量类型名称按钮代表的数字Intnumber方法NumberButton类方法方法名功能备注NumberButton创建数字按钮构造方法getNumber获取按钮代表的数字(3)OperationButton类成员变量OperationButton类成员变量成员变量描
11、述变量类型名称按钮代表的符号StringOperator方法OperationButton类方法方法名功能备注OperationButton创建符号按钮构造方法getOperator获取按钮代表的符号五、运行调试与分析讨论1.测试加法运算 按键12+20 得出的结果如下图2. 测试减法运算 按键12-20 得出的结果如下图3. 测试乘法运算 按键12*20 得出的结果如下图4. 测试除法运算 按键12/20 得出的结果如下图5测试退格运算,按键123456789,按退格键3次,得到的结果如下图6.测试倒数运算,按键5,再按倒数键“1/X”,得到的结果如下图7.测试平方键,按键4,再按平方键,得
12、到的结果如下图8. 测试立方键,按键4,再按立方键,得到的结果如下图9.测试开平方键,按键4,再按键“sqrt”,得到的结果如下图10. .测试素数键,按键29,再按键“素数”,得到的结果如下图第 13 页 六、设计体会与小结这次课程设计总体上来说难度不大,但是个别细节遇到很多的问题。在课设过程中,我自己学习了swing的使用以及数据结构中的链表用java的实现。在这次课程设计中,我学习到了很多布局方面的知识,还有就是链表的实现。数据结构已经很久没有用过了,刚上手时感觉有些生疏,但是随着时间的推移,用java实现链表也渐渐的变得顺手了。这次课程设计的程序构架很简单,没有用到很困难的算法,但是这
13、样编写出来的程序也有优点,就是修改的时候一目了然。总的来说,时间虽紧,这次课程设计学习的东西很是挺多的。最后感谢在课程设计中帮助过我的同学和老师。第 33 页 七、参考文献1 耿祥义.Java 2 实用教程(第三版)北京 清华大学出版社 2006.82 朱福喜Java语言程序设计北京 清华大学出版社20053 朱福喜,尹为民,余振坤Java语言与面向对象程序设计武汉 武汉大学出版社2002附录 程序代码package TZB;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.bor
14、der.*;import java.util.LinkedList;public class Calculator extends JFrame implements ActionListener NumberButton numberButton;OperationButton oprationButton;JButton 小数点按钮, 正负号按钮, 退格按钮, 平方按钮, 等号按钮, 清零按钮, sqrt, 素数, log, 立方按钮, 倒数按钮;JPanel panel;JTextField resultShow;String 运算符号 = +, -, *, / ;LinkedList
15、mylist;boolean 等号 = false;JTextArea blank;/ GUI的设计 及监视器的添加public Calculator() super(计算器);mylist = new LinkedList();numberButton = new NumberButton10;for (int i = 0; i = 9; i+) numberButtoni = new NumberButton(i);numberButtoni.addActionListener(this);oprationButton = new OperationButton4;for (int i =
16、 0; i 4; i+) oprationButtoni = new OperationButton(运算符号i);oprationButtoni.addActionListener(this);小数点按钮 = new JButton(.);正负号按钮 = new JButton(+/-);等号按钮 = new JButton(=);平方按钮 = new JButton(平方);立方按钮 = new JButton(立方);倒数按钮 = new JButton(1/x);退格按钮 = new JButton(退格);清零按钮 = new JButton(C);sqrt = new JButto
17、n(sqrt);log = new JButton(log);素数 = new JButton(素数);清零按钮.setForeground(Color.blue);退格按钮.setForeground(Color.blue);等号按钮.setForeground(Color.blue);平方按钮.setForeground(Color.blue);立方按钮.setForeground(Color.blue);倒数按钮.setForeground(Color.blue);正负号按钮.setForeground(Color.blue);小数点按钮.setForeground(Color.blue
18、);sqrt.setForeground(Color.blue);log.setForeground(Color.blue);素数.setForeground(Color.blue);退格按钮.addActionListener(this);清零按钮.addActionListener(this);等号按钮.addActionListener(this);小数点按钮.addActionListener(this);正负号按钮.addActionListener(this);平方按钮.addActionListener(this);立方按钮.addActionListener(this);倒数按
19、钮.addActionListener(this);sqrt.addActionListener(this);log.addActionListener(this);素数.addActionListener(this);resultShow = new JTextField(10);resultShow.setHorizontalAlignment(JTextField.RIGHT);resultShow.setForeground(Color.blue);resultShow.setFont(new Font(TimesRoman, Font.PLAIN, 24);resultShow.se
20、tBorder(new SoftBevelBorder(BevelBorder.LOWERED);resultShow.setBackground(Color.white);resultShow.setEditable(false);panel = new JPanel();panel.setLayout(new GridLayout(5, 5); / GridLayout布局 5*5panel.add(numberButton1);panel.add(numberButton2);panel.add(numberButton3);panel.add(oprationButton0);pane
21、l.add(清零按钮);panel.add(numberButton4);panel.add(numberButton5);panel.add(numberButton6);panel.add(oprationButton1);panel.add(退格按钮);panel.add(numberButton7);panel.add(numberButton8);panel.add(numberButton9);panel.add(oprationButton2);panel.add(倒数按钮);panel.add(numberButton0);panel.add(正负号按钮);panel.add(
22、小数点按钮);panel.add(oprationButton3);panel.add(等号按钮);panel.add(sqrt);panel.add(立方按钮);panel.add(素数);panel.add(log);panel.add(平方按钮);add(panel, BorderLayout.CENTER);add(resultShow, BorderLayout.NORTH);addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););setVisibl
23、e(true);setBounds(400, 240, 400, 300);setResizable(true);validate();public void actionPerformed(ActionEvent e) if (e.getSource() instanceof NumberButton) / 触发数字NumberButton b = (NumberButton) e.getSource();if (mylist.size() = 0) int number = b.getNumber();mylist.add( + number);/ 查看链表动态变化for (int i =
24、 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println();resultShow.setText( + number);等号 = false;else if (mylist.size() = 1 & 等号 = false) int number = b.getNumber();String num = (String) mylist.getFirst();String s = num.concat( + number);mylist.set(0, s);/ 查看链表动态变化for (int i
25、 = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println();resultShow.setText(s); else if (mylist.size() = 1 & 等号 = true) int number = b.getNumber();mylist.removeFirst();mylist.add( + number);/ 查看链表动态变化for (int i = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );Sy
26、stem.out.println();等号 = false;resultShow.setText( + number); else if (mylist.size() = 2) int number = b.getNumber();mylist.add( + number);/ 查看链表动态变化for (int i = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println();resultShow.setText( + number); else if (mylist.size() = 3)
27、int number = b.getNumber();String num = (String) mylist.getLast();String s = num.concat( + number);mylist.set(2, s);/ 查看链表动态变化for (int i = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println();resultShow.setText(s); else if (e.getSource() instanceof OperationButton) / 触发运算符
28、OperationButton b = (OperationButton) e.getSource();if (mylist.size() = 1) String fuhao = b.get运算符号();mylist.add(fuhao);/ 查看链表动态变化for (int i = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println(); else if (mylist.size() = 2) String fuhao = b.get运算符号();mylist.set(1, fuhao);
29、/ 查看链表动态变化for (int i = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println(); else if (mylist.size() = 3) String fuhao = b.get运算符号();/ 查看链表动态变化for (int i = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println();String number1 = (String) mylist.getFi
30、rst();String number2 = (String) mylist.getLast();String 运算符号 = (String) mylist.get(1);try double n1 = Double.parseDouble(number1);double n2 = Double.parseDouble(number2);double n = 0;if (运算符号.equals(+) n = n1 + n2; else if (运算符号.equals(-) n = n1 - n2; else if (运算符号.equals(*) n = n1 * n2; else if (运算
31、符号.equals(/) n = n1 / n2; else if (运算符号.equals(sqrt) double g = Math.sqrt(n2);String s = String.valueOf(g);mylist.clear();mylist.add( + n);mylist.add(fuhao);/ 查看链表动态变化for (int i = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println();resultShow.setText( + n); catch (Excepti
32、on ee) else if (e.getSource() = 等号按钮) / 等号操作的处理等号 = true;if (mylist.size() = 1 | mylist.size() = 2) String num = (String) mylist.getFirst();for (int i = 0; i mylist.size(); i+) System.out.print(mylist.get(i) + );System.out.println();resultShow.setText( + num); else if (mylist.size() = 3) String numb
33、er1 = (String) mylist.getFirst();String number2 = (String) mylist.getLast();String 运算符号 = (String) mylist.get(1);try double n1 = Double.parseDouble(number1);double n2 = Double.parseDouble(number2);double n = 0;if (运算符号.equals(+) n = n1 + n2; else if (运算符号.equals(-) n = n1 - n2; else if (运算符号.equals(
34、*) n = n1 * n2; else if (运算符号.equals(/) n = n1 / n2;resultShow.setText( + n);mylist.set(0, + n);mylist.removeLast();mylist.removeLast();for (int i = 0; i = 1) num = num.substring(0, num.length() - 1);mylist.set(0, num);resultShow.setText(num); else mylist.removeLast();resultShow.setText(0); else if
35、(mylist.size() = 3) String num = (String) mylist.getLast();if (num.length() = 1) num = num.substring(0, num.length() - 1);mylist.set(2, num);resultShow.setText(num); else mylist.removeLast();resultShow.setText(0);else if (e.getSource() = sqrt)/ sqrt按钮操作的处理if (mylist.size() = 1 | mylist.size() = 2) S
36、tring number1 = (String) mylist.getFirst();try double d = Double.parseDouble(number1);d = Math.sqrt(d);String str = String.valueOf(d);mylist.set(0, str);resultShow.setText(str); catch (Exception ee) else if (mylist.size() = 3) String number2 = (String) mylist.getLast();try double d = Double.parseDou
37、ble(number2);d = Math.sqrt(d);String str = String.valueOf(d);mylist.set(0, str);resultShow.setText(str); catch (Exception ee) else if (e.getSource() = 素数)/ 素数按钮操作的处理int d;int flag = 1;if (mylist.size() = 1 | mylist.size() = 2) String number1 = (String) mylist.getFirst();try try d = Integer.parseInt(number1); catch (java.lang.NumberFormatException nfe) flag = 3;d = 0;for (int i = 2; i d / 2; i+