华南农业大学理学院(面向对象的程序设计)课程设计实验题目:设计一个简单的计算器应用程序简易计算器应用程序的制作问题陈述设计一个计算器应用程序,用于进行简单的加减乘除四则运算。需求分析1设计思想要设计一个计算器应用程序,则计算器必须要进行简单的四则运算功能,并且可以通过人机互动来进行操作。计算器功能主要包括下面几个方面:*计算简单的加减乘除四则运算;*通过鼠标点击输入数字信息;*显示计算结果;*计算器具有返回功能:按AC键不会清除重现存储器的内容;返零功能;2设计划分用JAVA布局管理器来创建图形界面(包括TextField,Button),框架和面板主要分成三大块:框架、显示面板、和数字面板;具体分布如下:3界面布局按一般计算器表面布局,主要以网格的行数和列数在创建布局管器的构造方法中通过参数进行设置,另外边界布局管理器。这两种布局结合最适合计算器,大方美观。主框架主面板显示面板数字面板功能面板相应对象各组件按钮各组件按钮4设计要求和步骤第一步,设计图形界面。采用边界布局管理器把三个面板添加到框架上,再采用网格布局管理器,把标准AWT组件添加到界面上。第二步,根据各按钮需要,标明对象名,便于计算操作。第三步,设定各按钮的特性。第四步,实例化所有按钮、设置其前景色并注册监听器。第五步,运行APPLET*运行小应用*测试各按钮的性能,是否满足问题要求。5、编译环境编码语言:JAVA编译环境:JDK1.5.0_11概要设计1设计方案要求整个程序分三部分,首先是确定程序交互的对象,每个组件要用有意义的标签标明,设计出一个大体的框架,再添加面板,各面板设计分布相互独立,各面板中的按钮分布也相互独立,其各自响应的事件都会由各自的监听动作事件所决定。当Jbutton被按下时会产生一个动作事件(actionevent)。各编码要有适当的注释。2面板设置为了美观和整齐,采用了网格布局管理器进行编排显示面板和按钮排列。为了更好看,还可以添加计算器的背景色。采用边界布局管理器排面板,合理有效。由整体界面可知,显示信息主要设置在顶部(则北面),功能键设置在左面(则西面),数字按钮和运算按钮主要设置在右面(则在东面)。各按扭均有相应的数字或字母作为标签。3主要模块概要(1)主框架模块存储则是以非记忆的模式,通过读取缺省静态数据和允许用户进行动态的受限操作实现的。处理则是通过存储的数据,根据需要对参数进行修改、返回等操作。具体变量声明界面设置大小如下:根据数据运算需要,数据均用双精度储存。publicclassCounterextendsFrame{//声明三个面板的布局GridLayoutgl1,gl2,gl3;Panelp0,p1,p2,p3;JTextFieldtf1;TextFieldtf2;ButtonStringBufferstr;//显示屏所显示的字符串doublex,y;//x和y都是运算数intz;//Z表示单击了那一个运算符.0表示+,1表示-,2表示*,3表示/staticdoublem;//记忆的数字….publicCounter(){//实例化三个面板的布局…..//实例化所有按钮、设置其前景色并注册监听器….//构造监听器…..}setResizable(false);setBackground(Color.pink);setBounds(100,100,320,280);setVisible(true);}(2)驱动模块publicstaticvoidmain(Stringargs[]){newCounter();}(3)事件监听器模块classBtimplementsActionListener{publicvoidactionPerformed(ActionEvente2){try{if()….elseif()…..}}}(4)异常处理模块catch(NumberFormatExceptione){tf1.setText(数字格式异常);}catch(StringIndexOutOfBoundsExceptione){tf1.setText(字符串索引越界);}4事件处理为了响应一个事件,需要建立事件监听器与触发事件的某个组件之间的联系,通过给组件添加一个监听器的方式就可建立监听器与被监听器的组件之间的联系。如程序中各个按钮ButtonListener代表一个动作监听器,通过按数字按钮进行输送信息,使内部储存信息并处理输出相关信息。Jbuttonbutton=newJbutton();Button.addActionListener(newButtonListener());由于为了方便程序需要,并没有采用按钮数组化,每一个按钮都附带一个动作监听器,可以灵活调用。5功能设计本程序的设计功能比较简单,除了加减乘除之外,还有倒数,平方和百分比的计算功能。对于广大中小学生的学习有巨大的帮助。使用人员能快捷简单地进行操作。即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。6对象窗口的设计为了使用者更好的使用本计算器,计算器的窗口化设计跟日常生活中的计算器一样。外观醒目美观。如:调试分析1数据调试分析本设计主要目的就是进行简单的四则运算,因此现以随机数进行测试:输入信息显示结果信息操作从0~9数字数字输入输入1点5小数点插入输入2和-2正负符号插入输入2+5加号、等号输入加法运算输入2*5乘法运算输入10/2除法运算输入16-2减法运算输入16清除操作输入16和1/X倒数运算输入2和%百分数操作输入16和sqrt平方操作输入16和Backspace返回操作2异常处理测试在四则运算过程中,0不能作为除数,当数据不能被除尽时,结果通常保留双精度,当输入数据不当时,也会产生各种异常反应。如:信息输入显示结果异常原因输入16除以0因为0不能作为除数输入运算符没有输入数字直接输运算符输入sqrt和Backspace不是有效的数字信息输入1/X和sqrt运算抛出异常驻3信息处理测试如上是对计算器中的各个部分的测试,现在是对计算器的综合测试:数据输入显示结果45+248*61533.0486/2-4286-4043.04869的开方69.77822009780456的%0.56468的倒数0.002136752136752137通过核对以上数据计算,显示结果较为准确,且精确度也比较高。故符合要求。程序的改进本程序核心在于模拟操作系统,对信息进行统一的中转及处理。在程序功能上,还缺少一连串信息通道,很多运算符号并没具备,很多其他的运算方法运行不了。因此,程序在框架结构上还可进行改进,加入一个信道类,来实现各类间的消息传递。加多其他功能类,更完善计算器的功能选取择。另外,由于水平所限,进行运算操作过程中,本计算器还不能识别运算符的优先级运算,因此本程序还不能直接运算组合运算式,方程式等。程序的外观界面及布局还不尽人意,今后改进中,可增加其他亲各元素,令外观更好看。参考文献1《JAVA程序设计教程》(第五版)[美]JohnLewisWilliamLoftus著,电子工业出版社;2《JAVA项目案例导航》杨小平编著科学出版社3《JAVA编程技巧》宛廷岂著机械工业出版社总结JAVA不仅仅是一门语言,而且已经形成了一门技术。它包括JAVA软件技术、JAVA虚拟机技术、JAVA嵌入技术、JAVA信息综合处理技术和JAVA应用技术等。要学好JAVA,我知道一定要学会编程,如果你不编程序,就永远学不会JAVA。但是,对于如何学习JAVA程序设计语言,如何将JAVA的编程技巧应用到实际生活之中,并循序渐进地进行JAVA程序设计。也是我一直在探索的问题。对于一个程序的开发,最重要就是构思思想和开发的步骤。就像本程序编写过程中,只要确立了其核心思想,和主要步骤后,那编译原代码只是一个按号入座的步骤。尽管中间会遇到很多错误,但只要思路清楚,分块设计,抓住最重要的思路线索,不断的修改,就可以完成。这只是一个小部分。对于一个程序的需求分析往往是最难的,也是最伤头脑的。这也许就是别人所说的预期工作是占了整个设计的一半时间。通过一个学期的学习,也许我并没有真正把握JAVA编程的真谛。不过我也总结了一些经验。就是实践---理解---再实践,从中深入理解JAVA的思想,在不断实践过程中,不断地吸取JAVA编程的知识和技巧。子日:“知之者不如好之者,好之者不如乐之者。”要学好一门语言,我们就必须不断的输入、修改、编译、运行每一个实例程序,每运行一个程序,都可能给我们一些新的启示。编程路上没有孤独者,每一个程序方案的设计都是琳琅满目,没有什么程序是最好的,只有最适合的。也没有什么程序是最完美的,只有更改进的。所以在本程序中,同样也是存在着缺陷,如果要更加完善,还需要很多的改进。这是我感到无力之处。拥有的知识实在太薄弱了,难以解决改进方案。自知自己的无知,在今后的编程路上,我会更加努力学习,提高自己的编程能力和编程技巧,努力攻破编程路上一个一个的难关,尽自己所能,做到最好!附录1模块UML图CounterMain(args:String[]):voidFramesetResizable():voidsetBackground():voidsetBounds():voidsetVisible():voidsetHorizontalAlignment(JtextField.RIGHT)setEnabled():voidsetText():voidCounterG11:GridLayoutG12:GridLayoutG13:GridLayoutP0:PanelP1:PanelP2:PanelP3:PanelTf1:JtextFieldTf2:TextFieldStr:StringBufferBt:ButtonwindowClosing(WindowEvent):voidsetForeground(Color):voidActionListeneractionPerformed(ActionEven):voidgetSource():voidgetText():voidgetActionCommand():voidtoString():double附录2源程序代码//********************************************************////《计算器程序》//作者://班级://日期://*********************************************************importjava.awt.*;importjava.awt.event.*;importjava.lang.*;importjavax.swing.*;publicclassCounterextendsFrame{//声明三个面板的布局GridLayoutgl1,gl2,gl3;Panelp0,p1,p2,p3;JTextFieldtf1;TextFieldtf2;Buttonb0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26;StringBufferstr;//显示屏所显示的字符串doublex,y;//x和y都是运算数intz;//Z表示单击了那一个运算符.0表示+,1表示-,2表示*,3表示/staticdoublem;//记忆的数字publicCounter(){gl1=newGridLayout(1,4,10,0);//实例化三个面板的布局gl2=newGridLayout(4,1,0,15);gl3=newGridLayout(4,5,10,15);tf1=newJTextField(27);//显示屏tf1.setHorizontalAlignment(JTextField.RIGHT);tf1.setEnabled(false);tf1.setText(0)