实现计算器功能的应用程序.docx

上传人:b****2 文档编号:23080308 上传时间:2023-04-30 格式:DOCX 页数:23 大小:144.28KB
下载 相关 举报
实现计算器功能的应用程序.docx_第1页
第1页 / 共23页
实现计算器功能的应用程序.docx_第2页
第2页 / 共23页
实现计算器功能的应用程序.docx_第3页
第3页 / 共23页
实现计算器功能的应用程序.docx_第4页
第4页 / 共23页
实现计算器功能的应用程序.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

实现计算器功能的应用程序.docx

《实现计算器功能的应用程序.docx》由会员分享,可在线阅读,更多相关《实现计算器功能的应用程序.docx(23页珍藏版)》请在冰豆网上搜索。

实现计算器功能的应用程序.docx

实现计算器功能的应用程序

摘要

计算器一般是指“电子计算器”,该名词由日文传入中国。

计算器是能进行数学运算的手持机器,拥有集成电路芯片,结构简单,功能较弱,但由于它使用方便、操作简单、价格低廉,因而广泛运用于商业交易中,也是必备的办公用品。

该程序是一个图形界面的简单的java计算器,使用人员能快捷简单地进行操作。

即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

可以进行简单的四则运算(加、减、乘、除,以及求倒数,求相反数),有退格功能,归零表示初始化,界面颜色为灰白,该程序支持键盘操作。

 

关键字计算器,程序,运算,操作

目录

摘要I

1绪论1

1.1课程设计的目的1

1.2课程设计的任务与要求1

2需求分析2

2.1功能需求2

2.2出错处理2

2.3数据处理2

2.4系统环境要求2

3概要设计3

3.1界面及功能描述3

3.2简要的设计流程3

4详细设计5

4.1计算器界面的设置5

4.2类层次中各个类的描述5

5系统运行测试7

5.1初始运行界面7

5.2按键测试7

5.3运算符重复输入测试7

5.4被除数为0的测试7

5.5backspace按键越界操作8

5.6优先级程序计算8

5.7输出测试8

6总结10

参考文献11

附录(源代码)12

1绪论

1.1课程设计的目的

计算器在我们的生活中常常会使用到,本次课程设计,通过界面以及其中的逻辑处理,完成了四则运算的处理。

通过awt包或者swing包中的界面设计部分对界面设计的细节可以有更多的了解。

利用面向对象的思想,将各个组件的事件响应分别用不同的类表达出来。

面向对象的思想从很大程度上可以让程序的思路更加清晰,而且可重用性很高。

对于具有相同事件响应的组件则可以调用相同的类来处理事件。

除此之外,利用栈的知识来解决运算符优先的问题也让我们对java中的栈有了更多的了解。

1.2课程设计的任务与要求

a.使用Java的awt包或Swing包的类库设计图形界面的计算器

b该计算器能够完成加减乘除的四则混合运算(注意运算优先级)

c使用图形界面中的事件委托机制来处理事件响应

2需求分析

2.1功能需求

用户能够完成四则混合运算+、-、*、/,并且计算器能够自动的识别运算符的优先级,根据输入的运算公式,自动计算出相应的结果。

同时完成计算器中的backspace、ce按钮,能够完成消除或者删除的功能。

2.2出错处理

当用户如果按下的是除零的操作,显示框将显示“被除数不能为0”。

当用户如果连续多次按下运算符,计算器自动记忆第一次运算符,并且做防连续输入相同的运算符或者是不同的运算符。

当用户在同一个数据中多次输入小数点,计算器能够自动判断小数点重复,自动只记忆第一个小数点。

当用户在同一个数据中输入多个负号,计算器能够自动做重复检查,不显示多余的负号。

当用户在使用backspace功能删除越界数据时候,计算器自动做相应处理。

2.3数据处理

在程序的起始,建立了两个栈,分别用来存储操作数和操作符。

在计算器的核心运算代买中,运用这两个栈来实现算法中的优先级的处理,使用“#”号来标记目标计算公式的结束。

目标计算公式通过计算器的键盘实现输入,当按下“=”号之后,计算器通过调用计算器核心函数来实现数据的处理。

