Java实现的简易计算器附代码.docx
《Java实现的简易计算器附代码.docx》由会员分享,可在线阅读,更多相关《Java实现的简易计算器附代码.docx(17页珍藏版)》请在冰点文库上搜索。
Java实现的简易计算器附代码
Java实验报告
题目:
简易计算器
学院数学与计算机学院
学科门类工学
专业软件工程
学号2010434004
姓名
指导教师
2012年12月25日
一、实验目的
通过Java程序开发实训使学生掌握《面向对象程序设计(Java)》课堂讲授的内容,灵活运用到Java程序的开发与设计中。
1.了解Java中的类与对象,类及成员的定义
2.掌握运算符与基本的表达式,和异常的处理
3.数组与字符串的应用
4.掌握常用的Java系统类,核心语言包(java.lang),工具包(java.util),数学包(java.math)
5.接口的实现,输入输出的处理和可视化程序设计
二、实验要求
应用Java语言,设计一个简易计算器,要求界面简洁,能完成基本运算功能。
三、实验内容
1.进行图形界面设计
应用JFrame类、JPanel类、5种布局管理器、文本框、标签及按钮等。
2.实现计算器的基本功能
包括加减乘除四则运算、倒数、取余、平方根、三角函数及清除结果等功能。
四、设计方案
1、设计流程图
2、界面的设计:
Swing布局。
界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式。
设计主界面框架布局为默认的BorderLayout布局,申请三个面板分别是:
(1)输入输出面板,布局设置为两行一列的网格GridLayout布局,包括两个JTextField文本框,一个负责显示当前输入信息,一个负责显示计算式。
面板设置为面板的上部,即f.add(inputPanel,BorderLayout.NORTH);
(2)数字按钮及运算按钮面板,设置为4行5列的网格布局,包括0~9的10个数字和加、减、乘、除、乘方、开方、取倒、取余、等于按钮。
面板位置在主界面的下部,即f.add(buttonsPanel,BorderLayout.SOUTH);
(3)功能键面板,包括三角函数,清除,退格等按钮。
面板位置在主界面框架的中部。
即f.add(operationPanel,BorderLayout.CENTER)。
其图形界面如下:
3、数据输入:
鼠标事件响应。
分别定义三个类,一个是NumberMouseListener类来响应数字点击事件,另外一个是CalcMouseListener类来响应包括开方、乘方在内的运算按钮的点击事件,最后是OperationMouseListener类用来响应退格、清除等功能键的点击事件,三个类都分别实现鼠标监听MouseListener接口。
对每个按钮设置对应监听。
4、数据处理:
整型和浮点数处理,计算器的核心功能实现。
在CalcMouseListener类中对根据事件源的分析,完成用户要求的运算,将结果输出到文本框中。
五、实验结果
1、四则运算功能
2、扩张的其他运算功能
六、程序代码
publicclassCalculator{
//计算器面板
privateJFramef=newJFrame("Calculator");
privateJPanelinputPanel=newJPanel();//输入面扳
privateJPaneloperationPanel=newJPanel();//加减乘除面板
privateJPanelbuttonsPanel=newJPanel();//数字面板
privateJTextFieldinput=newJTextField(20);//输入数据文本框
privateJTextFieldshow=newJTextField(20);
privateJButtonbackspace=newJButton("退格");//退格键
privateJButtonCE=newJButton("CE");//清空
privateJButtonC=newJButton("C");//删除
privateJButtonsqrt=newJButton("√");//开方
privateJButtonfang=newJButton("^");//乘方
privateJButtonmod=newJButton("%");//取余
privateJButtondao=newJButton("1/x");//取倒数
privateJButtonsin=newJButton("sin");
privateJButtoncos=newJButton("cos");
privateJButtonlg=newJButton("ln");
//四则运算符号键
privateJButtonadd=newJButton("+");
privateJButtonsub=newJButton("-");
privateJButtonmul=newJButton("*");
privateJButtondiv=newJButton("/");
//小数点
privateJButtondecimal=newJButton(".");
//等号
privateJButtonequal=newJButton("=");
//数字键
privateJButtonzero=newJButton("0");
privateJButtonone=newJButton("1");
privateJButtontwo=newJButton("2");
privateJButtonthree=newJButton("3");
privateJButtonfour=newJButton("4");
privateJButtonfive=newJButton("5");
privateJButtonsix=newJButton("6");
privateJButtonseven=newJButton("7");
privateJButtoneight=newJButton("8");
privateJButtonnine=newJButton("9");
privateStringnum1="";//保存第一个运算数字
privateStringoperator="";//保存运算符号
publicstaticvoidmain(String[]args){
newCalculator();//new计算器实例
}
publicCalculator(){
//添加组件,布局
show.setText("0");
show.setEditable(false);//不可编辑
show.setHorizontalAlignment(JTextField.RIGHT);
input.setText("0");
input.setEditable(false);
input.setHorizontalAlignment(JTextField.RIGHT);
inputPanel.setLayout(newGridLayout(2,1));
inputPanel.add(show);
inputPanel.add(input);//添加输入文本框
f.add(inputPanel,BorderLayout.NORTH);
operationPanel.add(sin);
sin.setBackground(newColor(100,255,10));
operationPanel.add(cos);
cos.setBackground(newColor(100,255,10));
operationPanel.add(CE);
CE.setBackground(newColor(100,255,10));
operationPanel.add(C);
C.setBackground(newColor(100,255,10));
operationPanel.add(backspace);
backspace.setBackground(newColor(100,255,10));
f.add(operationPanel,BorderLayout.CENTER);
buttonsPanel.setLayout(newGridLayout(4,5));
buttonsPanel.add(seven);
buttonsPanel.add(eight);
buttonsPanel.add(nine);
buttonsPanel.add(div);
buttonsPanel.add(mod);
buttonsPanel.add(four);
buttonsPanel.add(five);
buttonsPanel.add(six);
buttonsPanel.add(mul);
buttonsPanel.add(fang);
buttonsPanel.add(one);
buttonsPanel.add(two);
buttonsPanel.add(three);
buttonsPanel.add(sub);
buttonsPanel.add(sqrt);
buttonsPanel.add(zero);
buttonsPanel.add(decimal);
buttonsPanel.add(equal);
buttonsPanel.add(add);
buttonsPanel.add(dao);
f.add(buttonsPanel,BorderLayout.SOUTH);
//注册各个组件监听事件
backspace.addMouseListener(newOperationMouseListener());
CE.addMouseListener(newOperationMouseListener());
C.addMouseListener(newOperationMouseListener());
decimal.addMouseListener(newOperationMouseListener());
equal.addMouseListener(newOperationMouseListener());
//注册运算监听
add.addMouseListener(newCalcMouseListener());
sub.addMouseListener(newCalcMouseListener());
mul.addMouseListener(newCalcMouseListener());
div.addMouseListener(newCalcMouseListener());
sqrt.addMouseListener(newCalcMouseListener());
fang.addMouseListener(newCalcMouseListener());
mod.addMouseListener(newCalcMouseListener());
dao.addMouseListener(newCalcMouseListener());
sin.addMouseListener(newCalcMouseListener());
cos.addMouseListener(newCalcMouseListener());
//注册数字监听事件
zero.addMouseListener(newNumberMouseListener());
one.addMouseListener(newNumberMouseListener());
two.addMouseListener(newNumberMouseListener());
three.addMouseListener(newNumberMouseListener());
four.addMouseListener(newNumberMouseListener());
five.addMouseListener(newNumberMouseListener());
six.addMouseListener(newNumberMouseListener());
seven.addMouseListener(newNumberMouseListener());
eight.addMouseListener(newNumberMouseListener());
nine.addMouseListener(newNumberMouseListener());
f.setVisible(true);
f.pack();//窗口自适应大小
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
privateclassNumberMouseListenerimplementsMouseListener{
publicvoidmouseClicked(MouseEvente){
//if(operator==""){
if(input.getText().trim().equals("0")|input.getText().trim().equals("")){//如果文本框已经是0,结果还是0
input.setText(((JButton)e.getSource()).getText().trim());
}else{//否则的话,把新输入的数添加到原有数的后边
input.setText(input.getText().concat(((JButton)e.getSource()).getText().trim()));
}
if(operator=="")
show.setText("");
}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmousePressed(MouseEvente){}
publicvoidmouseReleased(MouseEvente){}
}
privateclassCalcMouseListenerimplementsMouseListener{
//如果输入的是运算符号,保存第一个结果和运算符号
publicvoidmouseClicked(MouseEvente){
doubles=0;
if(((JButton)e.getSource()).getText().trim()=="-")
{
if(input.getText().trim().equals("0")|input.getText().trim().equals(""))
{
input.setText("-");
return;
}
}
if(e.getSource()==sqrt)
{
doublet=Math.sqrt(Double.parseDouble(input.getText().trim()));
input.setText(newDecimalFormat("0.00").format(t));
}
elseif(e.getSource()==dao)
{
doublet=1/Double.parseDouble(input.getText().trim());
input.setText(newDecimalFormat("0.00").format(t));
}
elseif(e.getSource()==sin)
{
doublet=Math.sin(Double.parseDouble(input.getText().trim()));
input.setText(newDecimalFormat("0.00").format(t));
}
elseif(e.getSource()==cos)
{
doublet=Math.cos(Double.parseDouble(input.getText().trim()));
input.setText(newDecimalFormat("0.00").format(t));
}
else
{
if(operator=="")
{
num1=input.getText().trim();
operator=((JButton)e.getSource()).getText().trim();
show.setText(input.getText().concat(((JButton)e.getSource()).getText().trim()));
input.setText("0");
}
else{//实现连续运算
if(operator.equals("+")){//执行加法运算
s=Double.parseDouble(num1)+Double.parseDouble(input.getText().trim());
}elseif(operator.equals("-")){//减法运算
s=Double.parseDouble(num1)-Double.parseDouble(input.getText().trim());
}elseif(operator.equals("*")){//乘法运算
s=Double.parseDouble(num1)*Double.parseDouble(input.getText().trim());
}elseif(operator.equals("/")){//除法运算
s=Double.parseDouble(num1)/Double.parseDouble(input.getText().trim());
}elseif(operator.equals("^")){//乘方运算
s=Math.pow(Double.parseDouble(num1),Double.parseDouble(input.getText().trim()));
}
elseif(operator.equals("%")){//取余运算
s=getMod(Double.parseDouble(num1),Double.parseDouble(input.getText().trim()));
}
num1=newDecimalFormat("0.00").format(s);
show.setText(num1.concat(((JButton)e.getSource()).getText().trim()));
input.setText("0");
operator=((JButton)e.getSource()).getText().trim();
}
}
}
privatedoublegetMod(doublea,doubleb){
//TODOAuto-generatedmethodstub
doubles=0;
if(a
s=a;
elseif(a==b)
s=0;
else
s=a%b;
returns;
}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmousePressed(MouseEvente){}
publicvoidmouseReleased(MouseEvente){}
}
privateclassOperationMouseListenerimplementsMouseListener{
publicvoidmouseClicked(MouseEvente){
if(e.getSource()==backspace){//退格键,删除一个直到没有字符删除
StringinputText=input.getText();
StringshowText=show.getText();
//if(inputText!
=""){
if(inputText.length()>0)
input.setText(inputText.substring(0,inputText.length()-1));
elseif(inputText.length()==0&&showText.length()>0)
{input.setText(showText.substring(0,showText.length()-1));
show.setText("0");
}
}elseif(e.getSource()==C){
input.setText("0");/