搜档网
当前位置:搜档网 › 第2章 仿Windows计算器

第2章 仿Windows计算器

第2章 仿Windows计算器
第2章 仿Windows计算器

第2章仿Windows计算器

第2章仿Windows计算器

2.1 仿Windows计算器概述

Windows计算器,是Windows操作系统自带计算器,,可以帮助用户完成数据的运算,它可分为“标准型”和“科学型”,本章的仿Windows计算器是标准型的Java实现,标准型Windows计算器实现的主要功能有:四则运算;求倒数;求开方;存储计算结果;读取计算结果;累积计算结果。

我们在第一章中,我们实现了一个在控制台进行的五子棋游戏,我们从本章开始将在Swing界面中实现本书的项目。在本章中,我们将使用到JFrame和JPanel两个Swing容器,使用到JT extField和JButton两个Swing容器,使用BorderLayout和GridLayout做两个布局器,以及使用到事件、事件监听器和事件适配器等。

实现一个计算器,界面中需要提供各种输入的按钮,再以这些按钮组成计算器的键盘,用户点击键盘输入值后,就可以将其所输入的值显示到一个文本框中,运算后,再将结果显示到文本框中。计算器的最终效果如图2.1所示。

图 2.1 用Swing制作的计算器

从图2.1中可以看到,我们开发界面的时候,需要提供一个文本框在窗口的最上部,文本框下面再提供各个计算器的按钮。

2.1.1 数学与其它符号介绍

在此计算器中,主要使用的数学运算有加、减、乘、除四则运算,或者对一个正数进行开方,或者对一个非0的数学求倒数,使用到的数学符号有:

?加、减、乘、除,对应使用的符号是“+”、“-”、“*”、“/”。

?开方与倒数,对应使用的符号是“sqrt”和“1/x”。

?求结果使用的数学符号是“=”。

·2·

?“%”号,如果使用此符号,第二个操作数就等于两数相乘再除以100。

除了用于数学运算的符号,Windows计算器还提供对计算结果做存储、读取、累加、清除等操作,亦有对数字显示框中的数字做退格操作,还可以清除上次计算结果或者全部结果:

?使用符号“MC”、“MR”、“MS”、“M+”代表清除存储结果、读取存储结果、保存存储结果和累加存储结果。

?使用“Backspace”符号代表退格。

?使用“CE”和“C”代表清除上次计算结果和清除所有计算结果。

四则运算在程序中可以直接使用Java运算符实现,实现开方可以调用Math类的sqrt方法,倒数可以使用1来除以原始的数字。当用户需点击“=”的时候,计算器就需要将最终的计算结果显示到文本框中。其他的计算器功能都可以通过计算器内部的程序实现,例如使用某个字符串或者数字来保存相应的结果,如果需要计取、存储、累加或者清除结果,可以通过改变或者读取我们所保存的值来实现。

2.1.2 界面说明

界面中使用的Swing组件相对简单,整个大窗口可以看作一个JFrame对象,在JFrame对象中,存放一个JPanel对象,我们需要为这个JPanel对象进行布局,将文本框(JTextField对象)与各个计算器按钮(JButton对象)添加到这个JPanel中。在添加计算器按钮的时候,我们可以使用GridLayout 布局处理器来进行网格状布局,由于各个计算器按钮都是以网格状分布在界面中的,因此使用GridLayout非常适合。本章计算器的界面布局并不复杂,因此在这里不再详细描述。

2.2 流程描述

用户打开计算器后,在没有关闭计算器之前,可以通过鼠标点击“1”到“9”数字键和点击“+”、“-”、“*”、“/”键去输入要运算结果的算术式,再通过点击“=”、“sqrt”、“1/x”等键去直接获取计算结果,除外,还可以点击“MC”、“MR”、“MS”、“M+”键去清除、读取、保存、累加计算显示框中显示的数字,还有清除上次结果、清除所有结果、退格等操作。从图2.2中可以看出,计算器打开之后,就开始监听用户的鼠标动作,如果输入是关于计算结果或者“MC”、“MR”、“MS”、“M+”、“Backspace”、“CE”、“C”等操作指令,而且没有关闭计算器,就返回计算结果并显示,如果不是,则不计算结果。接下来再继续等待用户的输入。

本章的计算器并没有复杂的流程,只需要简单的操作,返回计算结果等。在实现计算器的过程中,我们需要注意的是,例如已经点击了某个数字,再点击运算符,那么程序需要记录之前选点击的数字,当用户再次点击运算符(非“=”)时,系统就需要将结果显示到文本框中。因此在开发计算器的时候,我们需要注意用户点击的具体顺序。

·3·

图 2.2 计算流程

2.3 建立计算器对象

实现一个计算器,我们需要建立一系列的对象来实现,例如,计算界面我们要建立一个界面类,还需要建立一个专门负责处理加、减、乘、除的基本计算类,还需要一个负责处理计算功能的业务类。本小节中只讲解创建这三个基本的类,如果在开发的过程发现可以将一些行为或者属性放置到一个新的对象中,那么可以再建立这些对象来完成需要实现的功能或者操作。

本章主要设计四个类来完成计算器的功能,界面类(CalFrame)—主要用来显示计算器界面,功能类(CalService)—主要用于完成计算器中的逻辑功能,计算工具类(MyMath)—此类是工具类,用于处理大型数字的加减乘除,计算器类(Cal)—用于打开计算器,计算器中各个类的关系如图2.3所示,从图中可以看出,我们的界面类继承了java.swing.JFrame类,计算器类使用了界面类,界面类使用了功能类,功能类使用了MyMath工具类,下面章节将对这些计算器的相关类作详细介绍。

·4·

图2.3 计算器类图

2.3.1 MyMath工具类

使用float,double两种浮点基本类型来进行计算,容易损失精度,所以,我们使用一个自己定义了加,减,乘,除方法的类,此类使用BigDecimal来封装基本类型,在不损失精度的同时,也可以进行超大数字的四则运算。为了方便调用,此类的方法全部都是静态方法,可以直接用“类名.方法名”调用,这个类包含以下方法:

?static double add( double num1, double num2 ),加法,使用来计算结果的数字是封装后的num1和num2,并返回double类型。

?static double subtract ( double num1, double num2 ),减法,使用来计算结果的数字是封装后的num1和num2,并返回double类型。

?static double multiply ( double num1, double num2 ),乘法,使用来计算结果的数字是封装后的num1和num2,并返回double类型。

?static double divide ( double num1, double num2 ),除法,使用来计算结果的数字是封装后的num1和num2,并返回double类型。

MyMath类提供了基础的四则运算方法,由于该类中所有的方法都是静态的,因此外界可以直接调用。在实现MyMath的过程中需要注意的是,这几个四则运算方法,参数都是double类型的,要进行运算的话,需要将double类型转换成一个BigDecimal对象,我们可以使用以下代码来创建一个BigDecimal对象:

·5·new BigDecimal(String.valueOf(number));

2.3.2 CalService类

CalService类主要是用来处理计算器的业务逻辑,用户在操作计算器时,此类将计算结果,并且返回,并且,会记录计算器的状态(用户的上一步操作)。包含以下方法:

?String callMethod( String cmd , String text ),调用方法并返回计算结果。

?String cal( String text , boolean isPercent ),用来计算加、减、乘、除法,并返回封装成String 内型的结果。参数text是显示框中的数字内容,boolean类型的参数isPercent代表是否有"%"

运算,如果有,便加上去。

?String setReciprocal( String text ),用来计算倒数,并返回封装成String内型的结果。

?String sqrt( String text ),用来计算开方,并返回封装成String内型的结果。

?String setOp( String cmd , String text ),设置操作符号。

?String setNegative( String text ),设置正负数,当text是正数时,返回负数的数字字符串,反之,则返回正数的数字字符串。

?String catNum( String cmd, String text ),连接输入的数字,每次点击数字,就把把新加的数字追加到后面,并封装成字符串返回。

?String backSpace( String text ),删除最后一个字符,并返回结果。

?String mCmd( String cmd, String text ),用来实现“M+”、“MC”、“MR”、“MS”与存储有关的功能。

?String clearAll(),清除所有计算结果。

?String clear( String text),清除上次计算结果。