2.4系统环境要求

操作系统:

WINXP或更高版本

开发语言:

java

开发工具:

eclipse

3概要设计

3.1界面及功能描述

(1)界面布局。

创建一个面板,先将所有按钮:

所有数字键和运算符键等放在面板上,采用网格布局,具体设计为4行,4列的网格,十六个格子。

再添加一个1行4列的网格布局来放置三个功能键:

归零,退格,输出。

然后,对以上两个面板,采用BorderLayout布局,将按键面板放在计算机的中部,功能键面板放右上角,作为一个新的面板。

最后,将文本框放在左上角,新面板放中央,采用边界布局管理器,做为界面的整体布局,这样界面布局就搞定了。

(2)按退格键,将返回到前一次输入状态。

(3)按归零键,输入的数字第一个数字为零。

3.2简要的设计流程

图3.1简要的设计流程图

4详细设计

4.1计算器界面的设置

本程序的实现使用了swing和awt两个包,主题程序界面按键根据微软计算器的布置界面进行设置,采用比较人性化的常规按键排布。

返回计算结果的“=”号键使用了两倍于普通按键面积的设计,使的击中的概率更加大。

整体界面是采用了BorderLayout布局,通过4个panel进行布局的详细划分,panel3用来存储位于panel4左下角的GridLayout(1,2,4,4)布局,panel1、panel2、panel3分别用来表示BorderLayout的上中下三个模块。

Panel1中添加了一个Labeldisplay,display用来作为显示器,实时的显示输入和计算的数据。

其中display需要设置为右对齐和只读属性。

Panel2中添加数字输入键和基本操作符键,panel采用了GridLayout布局,将整个panel2平分为4*4个空间,其中,数字键采用了15磅字体和蓝色文字,操作符采用了15磅字体和红色文字,是的界面更加显眼和便于区分。

Panel4中首先划分为GridLayout(1,2,4,4),在Panel4中,再次使用了GridLayout(1,2,4,4)将panel4的左侧一分为二,左边为panle3,这个的基础上程序往panel3中添加了backspace和ce两个按键,在Panel4的右侧单元格中添加了“=”号按钮,这个时候的“=”号就是相当于两个普通按钮的长度和大小。

整个程序界面的设计工作基本完成。

4.2类层次中各个类的描述

本次课程设计一共分为了5个类,每个类都各自完成不同的功能。

●classMyCalculator:

类MyCalculator是主类,含有main()函数,通过newCalFrame()来运行程序。

●classCalFrame:

类CalFrame完成的功能是计算器界面的设计,并且将每个组件都添加事件响应。

具体的事件响应操作将在其他的类中逐一实现。

●classHandleWin:

点击关闭windows窗口的控制类。

●classHandleNum:

字符串输入控制类。

●ClassHandleEqual:

等号出发事件的响应机制类。

类的属性包括:

0-9的数字键

JButtonnum1;JButtonnum2;JButtonnum3;JButtonnum4;

JButtonnum5;JButtonnum6;JButtonnum7;JButtonnum8;

JButtonnum9;JButtonnum0;

+-*/四个控制按钮

JButtonplus;

JButtonminus;

JButtonmutiply;

JButtondivide;

.+/-两个按钮

JButtonpoint;

JButtonsign;

Backspacece=三个按钮

JButtonbs;

JButtonce;

JButtonequal;

将这些按钮按照一定的顺序添加到现实面板中。

Panelp1,p2,p3,p4;

//为了布局的方便,利用borderLayout,通过几个面板来添加

StackOPNT=newStack();

//用来记录操作数的栈

StackOPTR=newStack();

//用来记录操作符的栈,栈底压入“#”,取到了“#"代表已到栈底

booleanpointswitch=true;//小数点开关

booleanoprateswitch=false;//运算符开关

booleansiginswitch=true;//正负号开关

方法:

publicvoidactionPerformed(ActionEvente)

当按下了控制按钮,根据搜索控制开关来确定能否继续添加,各个相应的处理机制。

publicdoublesegmentation(StringmyString)

字符串优先级计算代码的核心函数。

publicintcompare(charch1,charch2)

