1、Java大作业计算器JAVA大作业简易计算器 课程名称: Java开发技术 教学班级: B02班 学 院: 信息管理学院 20132014学年第1学期(第 1 册共 1 册)1 引言1.1 开发背景电脑已经深入到日常生活和工作的方方面面,例如文字办公、信息管理、图像处理、游戏娱乐等,尤其是游戏。电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。Java语言作为一种面向对象的编程语言,具有分布式、可移植性、高性能、多线程等特点。对于一名学生来说,在系统的学习了Java后,面对这次的大作业,正好将学过的Java语言中的各种技术综
2、合起来编写小程序。即对自己学过的技能进行一次检验,也能系统的将学过的知识复习巩固。1.2 项目目标开发一个计算器小程序,具有整数和小数的加减乘除功能,数据记忆清除功能。1.3开发环境 Eclipse3.5 Java集成开发环境1.4 计算器的基本情况最早的计算工具诞生在中国。 中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的约二百七十枚一束,放在布袋里可随身携带。 直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的纳皮
3、尔算筹,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口中,但是只能做加减计算。1694年,莱布尼兹在德国将其改进成可以进行乘除的计算。此后,一直要到20世纪50年代末才有电子计算器的
4、出现。2技术支持2.1 Applet概述小应用程序(Applet)是指采用Java创建的基于HTML的程序。浏览器将其暂时下载到用户的硬盘上,并在Web页打开时在本地运行。小应用程序(Applet)是可通过因特网下载并在接收计算机上运行的一小段程序。小应用程序通常用Java语言编写并运行在浏览器软件中,applet典型用于为万维网网页页面定制或添加交互格式元素。 Applet可以翻译为小应用程序,Java Applet就是用Java语言编写的这样的一些小应用程序,它们可以直接嵌入到网页或者其他特定的容器中,并能够产生特殊的效果。Applet必须运行于某个特定的“容器”,这个容器可以是浏览器本身
5、,也可以是通过各种插件,或者包括支持Applet的移动设备在内的其他各种程序来运行。与一般的Java应用程序不同,Applet不是通过main方法来运行的。在运行时Applet通常会与用户进行互动,显示动态的画面,并且还会遵循严格的安全检查,阻止潜在的不安全因素(例如根据安全策略,限制Applet对客户端文件系统的访问)。 在Java Applet中,可以实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互及网络交流等功能。 Applet还提供了名为抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口环境开发工具。 AWT利用用户计算机的GUI元素,可以建立标准
6、的图形用户界面,如窗口、按钮、滚动条等等。在网络上有非常多的Applet范例来生动地展现这些功能,读者可以去调阅相应的网页以观看它们的效果。3系统设计及实现3.1 系统功能实现1. 通过按钮事件来获得用户的输入。通过ActionEvent的getSource()得到被激发的按钮,从而获得输入。通过两个标记记忆上一次输入的情况,当前输入的是数字,如果上一次输入的是数字,那么就将这次输入的数字加到原来text的末尾。如果上次输入的是算术符,那么就重置text。当前输入的是算术符,则计算当前结果total=total运算符text2.通过计算将结果输出到JTextField中。3.清零功能。3.2
7、系统界面设计为了实现所需要的功能,同时又便于使用,计算器系统的界面设计得比较简单,如下图所示。 计算器系统界面3.3 系统函数功能说明 函 数 功 能 Result()显示输入和结果的函数Number_Key()添加数字键的函数actionPerformed(ActionEvent e)触发事件setLayout(new BorderLayout()设置边框布局的函数addActionListener()监听事件getSource()得到被激发的按钮4 计算器的测试以下测试内容都是针对界面中的一些功能进行分类别的测试。4.1 测试“输入”功能(1)当前输入的是数字: (2)当前输入的是运算符+
8、:4.2 测试“输出结果”功能根据上面的:87+2:4.3 测试“清零功能”功能需要计算另一组数据时,需要清零,点击ce: 清零前: 清零后: 5 分析与总结5.1 个人总结在版面布局上定义了两个面板,一个是用来放置和布局所有按钮,用的版面控制器是GridLayout,设为6行3列,并设置了组件与组件之间的约束为10,另一个用来放置。在事件处理中。ActionPerformed是这个程序最重要的函数,每个按钮都与数字、运算符或者功能符一一对应。通过ActionEvent的getSource()得到被激发的按钮,从而获得输入。通过两个标记记忆上一次输入的情况,当前输入的是数字,如果上一次输入的是
9、数字,那么就将这次输入的数字加到原来text的末尾。如果上次输入的是算术符,那么就重置text。当前输入的是算术符,则计算当前结果total=total运算符text6附录:import javax.swing.*;import java.awt.*;import java.awt.event.*;/计算器显示结果的窗体class Result extends JPanel /text显示输入和结果 JTextField text=new JTextField(0); Result() /将输入的数字或得到的结果在text的右边显示 text.setHorizontalAlignment(Sw
10、ingConstants.RIGHT); text.enable(false); /文本框不能编辑 setLayout(new BorderLayout(); /设定布局管理器边框布局 add(text,BorderLayout.CENTER); /text放置在窗体的中间 /计算器数字按钮定义面板class Number_Key extends JPanel JButton zero=new JButton(0); /数字键0 JButton one=new JButton(1); /数字键1 JButton two=new JButton(2); /数字键2 JButton three=n
11、ew JButton(3); /数字键3 JButton four=new JButton(4); /数字键4 JButton five=new JButton(5); /数字键5 JButton six=new JButton(6); /数字键6 JButton seven=new JButton(7); /数字键7 JButton eight=new JButton(8); /数字键8 JButton nine=new JButton(9); /数字键9 JButton plus=new JButton(+); JButton sub=new JButton(-); JButton mul
12、=new JButton(*); JButton div=new JButton(/); JButton equal=new JButton(=); JButton ce=new JButton(ce); /置零键 JButton point=new JButton(.); JButton tzero=new JButton(00); Number_Key() /定义布局管理器为网格布局 setLayout(new GridLayout(6,3,10,10); /添加各个按钮键 add(seven); add(eight); add(nine); add(four); add(five); a
13、dd(six); add(one); add(two); add(three); add(zero); add(tzero); add(plus); add(sub); add(mul); add(div); add(point); add(equal); add(ce); /计算器主类public class Calculator extends JFrame implements ActionListener Result result=new Result(); /定义text的面板 Number_Key number_key=new Number_Key(); /定义按钮面板 bool
14、ean com=false; /当单击按钮+、-、*、/ 时,com=true int i=0; /当i=0时,说明我们是第一次输入,字符串sum不会累加 String sum=; /存放text的内容 double total=0; /+、-、*、/的代号分别是1、2、3、4 int symbol=0; Calculator() super(Calculator); /设定标题 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设定关闭窗体时退出程序 JPanel pane=new JPanel(); /定义主面板 pane.setLayout(
15、new BorderLayout(); pane.add(result,BorderLayout.NORTH); pane.add(number_key,BorderLayout.SOUTH); number_key.one.addActionListener(this); /对1按钮添加监听事件 number_key.two.addActionListener(this); /对2按钮添加监听事件 number_key.three.addActionListener(this); /对3按钮添加监听事件 number_key.four.addActionListener(this); /对4
16、按钮添加监听事件 number_key.five.addActionListener(this); /对5按钮添加监听事件 number_key.six.addActionListener(this); /对6按钮添加监听事件 number_key.seven.addActionListener(this); /对7按钮添加监听事件 number_key.eight.addActionListener(this); /对8按钮添加监听事件 number_key.nine.addActionListener(this); /对9按钮添加监听事件 number_key.zero.addAction
17、Listener(this); /对0按钮添加监听事件 number_key.ce.addActionListener(this); /对置零键按钮添加监听事件 number_key.plus.addActionListener(this); /对+按钮添加监听事件 number_key.equal.addActionListener(this); /对=按钮添加监听事件 number_key.sub.addActionListener(this); /对-按钮添加监听事件 number_key.mul.addActionListener(this); /对*按钮添加监听事件 number_k
18、ey.div.addActionListener(this); /对/按钮添加监听事件 number_key.tzero.addActionListener(this); /对00按钮添加监听事件 number_key.point.addActionListener(this); /对.按钮添加监听事件 setContentPane(pane); pack();/初始化窗体大小为正好乘方所有按钮 /各个触发的事件 public void actionPerformed(ActionEvent e) /*如果是单击数字按钮那么先要判断是否在此之前单击了+、-、*、=、如果是,那么com=true
19、,如果没有,com=false; 或者是否单击数字键,如果是,i=1,如果没有,i=0*/ if(e.getSource()=number_key.one) if(com|i=0) result.text.setText(1); com=false; i=1; else sum=result.text.getText(); result.text.setText(sum+1); else if(e.getSource()=number_key.two) if(com|i=0) result.text.setText(2); com=false; i=1; else sum=result.tex
20、t.getText(); result.text.setText(sum+2); else if(e.getSource()=number_key.three) if(com|i=0) result.text.setText(3); com=false; i=1; else sum=result.text.getText(); result.text.setText(sum+3); else if(e.getSource()=number_key.four) if(com|i=0) result.text.setText(4); com=false; i=1; else sum=result.
21、text.getText(); result.text.setText(sum+4); else if(e.getSource()=number_key.five) if(com|i=0) result.text.setText(5); com=false; i=1; else sum=result.text.getText(); result.text.setText(sum+5); else if(e.getSource()=number_key.six) if(com|i=0) result.text.setText(6); com=false; i=1; else sum=result
22、.text.getText(); result.text.setText(sum+6); else if(e.getSource()=number_key.seven) if(com|i=0) result.text.setText(7); com=false; i=1; else sum=result.text.getText(); result.text.setText(sum+7); else if(e.getSource()=number_key.eight) if(com|i=0) result.text.setText(8); com=false; i=1; else sum=re
23、sult.text.getText(); result.text.setText(sum+8); else if(e.getSource()=number_key.nine) if(com|i=0) result.text.setText(9); com=false; i=1; else sum=result.text.getText(); result.text.setText(sum+9); /*对于0这一按钮,在此程序中不会出现如0000这样的情况,加的判断条件就是:如果text中的数值=0, 就要判断在这个数值中是否有.存在?如果有,那么就在原来数值基础上添加0;否则保持原来的数值不变
24、*/ else if(e.getSource()=number_key.zero) if(com|i=0) result.text.setText(0); com=false; i=1; else sum=result.text.getText(); if(Float.parseFloat(sum)0|Float.parseFloat(sum)0|Float.parseFloat(sum)0) result.text.setText(sum+00); else if(sum.trim().indexOf(.)=-1) result.text.setText(sum); else result.
25、text.setText(sum+00); /*不让一个数值中出现两个小数点。具体做法是:判断是否已经存在.,存在就不添加,不存在就添加*/ else if(e.getSource()=number_key.tzero) if(com|i=0) result.text.setText(0); com=false; i=1; else if(sum.trim().indexOf(.)=-1) result.text.setText(sum+.); else result.text.setText(sum); /获得单击+之前的数值 else if(e.getSource()=number_key
26、.plus) com=true; i=0; total=Double.parseDouble(result.text.getText(); symbol=1; /获得单击-之前的数值 else if(e.getSource()=number_key.sub) com=true; i=0; total=Double.parseDouble(result.text.getText(); symbol=2; /获得单击*之前的数值 else if(e.getSource()=number_key.mul) com=true; i=0; total=Double.parseDouble(result.text.getText(); System.out.println(total); symbol=3; /获得单击/之前的数值 else if(e.getSource()=number_key.div) com=true; i=0; total=Double.parseDouble(result.text.getText(); symbol=4; else if(e.ge
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1