CalService类中的各个方法都是用于处理计算的逻辑,其中callMethod方法可以看作中一个中转的方法,根据参数中的cmd值进行分发处理,例如调用该方法时将“CE”字符串作为cmd,那么该方法就根据这个字符串再调用需要执行“CE”的方法。如果需要做更好的程序解耦,我们可以将这些做成一个状态模式,将各个计算的方法都抽象成一个计算接口,该接口提供一个计算的方法,然后按照具体的情况,为该接口提供不同的实现,例如计算开方、计算倒数等实现,然后向callMethod传入不同的实现类,直接调用接口方法。

2.3.3 CalFrame类

CalFrame类继承javax.swing.Jframe类,主要是用于计算器界面的实现,此类中,排版了计算器中各个组件的位置,为组件增加事件监听器,用来监听用户的操作,并做调用相应的方法,主要包含以下方法:

?void initialize(),初始化计算器界面。

?ActionListener getActionListener(),如果动作监听器为空,则创建一个,并返回,如果不为空,直接返回。

?JTextField getTextField(),这个方法初始化输入框。

?JButton[] getMButton(),此方法获得计算器的存储操作键。

?JButton[] getRButton(),此方法获得计算器的结果操作键。

?JButton[] getNButton(),此方法获得计算器的其它操作键。

由于CalFrame是界面类,因此所需要进行的业务处理并不多,更多的是监听用户的操作,并进行分发处理。这就有点像web应用中的MVC模式中的V(视图),并不处理任务的业务逻辑,主要职责

·6·

是显示相应的数据。在本章中,CalFrame包括了一些监听器,监听界面事件并调用相关的业务方法,在实际开发中,我们可以将这些监听器作为MVC模式中的C(控制器)提取到另外的类中。

2.4 MyMath工具类实现

MyMath是一个工具类,主要用于处理加、减、乘、除四则运算,我们已经确定了实现这四个方法的时候,都使用BigDecimal对象进行计算。由于我们定义MyMath方法的时候,所有方法的参数都是double类刑的,因此我们可以提供一个工具方法来将double转换成BigDecimal类型。

以下代码根据一个double类型转换成一个BigDecimal。

代码清单:code\cal\src\org\crazyit\cal\MyMath.java

/**

* 为一个double类型的数字创建BigDecimal对象

* @param number

* @return

*/

private static BigDecimal getBigDecimal(double number) {

return new BigDecimal(number);

}

提供了这个工具方法后,我们可以在其他的计算方法中使用这个工具方法,选择将double的参数转换成BigDecimal对象,然后再进行具体的运算。

2.4.1 实现四则运算

编写了double转换的工具方法后,实现加、减、乘、除比较简单,由于BigDecimal已经为我们实现了,因此可以直接调用该类的相应方法即可实现,以下代码分别实现四则运算。

代码清单:code\cal\src\org\crazyit\cal\MyMath.java

加法:

public static double add(double num1, double num2) {

//调用工具方法将double转换成BigDecimal

BigDecimal first = getBigDecimal(num1);

BigDecimal second = getBigDecimal(num2);

return first.add(second).doubleValue();

}

减法:

public static double subtract(double num1, double num2) {

BigDecimal first = getBigDecimal(num1);

BigDecimal second = getBigDecimal(num2);

return first.subtract(second).doubleValue();

}

乘法:

public static double multiply(double num1, double num2) {

BigDecimal first = getBigDecimal(num1);

BigDecimal second = getBigDecimal(num2);

return first.multiply(second).doubleValue();

}

除法:

public static double divide(double num1, double num2) {

·7·

BigDecimal first = getBigDecimal(num1); BigDecimal second = getBigDecimal(num2);

return first.divide(second, DEFAULT_SCALE, BigDecimal.ROUND_HALF_UP) .doubleValue();

}

四个方法都是调用了BigDecimal 的方法来实现,Java 的BigDecimal 类为我们提供了许多强大的

计算方法,可以让我们很方便的进行数学运算,除本章介绍的方法我,读者可以查阅Java 的API 来学习该类的详细使用。

2.5 计算器主界面

这里实现计算器的界面,是用java 的Swing 实现的,主要用到的类有javax.swing.JFrame

(窗口),javax.swing.JButton (按钮),javax.swing.JT extField (输入框),并使用java.awt.BorderLayout 和java.awt.GridLayout 进行布局。在这里,我们使用“自下而下”的方法去观察此类,先看总体的排版实现,再看各个小组件的实现。为了方便布局,我们按相近的外观把计算器分为四个部分,见图2.4:

图 2.4 布局

2.5.1 初始化界面(initialize()方法)

此类就是一个JFrame (继承了javax.swing.JFrame ),用来做其它窗口或者组件的父容器,初始化计算器窗口的大概流程:

? 设置父窗口JFrame 标题、布局管理器、是否可以改变等属性 。 ? 增加输入与计算结果显示框。对应图2.4中的左上角那部分。 ? 增加左边存储操作键。 ? 增加结果操作键。

? 增加数字与其它运算符。

由于按外观相近的方式把组件分成了四部分,就方便程序中对相同属性的组件统一地创建与设置属性,对于界面的布局也更加地直观与方便,观察此图,我们可以使用BorderLayout 做总体布局,如图2.5所示。

·8·

图 2.5 布局管理器

以下代码设置父窗口JFrame标题和设置是否可以改变大小的属性。

//设置窗口的标题

this.setTitle("计算器");

//设置为不可改变大小

this.setResizable( false );

增加输入与结果显示的JT extField输入框,这里调用本类的getTextField()方法获取,并把它加入panel中的NORTH位置中:

//增加计算输入框

JPanel panel = new JPanel();

panel.setLayout( new BorderLayout(10,1) );

panel.add( getTextField(), BorderLayout.NORTH );

panel.setPreferredSize( new Dimension( PRE_WIDTH, PRE_HEIGHT ) );

增加左边存储操作键,本类需要通过getMButton()方法获取一个保存JButton对象的数组,getMButton方法我们将在2.5.2中实现。获取数组后,遍历数组,并把数组中的元素加到一个新建的JPanel中,最后再把这个JPanel加到JFrame的相应位置:

//增加左边存储操作键

JButton[] mButton = getMButton();

//新建一个panel,用于放置按钮

JPanel panel1 = new JPanel();

//设置布局管理器

panel1.setLayout( new GridLayout( 5, 1, 0, 5 ) );

//迭代增加按钮

for( JButton b : mButton ) panel1.add(b);

增加结果操作键,这些结果操作键包括:Back,CE,C。通过本类的getRButton()方法获取一个保存JButton对象的数组,获取数组后,遍历数组,并把数组中的元素加到一个新建的JPanel中,最后再把这个JPanel加到JFrame相应的位置,具体实现的代码如下:

//增加结果操作键

·9·

JButton[] rButton = getRButton();

JPanel panel2 = new JPanel();

panel2.setLayout( new BorderLayout(1, 5) );

//新建一个panel,用于放置按钮

JPanel panel21 = new JPanel();

//设置布局管理器

panel21.setLayout( new GridLayout( 1, 3, 3, 3 ) );

//迭代增加按钮

for( JButton b : rButton ) panel21.add(b);

接下来将其他的按键加入到界面的JPanel对象中,这些操作键主要包括数字键和其他的一些运算键,我们同样的通过一个getNButton方法来返回这些操作键对应的JButton对象,最后将这些JButton 对象加入到相应的JPanel中,加入到JPanel并设置相应布局的代码如下:

//增加数字与其它运算符

JButton[] nButton = getNButton();

//新建一个panel,用于放置按钮

JPanel panel22 = new JPanel();

//设置布局管理器

panel22.setLayout( new GridLayout( 4, 5, 3, 5 ) );

//迭代增加按钮

for( JButton b : nButton ) panel22.add(b);

//把新增加的面板加到frame

this.add(panel);

在本小节中,我们通过getMButton、getRButton和getNButton方法来返回不同的JButton数组,然后再对这些数组进行遍历,将每一个JButton加入到界面中。这一个返回JButton数组的方法并没有实现,下面将介绍如何实现这三个方法。

以上所有的代码均在code\cal\src\org\crazyit\cal\CalFrame.java中。

2.5.2 创建运算键

运算键主要包括数字键与基本运算键,数字键从0到9,基本运算键包括开方、正负、小数点等键,主要实现计算器界面的getNButton方法即可。以下是该方法的实现。

代码清单:code\cal\src\org\crazyit\cal\CalFrame.java

