计算器——设计说明书

合集下载

四则运算计算器设计说明书

四则运算计算器设计说明书

四则运算计算器设计说明书一、设计目标本次计算器的程序设计,通过使用JAVA中的AWT包和Swing包的类库设计图形界面的计算器。

此计算器能够完成加减乘除的四则混合运算。

利用面向对象程序设计的思想,将各个组件的事件响应分别用不同的方式表达出来,并且使用了图形界面中的事件委托机制来处理事件响应。

二、设计流程1.分析该计算器需要完成的功能。

用户能够完成添加负号的四则混合运算,开方,取倒数,并且计算器能够自动识别运算符的优先级,根据用户输入的运算表达式,自动计算出相应的结果。

同时还完成了计算器中C按钮清屏功能和Backspace退格键。

2. 考虑异常处理。

(1)当输入的表达式中出现除零的操作,显示框将显示“Infinity(无穷大)”。

(2)当输入的表达式错误时,将弹出提示框显示“表达式错误请重新输入”(3)当计算器的显示文本框里为没有输入内容时直接点击等号按钮3. 编码实现计算器的功能。

(1)新建相关的文件。

(2)引入JAVA中相关的包。

(3)定义相关的变量,创建相关组件,并对组件的属性进行设置。

(4)对所创建的组件进行布局,完成界面的实现。

(5)为各个组件添加事件监听器。

(6)重写事件接口ActionListener的方法public voidactionPerformed(ActionEvent e)。

(7)为各个组件编写事件代码,完成每个按钮的不同功能。

