当前位置:文档之家› JAVA实现计算器课程设计

JAVA实现计算器课程设计

JAVA实现计算器课程设计计算机科学系计应0701班指导老师:刘其昌设计人员:陈秀桃设计日期:2009年11月10日——2009年12月20日计算器的设计目录第一章绪论 ..................................................................... .. (2)1.1 开发环境 ..................................................................... . (2)1.2 基本功能介绍 ..................................................................... ......... 2 第二章系统设计 ..................................................................... (3)2.1 系统流程图 ..................................................................... . (3)2.2 系统功能框图 ..................................................................... (3)2.3 需求分析 ..................................................................... ................ 4 第三章软件设计 ..................................................................... (5)3.1 界面设计 ..................................................................... . (5)3.2 代码设计 ..................................................................................... 5 第四章测试分析 ..................................................................... . (10)3.1 程序运行情况: .................................................................... . (10)3.2 程序异常处理: .................................................................... . (10)3.3 测试用例 ..................................................................... .. (11)3.3.1 加法测试 ..................................................................... . (11)3.3.2 减法测试 ..................................................................... . (11)3.3.3 乘法测试 ..................................................................... . (12)3.3.4 除法测试 ..................................................................... .... 13 第五章结束语 ..................................................................... .............. 14 第六章参考文献 ..................................................................... . (14)第 1 页共 15 页计算器的设计第一章绪论1.1 开发环境本系统是利用Java语言在NetBeans IDE6.5环境下开发的,Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。

面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。

为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。

通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。

使学生通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。

1.2 基本功能介绍本系统实现了一个简单而实用的计算器,通过这个计算器我们可以进行一些基本的运算操作,它可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格,clear表示初始化,在window下直接运行(Jsp2003.bat)即可,界面为灰白对称。

它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性;醒目美观的软件封面。

使用人员能快捷简单地进行操作。

即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

第 2 页共 15 页计算器的设计第二章系统设计 2.1 系统流程图2.2 系统功能框图第 3 页共 15 页计算器的设计说明:在程序中构建类testZ,在其中封装起界面、文本框、按钮、数字、运算符等等成员,再引入成员函数testZ()进行计算器的模拟界面设计;其次设计出事件处理函数,如:运算事件、符号事件、等号事件等等;最后设计运算函数的响应事件。

这样设计的好处在于使得程序的实现思维更清晰,易懂,可读性增强。

反之则不然。

2.3 需求分析首先分析这个说要完成的功能,它的主要任务是完成十六进制、十进制、八进制和二进制之间的相互转化,需要包含负数,但不用考虑小数。

其次,确定接口参数。

根据功能可知,它传递给外部的就是一个转后的数据,而外部除了需要传递给转化前的数据以外,是否还需要其他参数呢,我们都知道,十进制的负数同样可以利用其他进制进行表示,例如二进制,转化方法是:求十进制数的绝对值对应的二进制数,最高位为1;然后对二进制逐位求反,最高位除外;接着最低一位加1,需要进位的话依次进位,最高位除外。

如今的问题就摆在了我们面前,我们如何知道这个数的最高位是第几位呢,也许有人会说,那就用转化后的前面再加上一位,好,即使这样可以成立,那么-1转化后就是11,3转化后也为11,现在如果需要现在的把这个数二进制数再转化为十进制,那么我们如何知道原来的是正数还是负数呢,如果要转化为十六进制,八进制又当如何呢,经过以上的分析发现,还应该有另外一个参数——二进制时的宽度,只有这样才能知道谁是最高位,因此就称这个参数为位宽。

最后,设计类。

根据第二步的分析,因为位宽对每一个方法都是一样,所以可能把它作为类的成员变量,而另外两个参数转化前的值和转化后的值就分别作为输入参数和返回值。

而类对外的接口只有各个转化的方法,因此这几个方法设计为public权限,而其它所有的辅助方法都为private权限。

位宽通过构造函数传递,外部不能直接访问和修改,设置也设置为private权限。

为了减少计算量,所有的转化都以二进制为中介。

例如十六进制到十进制,是十六进制?二进制?十进制。