private JButton[] getNButton() {

// 这个数组保存需要设置为红色的操作符

String[] redButton = { "/", "*", "-", "+", "=" };

JButton[] result = new JButton[nOp.length];

for (int i = 0; i < this.nOp.length; i++) {

// 新建按钮

JButton b = new JButton(this.nOp[i]);

// 为按钮增加事件

b.addActionListener(getActionListener());

// 对redButton排序,才可以使用binarySearch方法

Arrays.sort(redButton);

// 如果操作符在redButton出现

if (Arrays.binarySearch(redButton, nOp[i]) >= 0) {

b.setForeground(Color.red);

} else {

b.setForeground(Color.blue);

·10·

}

result[i] = b;

}

return result;

}

以上代码需要注意的是,我们需要提供一个红色按键的字符串数组,在遍历所有的需要创建的按键数组时,就需要作判断,如果按键数组里面存在红色按键数组的某个元素,就需要调用JButton的setForeground方法来设置该按钮的字体颜色。在代码中我们不能看到该方法帮我们创建了哪些按键,代码中使用了一个nOp的字符串数组来保存需要创建的按键,该数组包含的内容如下:private String[] nOp = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*",

"%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };

2.5.3 创建操作按键

操作按键的创建与运算键的创建基本一致,只是所有的按键的字体都必须是红色的,创建操作按钮,我们需要实现getMButton和getRButton方法,以下是这两个方法的具体实现。

代码清单:code\cal\src\org\crazyit\cal\CalFrame.java

private JButton[] getMButton() {

JButton[] result = new JButton[mOp.length + 1];

result[0] = getButton();

for (int i = 0; i < this.mOp.length; i++) {

// 新建按钮

JButton b = new JButton(this.mOp[i]);

// 为按钮增加事件

b.addActionListener(getActionListener());

// 设置按钮颜色

b.setForeground(Color.red);

result[i + 1] = b;

}

return result;

}

private JButton[] getRButton() {

JButton[] result = new JButton[rOp.length];

for (int i = 0; i < this.rOp.length; i++) {

// 新建按钮

JButton b = new JButton(this.rOp[i]);

// 为按钮增加事件

b.addActionListener(getActionListener());

// 设置按钮颜色

b.setForeground(Color.red);

result[i] = b;

}

return result;

}

getMButton创建的是界面左侧的操作键,getRButton创建的是运作键上面的操作键,getMButton 和getRButton创建的操作键如下:

//getMButton

private String[] mOp = { "MC", "MR", "MS", "M+" };

//getRButton

·11·private String[] rOp = { "Back", "CE", "C" };

创建完界面元素后,我们可以运行计算器,具体的效果如图2.4所示。

2.5.4 增加事件监听器

在上一节中,我们注意到程序为JButton类型的组件增加了事件监听器,这个事件监听器是用来响应用户的鼠标操作。我们使用java.awt.event.ActionListener接口来创建一个事件监听器,主要是实现接口中的actionPerformed( ActionEvent e )方法,当监听器监听到用户的操作时,会自动调用此方法,并在此方法中处理业务逻辑,再把数据返回显示给用户。见以下代码。

代码清单:code\cal\src\org\crazyit\cal\CalFrame.java

actionListener = new ActionListener(){

public void actionPerformed( ActionEvent e ) {

String cmd = e.getActionCommand();

String result = null;

try {

//计算操作结果

result = service.callMethod( cmd, textField.getText() );

} catch( Exception e1 ) {

System.out.println( e1.getMessage() );

}

//处理button的标记

if( cmd.indexOf("MC") == 0 ) {

button.setText("");

} else if( cmd.indexOf("M") == 0 && service.getStore() > 0 ) {

button.setText("M");

}

//设置计算结果

if( result != null ) {

textField.setText( result );

}

}

};

从上面代码中可以看到,这里是通过实现java.awt.event.ActionListener接口中的actionPerformed( ActionEvent e )方法去创建一个java.awt.event.ActionListener类型的内部类,并在actionPerformed方法中处理业务逻辑。

首先,调用CalService实例中的callMethod方法去处理计算,并把结果返回。

result = service.callMethod( cmd, textField.getText() );

再设置标志存储结果类型的存储标记,如果是点击“MC”按钮,就把标记设置为空,如果是点击“MS”,“MR”,“M+”,并且存储结果大于0,就把标记设置为“M”,这里弄不明白的读者,可以先试着使用一下windows计算器的这几个按钮,再看这里就很容易理解了。

if( cmd.indexOf("MC") == 0 ) {

button.setText("");

} else if( cmd.indexOf("M") == 0 && service.getStore() > 0 ) {

button.setText("M");

}

最后把计算结果设置到结果文本显示框中,显示给使用者。

if( result != null ) {

textField.setText( result );

}

·12·

在监听器中,我们调用了CalServer的callMethod方法来取得操作的结果,换言之,界面中的每次点击都会执行该方法,callMethod我们并没有提供任何实现,在下一小节,我们将实现该方法。

2.6 计算业务处理

在2.3章节中,我们建立了一个类名为CalService的类来处理计算器的计算业务,该类处理了整个应用中的大部分业务,其中包括数字运算,存储运算,操作结果等业务。有四个重要的属性:firstNum 代表第一个操作数,secondNum代表第二个操作数,lastOp代表上次用户所做的操作, isSecondNum 代表是否第二个操作数。

2.6.1 计算四则运算结果

在使用计算器计算加、减、乘、除法的过程中,正常的情况应该是用户先输入第一个操作数,再点击加、减、乘、除计算符号,再输入第二个操作数,最后点“=”号计算出结果,所以这时用firstNum 去保存用户输入的第一个操作数,secondNum去保存第二个操作数,lastOp去保存计算符号或者其它操作,isSecondNum用来判断用户是在输入第几个操作数。

在用户输入数字的时候(包括“0123456789.”),首先判断是第一个操作数还是第二个,如果是第一个,就把用户新输入的数字追加到原来数字的后面,并做为结果返回;如果是第二个,直接返回结果,并把isSecondNum标志为false,用户继续输入数字的时候,就把数字追加到原来数字的后面做为结果返回,见以下代码。

代码清单:code\cal\src\org\crazyit\cal\CalService.java

public String catNum( String cmd, String text ) {

String result = cmd;

//如果目前的text不等于0

if( !text.equals("0") ) {

if( isSecondNum ) {

//将isSecondNum标志为false

isSecondNum = false;

} else {

//刚返回结果为目前的text加上新点击的数字

result = text + cmd;

}

}

//如果有.开头,刚在前面补0

if( result.indexOf(".") == 0 ) {

result = "0" + result;

}

return result;

}

当用户点击“+-*/”(四则运算)的时候,就把lastOp设置为其中一个符号,这个变量用来记录用户正要进行计算的类型,见以下代码。

代码清单:code\cal\src\org\crazyit\cal\CalService.java

public String setOp( String cmd , String text ) {

//将此操作符号设置为上次的操作

https://www.sodocs.net/doc/3e584471.html,stOp = cmd;

//设置第一个操作数的值

this.firstNum = text;

·13·

//将第二个操作数赋值为空

this.secondNum = null;

//将isSecondNum标志为true

this.isSecondNum = true;

//返回空值

return null;

}

在上面的代码中,可以看到,除了设置lastOp外,还把输入的数字设置给firstNum,把secondNum 设置为空,并把isSecondNum设置为true,代表下次输入数字时,要清空输入框并重新输入。

最后用户点击“=”号时,就是程序计算出最后结果的时候,此类的String cal( String text , boolean isPercent )方法实现了此计算,注意到这个方法的第二个参数isPercent,这是计算器的“%”号操作,如果有这种操作,第二个操作数就等于两数相乘再除以100,请看以下代码。

代码清单:code\cal\src\org\crazyit\cal\CalService.java

public String cal( String text , boolean isPercent )

