收藏 分销(赏)

面向对象的程序设计-设计一个简单的计算器应用程序.doc

上传人:xrp****65 文档编号:7417173 上传时间:2025-01-03 格式:DOC 页数:19 大小:182.50KB
下载 相关 举报
面向对象的程序设计-设计一个简单的计算器应用程序.doc_第1页
第1页 / 共19页
面向对象的程序设计-设计一个简单的计算器应用程序.doc_第2页
第2页 / 共19页
面向对象的程序设计-设计一个简单的计算器应用程序.doc_第3页
第3页 / 共19页
面向对象的程序设计-设计一个简单的计算器应用程序.doc_第4页
第4页 / 共19页
面向对象的程序设计-设计一个简单的计算器应用程序.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

1、华南农业大学理学院(面向对象的程序设计)课程设计实验题目: 设计一个简单的计算器应用程序 简易计算器应用程序的制作 问题陈述 设计一个计算器应用程序,用于进行简单的加减乘除四则运算。需求分析1设计思想要设计一个计算器应用程序,则计算器必须要进行简单的四则运算功能,并且可以通过人机互动来进行操作。计算器功能主要包括下面几个方面:*计算简单的加减乘除四则运算;*通过鼠标点击输入数字信息;*显示计算结果;*计算器具有返回功能:按AC键不会清除重现存储器的内容;返零功能;2设计划分用JAVA布局管理器来创建图形界面(包括TextField,Button),框架和面板主要分成三大块:框架、显示面板、和数

2、字面板;具体分布如下: 主框架主面板显示面板数字面板功能面板相应对象各组件按钮各组件按钮3界面布局按一般计算器表面布局,主要以网格的行数和列数在创建布局管器的构造方法中通过参数进行设置,另外边界布局管理器。这两种布局结合最适合计算器,大方美观。4设计要求和步骤第一步,设计图形界面。采用边界布局管理器把三个面板添加到框架上,再采用网格布局管理器,把标准AWT组件添加到界面上。第二步,根据各按钮需要,标明对象名,便于计算操作。第三步,设定各按钮的特性。第四步,实例化所有按钮、设置其前景色并注册监听器。第五步,运行APPLET*运行小应用*测试各按钮的性能,是否满足问题要求。 5、编译环境 编码语言

3、:JAVA编译环境:JDK 1.5.0_11概要设计1设计方案要求整个程序分三部分,首先是确定程序交互的对象,每个组件要用有意义的标签标明,设计出一个大体的框架,再添加面板,各面板设计分布相互独立,各面板中的按钮分布也相互独立,其各自响应的事件都会由各自的监听动作事件所决定。当Jbutton被按下时会产生一个动作事件(action event)。各编码要有适当的注释。2面板设置 为了美观和整齐,采用了网格布局管理器进行编排显示面板和按钮排列。为了更好看,还可以添加计算器的背景色。采用边界布局管理器排面板,合理有效。由整体界面可知,显示信息主要设置在顶部(则北面),功能键设置在左面(则西面),数

4、字按钮和运算按钮主要设置在右面(则在东面)。各按扭均有相应的数字或字母作为标签。3主要模块概要(1) 主框架模块存储则是以非记忆的模式,通过读取缺省静态数据和允许用户进行动态的受限操作实现的。处理则是通过存储的数据,根据需要对参数进行修改、返回等操作。具体变量声明界面设置大小如下: 根据数据运算需要,数据均用双精度储存。 public class Counter extends Frame /声明三个面板的布局 GridLayout gl1,gl2,gl3; Panel p0,p1,p2,p3; JTextField tf1; TextField tf2; Button StringBuffe

5、r str;/显示屏所显示的字符串 double x,y;/x和y都是运算数 int z;/Z表示单击了那一个运算符.0表示+,1表示-,2表示*,3表示/ static double m;/记忆的数字. public Counter() /实例化三个面板的布局./实例化所有按钮、设置其前景色并注册监听器 ./构造监听器.setResizable(false);setBackground(Color.pink); setBounds(100,100,320,280); setVisible(true); (2) 驱动模块 public static void main(String args)

6、 new Counter(); (3) 事件监听器模块 class Bt implements ActionListener public void actionPerformed(ActionEvent e2) try if ( ) . else if ( ) . (4) 异常处理模块 catch(NumberFormatException e) tf1.setText(数字格式异常); catch(StringIndexOutOfBoundsException e) tf1.setText(字符串索引越界); 4事件处理 为了响应一个事件,需要建立事件监听器与触发事件的某个组件之间的联系,

