java简易计算器设计思路

合集下载

java简易计算器课程设计

java简易计算器课程设计

一、设计内容和要求1、简单计算器模拟程序;2、功能要求:模拟Windows中附件里面的计算器软件,能实现整数的加、减、乘、除四则运算界面提示:用图形界面实现,可参考下图。

二、系统分析与概要设计设计的计算器可以完成加法、减法、乘法、除法的简单运算。

实现一些简单的扩展运算,如:正负号、退格、清零等功能。

使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输入,并完成相关的计算。

根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本框,16个按钮,总体界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/等按钮放置到一个面板Panel中,完成界面设计三、详细设计和编码1、总体功能图2、类的定义及关系(1)类A的设计(数据的输入)class A implements ActionListener{public void actionPerformed(ActionEvent e){String a = Jtext.getText();String s = e.getActionCommand();if(a.equals("0.")||a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/")) Jtext.setText(s);else{if(flag2){ Jtext.setText(s);flag2=false;}elseJtext.setText(a+s);}}}(2)类Opertion的设计:(运算符的控制)class Opertion implements ActionListener{public void actionPerformed(ActionEvent e){cal=e.getActionCommand();if(flag1==true)x=Jtext.getText();Jtext.setText(cal);flag1=false;}}3、运行效果图4、源代码主要代码:public class jsq extends WindowAdapter{private JTextField Jtext = new JTextField("0.");private JFrame f = new JFrame("简单计算器");private String x = "";private String y = "";private String cal = "";private boolean flag1 = true;private boolean flag2 = false;public void init(){ String[] buttonValue = new String[] { "1", "2", "3", "+", "4", "5", "6", "-", "7", "8", "9", "*", "0", ".", "/", "=" };Container contain = f.getContentPane();JPanel Jpan = new JPanel();JButton[] Jb = new JButton[16];contain.setLayout(new BorderLayout());Jpan.setLayout(new GridLayout(4, 4));Jtext.setHorizontalAlignment(JTextField.RIGHT);contain.add(Jtext, "North");contain.add(Jpan);A num = new A();Result re = new Result();Opertion op = new Opertion();for (int i = 0; i < Jb.length; i++){Jb[i] = new JButton(buttonValue[i]);Jpan.add(Jb[i]);if (i == 3 || i == 7 || i == 11 || i == 14)Jb[i].addActionListener(op);if (i == 0 || i == 1 || i == 2 || i == 4 || i == 5 || i == 6 || i == 8 || i == 9 || i == 10 || i == 12 || i == 14)Jb[i].addActionListener(num);Jb[i].setForeground(new Color(0, 0, 255));}四、测试结果验证:65-5=60五、小结该计算器基本运算没有问题,能完成一个计算器的基本功能,但仍有许多地方需要改进,如小数点还未实现功能。

java课程设计简易计算器

java课程设计简易计算器

信息科学与工程学院课程设计任务书题目:简单计算器的设计课程设计任务书及成绩评定目录一、选题的目的意义 (5)二、总体设计方案以及主要设计原理 (5)三、实现技术及源程序代码 (6)四、测试及分析 (14)五、结束语(心得体会、改进方向) (15)一、选题的目的意义1、进一步掌握和理解java程序编程;2、进一步掌握java语言的基本数据类型,熟悉定义变量和使用变量;3、理解java图形用户界面的基本工作原理和界面设计;4、巩固窗体的布局设计;5、掌握窗体按钮控件和文本控件对事件的响应;6、理解函数和方法的使用。

二、总体设计方案以及主要设计原理1、需求分析设计的计算器可以完成加法、减法、乘法、除法的简单运算及简单的函数运算2、设计思路(1)界面设计(2)设计思路根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本框,24个按钮.总体界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/,.,-,sqrt,sin,cos,in,CE,=等按钮放置到一个面板Panel中,完成界面设计。

三、实现技术及源程序代码import java.awt.*;import java.awt.event.*;public class Cal {public static void main(String[] args) {CalFrame f = new CalFrame();}}class CalFrame extends Frame {double d1, d2;int op = -1;TextField tf;CalPanelL p1;CalPanelR p2;// ConstructorCalFrame() {super("Small Calculator");setLayout(new FlowLayout(FlowLayout.CENTER,8,10));setBackground(new Color(100,150,150));setForeground(Color.white);setResizable(false);setSize(300,200);tf = new TextField(22);tf.setEditable(false);tf.setBackground(new Color(108,118,103));tf.setForeground(Color.white);tf.setFont(new Font("Arial",Font.BOLD,16));add(tf);p1 = new CalPanelL();p2 = new CalPanelR();add(p1);add(p2);setVisible(true);addWindowListener(new Wclose());}// inner class:CalButtonclass CalButton extends Button {CalButton(String s){super(s);setBackground(Color.gray);}}// inner class: CalPanelLclass CalPanelL extends Panel {CalButton b0, b1, b2, b3,b4, b5, b6, b7,b8, b9, bPN, bPoint;CalPanelL() {setLayout(new GridLayout(4,3));setFont(new Font("TimesRoman",Font.BOLD,16));b0 = new CalButton("0");b1 = new CalButton("1");b2 = new CalButton("2");b3 = new CalButton("3");b4 = new CalButton("4");b5 = new CalButton("5");b6 = new CalButton("6");b7 = new CalButton("7");b8 = new CalButton("8");b9 = new CalButton("9");bPN = new CalButton("+/-");bPoint = new CalButton(".");// 加入按钮add(b7); b7.addActionListener(new PressB7());add(b8); b8.addActionListener(new PressB8());add(b9); b9.addActionListener(new PressB9());add(b4); b4.addActionListener(new PressB4());add(b5); b5.addActionListener(new PressB5());add(b6); b6.addActionListener(new PressB6());add(b1); b1.addActionListener(new PressB1());add(b2); b2.addActionListener(new PressB2());add(b3); b3.addActionListener(new PressB3());add(b0); b0.addActionListener(new PressB0());add(bPN); bPN.addActionListener(new PressBPN()); ;add(bPoint); bPoint.addActionListener(new PressBPoint()); }}class CalPanelR extends Panel {CalButton bAdd, bSub, bMul, bDiv,bSqrt, bSin, bCos, bYx,bLn, bEqual, bCE, bBack;CalPanelR() {setLayout(new GridLayout(4,3));setFont(new Font("TimesRoman",Font.BOLD,16));bAdd = new CalButton("+");bSub = new CalButton("-");bMul = new CalButton("*");bDiv = new CalButton("/");bSqrt = new CalButton("sqrt");bSin = new CalButton("sin");bCos = new CalButton("cos");bYx = new CalButton("y^x");bLn = new CalButton("ln");bEqual = new CalButton("=");bCE = new CalButton("CE");bBack = new CalButton("<-");add(bDiv); bDiv.addActionListener(new PressBDiv());add(bSqrt); bSqrt.addActionListener(new PressBSqrt());add(bLn); bLn.addActionListener(new PressBLn());add(bMul); bMul.addActionListener(new PressBMul());add(bSin); bSin.addActionListener(new PressBSin());add(bBack); bBack.addActionListener(new PressBBack());add(bSub); bSub.addActionListener(new PressBSub());add(bCos); bCos.addActionListener(new PressBCos());add(bCE); bCE.addActionListener(new PressBCE());add(bAdd); bAdd.addActionListener(new PressBAdd());add(bYx); bYx.addActionListener(new PressBYx());add(bEqual); bEqual.addActionListener(new PressBEqual()); }}class PressBAdd implements ActionListener {public void actionPerformed(ActionEvent e) {try {d1 = Double.parseDouble(tf.getText());op = 0;tf.setText("");} catch(Exception ee) {}}}class PressBSub implements ActionListener {public void actionPerformed(ActionEvent e) {try {d1 = Double.parseDouble(tf.getText());op = 1;tf.setText("");} catch(Exception ee) {}}}class PressBMul implements ActionListener { public void actionPerformed(ActionEvent e) { try {d1 = Double.parseDouble(tf.getText());op = 2;tf.setText("");} catch(Exception ee) {}}}class PressBDiv implements ActionListener { public void actionPerformed(ActionEvent e) { try {d1 = Double.parseDouble(tf.getText());op = 3;tf.setText("");} catch(Exception ee) {}}}class PressBYx implements ActionListener {public void actionPerformed(ActionEvent e) { try {d1 = Double.parseDouble(tf.getText());op = 4;tf.setText("");} catch(Exception ee) {}}}class PressBEqual implements ActionListener { public void actionPerformed(ActionEvent e) { try {double result = 0;d2 = Double.parseDouble(tf.getText()); switch(op) {case 0:result = d1 + d2;break;case 1:result = d1 - d2;break;case 2:result = d1 * d2;break;case 3:result = d1 / d2;break;case 4:result = Math.pow(d1,d2);break;default:}tf.setText(String.valueOf(result));} catch(Exception ee) {}}}class PressBSqrt implements ActionListener {public void actionPerformed(ActionEvent e) {try {double x = Double.parseDouble(tf.getText()); double y;y = Math.sqrt(x);tf.setText(y+"");} catch(Exception ee) {}}}class PressBLn implements ActionListener {public void actionPerformed(ActionEvent e) {try {double x = Double.parseDouble(tf.getText()); double y;y = Math.log(x);tf.setText(y+"");} catch(Exception ee) {}}}class PressBSin implements ActionListener {public void actionPerformed(ActionEvent e) {try {double x = Double.parseDouble(tf.getText()); double y;y = Math.sin(x);tf.setText(y+"");} catch(Exception ee) {}}}class PressBCos implements ActionListener {public void actionPerformed(ActionEvent e) {try {double x = Double.parseDouble(tf.getText()); double y;y = Math.cos(x);tf.setText(y+"");} catch(Exception ee) {}}}class PressBBack implements ActionListener {public void actionPerformed(ActionEvent e) {try {String text = tf.getText();text = text.substring(0,text.length()-1); tf.setText(text);} catch(Exception ee) {}}}class PressBCE implements ActionListener {public void actionPerformed(ActionEvent e) {tf.setText("");}}class PressBPN implements ActionListener {public void actionPerformed(ActionEvent e) {try {String text = tf.getText();if (text != "") {if(text.charAt(0) == '-')tf.setText(text.substring(1));else if(text.charAt(0) >= '0' && text.charAt(0) <= '9') tf.setText("-"+text.substring(0));else if(text.charAt(0) == '.')tf.setText("-0"+text.substring(0));}} catch(Exception ee) { }}}class PressBPoint implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();if(stIndexOf(".") == -1)tf.setText(text+".");}}class PressB0 implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();tf.setText(text+"0");}}class PressB1 implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();tf.setText(text+"1");}}class PressB2 implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();tf.setText(text+"2");}}class PressB3 implements ActionListener {public void actionPerformed(ActionEvent e) {String text = tf.getText();tf.setText(text+"3");}}class PressB4 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"4");}}class PressB5 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"5");}}class PressB6 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"6");}}class PressB7 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"7");}}class PressB8 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"8");}}class PressB9 implements ActionListener {public void actionPerformed(ActionEvent e) { String text = tf.getText();tf.setText(text+"9");}}// class: Wcloseclass Wclose extends WindowAdapter {public void windowClosing(WindowEvent e) {System.exit(0);}}}四、测试及分析1、简单的运算(1)78+43=121.0(2)10+20*30=610.02、总体分析本计算器为计算量中等,对函数要求不太高的人群适用。

java swing实现简易计算器

java swing实现简易计算器

简易计算器【案例介绍】1.案例描述本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。

2.运行结果运行结果【案例目标】●学会分析“简易计算器”程序实现的逻辑思路。

●能够独立完成“简易计算器”程序的源代码编写、编译及运行。

●掌握Java Swing界面编程的应用。

●了解计算器逻辑运算实现。

【案例分析】要制作一个计算器,首先要知道它由哪些部分组成,如下图所示:一个简单的图形化界面计算器,需要由界面组件、组件的时间监听器和具体的事件处理逻辑组成。

实现一个简易图形化界面计算器可分以下几个步骤:1.UI组件创建和初始化:包括窗体的创建,显示计算结果文本框、清除按钮、数字按钮、运算符等按钮的初始化。

2.在窗体中添加UI组件:包括放置数字键及运算符面板、放置清除框面板。

3.布局结束之后,就是计算器的难点:编写事件处理程序。

4.按键的响应实现。

5.计算逻辑的实现。

6.注册监听器【案例实现】Calculator.java1 package chapter1102;2 import java.awt.*;3 import java.awt.event.*;4 import javax.swing.*;5 import java.util.Vector;6 import java.math.BigDecimal;7 public class Calculator {8 // 操作数1,为了程序的安全,初值一定设置,这里我们设置为0。

9 String str1 = "0";10 // 操作数211 String str2 = "0";12 // 运算符13 String signal = "+";14 // 运算结果15 String result = "";16 // 以下k1至k5为状态开关17 // 开关1用于选择输入方向,将要写入str1或str218 // 为 1 时写入 str1,为 2 时写入 str219 int k1 = 1;20 // 开关 2 用于记录符号键的次数21 // 如果 k2>1 说明进行的是 2+3-9+8 这样的多符号运算22 int k2 = 1;23 // 开关3用于标识 str1 是否可以被清 024 // 等于 1 时可以,不等于1时不能被清025 int k3 = 1;26 // 开关4用于标识 str2 是否可以被清 027 // 等于 1 时可以,不等于1时不能被清028 int k4 = 1;29 // 开关5用于控制小数点可否被录入30 // 等于1时可以,不为1时,输入的小数点被丢掉31 int k5 = 1;32 // store的作用类似于寄存器,用于记录是否连续按下符号键33 JButton store;34 //vt 存储之前输入的运算符。

java简易计算器实训报告

java简易计算器实训报告

java简易计算器实训报告Java简易计算器实训报告随着人们对数学和计算机的需求不断增长,计算器也成为了必备的工具之一。

而在计算机领域,Java语言因其跨平台和易于学习的特点而备受青睐。

因此,我选择了利用Java语言来编写一款简易计算器的实训项目。

一、需求分析在编写计算器之前,我们需要对其功能进行需求分析。

一般来说,计算器的功能包括加、减、乘、除等基本数学运算符,以及括号、百分号、小数点等其他计算功能。

在此基础上,我们可以考虑增加科学计算、历史记录、单位转换等功能。

二、设计思路及实现在需求分析的基础上,我们设计了一款基于Java语言的简易计算器。

其基本功能包括加、减、乘、除、括号、百分号、小数点等。

在实现过程中,我们采用了以下设计思路:1. 利用Java Swing构建GUI界面,让用户可以通过鼠标点击输入数字和运算符。

2. 通过Java的逻辑运算符实现基本的数学运算,包括加、减、乘、除等。

3. 利用Java的正则表达式判断用户输入的数字是否合法,并进行相应的处理。

4. 通过栈的数据结构实现括号运算,使得程序能够正确处理带有括号的数学表达式。

5. 实现百分号功能,使得用户可以快速进行百分比运算。

6. 通过Java的异常处理机制,处理用户输入不合法的情况,避免程序崩溃。

三、代码实现在代码实现过程中,我们主要采用了Java Swing和Java核心库中的一些类和方法。

以下是代码的核心部分:1. GUI界面代码在Java Swing中,我们可以通过JFrame、JPanel、JButton等组件构建出一个GUI界面,使得用户可以通过鼠标点击输入数字和运算符。

以下是界面代码的核心部分:JPanel panel = new JPanel();panel.setLayout(new GridLayout(4,4));//数字按钮panel.add(new JButton("7"));panel.add(new JButton("8"));panel.add(new JButton("9"));panel.add(new JButton("/"));panel.add(new JButton("4"));panel.add(new JButton("5"));panel.add(new JButton("6"));panel.add(new JButton("*"));panel.add(new JButton("1"));panel.add(new JButton("2"));panel.add(new JButton("3"));panel.add(new JButton("-"));panel.add(new JButton("0"));panel.add(new JButton("."));panel.add(new JButton("+"));panel.add(new JButton("("));panel.add(new JButton(")"));panel.add(new JButton("%"));2. 数学运算代码在Java中,我们可以通过逻辑运算符实现基本的数学运算。

java实验报告——简单计算器的编写五篇范文

java实验报告——简单计算器的编写五篇范文

java实验报告——简单计算器的编写五篇范文第一篇:java实验报告——简单计算器的编写JAVA实验报告——简单计算器的编写班级:学号:姓名:一、实验目的1.掌握java图形用户界面(GUI)的设计原理和程序结构2.能设计复核问题要求的图形用户界面程序3.掌握常用组件的事件接口4.应用awt和swing组件进行应用程序设计二、实验条件1.计算机一台2.java软件开发环境三、实验步骤1、编写代码:mport java.awt.*;import java.awt.event.*;import javax.swing.*;public class JCalculator extends JFrame implements ActionListener {private static final long serialVersionUID =-***457Lprivate class WindowCloser extends WindowAdapter {public void windowClosing(WindowEvent we){System.exit(0);}}int i;private final String[] str = { “7”, “8”, “9”, “/”, “4”, “5”, “6”, “*”, “1”,“2”, “3”, “-”, “.”, “0”, “=”, “+” };JButton[] buttons = new JButton[str.length]; JButton reset = new JButton(“CE”); JTextField display = new JTextField(“0”);public JCalculator(){super(“Calculator”);JPanel panel1 = new JPanel(new GridLayout(4, 4)); for(i = 0;i < str.length;i++){buttons[i] = new JButton(str[i]);panel1.add(buttons[i]);}JPanel panel2 = new JPanel(new BorderLayout()); panel2.add(“Center”, display);panel2.add(“East”, reset);getContentPane().setLayout(new BorderLayout()); getContentPane().add(“North”, panel2); getContentPane().add(“Center”, panel1);for(i = 0;i < str.length;i++)buttons[i].addActionListener(this);reset.addActionListener(this);display.addActionListener(this); addWindowListener(new WindowCloser()); setSize(800, 800);setVisible(true);pack();}public void actionPerformed(ActionEvent e){ Object target = e.getSource();String label = e.getActionCommand();if(target == reset)handleReset();else if(“0123456789.”.indexOf(label)> 0)handleNumber(label);elsehandleOperator(label);}boolean isFirstDigit = true;public void handleNumber(String key){if(isFirstDigit)display.setText(key);else if((key.equals(“.”))&&(display.getText().indexOf(“.”)< 0))display.setText(display.getText()+ “.”);else if(!key.equals(“.”))display.setText(display.getText()+ key);isFirstDigit = false;}public void handleReset(){display.setText(“0”);isFirstDigit = true;operator = “=”;}double number = 0.0;String operator = “=”;public void handleOperator(String key){if(operator.equals(“+”))number += Double.valueOf(display.getText());else if(operator.equals(“-”))number-= Double.valueOf(display.getText());else if(operator.equals(“*”))number *= Double.valueOf(display.getText());else if(operator.equals(“/”))number /= Double.valueOf(display.getText());else if(operator.equals(“=”))number = Double.valueOf(display.getText());display.setText(String.valueOf(number));operator = key;isFirstDigit = true;}public static void main(String[] args){new JCalculator();} }2、运行结果,见截图计算测试:123+456=579结果正确,程序无误。

基于java的简易计算器的设计

基于java的简易计算器的设计

基于java的简易计算器的设计摘要自从java语言诞生以来,java语言就以不可抵挡的趋势很快成为国际上广泛流行的面向对象编程语言,它既具有高级语言的特点,又少了C语言中指针特点,因而变得简单了很多。

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,其具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

本文介绍了用java语言编写一个简易计算器。

实现数学上的加、减、乘、除、乘方、开方、阶乘、正弦、余弦运算等相关运算。

利用这个程序可以方便的进行日常性的小规模运算,小巧简易,是个实用的工具。

关键词:程序设计;简易计算器;java语言THE DESIGN OF SIMPLE CALCULATOR BASED ON JA V AABSTRACTSince the inception of the java language, java language Take irresistible trend soon beca me widespread international popular object-oriented programming language, both with advan ced language features, and less of the C language pointer characteristics, and thus becomes a l ot simpler . Java is a cross-platform application software can write object-oriented programmi ng language, which has excellent versatility, efficiency, platform portability, and security, are widely used in personal PC, data center, gaming consoles, scientific super-computers, mobile phones and the Internet, also has the world's largest developer of professional community. In t he global cloud computing and mobile Internet industry environment, Java and more have sig nificant advantages and broad prospects.This article describes the use java language a simple calculator. Achieve mathematical addition, subtraction, multiplication, division, involution, evolution, factorial, sine, cosine op erations and other related operations. With this program you can easily carry out daily operati ons of small-scale, small simple, is a useful tool.Key words:program design;simple calculator;java language目录1前言 (1)1.1 课程设计背景 (1)1.2 需求环境 (1)1.3 课程设计思路 (1)2课程设计概要 (2)3 计算器详细设计 (3)3.1 计算器界面……….………….........………………………………………. .33.1.1 CAL主类的显示分布 (3)3.1.2计算器显示界面实现代码 (3)3.2 监听各个按钮的类 (5)3.2.1 编写监听类目的 (5)3.2.2 监听类实现代码 (5)3.3 按键响应类 (7)3.3.1 响应类编写的目的 (7)3.2.2 响应类实现代码 (7)3.3 运算处理类 (9)3.3.1 处理方式 . (9)3.2.2 处理类实现代码 (9)4 运行与调试 (12)4.1 进入程序主界面 (12)4.2 加减乘除功能实现 (12)4.3 正余弦、正切功能实现 (13)4.4 阶乘功能实现 (13)4.5 乘方、开方功能实现 (14)5 实验总结 (15)参考文献 (16)附录:源代码 (17)1 前言1.1 课程设计背景日常生活中我们经常会遇到一些小型数据计算的问题,本课程设计就是以此为出发点,设计了这样一个简单的计算器,用以实现基本的数学运算。

Java简易计算器

Java简易计算器

简易计算器总结1、计算器设计背景日常生活中我们经常会遇到一些小型数据计算的问题,本课程就是以此为出发点,设计了这样一个简单的计算器,用以实现基本的数学运算。

在java语言当中通过定义类,类中的各种方法实现对计算器相关功能的实现,并通过与用户自己手动输入并选择运算功能实现计算功能,是一个完全由用户控制的简易计算器。

2、需求环境硬件要求:一台计算机。

软件配置:WINDOWS系统、JDK 1.7、myeclipse3、计算器设计思路计算器最主要的就是实用性,要简单,便于操作。

程序界面是一个窗口的形式展现并由用户自己完全手动控制。

并以设计的要求为基础,在实现课程设计所给的功能以外,要对界面的美观进行了优化,看起来更人性化。

4、计算器实现代码package com.cqeec.sc;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import javax.swing.BorderFactory;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.BevelBorder;public class Calculator extends JFrame {private static final long serialVersionUID = 1L;// 定义一级菜单名称private final String[] ONE_MENU_NAME = { "编辑(E)", "查看(V)", "帮助(H)" };// 定义一级菜单的热键private final int[] ONE_MENU_MNEMONIC = { KeyEvent.VK_E, KeyEvent.VK_V, KeyEvent.VK_H };// 定义菜单private JMenu[] oneMenu;// 定义显示器private JTextField display;// 定义左边面板MC、MR、MS、M+操作按钮标签private static final String[] BUTTON_MX_NAME = { "MC", "MR", "MS", "M+" };// 定义左边面板MC、MR、MS、M+操作按钮private JButton[] buttonMX;// 定义清除系列按钮标签private static final String[] BUTTON_CLEAR_NAME = { "Backspace", "CE", "C" };// 定义清除系统按钮private JButton[] buttonClear;// 定义数字,运算符,功能等按钮private static final String[] BUTTON_AN_NAME = { "1/x", "log", "7", "8", "9", "÷", "n!", "sqrt", "4", "5", "6", "×", "sin", "x^2", "1", "2","3", "-", "cos", "x^3", "0", "±", ".", "+", "tan", "%", "π", "e","\' \"", "=" };private JButton[] buttonAN;// M的值private double m;// 计算器标签,同时也用于显示M变量的值private JLabel labelCalculator;// 结果private double result;// 标志量,true表示开始新的输入,false表示不是private boolean isStratNewInput;// 保存运算符private String operator = "=";public Calculator() {this.setFrame();// 创建菜单this.createMenu();}private void setFrame() {// 设置窗体标题this.setTitle("计算器");// 改变大小this.setSize(500, 400);// 使窗体居于屏幕中间this.setLocationRelativeTo(null);// 设置窗体的默认关闭操作this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 让窗体不能改变大小this.setResizable(false);// 更改窗体的图标this.setIconImage(new ImageIcon("images/jisuanqi.jpg").getImage());}private void createMenu() {JMenuBar menuBar = new JMenuBar();// 创建菜单oneMenu = new JMenu[ONE_MENU_NAME.length];// 通过循环将一级菜单创建出来并添加到菜单栏for (int i = 0; i < ONE_MENU_NAME.length; i++) {// 创建一级菜单并保存到数组oneMenu[i] = new JMenu(ONE_MENU_NAME[i]);// 设置一级菜单栏热键oneMenu[i].setMnemonic(ONE_MENU_MNEMONIC[i]);// 将一级菜单添加到菜单栏menuBar.add(oneMenu[i]);}// 将菜单栏添加到窗体this.setJMenuBar(menuBar);// 获取窗体的内容面板的布局管理器BorderLayout layout = (BorderLayout) this.getContentPane().getLayout();// 设置垂直间距layout.setVgap(5);// 创建显示器display = new JTextField("0");display.setHorizontalAlignment(JTextField.RIGHT);// 设置字体大小display.setFont(new Font("", Font.ITALIC, 38));// 设置禁用显示器display.setEnabled(false);// 设置显示器与文本距离display.setMargin(new Insets(5, 0, 5, 5));// 设置显示器位置this.add(display, BorderLayout.NORTH);// 创建左边面板JPanel leftPanel = new JPanel(new GridLayout(5, 1, 0, 5)); // 设置面板的宽度leftPanel.setPreferredSize(new Dimension(80, 80));// 创建计算器标签labelCalculator = new JLabel("计算器");// 设置标签文字居中对齐labelCalculator.setHorizontalAlignment(JLabel.CENTER);// 设置计算器标签凹下去的效果labelCalculator.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));// 将计算器面板添加到左面板上leftPanel.add(labelCalculator);MAction mAction = new MAction();// 创建M系列按钮// 分配M系列按钮数组大小buttonMX = new JButton[BUTTON_MX_NAME.length];// 循环创建M系列按钮for (int n = 0; n < BUTTON_MX_NAME.length; n++) { // 创建按钮并存入数组中buttonMX[n] = new JButton(BUTTON_MX_NAME[n]);// 设置按钮不要焦点框buttonMX[n].setFocusable(false);// 设置按钮前景色buttonMX[n].setForeground(Color.red);// 设置按钮动作命令buttonMX[n].setActionCommand(BUTTON_MX_NAME[n]);buttonMX[n].addActionListener(mAction);// 添加按钮动作监听buttonMX[n].addActionListener(mAction);if (n == 0 || n == 1) {buttonMX[n].setEnabled(false);}// 将按钮添加到左面板上leftPanel.add(buttonMX[n]);}// 将左面板添加到窗体的左边this.add(leftPanel, BorderLayout.WEST);// 定义右面板JPanel rightPanel = new JPanel(new BorderLayout(0, 5));// 定义Backspace、CE、C按钮Clear clearProcess = new Clear();JPanel topPanel = new JPanel(new GridLayout(1, 3, 6, 0)); topPanel.setPreferredSize(new Dimension(0, 40));buttonClear = new JButton[BUTTON_CLEAR_NAME.length];for (int i = 0; i < BUTTON_CLEAR_NAME.length; i++) { buttonClear[i] = new JButton(BUTTON_CLEAR_NAME[i]);buttonClear[i].setFocusable(false);buttonClear[i].setForeground(Color.BLACK);buttonClear[i].setActionCommand(BUTTON_CLEAR_NAME[i]);buttonClear[i].addActionListener(clearProcess);topPanel.add(buttonClear[i]);}// 将Backspace、CE、C按钮面板放到右面板北边rightPanel.add(topPanel, BorderLayout.NORTH);// 定义数字按钮事件处理程序类对象NumAction numAction = new NumAction();SignAction signAction = new SignAction();// 定义数字、运算符、功能等按钮JPanel bottomPanel = new JPanel(new GridLayout(5, 6, 8, 8)); buttonAN = new JButton[BUTTON_AN_NAME.length];for (int i = 0; i < BUTTON_AN_NAME.length; i++) { buttonAN[i] = new JButton(BUTTON_AN_NAME[i]);buttonAN[i].setFocusable(false);// 设置按钮动作命令buttonAN[i].setActionCommand(BUTTON_AN_NAME[i]);// 为数字按钮添加监听if ("0123456789±".contains(BUTTON_AN_NAME[i])) {buttonAN[i].addActionListener(numAction);}if (".".equals(BUTTON_AN_NAME[i])) {buttonAN[i].addActionListener(new DotAction());}// 定义按钮文字颜色if ("÷×-+=".indexOf(BUTTON_AN_NAME[i]) >= 0) {buttonAN[i].setForeground(Color.RED);buttonAN[i].addActionListener(signAction);} else if ("πe\' \"".indexOf(BUTTON_AN_NAME[i]) >= 0) {buttonAN[i].setForeground(Color.YELLOW);buttonAN[i].addActionListener(signAction);} else if ("0123456789±.".indexOf(BUTTON_AN_NAME[i]) >= 0) { buttonAN[i].setForeground(Color.BLUE);buttonAN[i].setActionCommand(BUTTON_AN_NAME[i]);buttonAN[i].addActionListener(signAction);} else {buttonAN[i].setForeground(Color.MAGENTA);buttonAN[i].setActionCommand(BUTTON_AN_NAME[i]);buttonAN[i].addActionListener(signAction);}bottomPanel.add(buttonAN[i]);// 将数字、运算符、功能等按钮面板放到右面板的中间rightPanel.add(bottomPanel, BorderLayout.CENTER);// 将右面板添加到窗体this.add(rightPanel, BorderLayout.CENTER);// 显示窗体this.setVisible(true);}}/** 数字、±(正负号)按钮事件处理程序类*/class NumAction implements ActionListener {public void actionPerformed(ActionEvent e) {// 获取事件源对象传过来的动作命令String cmd = e.getActionCommand();if (isStratNewInput) {display.setText("");isStratNewInput = false;}if ("±".equals(cmd)) {// 正负号if ("0".equals(display.getText())) {display.setText("-");} else {double num;String strNum = display.getText();if (strNum.contains(".")) {num = Double.parseDouble(strNum) * -1;strNum = String.valueOf(num);} else {num = Double.parseDouble(strNum) * -1;strNum = String.valueOf(num);if (strNum.contains("E")) {} else {strNum = strNum.substring(0, strNum.length() - 2);}}display.setText(strNum);}} else {// 数字if ("0".equals(display.getText())) {display.setText("");}display.setText(display.getText() + cmd);}}}/*** 小数点按钮事件处理程序*/class DotAction implements ActionListener {public void actionPerformed(ActionEvent e) {if (!display.getText().contains(".")) {display.setText(display.getText() + ".");}}}/*** Backspace、CE、C按钮事件处理程序类*/class Clear implements ActionListener {public void actionPerformed(ActionEvent e) {String cmd = e.getActionCommand();if ("Backspace".equals(cmd)) {// 删除一个String strNum = display.getText();if (strNum.length() == 0 || "0".equals(strNum)) {strNum = "0";} else {strNum = strNum.substring(0, strNum.length() - 1);strNum = "".equals(strNum) ? "0" : strNum;}display.setText(strNum);} else if ("CE".equals(cmd)) {// 清除显示器上的数字,显示零display.setText("0");} else if ("C".equals(cmd)) {// 清除M存储的值和显示器上的数字,显示零display.setText("0");labelCalculator.setText("计算器");m = 0;result = 0;isStratNewInput = false;}}}/*** MC、MR、MS、M+按钮事件处理程序类*/class MAction implements ActionListener {public void actionPerformed(ActionEvent e) {String cmd = e.getActionCommand();if ("MC".equals(cmd)) {labelCalculator.setText("计算器");m = 0;buttonMX[0].setEnabled(false);buttonMX[1].setEnabled(false);} else if ("MR".equals(cmd)) {String strM = String.valueOf(m);if (strM.charAt(strM.length() - 1) == '0') {strM = strM.substring(0, strM.length() - 2);}display.setText(strM);} else if ("MS".equals(cmd)) {String strNum = display.getText();m = Double.parseDouble(strNum);strNum = String.valueOf(m);if (strNum.charAt(strNum.length() - 1) == '0') {strNum = strNum.substring(0, strNum.length() - 2);}labelCalculator.setText(String.valueOf(m));buttonMX[0].setEnabled(true);buttonMX[1].setEnabled(true);} else if ("M+".equals(cmd)) {m = m + m;labelCalculator.setText(String.valueOf(m));buttonMX[0].setEnabled(true);buttonMX[1].setEnabled(true);}}}class SignAction implements ActionListener {public void actionPerformed(ActionEvent e) {String cmd = e.getActionCommand();double num = Double.parseDouble(display.getText());if ("1/x".equals(cmd)) {if (num == 0) {// 弹出提示JOptionPane.showMessageDialog(null,"<html>分母<span style=\"color:red;\">不能</span>为零!</html>","错误", JOptionPane.ERROR_MESSAGE);} else {display.setText(String.valueOf(1 / num));}} else if ("log".equals(cmd)) {if (num <= 0) {// 弹出提示JOptionPane.showMessageDialog(null, "输入的指数必须大于零", "错误",JOptionPane.ERROR_MESSAGE);} else {display.setText(String.valueOf(Math.log(num)));}} else if ("n!".equals(cmd)) {if (num < 0) {JOptionPane.showMessageDialog(null, "计算阶乘的数不能小于零", "错误",JOptionPane.ERROR_MESSAGE);} else {double s = 1;for (int i = 1; i < num; i++) {s *= i;}display.setText(String.valueOf(s));}} else if ("sqrt".equals(cmd)) {if (num <= 0) {// 弹出提示JOptionPane.showMessageDialog(null, "输入的数必须大于零", "错误",JOptionPane.ERROR_MESSAGE);} else {display.setText(String.valueOf(Math.sqrt(num)));}} else if ("sin".equals(cmd)) {display.setText(String.valueOf(Math.sin(num)));} else if ("x^2".equals(cmd)) {display.setText(String.valueOf(Math.pow(num, 2)));} else if ("cos".equals(cmd)) {display.setText(String.valueOf(Math.cos(num)));} else if ("x^3".equals(cmd)) {display.setText(String.valueOf(Math.pow(num, 3)));} else if ("tan".equals(cmd)) {display.setText(String.valueOf(Math.tan(num)));} else if ("%".equals(cmd)) {num = num / 100;display.setText(String.valueOf(num));} else if ("π".equals(cmd)) {display.setText(String.valueOf(Math.PI));} else if ("e".equals(cmd)) {String strNum = display.getText();if (strNum.contains(".")) {String strZS;// 小数strNum = String.valueOf(Double.parseDouble(strNum));if (strNum.contains("E")) {display.setText(strNum.replace('E', 'e'));} else {// 取整数部分strZS = strNum.substring(0, strNum.indexOf("."));// 判断小数的整数部分长度是否大于1strZS = String.valueOf(Math.abs(Long.parseLong(strZS)));if (strZS.length() > 1) {// 左移小数点strZS = strZS.substring(0, 1)+ "."+ strZS.substring(1, strZS.length())+ strNum.substring(strNum.indexOf(".") + 1,strNum.length()) + "e+"+ (strZS.length() - 1);if (strNum.contains("-")) {strZS = "-" + strZS;}display.setText(strZS);} else {if ("0".equals(strZS) || "-0".equals(strZS)) {// 取出小数部分String strXS = strNum.substring(strNum.indexOf(".") + 1,strNum.length());// 统计小数点后零的个数+1(次方数)int count = 0;for (int i = 0; strXS.charAt(i) == '0'; i++) {count++;}count = count + 1;// 取出底数strXS = String.valueOf(Long.parseLong(strXS));strXS = strXS.substring(0, 1) + "."+ strXS.substring(1, strXS.length());// 连接strNum = strXS + "e-" + count;} else {// 不动strNum = strNum + "e+0";}display.setText(strNum);}}} else {// 不是小数double ds;if (strNum.contains("-")) {ds = Double.parseDouble(strNum.substring(0, 2) + "."+ strNum.substring(2, strNum.length()));} else {ds = Double.parseDouble(strNum.substring(0, 1) + "."+ strNum.substring(1, strNum.length()));}strNum = String.valueOf(ds) + "e+" + (strNum.length() - 1);display.setText(strNum);}} else if ("\' \"".equals(cmd)) {} else if ("÷".equals(cmd)) {calculate(cmd);} else if ("×".equals(cmd)) {calculate(cmd);} else if ("+".equals(cmd)) {calculate(cmd);} else if ("-".equals(cmd)) {calculate(cmd);} else if ("=".equals(cmd)) {calculate(cmd);}}public void calculate(String opr) {// 取当前显示器上的数double n = Double.parseDouble(display.getText());// 根据上一次的运算符进行计算if ("÷".equals(operator)) {result /= n;// result=result/n;} else if ("×".equals(operator)) {result *= n;} else if ("+".equals(operator)) {result += n;} else if ("-".equals(operator)) {result -= n;} else if ("=".equals(operator)) {result = n;}// 将计算的结果显示到显示器上display.setText(String.valueOf(result));// 将新输入的运算符存入到原operator = opr;// 开启一个新数的输入isStratNewInput = true;}}}5、计算器实现实例6、计算器设计总结虽然在这次的课程设计中有很多的不足,但是我也收获了很多。

用Java实现的计算器

用Java实现的计算器

用Java实现的计算器计算器是一个广泛应用的工具,用于进行数学运算。

如今,随着计算机技术的不断发展,计算器也逐渐被软件程序所替代。

本文将介绍如何使用Java语言实现一个简单的计算器程序。

一、程序概述计算器程序主要包括用户界面和计算逻辑两部分。

用户界面负责显示计算器的按钮和输入输出框,计算逻辑负责根据用户输入进行运算并返回结果。

二、用户界面设计在Java中,我们可以使用Swing或JavaFX等图形库来设计用户界面。

本文选用JavaFX来实现计算器的界面。

界面需要包括数字按钮、运算符按钮、输入输出框等组件。

在程序启动时,我们需要初始化界面并设置各个组件的位置、大小和样式。

为了方便布局,我们可以使用GridPane等布局管理器来管理组件。

三、计算逻辑实现1. 表达式解析计算器需要将用户输入的表达式解析为计算机可以识别的格式。

Java中可以使用正则表达式或者逆波兰表达式来解析表达式。

本文选用简单的正则表达式方法进行解析。

2. 运算逻辑解析表达式后,我们需要根据运算符的优先级进行运算。

Java中可以使用栈来实现运算符的优先级判断和运算。

我们可以定义一个操作数栈和一个运算符栈,按照规则将表达式中的数字和运算符依次入栈,并根据运算符的优先级进行运算并将结果入栈。

四、完整代码示例import javafx.application.Application;import javafx.geometry.Insets;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.control.TextField;import yout.GridPane;import javafx.stage.Stage;public class Calculator extends Application {private TextField inputField; // 输入框private Button[] numberButtons; // 数字按钮private Button[] operatorButtons; // 运算符按钮@Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("计算器");primaryStage.setResizable(false);// 初始化界面GridPane gridPane = new GridPane();gridPane.setHgap(10);gridPane.setVgap(10);gridPane.setPadding(new Insets(10));// 初始化输入框inputField = new TextField();inputField.setEditable(false);inputField.setPrefHeight(40);inputField.setMaxWidth(Double.MAX_VALUE);gridPane.add(inputField, 0, 0, 4, 1);// 初始化数字按钮numberButtons = new Button[10];for (int i = 0; i < 10; i++) {numberButtons[i] = createNumberButton(String.valueOf(i), i); }gridPane.add(numberButtons[7], 0, 1);gridPane.add(numberButtons[9], 2, 1);gridPane.add(numberButtons[4], 0, 2);gridPane.add(numberButtons[5], 1, 2);gridPane.add(numberButtons[6], 2, 2);gridPane.add(numberButtons[1], 0, 3);gridPane.add(numberButtons[2], 1, 3);gridPane.add(numberButtons[3], 2, 3);gridPane.add(numberButtons[0], 0, 4);gridPane.add(createDotButton(), 1, 4);gridPane.add(createEqualButton(), 2, 4);// 初始化运算符按钮operatorButtons = new Button[4];operatorButtons[0] = createOperatorButton("+"); operatorButtons[1] = createOperatorButton("-"); operatorButtons[2] = createOperatorButton("*"); operatorButtons[3] = createOperatorButton("/"); gridPane.add(operatorButtons[0], 3, 1);gridPane.add(operatorButtons[1], 3, 2);gridPane.add(operatorButtons[3], 3, 4);Scene scene = new Scene(gridPane);primaryStage.setScene(scene);primaryStage.show();}private Button createNumberButton(String text, int number) { Button button = new Button(text);button.setPrefSize(60, 40);button.setOnAction(e -> {String oldText = inputField.getText();inputField.setText(oldText + number);});return button;}private Button createDotButton() {Button button = new Button(".");button.setPrefSize(60, 40);button.setOnAction(e -> {String oldText = inputField.getText();inputField.setText(oldText + ".");});return button;}private Button createEqualButton() {Button button = new Button("=");button.setPrefSize(60, 40);button.setOnAction(e -> {String expression = inputField.getText();// 调用计算逻辑进行计算if (expression != null && !expression.isEmpty()) { double result = calculate(expression);inputField.setText(String.valueOf(result));}});return button;}private Button createOperatorButton(String text) {Button button = new Button(text);button.setPrefSize(60, 40);button.setOnAction(e -> {String oldText = inputField.getText();inputField.setText(oldText + text);});return button;}private double calculate(String expression) {// 进行计算逻辑的实现// ...}public static void main(String[] args) {launch(args);}}五、总结通过本文的介绍,我们可以了解到使用Java语言实现一个简单计算器的基本框架和思路。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java简易计算器设计思路
一、引言(200字)
计算器是一种用于进行数学运算的工具,我们经常使用计算器进行简单的加减乘除等运算。

而在计算机编程中,我们也可以设计一个简易计算器的程序,用于实现基本的数学运算功能。

本文将围绕设计一个简易计算器展开,主要包括用户输入的处理、运算符的识别、表达式的计算以及结果的输出等内容。

二、用户输入的处理(200字)
计算器首先需要能够接收用户输入的表达式,包括数字和运算符。

在Java中可以使用Scanner类来获取用户的输入。

首先,我们需要创建一个Scanner对象,然后使用nextLine(方法获取用户输入的一行字符串。

接下来,我们需要对输入的字符串进行处理,将数字和运算符分开。

可以使用String的split(方法将字符串按照特定的分隔符进行分割。

根据运算符的特性,常见的分隔符可以是空格、加号、减号、乘号、除号等。

将得到的数字和运算符分别存储在一个列表中,以便后续的处理。

三、运算符的识别(200字)
在处理用户输入后,我们需要对运算符进行识别和分类,以便进行相应的数学运算。

Java中可以使用if语句或者switch语句来对运算符进行判断。

针对常见的运算符如加号、减号、乘号、除号等,可以使用简单的逻辑判断语句进行处理。

对于更为复杂的运算符,比如平方根、阶乘、求幂等,可以使用if-else的嵌套语句进行处理。

根据识别结果,我们可以调用相应的数学函数进行运算。

四、表达式的计算(200字)
识别运算符后,我们需要对表达式进行计算。

计算器的基本原理是根
据输入的数字和运算符进行相应的数学运算,并返回结果。

在Java中,
可以使用各种数学运算符,比如加号、减号、乘号、除号、取模等进行计算。

不同的运算符有不同的运算规则,需要根据具体需求进行操作。

在计
算过程中,我们需要注意异常情况的处理,比如除零错误、非法运算符等。

Java提供了异常处理机制,可以使用try-catch语句来捕获异常并进行
处理。

五、结果的输出(200字)
经过运算后,我们需要将结果输出给用户。

Java中可以使用
System.out.println(方法将结果打印在控制台上,以方便用户查看。


输出结果时,需要对结果进行格式化处理,保留特定的小数位数或者科学
计数法等。

如果计算过程中出现了异常,也需要将异常信息输出给用户,
以便用户了解出错的原因。

除了输出到控制台,我们还可以将结果保存到
文件中或者发送到其他设备上,以便进行进一步的处理或者共享。

六、总结(100字)
本文介绍了设计一个简易计算器的思路,包括用户输入的处理、运算
符的识别、表达式的计算以及结果的输出。

通过对用户输入的数学表达式
进行处理和运算,可以实现一个基本的计算器功能。

在实际应用中,还可
以根据需求进行扩展和优化,添加更多的运算符和功能,提升计算器的实
用性和易用性。

计算器的设计不仅可以帮助用户进行简单的数学运算,还
可以作为学习编程的入门项目,帮助初学者熟悉编程语言和算法思维。

相关文档
最新文档