throws Exception {

//初始化第二个操作数

double secondResult = secondNum == null

? Double.valueOf( text ).doubleValue()

: Double.valueOf( secondNum ).doubleValue();

//如果除数为0,不处理

if( secondResult == 0 && https://www.sodocs.net/doc/3e584471.html,stOp.equals("/") ) {

return "0";

}

//如果有"%"操作,则第二个操作数等于两数相乘再除以100

if( isPercent ) {

secondResult = MyMath.multiply( Double.valueOf( firstNum )

, MyMath.divide( secondResult, 100 ) );

}

//四则运算,返回结果赋给第一个操作数

if( https://www.sodocs.net/doc/3e584471.html,stOp.equals("+") ) {

firstNum = String.valueOf(

MyMath.add( Double.valueOf( firstNum ), secondResult ) );

}

else if( https://www.sodocs.net/doc/3e584471.html,stOp.equals("-") ) {

firstNum = String.valueOf(

MyMath.subtract( Double.valueOf( firstNum ), secondResult ) );

} else if( https://www.sodocs.net/doc/3e584471.html,stOp.equals("*") ) {

firstNum = String.valueOf(

MyMath.multiply( Double.valueOf( firstNum ), secondResult ) );

}

else if( https://www.sodocs.net/doc/3e584471.html,stOp.equals("/") ) {

firstNum = String.valueOf(

MyMath.divide( Double.valueOf( firstNum ), secondResult ) );

}

//给第二个操作数重新赋值

secondNum = secondNum == null ? text : secondNum;

//把isSecondNum标志为true

this.isSecondNum = true;

return firstNum;

}

·14·

上面计算结果中,经历了几个步骤,首先,确定secondNum的值,如果secondNum为空,secondNum就等于最后输入的数字,如果不为空,则等于原来的值,如果有“%”号操作,则secondNum 再等于两数相乘除以100的结果;然后根据lastOp的值(+、-、*、/)去调用MyMath类中的add、subtract、multiply、divide方法,并把返回的结果保存到firstNum;最后把secondNum设置为空,把firstNum当做结果返回。

2.6.2 存储操作

定义一个double类型的属性store来充当存储器,在用户点击“MC(清除)”、“M+(累加)”、“MR (读取)”、“MS(保存)”操作时,就调用此方法,再根据得到的字符串去进行清除、累加、读取、保存操作,见以下代码。

代码清单:code\cal\src\org\crazyit\cal\CalService.java

public String mCmd( String cmd, String text ) {

if( cmd.equals( "M+" ) ) {

//如果是"M+"操作,刚把计算结果累积到store中

store = MyMath.add( store, Double.valueOf( text ) );

} else if( cmd.equals( "MC" ) ) {

//如果是"MC"操作,则清除store

store = 0;

} else if( cmd.equals( "MR" ) ) {

//如果是"MR"操作,则把store的值读出来

isSecondNum = true;

return String.valueOf( store );

} else if( cmd.equals( "MS" ) ) {

//如果是"MS"操作,则把计算结果保存到store

store = Double.valueOf( text ).doubleValue();

}

return null;

}

程序中提供了一个store的属性用来保存计算结果,当用户点击了“M+”时,就将结果加到store 中,点击了“MC”时,就将store设置为0,点击了“MR”,则将store的值读取,点击了“MS”,则将store设置为当前的结果。

2.6.3 实现开方、倒数等

开方与倒数的计算实现都比较简单,开方是直接使用Math类的sqrt方法去计算接收到的数值,并且返回结果:

public String sqrt(String text) {

// 将isSecondNum标志为true

this.isSecondNum = true;

// 计算结果并返回

return String.valueOf(Math.sqrt(Double.valueOf(text)));

}

倒数是调用MyMath的divide方法去计算1与接收到的数值相除的值。

代码清单:code\cal\src\org\crazyit\cal\CalService.java

public String setReciprocal(String text) {

// 如果text为0,则不求倒数

if (text.equals("0")) {

·15·

return text;

} else {

// 将isSecondNum标志为true

this.isSecondNum = true;

// 计算结果并返回

return String.valueOf(MyMath.divide(1, Double.valueOf(text)));

}

}

2.6.4 实现倒退操作

当我们的程序中得到用户在界面输入的相关数字时,如果用户进行了倒退操作,我们可以将用户输入的数字进行截取,如果接收到的字符串是“0”或者为null,则不作任何操作,直接返回,否则,我们将使用String的substring方法进行处理,将输入字符串的最后一位截取。以下方法实现倒退操作。

代码清单:code\cal\src\org\crazyit\cal\CalService.java

public String backSpace(String text) {

return text.equals("0") || text.equals("") ? "0" : text.substring(0,

text.length() - 1);

}

2.6.5 清除计算结果

清除所有计算结果,把firstNum与secondNum都设置为原始值,并返回firstNum,在CalService 中提供了一个clearAll方法,用于清除所有的计算结果。

代码清单:code\cal\src\org\crazyit\cal\CalService.java

public String clearAll() {

// 将第一第二操作数恢复为默认值

this.firstNum = "0";

this.secondNum = null;

return this.firstNum;

}

2.6.6 实现中转方法(callMethod)

在前面的章节中,我们已经实现了各个方法,例如四则运算、开方、倒数、清除计算等,但是在界面的监听器中,只会调用CalService的callMethod方法进行运算,因此我们需要对callMethod进行相关的实现。

代码清单:code\cal\src\org\crazyit\cal\CalService.java

public String callMethod(String cmd, String text) throws Exception {

if (cmd.equals("C")) {

return clearAll();

} else if (cmd.equals("CE")) {

return clear(text);

} else if (cmd.equals("Back")) {

return backSpace(text);

} else if (numString.indexOf(cmd) != -1) {

return catNum(cmd, text);

} else if (opString.indexOf(cmd) != -1) {

·16·

return setOp(cmd, text);

} else if (cmd.equals("=")) {

return cal(text, false);

} else if (cmd.equals("+/-")) {

return setNegative(text);

} else if (cmd.equals("1/x")) {

return setReciprocal(text);

} else if (cmd.equals("sqrt")) {

return sqrt(text);

} else if (cmd.equals("%")) {

return cal(text, true);

} else {

return mCmd(cmd, text);

}

}

CalService中的callMethod方法,只是判断输入命令,再决定调用具体的哪个方法处理计算。例如监听器监听到用户点击了倒退了按键,那么callMethod方法就会根据点击的按键文本来找到backSpace方法。当然,使用这么多的if…else…并不是最佳的解决方案,我们可以使用一些的设计模式来解决。有兴趣的读者可以了解相关的设计模式,考虑如何解决这些问题。

2.7 本章小结

本章主要是通过一个仿Windows计算器的基本实现,向读者讲解Java swing编程,示范了JFrame,JPanel,JT extField,JButton的使用。界面布局方面,使用到了awt的BorderLayout与GridLayourt 布局管理器去布局。并且向读者介绍了ActionLisner事件监听器的使用,介绍如何监听用户的动作响应用户,并且向用户返回有用的信息。本章中实现的计算相对较为简单,有兴趣的读者可以在本文的基础上实现更强大的计算器(科学型计算器)。另外需要注意的是,本章程序编写的过程中,使用了许多if…else…语句,对设计模式有一定了解或者希望对此有了解的读者,可以尝试去重构本章的代码,消除这些if…else…。在下面的章节中,我们会在编写的过程中,展示一些设计模式的概念。

汇编语言实现十进制加减计算器

课程设计 题目十进制数加减计算器学院计算机科学与技术 专业计算机科学与技术 班级计算机0808班 姓名何爽 指导教师袁小玲 2010 年12 月31 日