7、通过给组件添加一个监听器的方式就可建立监听器与被监听器的组件之间的联系。如程序中各个按钮ButtonListener代表一个动作监听器,通过按数字按钮进行输送信息,使内部储存信息并处理输出相关信息。Jbutton button = new Jbutton( );Button.addActionListener(new ButtonListener();由于为了方便程序需要,并没有采用按钮数组化,每一个按钮都附带一个动作监听器,可以灵活调用。5功能设计本程序的设计功能比较简单,除了加减乘除之外,还有倒数,平方和百分比的计算功能。对于广大中小学生的学习有巨大的帮助。使用人员能快捷简单地进行操作。即

8、时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。6对象窗口的设计 为了使用者更好的使用本计算器,计算器的窗口化设计跟日常生活中的计算器一样。外观醒目美观。如:调试分析1数据调试分析 本设计主要目的就是进行简单的四则运算,因此现以随机数进行测试: 输入信息显示结果信息操作从09数字数字输入输入1点5小数点插入输入2和-2 正负符号插入输入2+5 加号、等号输入加法运算输入2*5 乘法运算输入10/2 除法运算输入16-2 减法运算输入16 清除操作输入16和1/X 倒数运算输入2和% 百分数操作输入16和sqrt 平方操作输入16和Backspace 返回操作2 异常处理测试

9、 在四则运算过程中,0不能作为除数,当数据不能被除尽时,结果通常保留双精度,当输入数据不当时,也会产生各种异常反应。如:信息输入显示结果异常原因输入16除以0因为0不能作为除数输入运算符没有输入数字直接输运算符输入sqrt和Backspace不是有效的数字信息输入1/X和sqrt运算抛出异常驻 3信息处理测试 如上是对计算器中的各个部分的测试,现在是对计算器的综合测试:数据输入显示结果45+248*615330486/2-4286-4043.04869的开方69.77822009780456的%0.56468的倒数0.002136752136752137通过核对以上数据计算,显示结果较为准确,

10、且精确度也比较高。故符合要求。程序的改进本程序核心在于模拟操作系统,对信息进行统一的中转及处理。在程序功能上,还缺少一连串信息通道,很多运算符号并没具备,很多其他的运算方法运行不了。因此,程序在框架结构上还可进行改进,加入一个信道类,来实现各类间的消息传递。加多其他功能类,更完善计算器的功能选取择。另外,由于水平所限,进行运算操作过程中,本计算器还不能识别运算符的优先级运算,因此本程序还不能直接运算组合运算式,方程式等。程序的外观界面及布局还不尽人意,今后改进中,可增加其他亲各元素,令外观更好看。参考文献1JAVA程序设计教程(第五版)美 JohnLewis WilliamLoftus 著,电

11、子工业出版社;2JAVA项目案例导航 杨小平 编著 科学出版社3JAVA编程技巧 宛廷岂著 机械工业出版社总结 JAVA不仅仅是一门语言,而且已经形成了一门技术。它包括JAVA 软件技术、JAVA虚拟机技术、JAVA嵌入技术、JAVA信息综合处理技术和JAVA应用技术等。要学好JAVA,我知道一定要学会编程,如果你不编程序,就永远学不会JAVA。 但是,对于如何学习JAVA程序设计语言,如何将JAVA的编程技巧应用到实际生活之中,并循序渐进地进行JAVA程序设计。也是我一直在探索的问题。对于一个程序的开发,最重要就是构思思想和开发的步骤。就像本程序编写过程中,只要确立了其核心思想,和主要步骤后

12、,那编译原代码只是一个按号入座的步骤。尽管中间会遇到很多错误,但只要思路清楚,分块设计,抓住最重要的思路线索,不断的修改,就可以完成。这只是一个小部分。对于一个程序的需求分析往往是最难的,也是最伤头脑的。这也许就是别人所说的预期工作是占了整个设计的一半时间。 通过一个学期的学习,也许我并没有真正把握JAVA编程的真谛。不过我也总结了一些经验。就是实践-理解-再实践,从中深入理解JAVA的思想,在不断实践过程中,不断地吸取JAVA编程的知识和技巧。子日:“知之者不如好之者,好之者不如乐之者。”要学好一门语言,我们就必须不断的输入、修改、编译、运行每一个实例程序,每运行一个程序,都可能给我们一些新

13、的启示。 编程路上没有孤独者,每一个程序方案的设计都是琳琅满目,没有什么程序是最好的,只有最适合的。也没有什么程序是最完美的,只有更改进的。所以在本程序中,同样也是存在着缺陷,如果要更加完善,还需要很多的改进。这是我感到无力之处。拥有的知识实在太薄弱了,难以解决改进方案。 自知自己的无知,在今后的编程路上,我会更加努力学习,提高自己的编程能力和编程技巧,努力攻破编程路上一个一个的难关,尽自己所能,做到最好!附录1模块UML图CounterMain(args:String):void FramesetResizable(): voidsetBackground():voidsetBounds()

14、:voidsetVisible():voidsetHorizontalAlignment(JtextField.RIGHT)setEnabled():voidsetText():void CounterG11: GridLayoutG12: GridLayoutG13: GridLayoutP0: PanelP1: PanelP2: PanelP3: PanelTf1: JtextFieldTf2: TextFieldStr: StringBufferBt: ButtonwindowClosing(WindowEvent):voidsetForeground(Color):void Actio

15、nListeneractionPerformed(ActionEven):voidgetSource():voidgetText():voidgetActionCommand():voidtoString():double附录2源程序代码/*/计算器程序/ 作者: / 班级:/ 日期:/*import java.awt.*; import java.awt.event.*; import java.lang.*; import javax.swing.*; public class Counter extends Frame /声明三个面板的布局 GridLayout gl1,gl2,gl3;

16、 Panel p0,p1,p2,p3; JTextField tf1; TextField tf2; Button b0,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; StringBuffer str;/显示屏所显示的字符串 double x,y;/x和y都是运算数 int z;/Z表示单击了那一个运算符.0表示+,1表示-,2表示*,3表示/ static double m;/记忆的数字 public Counter() gl1=new GridL

17、ayout(1,4,10,0);/实例化三个面板的布局 gl2=new GridLayout(4,1,0,15); gl3=new GridLayout(4,5,10,15); tf1=new JTextField(27);/显示屏 tf1.setHorizontalAlignment(JTextField.RIGHT); tf1.setEnabled(false); tf1.setText(0); tf2=new TextField(10);/显示记忆的索引值 tf2.setEditable(false); /实例化所有按钮、设置其前景色并注册监听器 b0=new Button(Backsp

18、ace); b0.setForeground(Color.red); b0.addActionListener(new Bt(); b1=new Button(CE); b1.setForeground(Color.red); b1.addActionListener(new Bt(); b2=new Button(C); b2.setForeground(Color.red); b2.addActionListener(new Bt(); b7=new Button(7); b7.setForeground(Color.blue); b7.addActionListener(new Bt()

19、; b8=new Button(8); b8.setForeground(Color.blue); b8.addActionListener(new Bt(); b9=new Button(9); b9.setForeground(Color.blue); b9.addActionListener(new Bt(); b10=new Button(/); b10.setForeground(Color.red); b10.addActionListener(new Bt(); b11=new Button(sqrt); b11.setForeground(Color.blue); b11.ad

20、dActionListener(new Bt(); b12=new Button(4); b12.setForeground(Color.blue); b12.addActionListener(new Bt(); b13=new Button(5); b13.setForeground(Color.blue); b13.addActionListener(new Bt(); b14=new Button(6); b14.setForeground(Color.blue); b14.addActionListener(new Bt(); b15=new Button(*); b15.setFo

21、reground(Color.red); b15.addActionListener(new Bt(); b16=new Button(%); b16.setForeground(Color.blue); b16.addActionListener(new Bt(); b17=new Button(1); b17.setForeground(Color.blue); b17.addActionListener(new Bt(); b18=new Button(2); b18.setForeground(Color.blue); b18.addActionListener(new Bt(); b

22、19=new Button(3); b19.setForeground(Color.blue); b19.addActionListener(new Bt(); b20=new Button(-); b20.setForeground(Color.red); b20.addActionListener(new Bt(); b21=new Button(1/X); b21.setForeground(Color.blue); b21.addActionListener(new Bt(); b22=new Button(0); b22.setForeground(Color.blue); b22.

23、addActionListener(new Bt(); b23=new Button(+/-); b23.setForeground(Color.blue); b23.addActionListener(new Bt(); b24=new Button(.); b24.setForeground(Color.blue); b24.addActionListener(new Bt(); b25=new Button(+); b25.setForeground(Color.red); b25.addActionListener(new Bt(); b26=new Button(=); b26.se

24、tForeground(Color.red); b26.addActionListener(new Bt(); /实例化四个面板 p0=new Panel(); p1=new Panel(); p3=new Panel(); /创建一个空字符串缓冲区 str=new StringBuffer(计算器); /添加面板p0中的组件和设置其在框架中的位置和大小 p0.add(tf1); p0.setBounds(10,25,300,40); /添加面板p1中的组件和设置其在框架中的位置和大小 p1.setLayout(gl1); p1.add(tf2); p1.add(b0); p1.add(b1)

25、; p1.add(b2); p1.setBounds(10,65,300,25); /添加面板p2中的组件并设置其的框架中的位置和大小 /*p2.setLayout(gl2); p2.add(b3); p2.add(b4); p2.add(b5); p2.add(b6); p2.setBounds(10,110,40,150); */添加面板p3中的组件并设置其在框架中的位置和大小 p3.setLayout(gl3);/设置p3的布局 p3.add(b7); p3.add(b8); p3.add(b9); p3.add(b10); p3.add(b11); p3.add(b12); p3.ad

26、d(b13); p3.add(b14); p3.add(b15); p3.add(b16); p3.add(b17); p3.add(b18); p3.add(b19); p3.add(b20); p3.add(b21); p3.add(b22); p3.add(b23); p3.add(b24); p3.add(b25); p3.add(b26); p3.setBounds(60,110,250,150); /设置框架中的布局为空布局并添加3个面板 setLayout(null); add(p0); add(p1); /add(p2); add(p3); setResizable(false

27、);/禁止调整框架的大小 /匿名类关闭窗口 addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e1) System.exit(0); ); setBackground(Color.pink); setBounds(100,100,320,280); setVisible(true); /构造监听器 class Bt implements ActionListener public void actionPerformed(ActionEvent e2) try if(e2.getSource(

28、)=b1)/选择CE清零 tf1.setText(0);/把显示屏清零 str.setLength(0);/清空字符串缓冲区以准备接收新的输入运算数 else if(e2.getSource()=b2)/选择C清零 tf1.setText(0);/把显示屏清零 str.setLength(0); else if(e2.getSource()=b23)/单击+/-选择输入的运算数是正数还是负数 x=Double.parseDouble(tf1.getText().trim(); tf1.setText(+(-x); else if(e2.getSource()=b25)/单击加号按钮获得x的值和

29、z的值并清空y的值 x=Double.parseDouble(tf1.getText().trim(); str.setLength(0);/清空缓冲区以便接收新的另一个运算数 y=0d; z=0; else if(e2.getSource()=b20)/单击减号按钮获得x的值和z的值并清空y的值 x=Double.parseDouble(tf1.getText().trim(); str.setLength(0); y=0d; z=1; else if(e2.getSource()=b15)/单击乘号按钮获得x的值和z的值并清空y的值 x=Double.parseDouble(tf1.get

30、Text().trim(); str.setLength(0); y=0d; z=2; else if(e2.getSource()=b10)/单击除号按钮获得x的值和z的值并空y的值 x=Double.parseDouble(tf1.getText().trim(); str.setLength(0); y=0d; z=3; else if(e2.getSource()=b26)/单击等号按钮输出计算结果 str.setLength(0); switch(z) case 0 : tf1.setText(+(x+y);break; case 1 : tf1.setText(+(x-y);bre

31、ak; case 2 : tf1.setText(+(x*y);break; case 3 : tf1.setText(+(x/y);break; else if(e2.getSource()=b24)/单击.按钮输入小数 if(tf1.getText().trim().indexOf(.)!=-1)/判断字符串中是否已经包含了小数点 else/如果没数点有小 if(tf1.getText().trim().equals(0)/如果初时显示为0 str.setLength(0); tf1.setText(str.append(0+e2.getActionCommand().toString()

32、; else if(tf1.getText().trim().equals()/如果初时显示为空则不做任何操作 else tf1.setText(str.append(e2.getActionCommand().toString(); y=0d; else if(e2.getSource()=b11)/求平方根 x=Double.parseDouble(tf1.getText().trim(); tf1.setText(数字格式异常); if(x0) tf1.setText(负数没有平方根); else tf1.setText(+Math.sqrt(x); str.setLength(0);

33、y=0d; else if(e2.getSource()=b16)/单击了%按钮 x=Double.parseDouble(tf1.getText().trim(); tf1.setText(+(0.01*x); str.setLength(0); y=0d; else if(e2.getSource()=b21)/单击了1/X按钮 x=Double.parseDouble(tf1.getText().trim(); if(x=0) tf1.setText(除数不能为零); else tf1.setText(+(1/x); str.setLength(0); y=0d; else if(e2.

34、getSource()=b3)/MC为清除内存 m=0d; tf2.setText(); str.setLength(0); else/选择的是其他的按钮 if(e2.getSource()=b22)/如果选择的是0这个数字键 if(tf1.getText().trim().equals(0)/如果显示屏显示的为零不做操作 else tf1.setText(str.append(e2.getActionCommand().toString(); y=Double.parseDouble(tf1.getText().trim(); else if(e2.getSource()=b0)/选择的是“

35、BackSpace”按钮 if(!tf1.getText().trim().equals(0)/如果显示屏显示的不是零 if(str.length()!=1) tf1.setText(str.delete(str.length()-1,str.length().toString();/可能抛出字符串越界异常 else tf1.setText(0); str.setLength(0); y=Double.parseDouble(tf1.getText().trim(); else/其他的数字键 tf1.setText(str.append(e2.getActionCommand().toString(); y=Double.parseDouble(tf1.getText().trim(); catch(NumberFormatException e) tf1.setText(数字格式异常); catch(StringIndexOutOfBoundsException e) tf1.setText(字符串索引越界); public static void main(String args) new Counter(); 评语及评分 评阅人签名:

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服