当前位置首页 > 建筑/施工 > 施工组织
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

Java实现的简易计算器-附代码

文档格式:DOC| 55 页|大小 372.50KB|积分 10|2022-06-15 发布|文档ID:108624969
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 55
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.------------------------------------------author------------------------------------------dateJava实现的简易计算器-附代码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、扩张的其他运算功能六、程序代码public class Calculator {//计算器面板 private JFrame f = new JFrame("Calculator"); private JPanel inputPanel = new JPanel();//输入面扳 private JPanel operationPanel = new JPanel();//加减乘除面板 private JPanel buttonsPanel = new JPanel();//数字面板 private JTextField input = new JTextField(20); //输入数据文本框 private JTextField show=new JTextField(20); private JButton backspace = new JButton("退格");//退格键 private JButton CE = new JButton("CE ");//清空 private JButton C = new JButton("C");//删除 private JButton sqrt=new JButton("√");//开方 private JButton fang=new JButton("^");//乘方 private JButton mod=new JButton("%");//取余 private JButton dao=new JButton("1/x");//取倒数 private JButton sin=new JButton("sin"); private JButton cos=new JButton("cos"); private JButton lg=new JButton("ln"); //四则运算符号键 private JButton add = new JButton("+"); private JButton sub = new JButton("-"); private JButton mul = new JButton("*"); private JButton div = new JButton("/"); //小数点 private JButton decimal = new JButton("."); //等号 private JButton equal = new JButton("="); //数字键 private JButton zero = new JButton("0"); private JButton one = new JButton("1"); private JButton two = new JButton("2"); private JButton three = new JButton("3"); private JButton four = new JButton("4"); private JButton five = new JButton("5"); private JButton six = new JButton("6"); private JButton seven = new JButton("7"); private JButton eight = new JButton("8"); private JButton nine = new JButton("9"); private String num1 = "";//保存第一个运算数字 private String operator = "";//保存运算符号 public static void main(String[] args) { new Calculator();//new计算器实例 } public Calculator(){ //添加组件,布局 show.setText("0"); show.setEditable(false); //不可编辑 show.setHorizontalAlignment(JTextField.RIGHT); input.setText("0"); input .setEditable(false); input.setHorizontalAlignment(JTextField.RIGHT); inputPanel.setLayout(new GridLayout(2,1)); inputPanel.add(show); inputPanel.add(input);//添加输入文本框 f.add(inputPanel, BorderLayout.NORTH); operationPanel.add(sin); sin.setBackground(new Color(100, 255, 10)); operationPanel.add(cos); cos.setBackground(new Color(100, 255, 10)); operationPanel.add(CE); CE.setBackground(new Color(100, 255, 10)); operationPanel.add(C); C.setBackground(new Color(100, 255, 10)); operationPanel.add(backspace); backspace.setBackground(new Color(100, 255, 10)); f.add(operationPanel, BorderLayout.CENTER); buttonsPanel.setLayout(new GridLayout(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(new OperationMouseListener()); CE.addMouseListener(new OperationMouseListener()); C.addMouseListener(new OperationMouseListener()); decimal.addMouseListener(new OperationMouseListener()); equal.addMouseListener(new OperationMouseListener()); //注册运算监听 add.addMouseListener(new CalcMouseListener()); sub.addMouseListener(new CalcMouseListener()); mul.addMouseListener(new CalcMouseListener()); div.addMouseListener(new CalcMouseListener()); sqrt.addMouseListener(new CalcMouseListener()); fang.addMouseListener(new CalcMouseListener()); mod.addMouseListener(new CalcMouseListener()); dao.addMouseListener(new CalcMouseListener()); sin.addMouseListener(new CalcMouseListener()); cos.addMouseListener(new CalcMouseListener()); //注册数字监听事件 zero.addMouseListener(new NumberMouseListener()); one.addMouseListener(new NumberMouseListener()); two.addMouseListener(new NumberMouseListener()); three.addMouseListener(new NumberMouseListener()); four.addMouseListener(new NumberMouseListener()); five.addMouseListener(new NumberMouseListener()); six.addMouseListener(new NumberMouseListener()); seven.addMouseListener(new NumberMouseListener()); eight.addMouseListener(new NumberMouseListener()); nine.addMouseListener(new NumberMouseListener()); f.setVisible(true); f.pack();//窗口自适应大小 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private class NumberMouseListener implements MouseListener{ public void mouseClicked(MouseEvent e) {// 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(""); } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} } private class CalcMouseListener implements MouseListener{ //如果输入的是运算符号,保存第一个结果和运算符号 public void mouseClicked(MouseEvent e) { double s=0; if(((JButton)e.getSource()).getText().trim()=="-" ) { if(input.getText().trim().equals("0")|input.getText().trim().equals("")) { input.setText("-"); return; } } if(e.getSource()==sqrt) { double t=Math.sqrt(Double.parseDouble(input.getText().trim())); input.setText(new DecimalFormat("0.00").format(t)); } else if(e.getSource()==dao) { double t=1/Double.parseDouble(input.getText().trim()); input.setText(new DecimalFormat("0.00").format(t)); } else if(e.getSource()==sin) { double t=Math.sin(Double.parseDouble(input.getText().trim())); input.setText(new DecimalFormat("0.00").format(t)); } else if(e.getSource()==cos) { double t=Math.cos(Double.parseDouble(input.getText().trim())); input.setText(new DecimalFormat("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()); }else if(operator.equals("-")){//减法运算 s = Double.parseDouble(num1) - Double.parseDouble(input.getText().trim()); }else if(operator.equals("*")){//乘法运算 s = Double.parseDouble(num1) * Double.parseDouble(input.getText().trim()); }else if(operator.equals("/")){//除法运算 s = Double.parseDouble(num1) / Double.parseDouble(input.getText().trim()); }else if(operator.equals("^")){//乘方运算 s=Math.pow(Double.parseDouble(num1), Double.parseDouble(input.getText().trim())); } else if(operator.equals("%")){//取余运算 s=getMod(Double.parseDouble(num1), Double.parseDouble(input.getText().trim())); } num1 =new DecimalFormat("0.00").format(s); show.setText(num1.concat(((JButton)e.getSource()).getText().trim())); input.setText("0"); operator=((JButton)e.getSource()).getText().trim(); } } } private double getMod(double a, double b) { // TODO Auto-generated method stub double s=0; if(a 0) input.setText(inputText.substring(0, inputText.length() - 1)); else if(inputText.length()==0 && showText.length()>0) { input.setText(showText.substring(0,showText.length()-1)); show.setText("0"); } }else if(e.getSource() == C){ input.setText("0");//C,清空所有运算数字和符号 show.setText("0"); num1 = ""; operator=""; }else if(e.getSource() == CE){ input.setText("0");//CE-->将文本框置为0 }else if(e.getSource() == decimal){ String text = input.getText().trim(); //如果按了小数点,如果文本框已经有小数点,不做任何操作,否则在结果后面加上小数点 if(text.indexOf(".") == -1){ input.setText(text.concat(".")); } }else if(e.getSource() == equal){ //输入操作符后 点击的等于号 两个数做正常计算 if(!operator.trim().equals("")){ if(!input.getText().trim().equals("")){ show.setText(show.getText().concat(input.getText()).concat("=")); double result = 0; if(operator.equals("+")){//执行加法运算 result = Double.parseDouble(num1) + Double.parseDouble(input.getText().trim()); }else if(operator.equals("-")){//减法运算 result = Double.parseDouble(num1) - Double.parseDouble(input.getText().trim()); }else if(operator.equals("*")){//乘法运算 result = Double.parseDouble(num1) * Double.parseDouble(input.getText().trim()); }else if(operator.equals("/")){//除法运算 result = Double.parseDouble(num1) / Double.parseDouble(input.getText().trim()); }else if(operator.equals("^")){ result=Math.pow(Double.parseDouble(num1), Double.parseDouble(input.getText().trim())); }else if(operator.equals("%")){//取余运算 result=getMod(Double.parseDouble(num1), Double.parseDouble(input.getText().trim())); } //格式化最终结果,保留两位小数点 input.setText(new DecimalFormat("0.00").format(result)); operator=""; num1=""; } } } } private double getMod(double a, double b) { // TODO Auto-generated method stub double s=0; if(a

    点击阅读更多内容
    卖家[上传人]:痛苦女王
    资质:实名认证