1、. -编号:?面向对象程序设计JAVA?课程设计(论文)档案题 目:保存计算过程的计算器学 院: 信息学院专 业:姓 名:学 号:班 级:指导教师:职 称:讲师完成日期:2013年12月?面向对象程序设计JAVA?课程设计(论文)题 目:保存计算过程的计算器学 院: 信息学院专 业:姓 名:学 号:班 级:指导教师:职 称:讲师完成日期:2013年12月摘 要当下计算机技术开展迅捷,人们已经不能满足于采用人工进展大量的计算,计算器快速的计算速度和稳定的准确率很好的满足了用户的需要,然而Windows自带的计算器所提供的功能已经无法满足人民日益增长的需求,保存计算过程的计算器更是能够让用户随时随
2、地的查找以前的计算过程,能够提供应用户更加好的体验感受。基于上面的几点因素,保存计算过程的计算器正是在这样的需求之下应运而生的,目的旨在帮助用户快速准确的得到计算结果。本次实验课题使用了JAVA语言,开发平台选用Eclipse这个开源的编译软件,主要原因就是其强大的跨平台能力与超过C+语言MFC所提供的包含框架界面设计功能。由于其是面向对象的语言,所以整个代码看上去尽然有序,更加强健、易读。对于程序本身,由于时间有限只能做出简易的计算功能,旨在实现保存计算过程这一目标,更加多的科学计算器功能可以通过模块的方式进展快速集成,表达出了面向对象的模块化设计的特性。【关键字】保存计算过程,计算器,JA
3、VA语言,Eclipse,模块化AbstractWith the rapid development of puter technology nowadays, people are not satisfied with the manually way that conduct a large number of calculations any more. puters, which have the high speed of the calculation and stable accuracy, meet users needs well. However, the function
4、s of Windows own calculator have been unable to meet the growing needs of people. But the calculator saving the calculation procedure enables users to search the procedure at any time and no matter where they are and it provides the users with a better and totally new experience.Taking all the facts
5、 above into consideration, the calculator that saving the calculation procedure works, in such a condition. It aims at helping the users to get the calculation results as quickly as possible. For this experimental subject, JAVA language has been used.Also used Eclipse software. The main reason of it
6、 is that it has quite a powerful ability of cross platform. Besides, the function of framework interface designation surpasses the C+ MFCs. Since it is an object-oriented language, the whole codes seem more orderly, stronger and easier to read.As for the process itself, only the simple calculations
7、can be made due to the limited time. Nevertheless, to make the calculation procedure saved, more and more scientific calculator functions can be quickly integrated through the way of module which reflects the features of object-oriented modular design.【Key words】Save putational process;Calculator;JA
8、VA language;Eclipse;Modularization目 录前言11 需求分析21.1 设计目的21.2 程序需求分析21.3 系统目标21.4 主要设计思想31.5开发环境配置32 程序设计42.1 概要设计42.2 详细设计72.3 设计小结93 代码编写103.1 导入包103.2 各模块代码104 测试与调试144.1 主界面测试144.2 计算操作144.3 清零操作154.4保存操作154.5去除操作165 软件发布17总结与体会18参考文献19致20附录21. . word.zl-. -前言在日常生活中人们总是难以防止的要进展一些运算,当运算比拟复杂时没有一个计算器
9、就会显得很麻烦。为了解决这种日常生活中的困难特意设计了这个计算器小程序。该程序不仅可以进展整数的加、减、乘、除等简单运算,也可以进展浮点数的加、减、乘、除等运算。除此之外还可以对已计算的结果和计算步骤进展复制、粘贴等储存功能,同时具有清屏按键,让显示更加美观。人们应用它可以解决日常生活中的一些运算问题,比方做买卖时,进展交易的过程中就可以利用该计算器进展数量、价格以及总金额的计算与保存。学生也可以利用该计算器进展数学运算,并且对计算过程进展保存,方便日后检验跟进。整个计算器的功能简单易懂,界面清新简洁,并且在日后再开发时可以方便的进展功能的添加与更改。最后,该程序使用JAVA作为平台开发,充分
10、表达了其跨平台的优势,可以在Windows、Linux、MAC OS等系统,还有各类手持便携系统中使用,大大提升了应用围,减小了本钱。1 需求分析1.1 设计目的1、掌握JAVA语言编程的根底知识并能熟练运用。2、熟悉类声明与对象的使用。3、理解委托时间处理模型。4、了解JAVA语言的图形用户界面JAVA SWING的设计知识。5、运用Eclipse编写简单计算器程序,并实现其功能。6、掌握Windows环境下JDK的安装与配置。7、掌握JAVA程序的运行方法与Eclipse开发软件的使用方法。1.2 程序需求分析Windows 2000/XP系统中的“计算器是一个方便实用的计算工具,但没有提
11、供显示计算过程和保存计算过程的功能。该计算器将参加这两个功能,其余功能与自带计算器所遵循的计算规那么一样。1、单击“计算器上的数字按钮可以设置参与计算的运算数。2、单击“计算器上的运算符按钮可以选择运算符号。3、单击“计算器上的函数按钮可以计算出相应的函数值。4、单击“计算器上的“=按钮显示计算结果。5、在一个文本框中显示当前的计算过程,在一个文本区中显示以往的计算过程。6、单击“保存按钮可以将文本区中的全部计算过程保存到文件;单击“复制按钮可以将文本区中选中的文本复制到剪贴板;单击“去除按钮可以去除文本区中的全部容。通过使用所学的SWT构件出计算器的界面,包括添加数字按钮、运算符按钮、文本框
12、、菜单栏、功能按钮等。然后通过对界面上面按钮或者菜单栏容的监听,使其在点击按钮的时候产生相应的效果。1.3 系统目标一个简单的计算器程序,用户可以利用鼠标点击数值或操作符按键完成计算的输入,计算的结果将被显示在窗口右侧的文本框中。通过右侧底部的保存按钮,可以完成对历史步骤的保存,可以导出成文本格式。点击去除按钮,可以将文本框清空。1.4主要设计思想对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,23个按钮,上部的文本显示区和文本框下部的3个核心功能按钮。文本框放置在右侧,然后0到9以及+,-,*,/,Sin的按钮放置到一个面板中,添加到整体布局中,界面设计完成。布局设计好后再添
13、加按钮事件,对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮那么直接把数字按钮的数值设置到文本框中,否那么那么应把文本框中的容加上你所点击按钮的数值设置到文本框中。在进展加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除。程序的运算功能完毕后,输出到文本显示区,在右侧文本框中增加一条记录。通过文本框底部的保存文本框中的计算历史,或者复制文本框中的容到剪贴板待用。如果不需要保存,通过点击去除按钮,完成对文本框的初始化,整个程序循环完毕。1.5
14、开发环境配置通过Sun公司官网下载对应版本JDK后,双击进展默认设置安装。完毕后,必须设置Windows下的Java运行的环境变量,步骤如下:1) 在系统变量中,新建JAVA_HOME名称的变量,填入JDK安装的目录即可;2) 新建PATH名称的变量,变量值为%JAVA_HOME%bin;%JAVA_HOME%jrebin;3) 新建CLASSPATH名称的变量,变量值为.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar。完成后,通过命令提示符CMD输入“javac和“java version进展验证,以确定JDK和环境变量正确设置。2 程序设计2.1
15、 概要设计 功能框图根据所构造好的计算器的各个功能,设计出计算器运行的功能框图如图2-1所示。图2-1 计算器运行的功能框图设计好的程序框图中,包含有如下模块:单击数字按钮设置计算的运算数、单击运算符按钮选择运算符、单击函数按钮计算相应函数值、单击等号显示计算结果、在一个文本框中显示当前的计算过程、在一个文本区中显示以往的计算过程、单击保存按钮可以将文本区中的全部计算过程保存到文件、单击复制按钮可以将文本区中选中的文本复制到剪贴板、单击去除按钮可以去除文本区中的全部容。各个功能模块相互配合、调用,组成了一个可以保存计算过程的计算器的根本功能。2.1.2类组合关系图根据程序框图,设计出包含如下类
16、:1、主类:CalculatorWindow2、功能类:NumberButton、OperationButton、HandleDigit、HandleDot、HandleOperation、HandlePOrN、HandleEquality、HandleSin、HandleBack、HandleClear通过上述11个类之间的组合关系,设计出的类之间的组合关系图如图2-2所示。图2-2 类之间的组合关系图计算器除了上述11个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如utton,JTextField,JTextArea,LinkedList等。这些也是构成程序框架必不可
17、少的一些类,通过调用这些类来进展计算器按钮、文本区、文本框等等的构建。以上各类的详细说明将会在后文中出现,这一步主要完成了程序框架架构的设计,即模块化的设计,为各项功能的实现打下根底。2.1.3 程序流程图根据之前对各功能模块与各个类组合关系的设计,设计出程序运行流程图如图2-3所示。图2-3 程序运行流程图通过分析需求,该计算器的程序流程如图中,先各变量初始化,之后根据不同按钮监听返回的容来选择使用不同功能运行,最后获取到等于按钮时判断是否输出结果,或者去除文本区容之后初始化变量,完毕整个循环。经过该步骤对程序运行流程的设计,整个程序由立项,功能模块确定再到功能类关系组合等,这一系列设计共同
18、组成了程序先期的工作方向,以下开场便是进展代码实现阶段,对各个设定好的功能类进展代码编写,以实现整个保存计算过程的计算器的核心功能。2.2 详细设计各类的功能1、主类CalculatorWindow类负责创立计算器的主窗口,该类包含有main方法。计算器从该类开场执行,其中包含14种类型的对象,分别是:NumberButton、OperationButton、HandleDigit、HandleDot、HandleOperation、HandlePOrN、HandleEquality、HandleSin、HandleBack和HandleClear对象。CalculatorWindow类是ja
19、vax.swing包中JFrame的一个子类,并实现了ActionListener接口。标明该类的主要成员变量和方法的UML图如图2-4所示。图2-4 CalculatorWindow类的UML图CalculatorWindow类的UML图中,包含成员变量:numberButton,operationButton,小数点操作,正负号操作,退格操作,等号操作,清零操作,sin,saveButton,copyButton,clearButton,resultShow,showputerProcess,saceputerProcess,list,handleDigit,HandleOperation
20、,HandleBack,HandleClear,handleEquality,handleDot,handlePOrN,HandleSin。包含方法:actionPeformed(),CalculatorWindow(),main()。2、功能类1NumberButton类该类创立的对象是主类CalculatorWindow窗口中的一个“数字按钮。NumberButton类有一个int类型的成员number,标明所创立的按钮所含有的数字。该类所创立的10个按钮被添加到CalculatorWindow窗口中。2OperationButton类该类创立的对象是主类CalculatorWindow窗
21、口中的一个“运算符按钮。OperationButton类有一个String类的成员operateSign,用于标明所创立的按钮所含有的运算符号。该类所创立的4个按钮被添加到CalculatorWindow窗口中。3HandleDigit类该类创立的对象负责处理ActionEvent事件。当用户单击“数字按钮时,该类所创立的对象负责处理和数字有关的计算过程。4HandleOperation类该类创立的对象负责处理ActionEvent事件。当用户单击“运算符按钮时,该类所创立的对象负责处理和运算符有关的计算过程。5HandleDot类该类创立的对象负责处理ActionEvent事件。当用户单击“
22、.按钮时,该类所创立的对象负责处理小数点。6HandlePOrN类该类创立的对象负责处理ActionEvent事件。当用户单击“+/-按钮时,该类所创立的对象负责处理数字的正负转换。7HandleEquality类该类创立的对象负责处理ActionEvent事件。当用户单击“=按钮时,该类所创立的对象计算有关数据。8HandleSin类该类创立的对象负责处理ActionEvent事件。当用户单击Sin按钮时,该类所创立的对象负责计算正弦三角函数的值。9HandleBack类该类创立的对象负责处理ActionEvent事件。当用户单击“退格按钮时,该类所创立的对象负责进展退格操作。10Handl
23、eClear类该类创立的对象负责处理ActionEvent事件。当用户成功单击C按钮时,该类所创立的对象负责去除有关的计算结果。2.3 设计小结根据上述概要设计和详细设计得出了一份完整的程序设计清单,包括将要实现的功能类、类之间的组合关系和程序的运行流程,通过这些清单,可以有条理,分层次、模块的进展代码的编写,让自己的编程思路更加清晰,达成了程序强健性、易读性等目标。在程序的设计阶段,碰到很多棘手的问题,由于第一次进展Java程序的编写,对其提供的根底类不熟悉,导致在构建程序框架的时候出现诸多问题,在不断的查书、请教教师的过程中,终于使所有问题迎刃而解,让自己更加透彻的了解了Java界面架构类
24、的使用方法和技巧,为之后的代码编写打下了坚实根底。3 代码编写3.1 导入包3.2 各模块代码 HandleBack类HandleBack类实现了ActionListener接口,创立的对象handleBack是CalculatorWindow窗口的成员之一,该类实现了退格算法。使用到如下代码进展退格判定和操作:if(num.length()=1)num=num.substring(0,num.length()-1);list.set(0,num); resultShow.setText(num);showputerProcess.setText(+num);elselist.removeLa
25、st();resultShow.setText(0);showputerProcess.setText(0);该类中包含了成员变量:list、resultShow、showputerProcess;包含方法:构造方法HandleBack(LinkedList,JtextField,JtextField)、HandleBack类实现的ActionListener接口中的方法。3.2.2 HandleClear类HandleClear类实现了ActionListener接口,创立的对象handleBack是CalculatorWindow窗口的成员之一,该类实现了清零算法。使用到如下代码进展清零:
26、resultShow.setText(0);list.clear();showputerProcess.setText(null);该类中包含了成员变量:list、resultShow、showputerProcess;包含方法:构造方法HandleClear(LinkedList,JtextField,JtextField)、HandleClear类实现的ActionListener接口中的方法。当用户点击“清零操作按钮时就会触发ActionEvent事件,执行actionPerformed(ActionEvent)方法,将resultShow中显示的数字设置为0,并去除showputerP
27、rocess中显示的计算过程。3.2.3 HandleDot类HandleDot类实现了ActionListener接口,创立的对象handleDot是CalculatorWindow窗口的成员之一,该类实现了处理小数点算法。使用到如下代码进展小数点的判定和处理:String dot=e.getActionmand();String num=list.getFirst();String s=null;if(num.indexOf(dot)=-1)s=num.concat(dot); list.set(0,s); elses=num; list.set(0,s);resultShow.setTe
28、xt(s);showputerProcess.setText(+list.get(0);3.2.4 HandleDigit类HandleDigit类实现了ActionListener接口,创立的对象handleDigit是CalculatorWindow窗口的成员之一,该类实现了获取数字的算法。通过此语句获得点击的数字:NumberButton b=(NumberButton)e.getSource();传递、显示点击的数字:int number=b.getNumber();list.add(+number); resultShow.setText(+number); showputerPro
29、cess.setText(+list.get(0);3.2.5 HandleOperation类HandleOperation类实现了ActionListener接口,创立的对象handleOperation是CalculatorWindow窗口的成员之一,该类实现了获取符号的算法。通过此语句获得点击的符号:OperationButton b=(OperationButton)e.getSource();通过如下代码进展加减乘除的判断和运算:if(运算符号.equals(+)result=n1+n2;else if(运算符号.equals(-)result=n1-n2;else if(运算符号
30、.equals(*)result=n1*n2;else if(运算符号.equals(/)result=n1/n2;该类中包含了成员变量:list、resultShow、showputerProcess;包含方法:构造方法HandleOperation(LinkedList,JtextField,JtextField)、HandleOperation类实现的ActionListener接口中的方法。当用户点击运算符按钮时就会触发ActionEvent事件,执行actionPerformed(ActionEvent)方法,负责处理list链表中存储的运算符和必要的计算。3.2.6 HandleS
31、in类HandleSin类实现了ActionListener接口,创立的对象handleSin是CalculatorWindow窗口的成员之一,该类实现了正弦函数值算法。当list.size()=1|list.size()=2时,需要算法:double x=Double.parseDouble(numOne);double result=Math.sin(x);String str=String.valueOf(result);list.set(0,str);resultShow.setText(str);list.removeLast(); /移掉运算符号 当list.size()=3)时,
32、需要算法:String numTwo=list.getLast();double x=Double.parseDouble(numTwo);double result=Math.sin(x);String str=String.valueOf(result);list.set(0,str);resultShow.setText(str);list.removeLast(); /移掉第2个运算数 list.removeLast(); /移掉运算符号 该类中包含了成员变量:list、resultShow、showputerProcess;包含方法:构造方法HandleSin(LinkedList,
33、JtextField,JtextField)、HandleSin类实现的ActionListener接口中的方法。当用户点击“Sin按钮时就会触发ActionEvent事件,执行actionPerformed(ActionEvent)方法,将输入的数字的正弦函数值计算出来。注:由于主类CalculatorWindow中为窗口的创立代码,负责调用各个功能类,实现main()方法等,所以重在对各模块代码的分析,主类的代码见附录。4测试与调试4.1 主界面测试运行CalculatorWindow类后,主界面如图4-1所示。图4-1 主界面图图中,主界面包含:程序名称“计算器;左侧界面:10个数字按钮
34、,运算符按钮,清零、退格按钮,正负数变换按钮,小数点按钮,正弦函数运算按钮和等于按钮;右侧界面:保存、复制、去除按钮和一个文本框。4.2计算操作使用计算器进展加、减、乘、除操作和正弦计算操作,操作后的界面如图4-2所示。图4-2 计算操作图4.3 清零操作对文本区进展清零操作,将文本区重置为0,清零操作如图4-3所示。图4-3 清零操作图4.4保存操作将文本框中保存的历史计算过程以文本格式“lsj.txt进展保存,保存操作如图4-4所示。图4-4 保存操作图4.5去除操作将所有保存在文本框中的历史计算过程去除,进展新的计算任务,去除操作前如图4-5所示,去除操作成功如图4-6所示。图4-5 去
35、除操作前图4-6 去除操作成功5 软件发布软件的发布可以使用jar.exe命令制作JAR文件来发布编写的软件。1首先用文本编辑器,如Windows下的“记事本,编写一个清单文件:mymoon.mfManifestVersion: 1.0MainClass: CalculatorWindowCreatedBy: 1.2(Sun Microsystems Inc.)将mymoon.mf保存到与程序所用的字节码文件保存在一样的目录中。2生成JAR文件D:*jar cfm Calculator.jar mymoon.mf *.class其中,参数c表示要生成一个新的JAR文件,f表示要生成的JAR文件
36、的名字,m表示清单文件的名字。现在就可以将Calculator.jar复制到任何一个安装了Java运行环境的计算机上,用户双击该文件即可运行该软件。总结与体会通过这次实习让我更加深刻的理解了书本上的知识,得到了一个运用JAVA语言编写程序的实践时机,将课本上的知识变为实践。通过这两个周的实习也大大的锻炼了我分析解决问题的能力,在建立代码的初期,我觉得程序框架的建立好似不难,但是越往后做越发现,越做越难,因为在往后做的过程中,发现局部类的功能无常实现,因此浪费了很多的时间。令人遗憾的是在这次实践中,我所做的保存计算过程的计算器并没有完成预期的功能,本来是想着挺简单的,但是实践起来真的很难,再加上
37、时间紧迫,所以就只实现了一些简单的功能,并没有参加科学计算等功能。虽然这次实践圆满完毕了,但我仍然不能放松前进的脚步,在程序的编写过程中,自己对JAVA这门面向对象的语言产生了浓厚的兴趣。这门独特的语言并不像C语言那样需要为指针地址烦恼,只是巧用搭积木的方法,便让一个带图形界面的小程序运行起来,很惊叹于JAVA语言的作者的无限的创造能力,带给了我们后人很多便捷,也带来了许许多多优秀的程序。另外,此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获是在完成过程中培养的解决问题的能力。在做课程
38、设计时必然会遇到困难,会有不会的东西,重要的不是现在会不会,而是遇到问题知道如何找到解决的途径。还使我对所学知识能够融会贯穿,又不断丰富了新知识。Java计算器设计使得我对所学的专业课有了更为深刻的认识,使得知识得到了稳固和提高。参考文献1耿祥义,跃平.Java程序设计第二版M.:清华大学,2008,23-49.2耿祥义.Java 2实用教程第三版M.:清华大学,2006.3吕凤翥.Java语言程序设计第二版M.:清华大学,2010.4升华.JAVA从入门到实践M.:清华大学,2008.5平.软件设计师教程M.:清华大学,2004.6绕一梅.Java语言程序设计M.:人民邮电大学,2010.致
39、首先要感曾经帮助过我的教师的悉心指导,很多专业上的疑惑都是在你帮助下解开的,然后还要感那些提供无私帮助的同学、朋友,没有你们我的程序也不会像今天一样强健!我还要感那些书籍的编著者,您们就像一双双的手在我最困难的时候帮助我渡过难关,还有那些在网络上留下资料帮助我的好心人,萍水相逢却不吝赐教让我很感动。秉承着他们的精神,我会在以后的路途中,也帮助那些同我曾经一样迷茫的朋友,为他们提供自己所学的知识,希望他们像我一样从中得到灵感,为JAVA程序的设计与开展做出更多奉献,在更多领域造福群众,为国家的信息科技开展注入新鲜血液。附录CalculatorWindow主类代码如下:public class C
40、alculatorWindow extends JFrame implements ActionListener NumberButton numberButton; OperationButton operationButton; utton 小数点操作,正负号操作,退格操作,等号操作,清零操作,sin; JTextField resultShow; /显示计算结果 JTextField showputerProcess; /显示当前计算过程 JTextArea saveputerProcess; /显示计算步骤 utton saveButton,copyButton,clearButton
41、; LinkedList list; /链表用来存放第一个运算数、运算符号和第二个运算数 HandleDigit handleDigit; /负责处理ActionEvent事件 HandleOperation handleOperation ; HandleBack handleBack; HandleClear handleClear; HandleEquality handleEquality; HandleDot handleDot; HandlePOrN handlePOrN; HandleSin handleSin; public CalculatorWindow() setTitl
42、e(计算器); JPanel panelLeft,panelRight; list=new LinkedList(); resultShow=new JTextField(10); resultShow.setHorizontalAlignment(JTextField.RIGHT); resultShow.setForeground(Color.blue); resultShow.setFont(new Font(TimesRoman,Font.BOLD,16); resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED); r
43、esultShow.setEditable(false); resultShow.setBackground(Color.white); showputerProcess=new JTextField(); showputerProcess.setHorizontalAlignment(JTextField.CENTER); showputerProcess.setFont(new Font(Arial,Font.BOLD,16); showputerProcess.setBackground(Color.cyan); showputerProcess.setEditable(false);
44、saveputerProcess=new JTextArea(); saveputerProcess.setEditable(false); saveputerProcess.setFont(new Font(宋体,Font.PLAIN,16); numberButton=new NumberButton10; handleDigit=new HandleDigit(list,resultShow,showputerProcess); for(int i=0;i=9;i+) numberButtoni=new NumberButton(i); numberButtoni.setFont(new Font(Arial,Font.BOLD,20); numberButtoni.addActionListener(handleDigit); operationButton=new OperationButton4; handleOperation=new HandleOperation(list,resultShow, showp