三、程序截图四、程序代码import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;public class Calc extends JFrame implements ActionListener { JPanel topPanel = null;JPanel midPanel = null;JPanel bottomPanel = null;JTextField tResult = null;JButton backspaceButton = null;JButton ceButton = null;JButton cButton = null;JButton button1 = null;JButton button2 = null;JButton button3 = null;JButton button4 = null;JButton button5 = null;JButton button6 = null;JButton button7 = null;JButton button8 = null;JButton button9 = null;JButton button0 = null;JButton buttonDiv = null;JButton buttonPlus = null;JButton buttonMinus = null;JButton buttonMul = null;JButton buttonSqrt = null;JButton buttonMod = null;JButton buttonPM = null;JButton buttonX = null;JButton buttonPoint = null;JButton buttonEquals = null;StringBuffer str = new StringBuffer();boolean isDouble = false;// 是否为实数int opFlag = -1;static double t1 = 0, t2 = 0, t3 = 0, result = 0;static int opflag1 = -1, opflag2 = -1, flag = 0, resflag = 1;int preOp, currentOp = 0;// 标准位double op1 = 0, op2 = 0;// 操作数double n3;// 取得屏幕对象Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // 取得屏幕的宽度int width = screenSize.width;// 取得屏幕的高度int heigth = screenSize.height;public Calc() {tResult = new JTextField("0.");tResult.setColumns(26);tResult.setHorizontalAlignment(JTextField.RIGHT);topPanel = new JPanel();topPanel.add(tResult);backspaceButton = new JButton("Backspace");backspaceButton.addActionListener(this);ceButton = new JButton("CE");ceButton.addActionListener(this);cButton = new JButton("C");cButton.addActionListener(this);midPanel = new JPanel();midPanel.add(backspaceButton);midPanel.add(ceButton);midPanel.add(cButton);bottomPanel = new JPanel(new GridLayout(4, 5, 3, 3));button7 = new JButton("7");button7.addActionListener(this);bottomPanel.add(button7);button8 = new JButton("8");button8.addActionListener(this);bottomPanel.add(button8);button9 = new JButton("9"); button9.addActionListener(this); bottomPanel.add(button9);buttonDiv = new JButton("/"); buttonDiv.addActionListener(this); bottomPanel.add(buttonDiv);buttonSqrt = new JButton("sqrt"); buttonSqrt.addActionListener(this); bottomPanel.add(buttonSqrt);button4 = new JButton("4"); button4.addActionListener(this); bottomPanel.add(button4);button5 = new JButton("5"); button5.addActionListener(this); bottomPanel.add(button5);button6 = new JButton("6"); button6.addActionListener(this); bottomPanel.add(button6);buttonMul = new JButton("*"); buttonMul.addActionListener(this); bottomPanel.add(buttonMul);buttonMod = new JButton("%"); buttonMod.addActionListener(this); bottomPanel.add(buttonMod);button1 = new JButton("1"); button1.addActionListener(this); bottomPanel.add(button1);button2 = new JButton("2"); button2.addActionListener(this); bottomPanel.add(button2);button3 = new JButton("3"); button3.addActionListener(this); bottomPanel.add(button3);buttonMinus = new JButton("-");buttonMinus.addActionListener(this);bottomPanel.add(buttonMinus);buttonX = new JButton("1/x");buttonX.addActionListener(this);bottomPanel.add(buttonX);button0 = new JButton("0");button0.addActionListener(this);bottomPanel.add(button0);buttonPM = new JButton("+/-");buttonPM.addActionListener(this);bottomPanel.add(buttonPM);buttonPoint = new JButton(".");buttonPoint.addActionListener(this);bottomPanel.add(buttonPoint);buttonPlus = new JButton("+");buttonPlus.addActionListener(this);bottomPanel.add(buttonPlus);buttonEquals = new JButton("=");buttonEquals.addActionListener(this);bottomPanel.add(buttonEquals);this.setLayout(new BorderLayout());this.add(topPanel, "North");this.add(midPanel, "Center");this.add(bottomPanel, "South");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(310, 225);this.setResizable(false);// 设置窗体出现在屏幕的中央this.setLocation((width - this.getWidth()) / 2,(heigth - this.getHeight()) / 2);this.setVisible(true);}/*** @param args*/public static void main(String[] args) {new Calc();}@Overridepublic void actionPerformed(ActionEvent e) {String s = e.getActionCommand().trim();if (s.equals("CE")) {// 如果是CE则清除文本框tResult.setText("0.");} else if (s.equals("Backspace")) {if (!tResult.getText().trim().equals("0.")) {// 如果文本框中有内容if (str.length() != 1 && str.length() != 0) {tResult.setText(str.delete(str.length() - 1, str.length()).toString());} else {tResult.setText("0.");str.setLength(0);}}op2 = Double.parseDouble(tResult.getText().trim());} else if (s.equals("C")) {// 如果是C删除当前计算tResult.setText("0.");op1 = op2 = 0;str.replace(0, str.length(), " ");preOp = currentOp = 0;} else if (s.equals("1/x")) {// 如果按键为1/x则将文本框中的数据为它的倒数String temp = tResult.getText().trim();double dtemp = Double.parseDouble(temp);tResult.setText("" + 1 / dtemp);} else if (s.equals("sqrt")) {// 如果按键为sqrt则将文本框中的内容求平方根String temp = tResult.getText().trim();double dtemp = Double.parseDouble(temp);tResult.setText("" + Math.sqrt(dtemp));} else if (s.equals("+")) {str.setLength(0);if (currentOp == 0) {preOp = currentOp = 1;op2 = 0;tResult.setText("" + op1);} else {currentOp = preOp;preOp = 1;switch (currentOp) {case 1:op1 += op2;tResult.setText("" + op1);break;case 2:op1 -= op2;tResult.setText("" + op1);break;case 3:op1 *= op2;tResult.setText("" + op1);break;case 4:op1 /= op2;tResult.setText("" + op1);break;}}} else if (s.equals("-")) {str.setLength(0);if (currentOp == 0) {preOp = currentOp = 2;// op1=op2;op2=0;tResult.setText("" + op1);} else {currentOp = preOp;preOp = 2;switch (currentOp) {case 1:op1 = op1 + op2;tResult.setText("" + op1);break;case 2:op1 = op1 - op2;tResult.setText("" + op1);break;case 3:op1 = op1 * op2;tResult.setText("" + op1);break;case 4:op1 = op1 / op2;tResult.setText("" + op1);break;}}} else if (s.equals("*"))// *{str.setLength(0);if (currentOp == 0) {preOp = currentOp = 3;// op1=op2;op2=1;tResult.setText("" + op1);// op1=op2;} else {currentOp = preOp;preOp = 3;switch (currentOp) {case 1:op1 = op1 + op2;tResult.setText("" + op1);break;case 2:op1 = op1 - op2;tResult.setText("" + op1);break;case 3:op1 = op1 * op2;tResult.setText("" + op1);break;case 4:op1 = op1 / op2;tResult.setText("" + op1);break;}}} else if (s.equals("/"))// /{str.setLength(0);if (currentOp == 0) {preOp = currentOp = 4;// op2=1;tResult.setText("" + op1);// op1=op2;} else {currentOp = preOp;preOp = 4;switch (currentOp) {case 1:op1 = op1 + op2;tResult.setText("" + op1);break;case 2:op1 = op1 - op2;tResult.setText("" + op1);break;case 3:op1 = op1 * op2;tResult.setText("" + op1);break;case 4:op1 = op1 / op2;tResult.setText("" + op1);break;}}} else if (s.equals("="))// ={if (currentOp == 0) {str.setLength(0);tResult.setText("" + op2);} else {str.setLength(0);currentOp = preOp;switch (currentOp) {case 1:op1 = op1 + op2;tResult.setText("" + op1);break;case 2:op1 = op1 - op2;tResult.setText("" + op1);break;case 3:op1 = op1 * op2;tResult.setText("" + op1);break;case 4:op1 = op1 / op2;tResult.setText("" + op1);break;}currentOp = 0;op2 = 0;}} else if (s.equals(".")) {isDouble = true;if (tResult.getText().trim().indexOf('.') != -1);else {if (tResult.getText().trim().equals("0")) {str.setLength(0);tResult.setText((str.append("0" + s)).toString());}// else// if(tResult.getText().trim().equals("")){}//如果初时显示为空则不做任何操作else {tResult.setText((str.append(s)).toString());}}} else if (s.equals("0"))// 如果选择的是"0"这个数字键{if (tResult.getText().trim().equals("0.")) {} else {tResult.setText(str.append(s).toString());op2 = Double.parseDouble(tResult.getText().trim());}} else if (s.equals("%"))// 如果选择的是"0"这个数字键{} else {tResult.setText(str.append(s).toString());op2 = Double.parseDouble(tResult.getText().trim());if (currentOp == 0)op1 = op2;}}}。

学生用计算器说明书

学生用计算器说明书

学生用计算器说明书一、前言亲爱的同学们,欢迎使用这款专为学生设计的计算器。

它将成为您学习过程中的得力助手,帮助您更轻松、更准确地完成各种数学计算。

为了让您能够充分发挥它的功能,我们为您准备了这份详细的说明书,请仔细阅读。

二、产品概述1、外观设计这款计算器采用了简约时尚的外观设计,尺寸适中,方便携带。

按键布局合理,操作手感舒适,能够有效减少误触。

2、显示屏配备了高清液晶显示屏,数字和符号显示清晰,易于读取。

三、按键功能介绍1、数字键(0 9)用于输入数字。

2、四则运算键(+、、×、÷)进行加、减、乘、除四则运算。

3、等号键(=)得出计算结果。

4、小数点键()输入小数。

5、清除键(AC)清除所有输入和计算结果。

6、退格键(←)删除前一个输入的数字或字符。

7、平方根键(√)计算一个数的平方根。

8、百分数键(%)将数字转换为百分数形式,或进行百分数的计算。

9、倒数键(1/x)计算一个数的倒数。

10、存储键(M+、M、MR)用于存储和调用计算结果。

四、基本运算操作1、加法运算例如:计算 2 + 3,依次按下“2”、“+”、“3”、“=”,显示屏将显示“5”。

2、减法运算比如:计算5 2,依次按下“5”、“”、“2”、“=”,显示屏将显示“3”。

3、乘法运算要计算 2 × 3,按下“2”、“×”、“3”、“=”,结果显示“6”。

4、除法运算若计算 6 ÷ 2,按“6”、“÷”、“2”、“=”,屏幕显示“3”。

五、高级运算功能1、平方根计算要计算 9 的平方根,按下“9”、“√”,显示屏显示“3”。

2、百分数计算比如计算 20 的 50%,输入“20”、“×”、“50”、“%”、“=”,结果为“10”。

3、倒数计算求 2 的倒数,按下“2”、“1/x”,显示屏显示“05”。

六、存储功能的使用1、存储数值先计算出一个结果,例如 5 + 3 = 8,然后按下“M+”,将结果 8 存储起来。

计算器说明书

计算器说明书

1 设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务课题:简易计算器任务:设计一个具有特定功能的计算器。

该计算器上电或按键复位后能自动显示系统提示界面,进入准备工作状态。

能实现基本的加、减、乘、除四则运算。

1.2 功能要求说明在本次工程实践中,主要完成如下方面的设计任务:(1)计算器上电或按键复位后能显示初始化界面(2)2秒后进入计算器界面(3)按键能进行加、减、乘、除运算并显示结果(4)按清零键后能进行下一次计算1.3 设计课题总体方案介绍及工作原理说明计算器的总体功能原理是以AT89S52单片机为主要控制核心,通过外接4*4行列式键盘作为控制信号输入源,一块12864液晶作为显示器件,通过按键控制,单片机实时地去执行,在12864液晶上显示界面。

系统控制原理图如图1所示。

液晶显示电路AT89S52电源电路复位电路下载电路键盘电路图1系统控制原理图2 设计课题硬件系统的设计2.1 设计课题硬件系统各模块功能简要介绍2.1.1 AT89S52控制模块考虑到设计功能需要,控制器的功能用于外部键盘信号的接收和识别、液晶模块的显示控制、复位电路等,我们选择了AT89S52系列单片机,具有反应速度极快,工作效率特高的特点。

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

计算器说明书

计算器说明书

计算器说明书1 设计课题任务、功能要求说明及总体⽅案介绍1.1 设计课题任务课题:简易计算器任务:设计⼀个具有特定功能的计算器。

该计算器上电或按键复位后能⾃动显⽰系统提⽰界⾯,进⼊准备⼯作状态。

能实现基本的加、减、乘、除四则运算。

1.2 功能要求说明在本次⼯程实践中,主要完成如下⽅⾯的设计任务:(1)计算器上电或按键复位后能显⽰初始化界⾯(2)2秒后进⼊计算器界⾯(3)按键能进⾏加、减、乘、除运算并显⽰结果(4)按清零键后能进⾏下⼀次计算1.3 设计课题总体⽅案介绍及⼯作原理说明计算器的总体功能原理是以AT89S52单⽚机为主要控制核⼼,通过外接4*4⾏列式键盘作为控制信号输⼊源,⼀块12864液晶作为显⽰器件,通过按键控制,单⽚机实时地去执⾏,在12864液晶上显⽰界⾯。

系统控制原理图如图1所⽰。

液晶显⽰电路AT89S52电源电路复位电路下载电路键盘电路图1系统控制原理图2 设计课题硬件系统的设计2.1 设计课题硬件系统各模块功能简要介绍2.1.1 AT89S52控制模块考虑到设计功能需要,控制器的功能⽤于外部键盘信号的接收和识别、液晶模块的显⽰控制、复位电路等,我们选择了AT89S52系列单⽚机,具有反应速度极快,⼯作效率特⾼的特点。

AT89S52是⼀种低功耗、⾼性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。

使⽤Atmel 公司⾼密度⾮易失性存储器技术制造,与⼯业80C51 产品指令和引脚完全兼容。

⽚上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯⽚上,拥有灵巧的8 位CPU 和在系统可编程Flash,使AT89S52为众多嵌⼊式控制应⽤系统提供⾼灵活、超有效的解决⽅案。

AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O ⼝线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,⼀个6向量2级中断结构,全双⼯串⾏⼝,⽚内晶振及时钟电路。

简易计算器设计说明书

简易计算器设计说明书

摘要单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心。

如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。

计算器的出现给我们的生活带来了巨大的便利,计算器在我们的生活中随处可见,也是我们日常生活中不可缺少的工具。

本设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除简单的基本四则运算,并在LCD上显示相应的结果。

设计电路采用AT89C51单片机为主要控制电路,利用按键作为计算器的键盘的输入。

显示采用字符LCD 静态显示。

软件方面使用C语言编程,并用PROTUES仿真。

单片微型计算机简称单片机。

它是在一块芯片上集成中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、定时/计数器及I/O接口电路等部件,构成一个完整的微型计算机。

它的特点是:高性能,高速度,体积小,价格低廉,稳定可靠,应用广泛。

单片机比专用处理器最适合应用于嵌入式系统,因此它得到了最多的应用。

本文介绍了单片机的产生发展、功能特点、应用开发等内容。

【关键词】简单计算器单片机 LCD 应用发展背景近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。

与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。

影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。

其中系统的抗干扰性能是系统可靠性的重要指标。

本设计采用80c51 芯片,实现了利用单片机进行了一个简单计算器设计。

允许对输入数据进行加减乘除运算及LCD 显示.如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同。

LCD液晶显示器是 Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。

课设简易计算器设计说明

课设简易计算器设计说明

摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

本任务是个简易的两位数的四则运算,程序都是根据教材和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。

本任务重在设计构思,使得我用专业知识、专业技能分析和解决问题全面系统的锻炼。

本系统的设计说明重点介绍了如下几方面的容:1)简易计算器的基本功能,同时对计算器设计的原理也进行了简要的阐述;2)介绍了系统的总体设计、给出了系统的整体结构框图,并对其进行了功能模块划分与所采用的元器件进行了详细说明;3)对系统各功能模块的软、硬件实现进行了详细的设计说明。