课程设计任务书 学生姓名:何爽专业班级:计算机0808班 指导教师:袁小玲工作单位:计算机科学与技术学院 题目: 十进制数加减计算器的设计 初始条件: 理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。 实践:计算机学院科学系实验中心提供计算机和软件平台。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)十进制数加减计算器的设计。 (2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。 (3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。 (4)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 在正文第一行写课程设计题目; 1.需求说明(要求、功能简述)或问题描述; 2.设计说明(简要的分析与概要设计); 3.详细的算法描述; 4.源程序与执行结果(含测试方法和测试结果); 5.使用说明; 6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该 程序进一步改进扩展的设想)。 时间安排: 设计时间一周:周1:查阅相关资料。 周2:系统分析,设计。 周3~4:编程并上机调试。 周5:撰写课程设计报告。 设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。 设计报告书收取时间:20周的星期五下午5:00之前。 指导教师签名: 2010年12月31日 系主任(或责任教师)签名: 2010年12月31日

科学型计算器的使用

科学型计算器的使用 今天别人让我算arcsin 0.9428,着实把我为难了一下,折腾了一会儿终于出来了,写下。选择科学型计算器之后,输入0.9428,再选择下面的那个Inv(复选框) inverse [?in?v?:s] adj. 相反的, 反向的,再点sin 就是出来结果了。 先选中Inv 就表示要是进行arc运算了,再点sin或cos就行了 以下是各个键的含义: 下表描述了计算器的功能: 按钮功能 % 按百分比的形式显示乘积结果。输入一个数,单击“*”,输入第二个数,然后单击“%”。例如,50 * 25% 将显示为12.5。也可执行带百分数的运算。输入一个数,单击运算符(“+”、“-”、“*”或“/”),输入第二个数,单击“%”,然后单击“=”。例如,50 + 25%(指的是50 的25%)= 62.5。 ( 开始括号的新层。当前的层数显示在“)”按钮上方的框中。括号的最多层数为25。 ) 结束括号的当前层。 * 乘法。 + 加法。 +/- 改变显示数字的符号。 - 减法。 . 插入小数点。 / 除法。 0–9 将此数字置于计算器的显示区。1/x 计算显示数字的倒数。 = 对上两个数字执行任意运算。若要重复上一次的运算,请再次单击“=”。 A–F 在数值中输入选中字母。只有在十六进制模式为开启状态时该按钮才可用。 And 计算按位AND。未定义逻辑运算符的行为,除非输入的数字为整数。 Ave 计算“统计框”对话框中显示数值的平均值。若要计算平均方值,请使用“Inv”+“Ave”。只有先单击“Sta”,该按钮才可用。 Backspace 删除当前显示数字的最后一位。 站将显示数字转换为二进制数字系统。最大的无符号二进制数值是将64 位全都设置为1。 C 清除当前的计算。CE 清除显示数字。 cos 计算显示数字的余弦。若要计算反余弦,请使用“Inv”+“cos”。若要计算双曲余弦,请使用

最新4位数加法计算器

…………………………………………………………最新精品资料推荐…………………………………………………… 安庆师范大学 2014级单片机原理与应用 课程设计报告 课题名称4位数加法计算器的设计 姓名吴昊天、伍浩然、王鹏、万吉 学号070814018、070814008、070814005、070814001 院、系、部计算机学院物联网工程 专业物联网工程 指导教师汪文明 2016年 6月 6日

目录 一、绪言 (1) 二、系统设计 (1) 2.1设计任务 (1) 2.2方案比较与论证 (1) 2.2.1系统整体流程图 (2) 2.2.2单片机的选择方案论证 (2) 2.2.3键盘选择方案论证 (2) 2.2.4显示模块的选择方案论证 (2) 2.2.5蜂鸣器的选择方案论证 (2) 三、硬件电路设计 (2) 3.1计算器的控制电路图 (2) 3.2矩阵键盘的设计 (3) 3.3 LCD1602显示电路的设计 (3) 3.4蜂鸣器驱动电路的设计 (4) 3.5主要元器件选择 (4) 四、程序流程图 (5) 五、c语言程序设计 (5) 六、计算器的仿真 (19) 6.1 Keil调试 (19) 6.2 Proteus调试 (19) 七、结束语 (20) 八、参考文献 (21)

一、绪言 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。电子时钟是现代社会中的主要计时工具之一,广泛应用于手机,电脑,汽车等社会生活需要的各个方面,及对时间有要求的场合。本设计采用AT89C52单片机作为主要核心部件,附以上电复位电路,时钟电路及按键调时电路组成。数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。 二、系统设计 2.1 设计任务 1、通过4*4矩阵键盘输入数字及运算符; 2、可以进行4位十进制数以内的加法预算。如果计算结果超出四位数,则全部显示“E”; 3、可以进行加减乘除所有运算; 4、添加其他功能。 2.2 方案比较与论证 2.2.1 系统整体流程图 图1 系统整体流程图 2.2.2 计算器的控制方案论证 用4*4的矩阵键盘组成0-9数字键及加、减、乘、除、等于、清零按键,LCD屏幕实时显

普通的计算器使用方法

普通的计算器相信大家都会用,大家经常用来加减乘除,快速计算结果。有些小小的功能键能事半功倍,而这些功能可能有很多人从未使用过,在网上找了些资料,又根据自己实际使用中的经验,把那些个功能键的作用及使用方法给整理了一下。 M+:把目前显示的值放在存储器中,是计算结果并加上已经储存的数,(如屏幕无"M"标志即存储器中无数据,则直接将显示值存入存储器)。 M-:从存储器内容中减去当前显示值,是计算结果并用已储存的数字减去目前的结果,如存贮器中没有数字,按M-则存入负的显示屏数字。 MS:将显示的内容存储到存储器,存储器中原有的数据被冲走。 MR:按下此键将调用存储器内容,表示把存储器中的数值读出到屏幕,作为当前数值参与运算。 MC:按下时清除存储器内容(屏幕"M"标志消除)。 MRC:第一次按下此键将调用存储器内容,第二次按下时清除存储器内容。 GT:GT=Grand Total 意思是总数之和,即按了等号后得到的数字全部被累计相加后传送到GT存储寄存器。按GT后显示累计数,再按一次清空。 MU(Mark-up and Mark-down键):按下该键完成利率和税率计算,详见例3; CE:清除输入键,在数字输入期间按下此键将清除输入寄存器中的值并显示"0",可重新输入; AC:是清除全部数据结果和运算符。 ON/C:上电/全清键,按下该键表示上电,或清除所有寄存器中的数值。 使用举例: 例1. 先按32×21,得数是672。然后按下“M+”,这样就可以把这个答案保存下来,然后我们按“8765-”,再按“MR”就可以把刚才的672调出来了,最后我们就可以得到答案8093。

例2. 在计算时使用记忆键能够使操作简便,例如计算×2+×3可以这样做:按5、.、4、5、×、2、=,会显示出,按M+(记忆),按4、.、7、×、3、=,会显示出,按M+(记忆),按MR会显示出25(呼出记忆的两个数相加后的结果)。 例3、 MU(Mark-up and Mark-down键):按下该键完成利率和税率计算. 关于"MU"的加减乘除四项功能用法如下: 乘法 A×B MU 相当于 A+(A+B%) 用途1、知道本年数额与增长率,求预计明年数额。如今年销售收入100,预计增长率为%,求明年数。按100 X MU 即出结果为 用途2、计算增值税,由不含税价计算含税价。如不含税销售收入3500元,计算含税销售收入,假定税率为17%,按3500 X 17 MU 即出结果4095 减法 A-B MU 相当于(A-B)/B 的百分比 用途知道当年收入与去年收入求增长率。如今年3000,去年2800,计算增长率,按3000-2800 MU 即出结果当然结果是百分比 除法 A÷B MU 相当于A/(1-B%) 用途1、求成本为120,销售利润率为25%,求销售收入,按120÷25 MU 即出结果160 (看清了,不是成本利润率,成本利润率公式是A x(1+B%)) 用途2、计算消费税组成计税价格,由不含税计算含税价,如不含税1200,适用税率30%,计算含税,按1200÷30 MU 即出结果1714. 加法 A+B MU 相当于(A+B)/B 的百分比

QTP测试Windows7计算器

手动录制一个windows计算器的两个整数的加法 录制脚本 Window("计算器").WinButton("Button").Click Window("计算器").WinButton("Button_2").Click Window("计算器").WinButton("Button_3").Click Window("计算器").WinButton("Button_4").Click Window("计算器").Close test Result结果截图 修改脚本,将两个加数、运算符参数化 1.录制脚本 Window("计算器").WinButton("Button").Click Window("计算器").WinButton("Button_2").Click Window("计算器").WinButton("Button_3").Click Window("计算器").WinButton("Button_4").Click Window("计算器").Close

2.将数据源参数化 3.手动选择修改按键

4.通过脚本修改数据 5.输出结果

6. test Result结果截图 插入检查单 录制脚本 Window("计算器").WinButton("Button").Click Window("计算器").WinButton("Button_2").Click Window("计算器").WinButton("Button_3").Click Window("计算器").WinButton("Button_4").Click Window("计算器").WinButton("Button_4").Check CheckPoint("Button_4") Window("计算器").Close test Result结果截图

十进制4位加法计数器设计

洛阳理工学院 十 进 制 4 位 加 法 计 数 器 系别:电气工程与自动化系 姓名:李奇杰学号:B10041016

