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