1值为ch1大于ch2;-1为ch1小于ch2;0为ch1等于ch2

publicdoubleoprate(doublea,charb,doublece)

通过参数b来判断加减乘除

5系统运行测试

5.1初始运行界面

图5.1初始运行界面

5.2按键测试

图5.2按键测试

5.3运算符重复输入测试

图5.3运算符重复输入测试

5.4被除数为0的测试

图5.4被除数为0的测试

5.5backspace按键越界操作

图5.5backspace按键越界操作

5.6优先级程序计算

图5.6优先级程序计算

5.7输出测试

图5.7输出测试

6总结

这个学期的java课程设计实现计算器功能的应用程序对我来说是一个不断学习,逐步完善的过程。

开始的时候拿到题目看到只有四则混合运算就理所当然的认为应该是非常简单的的一个程序而已。

首先开始了程序的界面的设计,并且将一些简单的按钮的事件响应完成了,剩下了运算符优先级的问题以及数据的处理问题。

于是在同学的帮助下利用正则表达式来完成输入字符串的切割,但是如果自己一个人单独做的话,对于题目中的数据处理的问题一时不知道该如何与正则表达式连接上。

最后我还是选择用栈来处理。

这个过程让我明白了学习知识的时候实践与理论之间是有很大的差异的。

应用能力我还有待加强。

于是我开始熟悉栈的使用。

在以前的学习中接触过栈,这次的使用思想是一样的,只需要在了解一下java中的相关一些函数便可。

但实际在写程序的过程中,由于有一些特殊情况的考虑与进出入栈的联系,还是碰到了一些问题。

但在后来我慢慢的整理清楚思路以后,逻辑列清楚了,便将这些问题解决,逐步的将各项功能都完善。

当然目前我的计算器也只是完成了四则混合运算,实际上还应该有很多功能可以添加入计算器的。

本次java课程设计也让我明白只要我一步步去做,那么程序功能便会不断强大。

在以后的学习中,多加强自己的动手实践能力。

参考文献

 

[1]朱福喜.《Java语言程序设计》(第二版).科学出版社