第 4 页共 15 页计算器的设计第三章软件设计3.1 界面设计这个就是计算器界面,简洁易用,我们可以从中的数字按键和运算符按钮进行相应的数学计算,总共由,,个按钮(,,个数字符+,个运算符号+,个,一个标签、再加一个文本框组成。

小数点+,个“clear”按钮)3.2 代码设计import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Caculator{public static void main(String[] args){JFrame frame = new JFrame("Caculator");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new CaculatorPanel()); frame.pack();frame.setVisible(true);}}class CaculatorPanel extends JPanel{private JLabel namelabel,resultlabel;private JTextField resultField;第 5 页共 15 页计算器的设计private JPanel labelPanel,numberPanel,toolPanel; private JButton s1,s2,s3,s4,s5,s6,s7, s8, s9,s0,p1,p2,t1,t2,t3,t4,clear;private boolean end,add,sub,mul,div;private String str;private double num1,num2;public CaculatorPanel(){namelabel = new JLabel("计算器");resultField = new JTextField(10);ButtonListener listener = new ButtonListener();clear = new JButton("clear");clear.addActionListener(listener);s1 = new JButton("1"); s1.addActionListener(listener); s2 = new JButton("2"); s2.addActionListener(listener); s3 = new JButton("3"); s3.addActionListener(listener); s4 = new JButton("4"); s4.addActionListener(listener); s5 = new JButton("5"); s5.addActionListener(listener); s6 = new JButton("6"); s6.addActionListener(listener); s7 = new JButton("7"); s7.addActionListener(listener); s8 = new JButton("8"); s8.addActionListener(listener); s9 = new JButton("9"); s9.addActionListener(listener); s0 = new JButton("0"); s0.addActionListener(listener); p1 = new JButton("."); p1.addActionListener(listener); p2 = new JButton("="); p2.addActionListener(listener); t1 = new JButton("+"); t1.addActionListener(listener); t2 = new JButton("-"); t2.addActionListener(listener);t3 = new JButton("*"); t3.addActionListener(listener); t4 = new JButton("/"); t4.addActionListener(listener); labelPanel = new JPanel();labelPanel.add(namelabel);labelPanel.add(resultField);labelPanel.add(clear);numberPanel = new JPanel();numberPanel.setLayout(new GridLayout(4,3)); numberPanel.add(s1);numberPanel.add(s2);numberPanel.add(s3);numberPanel.add(s4);numberPanel.add(s5);numberPanel.add(s6);numberPanel.add(s7);第 6 页共 15 页计算器的设计numberPanel.add(s8);numberPanel.add(s9);numberPanel.add(s0);numberPanel.add(p1);numberPanel.add(p2);toolPanel = new JPanel();toolPanel.setLayout(new GridLayout(4,1));toolPanel.add(t1);toolPanel.add(t2);toolPanel.add(t3);toolPanel.add(t4);setPreferredSize(new Dimension(500,200)); setBackground(Color.cyan);add(labelPanel);add(numberPanel);add(toolPanel);}public void num(int i){String s = null;s=String.valueOf(i);if(end){//如果数字输入结束,则将文本框置零,重新输入resultField.setText("0");end=false;}if((resultField.getText()).equals("0")){//如果文本框的内容为零,则覆盖文本框的内容resultField.setText(s);}else{//如果文本框的内容不为零,则在内容后面添加数字str = resultField.getText() + s;resultField.setText(str);}}private class ButtonListener implements ActionListener {public void actionPerformed(ActionEvent e){ //数字事件if(e.getSource()==clear)第 7 页共 15 页计算器的设计resultField.setText("0");else if(e.getSource()==s1)num(1);else if(e.getSource()==s2)num(2);else if(e.getSource()==s3)num(3);else if(e.getSource()==s4)num(4);else if(e.getSource()==s5)num(5);else if(e.getSource()==s6)num(6);else if(e.getSource()==s7) num(7);else if(e.getSource()==s8) num(8);else if(e.getSource()==s9) num(9);else if(e.getSource()==s0) num(0);//符号事件else if(e.getSource()==t1) sign(1);else if(e.getSource()==t2) sign(2);else if(e.getSource()==t3) sign(3);else if(e.getSource()==t4) sign(4);//等号else if(e.getSource()==p1){ str=resultField.getText(); if(str.indexOf(".")<=1){str+=".";resultField.setText(str); }}else if(e.getSource()==p2){num2=Double.parseDouble(resultField.getText()); if(add){num1=num1 + num2;}第 8 页共 15 页计算器的设计else if(sub){num1=num1 - num2;}else if(mul){num1=num1 * num2;}else if(div){num1=num1 / num2;}resultField.setText(String.valueOf(num1));end=true;}}public void sign(int s){if(s==1){add=true;sub=false;mul=false;div=false;}else if(s==2){add=false;sub=true;mul=false;div=false;}else if(s==3){add=false;sub=false;mul=true;div=false;}else if(s==4){add=false;sub=false;mul=false;div=true;}num1=Double.parseDouble(resultField.getText()); end=true;}}}第 9 页共 15 页计算器的设计第四章测试分析4.1 程序运行情况:程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混合四则运算的时候,结果如果不是很大,可以正常显示,但如果结果很大,就可能采用科学记数方式,这样带来了进制转换时的麻烦,需要特殊的处理科学记数里的E ,当结果太大的时候,有可能超出可能表示的最大值,(结果溢出),这个时候就要对结果进行必要的异常处理,我在输出结果的方法内设置if 语句,如果结果大于某一个值就抛出一个This_number_too_big 类型的类,再使用try-catch,捕捉输出结果的方法抛出的异常对象。

相关主题