关键词:MCS-51 8051单片机计算器围加减乘除目录第一章绪论21.1课题简介21.2设计目的31.3设计任务3第二章简易计算器系统简介32.1 单片机发展现状32.2 计算器的历史42.3 单片机概述5第三章系统总体设计与主要器件简介53.1 MSC-51芯片简介53.2 中断系统63.3 时钟电路73.4 MCS-51系列单片机简介7外部引脚说明:113.5 相关知识12第四章简易计算器的设计134.1 计算器硬件电路设计134.2 计算器程序设计144.3 系统硬件设计15参考文献17第一章绪论1.1课题简介单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。

在工业生产中,电流、电压、温度、压力和流量也都是常用的被控参数。

本设计是采用8051单片机,该单片机具有集成度高,运算快速快,体积小、运行可靠,价值低廉的特点,适宜于温湿度等过程控制。

鉴于这样的重要性,我们打算设计一种基于单片机的多路温度巡检系统,实现对不同场合温度时时变化的控制与监测。

1.2设计目的通过本次工程实践,运用微机原理与接口技术所学知识与查阅相关资料,完成简易计算器的设计,达到理论知识与实践更好结合、提高综合运用所学知识和设计能力的目的。

计算器说明文档

计算器说明文档

计算器说明文档1、程序设计(1).图形布局(2).函数调用2、功能介绍注意:开始启动时要先按清零键“C”如:按键“C”后:(1).”+、-、*、÷”运算做加法运算(输入1+2):按“=”结果为:(2).进制转换二进制转换十进制:点二进制按钮(此时只有0、1可按):输入二进制数:选中十进制按钮,结果为:(3).三角函数和log运算注意:先输入度数后,直接按三角函数或log按钮出结果,log是以10为底的作sin运算(输入90)结果为:(4).倒数“/”,百分号“%”,根号“√”运算注意:同样先输入数字后,直接按相应的键出结果:作根号运算(输入4)结果为:(5)按关闭按钮退出源代码:1、Calculator类package .qtech;import java.awt.*;import java.awt.event.*;import java.util.Stack;import javax.swing.Box;import javax.swing.ButtonGroup;import javax.swing.JFrame;import javax.swing.JRadioButton;import javax.swing.JTextField;public class Calculator extends WindowAdapter implements ActionListener {//监听接口private Button btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn10,btn11,btn12,btn13,btn14,bt n15,btn16,btn17,btn18,btn19,btn20,btn21,btn22,btn23,btn24,btn_del;JRadioButton rButton1,rButton2,rButton3;TextField tf;Panel p,p2;int M=0,N=0;String number=null;boolean isFirst=true;boolean i= false;//判断是否第一次输入,第一次为truepublic static void main(String args[]){Calculator c = new Calculator();c.jisuan();}public void jisuan(){Frame f = new Frame("Edison的计算器");//构造Frame类对象,并设定窗口标题f.setVisible(true);//设置框架为可见f.setBounds(100,100,250,250);//设置框架大小和位置//f.setDefaultCloseOperation(EXIT_ON_CLOSE);f.setBackground(Color.pink);//设置背景色f.setForeground(Color.red);//设置前景色f.setFont(new Font("Serief",Font.BOLD,18));//字体设置p=new Panel();//创建面板ButtonGroup butgroup=new ButtonGroup();Box box,baseBox;//创建盒式容器及支撑box=Box.createV erticalBox();//创建列式盒式容器baseBox=Box.createHorizontalBox();//创建行式盒式容器p.setLayout(new GridLayout(4,6,2,2));//设置按钮的行数列数,以及水平垂直间距tf=new TextField(20);//实例化按钮//String[]button={"log","7","8","9","+","-","tan","4","5","6","*","/","cos","1","2"," 3",".","=","sin","(","0",")","C","%"};tf.setText("启动请先按清零键:C");btn1= new Button("log");btn2= new Button("7");btn3= new Button("8");btn4= new Button("9");btn5= new Button("+");btn6= new Button("-");btn7= new Button("tan");btn8= new Button("4");btn9= new Button("5");btn10= new Button("6");btn11= new Button("*");btn12= new Button("/");btn13= new Button("cos");btn14= new Button("1");btn15= new Button("2");btn16= new Button("3");btn17= new Button(".");btn18= new Button("=");btn19= new Button("sin");btn20= new Button("(");btn21= new Button("0");btn22= new Button(")");btn23= new Button("√");btn24= new Button("%");btn_del=new Button("C");//单选按钮rButton1=new JRadioButton("二进制");rButton2=new JRadioButton("十进制");rButton3=new JRadioButton("八进制");//设置按钮btn1.setBackground(Color.BLACK);btn1.setForeground(Color.WHITE);btn7.setBackground(Color.BLACK);btn7.setForeground(Color.WHITE);btn6.setBackground(Color.BLACK);btn6.setForeground(Color.WHITE);btn12.setBackground(Color.BLACK);btn12.setForeground(Color.WHITE);btn13.setBackground(Color.BLACK);btn13.setForeground(Color.WHITE);btn18.setBackground(Color.BLACK);btn18.setForeground(Color.WHITE);btn19.setBackground(Color.BLACK);btn19.setForeground(Color.WHITE);btn20.setBackground(Color.BLACK);btn20.setForeground(Color.WHITE);btn24.setBackground(Color.BLACK);btn24.setForeground(Color.WHITE);btn22.setBackground(Color.BLACK);btn22.setForeground(Color.WHITE);btn23.setBackground(Color.BLACK);btn23.setForeground(Color.WHITE);btn5.setBackground(Color.BLACK);btn5.setForeground(Color.white);btn11.setBackground(Color.BLACK);btn11.setForeground(Color.white);btn17.setBackground(Color.BLACK);btn17.setForeground(Color.white);rButton1.setBackground(Color.BLACK); rButton1.setForeground(Color.white);rButton2.setBackground(Color.BLACK); rButton2.setForeground(Color.white);rButton3.setBackground(Color.BLACK); rButton3.setForeground(Color.white);// btn_del.setBounds(70, 10, 10, 10);btn_del.setBackground(Color.yellow);//归组butgroup.add(rButton1);butgroup.add(rButton2);butgroup.add(rButton3);box.add(baseBox);box.add(p);f.add(tf,"North");//把文本区添加到框架的北方f.add(box,"Center");//把面板添加到框架的中间//把按钮添加到面板上p.add(btn1);p.add(btn2);p.add(btn3);p.add(btn4);p.add(btn5);p.add(btn6);p.add(btn7);p.add(btn8);p.add(btn9);p.add(btn10);p.add(btn11);p.add(btn12);p.add(btn13);p.add(btn14);p.add(btn15);p.add(btn16);p.add(btn17);p.add(btn18);p.add(btn19);p.add(btn20);p.add(btn21);p.add(btn22);p.add(btn23);p.add(btn24);baseBox.add(rButton1);baseBox.add(Box.createHorizontalStrut(5)); baseBox.add(rButton2);baseBox.add(Box.createHorizontalStrut(5)); baseBox.add(rButton3);baseBox.add(Box.createHorizontalStrut(5)); baseBox.add(btn_del);f.addWindowListener(this);//为框架添加监听//为按钮添加监听btn1.addActionListener(this);btn2.addActionListener(this);btn3.addActionListener(this);btn4.addActionListener(this);btn5.addActionListener(this);btn6.addActionListener(this);btn7.addActionListener(this);btn8.addActionListener(this);btn9.addActionListener(this);btn10.addActionListener(this);btn11.addActionListener(this);btn12.addActionListener(this);btn13.addActionListener(this);btn14.addActionListener(this);btn15.addActionListener(this);btn16.addActionListener(this);btn17.addActionListener(this);btn18.addActionListener(this);btn19.addActionListener(this);btn20.addActionListener(this);btn21.addActionListener(this);btn22.addActionListener(this);btn23.addActionListener(this);btn24.addActionListener(this);btn_del.addActionListener(this);rButton1.addActionListener(this);rButton2.addActionListener(this);rButton3.addActionListener(this);}//监听程序public void actionPerformed(ActionEvent e){ jinzhiChange M2N=new jinzhiChange();if(e.getSource()==btn4){if(i==true){tf.setText("9");i=false;}else tf.setText(tf.getText()+'9');}if(e.getSource()==btn24){if(i==true){tf.setText("%");i=false;}else tf.setText(tf.getText()+'%');}if(e.getSource()==btn3){if(i==true){tf.setText("8");i=false;}else tf.setText(tf.getText()+'8');}if(e.getSource()==btn2){if(i==true){tf.setText("7");i=false;}else tf.setText(tf.getText()+'7'); }if(e.getSource()==btn10){if(i==true){tf.setText("6");i=false;}else tf.setText(tf.getText()+'6'); }if(e.getSource()==btn9){if(i==true){tf.setText("5");i=false;}else tf.setText(tf.getText()+'5'); }if(e.getSource()==btn8){if(i==true){tf.setText("4");i=false;}else tf.setText(tf.getText()+'4'); }if(e.getSource()==btn16){if(i==true){tf.setText("3");i=false;}else tf.setText(tf.getText()+'3'); }if(e.getSource()==btn15){if(i==true){tf.setText("2");i=false;}else tf.setText(tf.getText()+'2'); }if(e.getSource()==btn14){if(i==true){tf.setText("1");i=false;}else tf.setText(tf.getText()+'1');if(e.getSource()==btn21){if(i==true){tf.setText("0");i=false;}else tf.setText(tf.getText()+'0');}if(e.getSource()==btn20){if(i==true){tf.setText("(");i=false;}else tf.setText(tf.getText()+'(');}if(e.getSource()==btn22){if(i==false){tf.setText(tf.getText()+')');}}if(e.getSource()==btn17){if(i==false){tf.setText(tf.getText()+'.');}}if(e.getSource()==btn5){tf.setText(tf.getText()+'+');i=false;}if(e.getSource()==btn6){tf.setText(tf.getText()+'-');i=false;}if(e.getSource()==btn11){tf.setText(tf.getText()+'*');i=false;}if(e.getSource()==btn12){tf.setText(tf.getText()+'/');i=false;if(e.getSource()== btn18){tf.setText(String.valueOf(Calculator (tf.getText())));i=true;}if(e.getSource()==btn_del){tf.setText("0");i=true;}if(e.getSource()==btn23){if(Double.parseDouble(tf.getText())<=0){tf.setText("无效输入");}else{tf.setText(String.valueOf(Math.sqrt(Double.parseDouble(tf.getText()))));}}if(e.getSource()==btn1){tf.setText(String.valueOf(Math.log10(Double.parseDouble(tf.getText()))));}if(e.getSource()==btn7){if(Double.parseDouble(tf.getText())%90==0){if((Double.parseDouble(tf.getText())/90)%2!=0)tf.setText("无效输入");elsetf.setText("0");}else{tf.setText(String.valueOf(Math.tan(Double.parseDouble(tf.getText())/180.0* Math.PI)));}}if(e.getSource()==btn13){if(Double.parseDouble(tf.getText())%90==0&&(Double.parseDouble(tf.getT ext())/90)%2!=0){tf.setText("0");}else{tf.setText(String.valueOf(Math.cos(Double.parseDouble(tf.getText())/180.0* Math.PI)));}}if(e.getSource()==btn19){if(Double.parseDouble(tf.getText())%90==0&&(Double.parseDouble(tf.getT ext())/90)%2==0){tf.setText("0");}else{tf.setText(String.valueOf(Math.sin(Double.parseDouble(tf.getText())/180.0* Math.PI)));}}if(e.getSource()==rButton1){if(isFirst){if(tf.getText()!=""){N=2;number=tf.getText();tf.setText(putor(M, N, number));isFirst=false;}btn2.setEnabled(false);btn3.setEnabled(false);btn4.setEnabled(false);btn8.setEnabled(false);btn9.setEnabled(false);btn10.setEnabled(false);btn15.setEnabled(false);btn16.setEnabled(false);M=2;isFirst=false;}else{N=2;number=tf.getText();tf.setText(putor(M, N, number));isFirst=true;}}if(e.getSource()==rButton2){btn2.setEnabled(true);btn3.setEnabled(true);btn4.setEnabled(true);btn8.setEnabled(true);btn9.setEnabled(true);btn10.setEnabled(true);btn15.setEnabled(true);btn16.setEnabled(true);if(isFirst){if(tf.getText()!=""){N=10;number=tf.getText();tf.setText(putor(M, N, number));isFirst=false;}M=10;isFirst=false;}else{N=10;number=tf.getText();tf.setText(putor(M, N, number));isFirst=true;}}if(e.getSource()==rButton3){btn8.setEnabled(true);btn9.setEnabled(true);btn10.setEnabled(true);btn15.setEnabled(true);btn16.setEnabled(true);if(isFirst){if(tf.getText()!=""){N=8;number=tf.getText();tf.setText(putor(M, N, number));isFirst=false;}btn3.setEnabled(false);btn4.setEnabled(false);M=8;isFirst=false;}else{N=8;number=tf.getText();tf.setText(putor(M, N, number));isFirst=true;}}}public double Calculator(String f){//科学计算@SuppressW arnings("unused")int i=0,j=0,k;//定义三个整形变量char c;//定义c为字符型变量StringBuffer s= new StringBuffer();//创建一个字符缓冲池实例ss.append(f);//在对象s中显示字符串fs.append('=');String formula=s.toString();char[]anArray;//声明一个数组anArray=new char[50];Stack<Character>mystack=new Stack<Character>();//定义一个mystack 栈while(formula.charAt(i)!='='){c=formula.charAt(i);switch(c){case '(' :mystack.push(new Character(c));//将获得的数据压入栈i++;break;case ')'://若是右括号则进行下面的操作while(mystack.peek().charValue()!='('){anArray[j++]=mystack.pop().charValue();}mystack.pop();//将数据从mystack栈中弹出i++;break;case '%':while(!mystack.empty()&&mystack.peek().charValue()!='('){anArray[j++]=mystack.pop().charValue();}mystack.push(new Character(c));i++;break;case '+':case '-':while(!mystack.empty()&&mystack.peek().charValue()!='('){anArray[j++]=mystack.pop().charValue();}mystack.push(new Character(c));i++;break;case '*':case '/':while(!mystack.empty()&&(mystack.peek().charValue()=='*'||mystack.peek( ).charValue()=='/')){anArray[j++]=mystack.pop().charValue();}mystack.push(new Character(c));i++;break;case ' ':i++;break;default: while((c>='0'&&c<='9')||c=='.'){anArray[j++]=c;i++;c=formula.charAt(i);}anArray[j++]='#';break;}}while(!mystack.empty()){anArray[j++]=mystack.pop().charValue();}i=0;int count;double a,b,d;Stack<Double>mystack1=new Stack<Double>();//定义栈mystack1while(i<j){c=anArray[i];//将数组中的值赋值给cswitch(c){case '%':a=mystack1.pop().doubleValue();//从栈中弹出//b=mystack1.pop().doubleValue();//从栈中弹出d=a*0.01;mystack1.push(new Double (d));//将结果压入栈i++;break;case '+':a=mystack1.pop().doubleValue();//从栈中弹出b=mystack1.pop().doubleValue();//从栈中弹出d=b+a;//实现加法mystack1.push(new Double (d));//将结果压入栈i++;break;case '-':a=mystack1.pop().doubleValue();b=mystack1.pop().doubleValue();d=b-a;mystack1.push(new Double (d));i++;break;case '*':a=mystack1.pop().doubleValue();b=mystack1.pop().doubleValue();d=b*a;mystack1.push(new Double (d));i++;break;case '/':a=mystack1.pop().doubleValue();b=mystack1.pop().doubleValue();if(a!=0){d=b/a;mystack1.push(new Double(d));i++;}else{tf.setText("除数不能为零!");}break;default:d=0;count=0;while((c>='0'&&c<='9')){d=10*d+c-'0';i++;c=anArray[i];}if(c=='.'){i++;c=anArray[i];while((c>='0'&&c<='9')){count++;d=d+(c-'0')/Math.pow(10,count);i++;c=anArray[i];}}if(c=='#'){mystack1.push(new Double(d));i++;break;}}}return(mystack1.peek().doubleValue());//返回栈顶元素}public void windowClosing(WindowEvent e){//关闭窗口功能System.exit(0);//系统退出}}2、jinzhiChange类package .qtech;/*** 功能:将一个数从M进制转换成N进制* MValue:M进制数的字符串表示方法* Shang:保存中间运算结果* M:M进制* N:N进制*/public class jinzhiChange{public static String Shang = null;public static String computor(int M,int N,String MValue) { String nValue = "";Shang = MValue;while(Shang.length() > 0) {nValue = qiuyu(Shang,M,N) + nValue;}System.out.println(nValue);return nValue;}/*** 功能:对给定的M进制字符串对n求余。

计算器详细设计说明书

计算器详细设计说明书

计算器详细设计说明书版本 1.0作者:完成日期:2009-10-31 引言1.1编写目的该软件详细设计说明书主要是为设计“计算器程序” 而编写的详细设计分析,主要给出该软件总体设计架构、包含的模块、设计的思想、每个模块的详细设计原理等信息,从而正确实现软件的编写,并且方便了以后的测试、管理和改进。

1.2背景待开发软件系统的名称是“计算器程序” 。

该软件将完成一般的计算操作:加减乘除四则运算、开方、求倒数、百分数,以及数据的存储操作。

对于更高级的科学运算,如sin、cos 等暂不实现。

由于程序较小,开发将由本人独立完成,暂时没有期望的用户群体。

2程序系统的结构程序结构从整体上可以大致分为3 个部分,如表1所示表1 程序整体模3输入数值设计说明3.1状态图这部分的状态图表示如图1 所示3.2流程图输入数值根据状态图可以得出流程图如图2 所示图2 输入数据流程图3.3说明在这种情况下,可以有三种输入数据格式:①整数:如45,123,1000 等。

② 纯小数:如 0.15,0.33, 0.0001, 0.12000 等。

③ 含有整数部分的小数:如 100.000,10.0002,13.2150 等。

在以上情况下,对于数字 0 要有正确的处理方式, 如果在输入整数的情况下, 00123 这样的整数是不能存在的, 12000这样的整数是正确存在的。

在输入小数 的情况下, 0.12000要能够显示后面的 3个 0。

程序需要能正确处理这三种数据,这也是测试的依据。

4 输入双目操作符设计说明4.1 状态图输入双目运算符的状态图 3 所示。

主要运算是加减乘除、百分号图 3 双目运算符的状4.2说明程序实现完全按照图3所示的状态变迁实现。

双目运算的根本形式是:N1 opt N2 = Result。

N1、N2 是两个操作数,opt 是双目运算符。

其中详细的情况如下。

程序初始状态S0 时,双目运算的两个操作数N1=N2=0。

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

计算器
概要设计说明书
1、引言
1.1编写目的
在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。

在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。

而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为JAVA程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。

1.2项目背景
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。

要实现计算功能,可以用JAVA 的知识编写程序来解决此问题。

该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。

该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。

在课程设计中,系统开发平台为Windows 7,程序设计设计语言采用JAVA,在程序设计中,采用了结构化与面向对象两种解决问题的方法。

1.3定义
事务流:数据进入模块后可能有多种路径进行处理。

系统:若未特别指出,统指本系统。

1.4参考资料
[1]钱银中,眭碧霞.Java程序设计案例教程
[2]道客巴巴:
2、运行环境
操作系统:Windows 2000﹑Windows XP Professional、Windows 2000 Server或者window 7.0操作系统.
3、总体设计
3.1 系统设计流程
系统设计主要有五部分组成:需求分析、概要设计、详细设计、编写代码和系统测试。

如下图所示:
⑴需求分析
这次课程设计的题目是实现简单计算器的功能。

实现功能:加,减,乘,除,可加其它运算功能;还要实现数据的输入,输出,计算,显示及清除等功能。

⑵概要设计
计算器包含的功能有:加、减、乘、除、清除。

计算器的屏显为JFrame控件,左侧的数字、操作符按键、右侧的功能为BUTTON控件。

输入的原始数据、运算中间数据和结果在顶部的TEXTBOX 控件显示。

每种计算功能均为独立设计算法。

⑶详细设计
详细设计部分则是在概要设计的基础上对计算器的功能实现作出更为详细
的介绍。

主要对各设计块中的各个类作出说明,包括对每个类如何在以后的程序设计中的定义作出介绍,并作出相应的说明,并对各参数作出介绍。

⑷编写代码
这一部分主要根据前面的详细设计内容用具体语言实现计算器系统,主要采用Java语言实现,这一部分主要是代码实现,将前一阶段的设计思想实现,因为前面已经对该系统的整体设计思路和整体框架作出了说明,并且在详细设计部分对每个设计块中的类如何实现也已给出,所以在这一部分工作量也不是太大。

⑸系统测试
系统测试部分主要对前面已经实现的系统作出测试,看该系统是否符合系统设计要求。

并对一些特殊的数据进行测试,比如一些数的取值,看是否符合要求,在测试的基础上,对发现的错误进行改正,使系统逐步得到完善。

测试不是一朝一夕就能完成的,必须在今后的使用过程中逐渐完善,并得到用户的反馈后对系统作出修改。

计算器系统主要采用了软件工程的设计思路,从需求分析、概要设计、详细设计、编写代码直到系统测试都遵从软件工程的设计要求。

3.2功能设计
(1)计算器包含的功能有:加、减、乘、除、清除。

(2)每种计算功能均为独立设计算法。

4 、主程序的设计
系统选用Java程序设计语言来完成整个系统应用程序的编写。

4.1 按键的设计
(1)本计算器按键均使用BUTTON控件。

例:“1”运算功能按键代码如下
[1]
……
JButton jb0,jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9,
jb10,jb11,jb12,jb13,jb14,jb15,jb16,jb17,jb18,jb19;
GridLayoutDemo(){
JPanel jp=new JPanel();
jp.setLayout(new GridLayout(5,4));
……
jp.add(jb1=new JButton("1"));
……
add(jp);
//注释监听器

jb1.addActionListener(this);
……
add(jt1=new JTextField(10),BorderLayout.NORTH); } [2]
bNumber = new JButton("1");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(new Insets(5, 4,5,3));
pDown.add(bNumber);
(2)计算器操作按键以加法为例,代码如下:
[1]
......
if(e.getSource()==jb12)
{
com=true;
total1=Double.parseDouble(jt1.getText());
jt1.setText(total1+"+");
total=total1;
}
if(e.getSource()==jb11)
{
t1=Double.parseDouble(jt1.getText());
if(total==total1){
Double ad=total1+t1;
jt1.setText(Double.toString(ad));
i=0;
}
if(total==total2){
Double ad=total2-t1;
jt1.setText(Double.toString(ad));
i=0;
}
......
}
[2]
else if (s.equals("+")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 1;
op2 = 0;
tResult.setText("" + op1);
} else {
currentOp = preOp;
preOp = 1;
tResult.setText(cal.opAdd(tResult.getText()));
}
4.2界面设计
5. 设计目标
5.1 系统功能简述
本程序主要有加、减、乘、除、清除几个模块。

加、减、乘、除、清除是根据用户需求分别实现两个数的加、减、乘、除、清除并将计算结果显示在显示文本框中。

下图为程序运行时界面
5.2系统设计用例图
5.3控件说明
程序用到的控件有TEXTBOX 表(文本框)、GroupBox 表(容器)、 Button 表(按钮)。

用户
加 乘 减 除 清除
TEXTBOX文本框表
Button 按钮表
6.系统设计思想
一个系统设计的根本目的就是真正满足用户的实际需求,并采用先进、安全、成熟、可靠的技术来实现。

鉴于当今技术发展的趋势,结合本程序的实现难易程度和工作量,我们采用了Java技术开发。

本着既要保证系统的安全性、稳定性、高效性,又要为用户提供实用、方便、高效的操作环境的设计思想,来进行分析设计的。

程序尽可能的方便使用者的使用,操纵简单。

程序的安全性是指程序中所有数据的安全性,它包括数据完整性、可用性、可控性等。

数据完整性就是防止数据的丢失或者精度的损失,对此本程序对数据尽可能的使用精度高的数据包括数据类型之间的转换。

数据可用性就是保证存在数据在不同的操作之间的连续使用。

7. 关键问题及解决
实现该系统的关键是对操作数的取得,相关数学运算的实现,等号的实现。

因为程序是简单的计算器,是对数字进行相关的操作的。

而如何从按键上去的我们想要的操作数就直接制约了程序的实现。

当成功取得了我们想要的数之后,相关的操作的实现(如阶乘、开平方、取对数等)也成为了一个问题。

另外对涉及到两个操作数等号的实现(这里主要是加、减、乘、除、清除),单个操作数相关操作的实现在解决了取数的问题之后就可以迎刃而解,而涉及到两个操作数等号的实现就有成为了一个问题,以及该计算器的功能不全,没有一些简单的菜单。

只有确定了编程语言、编程技术才能具体的实现以上功能,所以采用的编程技术和编程语言对实现本系统非常关键。

对于操作数的取得声明了一个string _number,当点击一个按钮式就让_number等于按钮text的方法并用showbox.text来接收,这样得到的字符串就要取得的数并且在显示文本框中显示出来,只是类型是string,当点击数学操作符时将showbox.Text上字符串强制类型转换为double型并赋值给num1,这样就得到了我们要的double类型的数;相关数学运算的实现采用math类中的方法或者写一个函数并在相对应的运算操作调用这个函数,这样就数学运算就成功实现了;至于等号的实现首先声明了一个int类型的_sign当点击相应的数学运算符时就给_sign赋一个对应的整型的值,当点击等号时根据_sign值的不同选择相对应的计算方法。

相关文档
最新文档