[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社

[3]Deitel.《Java大学基础教程》(第六版).电子工业出版社

[4]MaryCampione.《Java语言导学》(第四版).机械工业出版社

[5]Y.DanielLiang.《Java语言程序设计基础篇》(第六版).机械工业出版社

[6]KathySierra.《HeadFirstJava》(第二版).东南大学出版社

[7]宁书林等,《java2技能百练》,中国铁道出版社,2004

[8]於东军[等]著,《Java程序设计与应用开发》,清华大学出版社,2005

附录(源代码)

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjava.util.*;

importjava.util.regex.Matcher;

importjava.util.regex.Pattern;

publicclassMyCalculator{

publicstaticvoidmain(String[]args){

newCalFrame();

}

}

classCalFrameextendsJFrame{

Stringopnt,optr;

StackOPNT=newStack();

StackOPTR=newStack();

Labeldisplay;//显示

JButton[]num=newJButton[10];//按键设计

JButtonplus;JButtonminus;JButtonmutiply;JButtondivide;

JButtonbs;JButtonce;JButtonequal;

JButtonpoint;JButtonsign;JButtonlbracket;JButtonrbracket;

Panelp1,p2,p3,p4;

Stringdisp="";//用户输入的表达式

Stringresult="";//用户输入的字符串

CalFrame(){

OPTR.push("#");

for(inti=0;i<=9;++i){

num[i]=newJButton(String.valueOf(i));

}

plus=newJButton("+");

plus.setForeground(Color.red);

plus.setFont(newFont("Dialog",1,15));

minus=newJButton("-");

minus.setForeground(Color.red);

minus.setFont(newFont("Dialog",1,15));

mutiply=newJButton("*");

mutiply.setForeground(Color.red);

mutiply.setFont(newFont("Dialog",1,15));

divide=newJButton("/");

divide.setForeground(Color.red);

divide.setFont(newFont("Dialog",1,15));

equal=newJButton("=");

equal.setForeground(Color.red);

equal.setFont(newFont("Dialog",1,15));

point=newJButton(".");

point.setFont(newFont("Dialog",1,15));

sign=newJButton("+/-");

sign.setFont(newFont("Dialog",1,15));

bs=newJButton("backspace");

bs.setForeground(Color.red);

bs.setFont(newFont("Dialog",1,8));

ce=newJButton("ce");

ce.setFont(newFont("Dialog",1,15));

p1=newPanel();

p1.setLayout(newBorderLayout());

display=newLabel("0.",Label.RIGHT);

display.setBackground(Color.white);

p1.add(display,BorderLayout.NORTH);

p2=newPanel();

p2.setLayout(newGridLayout(4,4,4,4));

p2.add(num[7]);p2.add(num[8]);p2.add(num[9]);p2.add(divide);

p2.add(num[4]);p2.add(num[5]);p2.add(num[6]);p2.add(mutiply);

p2.add(num[1]);p2.add(num[2]);p2.add(num[3]);p2.add(minus);

p2.add(num[0]);p2.add(sign);p2.add(point);p2.add(plus);

p3=newPanel(newGridLayout(1,2,4,4));

p3.add(bs);p3.add(ce);

p4=newPanel(newGridLayout(1,2,4,4));

p4.add(p3);

p4.add(equal);

setTitle("实现计算器功能的应用程序");

setLayout(newBorderLayout());

add(p1,BorderLayout.NORTH);

add(p2,BorderLayout.CENTER);

add(p4,BorderLayout.SOUTH);

setVisible(true);

pack();

setResizable(false);

setBounds(600,350,300,230);

addWindowListener(newHandleWin());

for(inti=0;i<=9;++i){

num[i].setForeground(Color.blue);

num[i].setFont(newFont("Dialog",1,15));

num[i].addActionListener(newHandleNum(this,i));

}

plus.addActionListener(newHandleNum(this));

minus.addActionListener(newHandleNum(this));

mutiply.addActionListener(newHandleNum(this));

divide.addActionListener(newHandleNum(this));

point.addActionListener(newHandleNum(this));

sign.addActionListener(newHandleNum(this));

bs.addActionListener(newHandleNum(this));

ce.addActionListener(newHandleNum(this));

equal.addActionListener(newHandleEqual(this));

}

classHandleWinextendsWindowAdapter{//关闭计算器

publicvoidwindowClosing(WindowEvente){

(e.getWindow()).dispose();

System.exit(0);

}

}

booleanpointswitch=true;//小数点开关

booleanoprateswitch=false;//运算符开关

booleansiginswitch=true;//

classHandleNumimplementsActionListener{//字符串的输入

JFramemy_Num;

intitemp=0;

HandleNum(JFramef,inta){

my_Num=f;

itemp=a;

}

HandleNum(JFramef){

my_Num=f;

}

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==num[itemp]){//输入数字字符

oprateswitch=true;

siginswitch=false;

disp=disp+itemp;

display.setText(disp);

}

if(oprateswitch&&e.getSource()==plus){//输入加号

pointswitch=true;

oprateswitch=false;

siginswitch=true;

disp=disp+"+";

display.setText(disp);

}

if(oprateswitch&&e.getSource()==minus){//输入减号

pointswitch=true;

oprateswitch=false;

siginswitch=true;

disp=disp+"-";

display.setText(disp);

}

if(oprateswitch&&e.getSource()==mutiply){//输入乘号

pointswitch=true;

oprateswitch=false;

siginswitch=true;

disp=disp+"*";

display.setText(disp);

}

if(oprateswitch&&e.getSource()==divide){//输入除号

pointswitch=true;

oprateswitch=false;

siginswitch=true;

disp=disp+"/";

display.setText(disp);

}

if(oprateswitch&&pointswitch==true&&e.getSource()==point){//输入小数点

pointswitch=false;

oprateswitch=false;

siginswitch=false;

disp=disp+".";

display.setText(disp);

}

if(siginswitch&&e.getSource()==sign){//输入负号

disp=disp+"—";

display.setText(disp);

}

if(e.getSource()==bs){//点击backspace

if(!

disp.isEmpty()){

disp=disp.substring(0,disp.length()-1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1