十进制4位加法计数器设计 设计要求: 设计一个十进制4位加法计数器设计 设计目的: 1.掌握EDA设计流程 2.熟练VHDL语法 3.理解层次化设计的内在含义和实现 设计原理 通过数电知识了解到十进制异步加法器的逻辑电路图如下 Q3 则可以通过对JK触发器以及与门的例化连接实现十进制异步加法器的设计 设计内容 JK JK触发器的VHDL文本描述实现: --JK触发器描述 library ieee; use ieee.std_logic_1164.all; entity jk_ff is

port( j,k,clk: in std_logic; q,qn:out std_logic ); end jk_ff; architecture one of jk_ff is signal q_s: std_logic; begin process(j,k,clk) begin if clk'event and clk='0' then if j='0' and k='0' then q_s <= q_s; elsif j='0' and k='1' then q_s <= '0'; elsif j='1' and k='0' then q_s <= '1'; elsif j='1' and k='1' then q_s <= not q_s; end if; end if; end process; q <= q_s; qn <= not q_s; end one; 元件门级电路: 与门VHDL文本描述实现: --与门描述library ieee; use ieee.std_logic_1164.all;

科学计算器的科学用法

科学计算器的科学用法集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

科学计算器在统计学中的应用一.均差、方差的算法 如图中所圈出的按键是计算均值和方差过程中所需要用的键,下面开始具体的操作讲解。 1.首先进入方差分析的计算模式 打开科学计算器——MODE键——此时会出现三个选项(COMP/SD/REG),直接按数字键2就可以进入方差分析的模式。 PS:观察计算器的顶端位置会出现SD字样,说明已经进入该计算模式 2.录入待计算数据(此处以22,12,54,34,43,23六个数为例) 直接输入第一个数字22——按M+键输入第二个数字12——按M+键输入第三个数字54,依次类推,到最后一个数字结束时按M+键结束 3.进行计算 数据录取完毕之后按shift键(部分计算器是2ndf)——按数字键2此时会出现三个选项x???、x6n和x6n-1,其中第一个就是所求的均值,第三个就是所求的样本方差 点击数字键1然后输入等号就可以得到均值 点击数字键3然后输入等号就可以得到方差 值得注意的是计算完均值需要输出方差的时候需要先按shift键再按数字键3才可以的 此处例子的均值为31.11,方差为15.41 4.强调(恢复初始状态)

在用科学计算器进行均值和方差的计算时,在每次计算完毕之后需要将计算器恢复到默认状态,然后再进行其他的计算。 首先按shift键——然后按MODE键,此时已经进清除状态,界面会显示三个状态,分别是Mcl、Mode和All,选择其中任意一个然后输入=键就完成了相应的清除功能了。 选择2就是清除了方差和均值的计算模式, 选择3则清除了你对计算器所有的设置,回到了默认状态 另外,如果在一次方差和均值计算中不小心输错了数据,则需要首先清除方差均值计算模式,再次进入后重新计算,否则容易出现错误。二.排列组合的运算 排列组合所需要的是nPr、nCr这两个函数,,他们为同一个按键,按 组合:输入过程中先输入数字n的值,然后按nCr键,再输入m值,最后输入等号就可以得到结果咯 排列:输入过程中先输入数字n的值,按shift键,然后再按nCr键,再输入m值,最后输入等号就可以得到结果咯 5——nCr——2=10 5——shift——nCr——2=20 三.对数值的计算

计算器的使用方法

我们使用到的计算模式只有2种: COMP :基本算术运算 SD :标准差 下列介绍中一至八使用的是COMP 模式,九使用的是SD 模式 模式选择按键过程: MODE CLR 1 (此时选择的是COMP :基本算术运算模式) MODE CLR 2 (此时选择的是SD :标准差模式) 一、分数:需使用 ab/c 健 1、例如计算:5 231+ 按键过程为:1 ab/c 3 + 2 ab/c 5 = 2、例如计算:5 231? 按键过程为:1 ab/c 3 ? 2 ab/c 5 = 二、小数换成分数 1、例如0.68换成分数 按键过程为:0.68 = ab/c = 三、指数 1、例如计算5 8 按键过程为: 8 =∧5 2、例如计算()42- 按键过程为:( (-)2 )=∧4 3、例如计算2 3-

按键过程为:3∧ ( (-)2 )= (注:此时结果显示的是小数,按ab/c 转换成分数) 4、例如计算3227 按键过程为:27∧( 2 ab/c3 )= 四、对数:常规计算器只有g l 即以10为底的对数,在计算时需用到换地公式 b a b c c a log log log = 例如计算:2log 8 按键过程为:log2 ÷ log8 = (注:此时结果显示的是小数,按ab/c 转换成分数) 五:开方 1、 计算 9 按键过程为: 9= 2、 计算38 按键过程为:SHIFT 3 8 = 3、 计算416 按键过程为:4 SHIFT x 16= 六、计算组合数:使用nCr 健 1、计算4 10c 按键过程为:10 nCr 4=

科学计算器的科学用法

科学计算器在统计学中的应用 一.均差、方差的算法 如图中所圈出的按键是计算均值和方差过程中所需要用的键,下面开始具体的操作讲解。1.首先进入方差分析的计算模式 打开科学计算器——MODE键——此时会出现三个选项(COMP/SD/REG),直接按数字键2就可以进入方差分析的模式。 PS:观察计算器的顶端位置会出现SD字样,说明已经进入该计算模式 2.录入待计算数据(此处以22,12,54,34,43,23六个数为例)

直接输入第一个数字22——按M+键输入第二个数字12——按M+键输入第三个数字54,依次类推,到最后一个数字结束时按M+键结束 3.进行计算 数据录取完毕之后按shift键(部分计算器是2ndf)——按数字键2此时会出现三个选项x、x6n和x6n-1,其中第一个就是所求的均值,第三个就是所求的样本方差 点击数字键1然后输入等号就可以得到均值 点击数字键3然后输入等号就可以得到方差 值得注意的是计算完均值需要输出方差的时候需要先按shift键再按数字键3才可以的 此处例子的均值为31.11,方差为15.41 4.强调(恢复初始状态) 在用科学计算器进行均值和方差的计算时,在每次计算完毕之后需要将计算器恢复到默认状态,然后再进行其他的计算。 首先按shift键——然后按MODE键,此时已经进清除状态,界面会显示三个状态,分别是Mcl、Mode和All,选择其中任意一个然后输入=键就完成了相应的清除功能了。 选择2就是清除了方差和均值的计算模式, 选择3则清除了你对计算器所有的设置,回到了默认状态 另外,如果在一次方差和均值计算中不小心输错了数据,则需要首先清除方差均值计算模式,再次进入后重新计算,否则容易出现错误。二.排列组合的运算 排列组合所需要的是nPr、nCr这两个函数,,他们为同一个按键,按shift可以相互转换。其中nPr在计算排列即A n m时用到,而nCr则是在计算组合即C n m时用到,此处分别以( m=5、n=2)进行举例计算

计算器使用说明书

计算器使用说明书目录 取下和装上计算器保护壳 (1) 安全注意事项 (2) 使用注意事项 (3) 双行显示屏 (7) 使用前的准备 (7) k模式 (7) k输入限度 (8) k输入时的错误订正 (9) k重现功能 (9) k错误指示器 (9) k多语句 (10) k指数显示格式 (10) k小数点及分隔符 (11) k计算器的初始化 (11) 基本计算 (12) k算术运算 (12) k分数计算 (12) k百分比计算 (14) k度分秒计算 (15) kMODEIX, SCI, RND (15) 记忆器计算 (16) k答案记忆器 (16) k连续计算 (17) k独立记忆器 (17) k变量 (18) 科学函数计算 (18) k三角函数/反三角函数 (18) Ch。6 k双曲线函数/反双曲线函数 (19) k常用及自然对数/反对数 (19) k平方根﹑立方根﹑根﹑平方﹑立方﹑倒数﹑阶乘﹑ 随机数﹑圆周率(π)及排列/组合 (20) k角度单位转换 (21) k坐标变换(Pol(x, y)﹐Rec(r, θ)) (21) k工程符号计算 (22) 方程式计算 (22) k二次及三次方程式 (22) k联立方程式 (25) 统计计算 (27)

标准偏差 (27) 回归计算 (29) 技术数据 (33) k当遇到问题时 (33) k错误讯息 (33) k运算的顺序 (35) k堆栈 (36) k输入范围 (37) 电源(仅限MODEx。95MS) (39) 规格(仅限MODEx。95MS) (40) 取下和装上计算器保护壳 ?在开始之前 (1) 如图所示握住保护壳并将机体从保护壳抽出。 ?结束后 (2) 如图所示握住保护壳并将机体从保护壳抽出。 ?机体上键盘的一端必须先推入保护壳。切勿将显示屏的一端先推入保护壳。 使用注意事项 ?在首次使用本计算器前务请按5 键。 ?即使操作正常﹐MODEx。115MS/MODEx。570MS/MODEx。991MS 型计算器也必须至少每3 年更换一次电池。而MODEx。95MS/MODEx。100MS型计算器则须每2 年更换一次电池。电量耗尽的电池会泄漏液体﹐使计算器造成损坏及出现故障。因此切勿将电量耗尽的电池留放在计算器内。 ?本机所附带的电池在出厂后的搬运﹑保管过程中会有轻微的电源消耗。因此﹐其寿命可能会比正常的电池寿命要短。 ?如果电池的电力过低﹐记忆器的内容将会发生错误或完全消失。因此﹐对于所有重要的数据﹐请务必另作记录。 ?避免在温度极端的环境中使用及保管计算器。低温会使显示画面的反应变得缓慢迟钝或完全无法显示﹐同时亦会缩短电池的使用寿命。此外﹐应避免让计算器受到太阳的直接照射﹐亦不要将其放置在诸如窗边﹐取暖器的附近等任何会产生高温的地方。高温会使本机机壳褪色或变形及会损坏内部电路。 ?避免在湿度高及多灰尘的地方使用及存放本机。注意切勿将计算器放置在容易触水受潮的地方或高湿度及多灰尘的环境中。因如此会损坏本机的内部电路。 双行显示屏

在win32工程下做计算器

课程设计报告 题目:在win32 application工程下计算器的设计与实现 小组成员:陈李元41212204 余斌41212202

目录1概述 1.1课程设计的内容 2系统需求分析 2.1系统目标 2.2重要功能 2.3开发环境 3设计过程 3.1主函数WinMain设计过程3.2窗口过程WndProc 4小结 5参考文献 附录1:程序代码 附录2:程序运行部分截图

1概述 1.1课程设计的内容 这次c++课程设计我们组选的是设计一个带界面的计算器,不是用MFC,而是在win32 application工程下做的带界面的计算器。它属于windows程序设计范畴。 我们主要是把功夫花在做界面上了,这个计算器本身所具有的功能很少,它只支持少量的算术运算。 2系统需求分析 2.1系统目标 我们在日常生活和学习中,经常会遇到一些关于数值的运算。所以我们组就着手开始做一个计算器方便我们的学习和生活。这个计算器它具有加法,减法,乘法,除法四种基本的算术运算。另外还具有计算N阶阶乘的功能,此外还具有求一个弧度的正弦(余弦和它功能类似要想求余弦事先做一些弧度的转化即可)。 该计算器用例图如下:

类图如下: 2.2重要功能 具备四种最基本的算术运算。另外还具有阶乘,求正弦的功能。 2.3开发环境 本程序是在visual c++ 6.0编译,链接,运行。它是在win32 application工程下所创建。 3设计过程 3.1主函数WinMain设计过程 首先在界面设计中我们要用到大量的windows API。这些函数都是在windows.h标准库中。

4位数加法计算器

安庆师范大学2014级单片机原理与应用 课程设计报告 课题名称4位数加法计算器的设计姓名吴昊天、伍浩然、王鹏、万吉 学号070814018 070814008 070814005 070814001 院、系、部计算机学院物联网工程 专业物联网工程 指导教师汪文明 2016 年6月6日

一、设计任务及要求:设计任务: 1、通过4*4矩阵键盘输入数字及运算符; 2、可以进行4位十进制数以内的加法预算。如果计算结果超出四位数,则全部显示 “ E ; 3、可以进行加减乘除所有运算; 4、添加其他功能。 要求: 首先进行预设计,根据设计的任务要求,先确定设计的硬件电路方案,然后进行硬件电路的初步设计,在计算机上画出硬件电路图,在老师的指导下进行修正硬件电路图,并对所涉及的参数进行计算。 在确定硬件的基础上,要进行软件的总体设计,包括软件主流程的设计以及各子程序的设计,同时,要写出详细的操作说明,如时间的调整方法,显示窗口的时间切换等,以配合软件的设计。 然后进入硬件的调试及编程工作,设计组内的同学可根据任务分工,有调试硬件各功能模块的,如键盘子程序、显示子程序等,有进行整体程序的编制的,各模块的编制过程中要注意资源的衔接。 最后进入联机调试,联机调试的原则也要采用分步走的原则,各个功能模块要逐步套入,通过一个再增加一项功能,从而达到设计的总体要求,不要上来编制个最大的程序,最后无法查找错误。 最后写出设计报告。 指导教师签名: 2016年6月6日 、成绩 指导教师签名: 年月曰 一、绪言 (1)

二、系统设计 (1) 2.1设计任务 (1) 2.2方案比较与论证 (1) 2.2.1系统整体流程图 (2) 222单片机的选择方案论证 (2) 2.2.3键盘选择方案论证 (2) 2.2.4显示模块的选择方案论证 (2) 2.2.5蜂鸣器的选择方案论证 (2) 三、硬件电路设计 (2) 3.1计算器的控制电路图 (2) 3.2矩阵键盘的设计................................................ (3) 3.3 LCD1602显示电路的设计 (3) 3.4蜂鸣器驱动电路的设计 (4) 3.5主要元器件选择 (4) 四、程序流程图 (5) 五、c语言程序设计 (5) 六、计算器的仿真 (19) 6.1Keil 调试 (19) 6.2Proteus 调试 (19) 七、结束语 (20) 八、参考文献 (21) 一、绪言 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日

实验十进制加减法计数器

实验1 十进制加减法计数器 实验地点:电子楼218 实验时间:2012年10月19日指导老师:黄秋萍、陈虞苏 实验要求:设计十进制加减法计数器,保留测试程序、设计程序、仿真结果 1.设计程序: module count(EN,CLK,DOUT,F,RST); input EN,CLK,F,RST; output [3:0]DOUT; reg [3:0]DOUT; always@(posedge CLK) begin :abc if(EN) if(!RST) if(F) begin :a DOUT=DOUT+1; if(DOUT==10) DOUT=0; end //END A else begin :b DOUT=DOUT-1; if(DOUT==15) DOUT=9; end else DOUT=0; else DOUT=DOUT; end endmodule 2.测试程序 `timescale 10ns/1ns module test_count; wire [3:0] DOUT; reg EN,F,RST,CLK; count M(EN,CLK,DOUT,F,RST); initial begin :ABC CLK=0; EN=0;

RST=1; F=1; #100 EN=1; #200 RST=0; #1500 F=0; #3000 $stop; end always #50 CLK=~CLK; initial $monitor("EN=%b,F=%b,RST=%b,DOUT%D",EN,F,RST,DOUT); endmodule 3.测试结果 # EN=0,F=1,RST=1,DOUT x # EN=1,F=1,RST=1,DOUT x # EN=1,F=1,RST=1,DOUT 0 # EN=1,F=1,RST=0,DOUT 0 # EN=1,F=1,RST=0,DOUT 1 # EN=1,F=1,RST=0,DOUT 2 # EN=1,F=1,RST=0,DOUT 3 # EN=1,F=1,RST=0,DOUT 4 # EN=1,F=1,RST=0,DOUT 5 # EN=1,F=1,RST=0,DOUT 6 # EN=1,F=1,RST=0,DOUT 7 # EN=1,F=1,RST=0,DOUT 8 # EN=1,F=1,RST=0,DOUT 9 # EN=1,F=1,RST=0,DOUT 0 # EN=1,F=1,RST=0,DOUT 1 # EN=1,F=1,RST=0,DOUT 2 # EN=1,F=1,RST=0,DOUT 3 # EN=1,F=1,RST=0,DOUT 4 # EN=1,F=1,RST=0,DOUT 5 # EN=1,F=0,RST=0,DOUT 5 # EN=1,F=0,RST=0,DOUT 4 # EN=1,F=0,RST=0,DOUT 3 # EN=1,F=0,RST=0,DOUT 2 # EN=1,F=0,RST=0,DOUT 1 # EN=1,F=0,RST=0,DOUT 0 # EN=1,F=0,RST=0,DOUT 9 # EN=1,F=0,RST=0,DOUT 8 # EN=1,F=0,RST=0,DOUT 7 # EN=1,F=0,RST=0,DOUT 6 # EN=1,F=0,RST=0,DOUT 5

RealCalc科学计算器使用说明.

====Basic Operation==== ===Basic Operation=== The number keys[0]to[9]and decimal point[DP]are used to enter numbers.To enter a negative number,press[SGN]after entering the number. To enter an exponent,press[EXP]then enter the exponent using the number and[SGN]keys. The[DEL]key deletes the last digit entered and can be used to correct a number or exponent. The[CLR]key clears the display ready for a new calculation. The[SHIFT]key is used to access the secondary function of each key(displayed above the key in orange.While shift is active,'SHIFT'will be shown on the display.Press[SHIFT]again to cancel shift mode. As an alternative to using shift,the secondary function of each key can also be accessed by holding down the key.This feature can be disabled in Settings. ====Display Modes==== ===Display Modes=== There are four display modes for calculation https://www.sodocs.net/doc/3e584471.html,e the[FSE]key to cycle through the modes. The display will show'FIX','SCI','ENG'or blank to indicate the current mode. ===Decimal Places===

10进制加法计数器课程设计

西北师范大学知行学院 数字电子实践论文 课题:74ls161组成的十进制加法计数器 (置数法) 班级:14电本 学号:14040101114 姓名:于能海

指导老师:崔用明 目录 第1章前言 (1) 1.1 摘要 (1) 1.2 设计目的 (2) 1.3 设计内容及要求 (2) 第2章设计方案 (3) ....................................................................................................................... 错误!未定义书签。 2.1主要芯片功能介绍 (3) 2.2.1 四位二进制计数器74161介绍 (3) ............................................................................................................... 错误!未定义书签。 2.2 工作原理 (4) 第3章硬件设计 (4) 3.1 单元电路设计 (4) 3.2 总硬件电路图 (5) 第4章仿真与试验 (6) 4.1 仿真结果 (6) 4.2 调试中遇到的问题 (7) 第5章结论和体会 (8)

第1章前言 1.1 摘要在数字电路技术的课程中,计数器的功能是记忆脉冲的个数,它是数字系统中应用最广泛的基本时序逻辑构件。计数器在微型计算机系统中的主要作用就是为CPU和I/O设备提供实时时钟,以实现定时中断、定时检测、定时扫描、定时显示等定时控制,或者对外部事件进行计数。一般的微机系统和微机应用系统中均配置了定时器/计数器电路,它既可当作计数器作用,又可当作定时器使用,其基本的工作原理就是"减1"计数。计数器:CLK输入脉冲是一个非周期事件计数脉冲,当计算单元为零时,OUT输出一个脉冲信号,以示计数完毕。 本十进制加法计数器是基于74161芯片而设计的, 该十进制加法计数器设计理念是用于工厂流水线上产品计数,自动计数,方便简单。 关键词:74ls161计数器 Introduction In the course of digital circuit technology, the counter memory function is the number of pulses, it is a digital system, the most widely used basic sequential logic components. The main role of the counter in the micro-computer system is to provide real-time clock for the CPU and I / O devices to achieve the timer interrupt, timing detection, scheduled scanning, the timing display timing control, or to count external events. General computer systems and computer application systems are equipped with a timer / counter circuit, it can as a counter action, but also as a timer, the basic working principle is "minus 1" count. Counter: CLK input pulse is a non-periodic event count pulses to zero when calculating unit, OUT outputs a pulse signal, to show the count is completed. The decimal addition counter is designed based on the 74161 chip, the low potential sensor senses when to rely on external signals, sensors in an object within the sensing range, otherwise it is a high potential. Within the sensing range of the sensor when an object is moved out of date, sensor potential from high to low and then high, appears on the edge. Counter is automatically incremented and displayed on a digital control. The decimal addition counters have two seven-segment LED. It can count from 0 to 99 objects, and easy to expand. The design concept of decimal addition counter is used to count on a factory assembly line products, automatic counting, convenient and simple. Keywords:74ls161counter

科学计算器的使用方法

一、计算器使用的状态 对于两类计算器来说,使用的是数值计算,所采用的状态是十进制状态: 1、学生计算器(KDT科灵通科学计算器):按模式键 第一次屏幕显示 第二次屏幕显示 按2次,再按1,则进入十进制计算状态,这时在屏幕上会出现D的标志。 2、普通计算器(价格10元以内):按键 直接按键,依次在屏幕上会分别显示:DEG、RAD、GRAD,表示十进制、弧度、百分率。要选择DEG,即在屏幕上看到DEG的标志。 二、角度的输入与计算 两种计算器都可以进行角度的运算以及转换: 1、学生计算器(KDT (1 例如输入129°59′26″,操作如下: 输入1295926

这时屏幕的第二行显示:129°59°26°,说明已经将角度输入 (2)角度经过三角函数的计算之后,显示的角度是十进制,即129°59′26″屏幕上显示129.353336,这时需要将十进制的角度转换回六十进制。 按129.353336→129°59°26°。 2 (1)角度的输入:输入角度要以六十进制输入,度和分秒以小数点隔开, 可将六十进制的角度值转换成十进制,用于角度计算或三角函数计算。 具体操作如下:输入129.5926 这时屏幕上显示结果129.9905556,可以进行角度的加减或三角函数计算。 (2)计算结果显示:当角度计算完毕后,需要显示角度的结果,即六十进制的角度结果, 按 具体操作如下:129.9905556→按 这时屏幕上显示计算结果129.592600,可以将成果记录下来。 三、测量误差的精度评定(统计计算) 两种计算器都可以进行标准偏差统计计算: 1、学生计算器(KDT科灵通科学计算器):在标准偏差统计模式下 (1)进入标准偏差统计计算模式:按 显示 ) 其中n x x2m,即中误差。

简易加减法计算器

电子技术课程设计 题目:简易加减法计算器 一、设计课题:简易加减法计算器 二、设计任务和要求: 1、用于两位以下十进制数的加减运算。 2、以合适方式显示输入数据及计算结果。 三、原理电路设计 1、方案的比较 对于简单加减计算器可有三种不同的方案 ①用数/模转换,与模拟电路中的加减计算器进行简单的加减计 算。先用74LS147二-十进制优先编码器转化为二进制进行输A,然后数模转化模拟信号,进行加减计算后,转化为数字信号输 出。 此方案思路较明确,但经过二次数模相互转换,精确率较低; 具体输出时的负数效应,与单输入的二进制转化为十进制时电 路较复杂,无成块的集成电路,致使误差率较大。 ②可用数字电路中4位超前进位加法器74LS283与方案一输入相 同;后用三态输出CMOS门电路进行选择输入,进行加法运算

后输出,输出时,注意负数的问题与在输出中2进制与10进制关系的问题。还有寄存器的问题。 此方案思路明确,比较精确,此中的2进制与10进制问题需复杂门电路解决无现成集成元件,存在太多的散元件。减法运算需要反码进行运算,况且在其触发过程中需要考虑同步问题。 ③可运用数字电路中的单时钟同步十进制加/减计数器74LS190 进行加减计算。方案以上升沿进行输入,触发加减计算。本方案输入方式不同于一般输入方式,需要有所改进。但思路明了,不十分复杂,对于负数运算较复杂,可集成程度较高。 终上所述,最好是相互结合,以③为本。 2、单元电路设计

3、元件的选择

对于计数器来说需要选同时可以进行加减计数的计数器进行 加减,因此选用单时钟十进制加/减计数器74LS190. 其电路图及功能表如下: 中间由于1/0的输出不能够持久的进行保持,因此可用RS触 发器进行保持。对于加/减,等于触发需要74LS194进行触发 保持 4、整体电路(见附图) 5、工作原理 主要运用十进制加/减计数器74LS190加/减计数功能与74LS194的触发 功能。 六、设计总结 我们以为,在这学期的实验中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教别人,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。而且,这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。 因为由于时间的紧缺和许多课业的繁忙,并没有做到最好,但是,最起码我们没有放弃,它是我们的骄傲!相信以后我们会以更加积极地态度对待我们的学习、对待我们的生活。我们的激情永远还会结束,

相关主题