当前位置:首页 >> 信息与通信 >>

迷你计算器设计说明书


*******************

实践教学
*******************

兰州理工大学
计算机与通信学院 2013 年秋季学期

Java 课程设计

题 目: 迷你计算器设计 专业班级: 姓 名: 学 号: 指导教师: 成 绩:





目前计算器应用很广泛,本程序利用面向对象分析方法设计的思想,结合 面向对象语言JAVA设计迷你计算器,划分模块,模块的逐一实现,定义和使 用类,并掌握内部类的使用,JAVA 接口的实现。此程序可以进行加、减、乘、 除、阶乘、正弦、余弦和指数等运算,并且有删除和归零等功能。

关键词:JAVA;面向对象设计;迷你计算器

I





计算器作为日常生活中常用工具,它已经深入到生活中的每一个地方 及场合。此次通过 Java 语言来实现,该程序是一个图形界面的简单的 java 计算器,使用人员能快捷简单地进行操作。及时准确地获得需要的计算的 结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的 帮助。可以进行简单的四则运算 ( 加 , 减 ,乘 , 除 , 以及求倒数 , 求相反数等 ) , 有删除等功能 , 归零表示初始化。Java 是由 Sun 公司开发的新一代纯面向对 象的网络编程语言。其目标是建立一种在任意种机器 , 任一种操作系统的 网络环境中运行的软件 , 实行所谓的“程序写一次 , 到处运行”的目标。正 因为如此, Java 已成为当今 Internet 上最流行,最受欢迎的一种程序开 发语言。Java 程序设计是一门应用性很强的专业课,在学习时必须注意理 论与实践相结合,为此开设了本课程设计,其目的是通过本课程设计使学 生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较 全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。

II

目录
摘要……………………………………………………………………………Ⅰ 序言……………………………………………………………………………Ⅱ 一.系统分析与设计………………………………………………………….1 二.详细设计………………………………………………………………….3 三.系统测试………………………………………………………………….8 四.软件使用说明书…………………………………………………………13 设计总结………………………………………………………………………14 参考文献………………………………………………………………………15 致谢……………………………………………………………………………16 源代码…………………………………………………………………………17

一. 系统分析与设计
(一) 系统分析 日常生活中经常需要用到计算器,比如科学计算,数值计算,会计业务等 等,在 Applet 中实现一个精巧的计算器,可以让用户的操作也更方便和快捷。 本程序需要实现一个具有四则运算的计算器, 能够实现基本的加、减、乘、除 运算,以及其它的辅助功能;界面 简洁适用;要提供主要的设计思路、类的设 计等。 1.1 基本需求 主要支持的数字:0、1、2、3、4、5、6、7、8、9,主要支持的算子:+、-、 *、/、sqrt,tan,sin,cos,log等,要求提供图形化操作界面。 1.2 特殊需求 具备归零,退格,退出等功能。 1.3 课程设计的实验环境 硬件要求能运行Windows7操作系统的微机系统。JAVA程序设计语 言,Eclipse开发工具。 (二)系统设计 此程序使用 GFrame 窗体,将单行文本放在窗体的 NORTH,接着在窗体添加 panel3,然后在 panel3 的 NORTH 添加 panel1,在 panel3 的 SOUTH 添加 panel2, 最后将数字按钮和运算符按钮添加到 panel2 和 panel3 中同时注册按钮事件监听 器 该程序实现对用户输入数据,显示数据,在选择运算符号,并且进行计算, 最后显示计算结果。本计算器提供了sqrt、tan、log、sin、cos等函数的计算功能, 以及归零和删除等功能。本程序的可视化界面清晰明了,对于一般运算均可。所 以此界面为程序默认第一界面。 (三)类的描述 本程序共有五个类:
MyCalucator 是主类,main

方法里会建立一个 MyCalucator 对象。

Signs 类为内部类,是一个监听器类,实现 Actionlistener,实现运算符号 的 事 件 监 听 。 当 运 算 符 号 为 一 目 运 算 符 (sin , cos , n!) 时 , 实 现 该 类 的

1

actionPerformed 方法,对 sin,cos,n!按钮进行事件处理。 Clear 类为内部类,是一个监听器类,实现 Actionlistener,实现清除按钮 的事件监听。当按钮为"AC"(清零)或"DEL"时,实现该类的 actionPerformed 方 法,对 AC,DEL 按钮进行事件处理。 Num 类为内部类,是一个监听器类,实现 Actionlistener,实现数字输入的 事件监听。 当点击 0-9 这十个数字按钮时,如果是要输入的运算数则将文本框清 空后将数字显示在文本框中。 Dot 类为内部类,是一个监听器类,实现 Actionlistener,实现小数点的事 件监听。 当点击小数点按钮时, 如果文本框中输入值中没有小数点则在文本后加 一个小数点。 (四)类之间的关系 类 MyCalucator 与 Signs 类、Clear 类、Num 类、Dot 类是依赖关系, MyCalucator 依赖于 Signs 类、Clear 类、Num 类、Dot 类。MyCalucator 类中 初始化 go 方法,其中创建了 Signs 类、Clear 类、Num 类、Dot 类的实例,以实 现 MyCalucator 类的实例的创建。 Signs类、Clear类、Num类、Dot类与Calculator类有关联关系。Signs类、 Clear类、 Num类、 Dot类中的actionPerformed方法中调用了MyCalucator类中的 私有变量f、tf、IfResult、oper、result、df,与MyCalucatorr类中这些变量 值相关联。

2

二.详细设计
计算器的程序设计,必然有数据输入,其中数据包括运算符和数字,均要通 过计算器上的 Button 按钮选项按钮输入进去,里面录入的必然是字符型的数据, 如果进行运算要将输入的数据转化成 Double 型,以防出错。 运用面板的叠加做出界面。 通过在按钮的单击事件处理方法中调用类的成员 方法来进行简易计算器的各种运算,并正确实现运算功能。调用 Math 包中的方 法实现各函数功能。此程序使用 GFrame 窗体,将单行文本放在窗体的 NORTH, 接着在窗体添加 panel3,然后在 panel3 的 NORTH 添加 panel1, 在 panel3 的 SOUTH 添加 panel2,最后将数字按钮和运算符按钮添加到 panel2 和 panel3 中同时注册 按钮事件监听器。 2.1 面板设计 利用 Java GUI 布局,使用其中的 Swing:导入 swing:import javax.swing.*; JFrame f; tf; //JFrame是带有标题和边框的顶层窗口。 // JTextField是一个轻量级组件,它允许编辑单行文本。 //JPanel是一般轻量级容器。 //JButton "sqrt"按钮的实现, 通过 Action

JTextField

JPanel panel1, panel2, panel3; JButton

“+”, ”- ”, ”*”, ”/ ”, ”sqrt”等

可配置按钮,并进行一定程度的控制。 Num numActionListener; DecimalFormat df; 2.2 设置各个按钮行为 能够实现基本的加、减、乘、除、阶乘、正弦、余弦和指数等运算,并且有 退格和归零和退出等其它的辅助功能,界面简洁适用。 1) 数字按钮功能的实现 如图2.1所示,该计算器主要支持的数字:0、1、2、3、4、5、6、7、8、9

3

图2.1

2)操作符(+、*、/、=、 tan、log、sin、cos、sqrt)按钮功能实现 主要支持的算子:+、-、*、/。要求提供图形化操作界面。 操作设计如下:
if(oper == "+") {result += x;} else if(oper == "-") {result -= x;} else if(oper == "×") {result *= x;} else if(oper == "÷") {result /= x;} else if(oper == "=") {result = x;} tf.setText(df.format(result));

if(str.equals("sqrt")) { double i = Double.parseDouble(tf.getText()); if(i>=0) { tf.setText(String.valueOf(df.format(Math.sqrt(i)))); } else { tf.setText("负数不能开平方根"); } } else if(str.equals("log")) { double i = Double.parseDouble(tf.getText()); if(i>0) { tf.setText(String.valueOf(df.format(Math.log(i)))); } else
4

{ tf.setText("负数不能求对数"); } } else if(str.equals("%")) { tf.setText(df.format(Double.parseDouble(tf.getText()) / 100)); } else if(str.equals("1/x")) { double i=Double.parseDouble(tf.getText()); if( i== 0) { tf.setText("除数不能为零"); } else { tf.setText(df.format(1 / Double.parseDouble(tf.getText()))); } } else if(str.equals("sin")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.sin(i)))); } else if(str.equals("cos")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.cos(i)))); } else if(str.equals("tan")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.tan(i)))); } else if(str.equals("n!")) { double i = Double.parseDouble(tf.getText()); if((i%2==0)||(i%2==1)) { int j = (int)i; int result=1; for(int k=1;k<=j;k++) result *= k; tf.setText(String.valueOf(result));
5

} else { tf.setText("无法进行阶乘"); } } else if(str.equals("x^2")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i*i))); } else if (str.equals("退出")) { System.exit(0); } else if(str.equals("′″")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(i/180*Math.PI));} else { if(flag) {IfResult = false;} if(IfResult) {oper = str;} else{ getResult(Double.parseDouble(tf.getText())); oper = str; IfResult = true;}}}}

3)撤销清除按钮的实现 按下'DEL'键,利用循环将当前字符串中的最后一个字母删除; 按下'AC'按钮,文本框内数据清除,并清0。 操作设计如下:
if(str == "AC") { tf.setText("0"); IfResult = true; result = 0; } else if(str == "DEL") {if(Double.parseDouble(tf.getText()) > 0) { if(tf.getText().length() > 1) {
6

tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); } else {tf.setText("0"); IfResult = true;}} else {if(tf.getText().length() > 2) {tf.setText(tf.getText().substring(0, tf.getText().length() - 1));} else { tf.setText("0"); IfResult = true;}}

2.3 类图
MyCalucator 类

Signs 类

Clear 类

成员变量: JFrame f JTextField tf JPanel panel1 JPanel Panel2 JPanel Panel3 boolean IfResult boolean flag String oper double result 成员函数: 成员函数: go() addButton() getResult() main() 图 2.5 Num 类 图 2.6 Dot 类 actionPerformed() 成员函数: actionPerformed () Num 类 Dot 类 成员函数: actionPerformed() 图 2.3 Signs 类 成员函数: actionPerformed () 图 2.4 Clear 类

图 2.2 MyCalucator 类

7

三.系统测试
3.1 加法运算如图所示。

图 3.1

图 3.2

8

图 3.3

图 3.4

9

3.2 平方根运算如图所示。

图 3.5

图 3.6

10

图 3.7

3.2tan 运算如图 所示。

图 3.8

11

图 3.9

图 3.10

12

四.软件使用说明书
该软件是运用三个面板的叠加做出界面,通过在按钮的单击事件处理方法 中调用类的成员方法来进行简易计算器的各种运算,并正确实现运算功能。 系统运行步骤如下: 1)在Java中调试并运行程序,显示出计算器界面。 2)进行运算输入,若输入有误,则按‘DEL’键,进行完一次运算,按‘AC 键,退出重新运行程序,进行其他运算。 3)运算完后,选择‘退出’,即可退出界面。 在输入时我们应注意一下几点: 1)连续输入运算符。输入中如果有操作非法,比如按下两次'+',系统默认 一次进行运算。 2)做除法运算时除数不为“0”。 3)开根号运算"负数不能开根号"。 4)程序正常的响应按钮事件,输入的数值长度受变量length的限定,进行混 合四则运算的时候,结果如果不是很大,可以正常显示,当结果太大的 时候,有可能超出可能表示的最大值,(结果溢出),本次设计精度采 用double浮点数,占用 8byte ,范围:4.9e^-324~1.8e-308( 16 个数 字( 16digits ))满足一般使用。除此之外,该软件调用了Math包中的 方法实现各函数功能,此外,整个程序对话框可实现最小化、最大化、 关闭等。

13

设计总结
这次Java课设我的题目是迷你计算器设计,这个程序主要是针对我们Java 中学的布局管理器,由于有一定的基础,所以设计起来也不是很难,不过在设计 中也遇到了好多问题, 通过查阅和求助老师同学,使得我对这一块的内容有了更 深入的了解。通过两周的课程设计,对于我这个编程新手来说,多少有些困难. 不过有志者事竟成。首先,我需要了解一些基本的术语。然后,我还要去图书馆 查阅资料, 找一些与这次课设有关的内容作参考,以便能更方便的完成课设的内 容。另外,我还去网上查阅了一些资料,充实一下自己,一切都准备好了,我就 可以完成我的计算器程序设计报告了。 在编程的过程中, 有时时候会遇到一些不懂的地方,还有程序中的错误的改 正,但是在问老师和同学之后,再加上自己的思考,和看书,就把问题解决了。 这些问题是我在从低级的程序员向高级程序设计师过度的过程必须要解决的。 而 我个人认为我越早接触, 越多接触,越快解决对我本人缩短这次过程有重要的意 义。 其实这次程序设计中,进制转换这一块,我认为做的还是不够完善。系统并 没很好的完成转换功能, 并且也没进制转换的相关用法,这也是我这个小程序员 的不足。以后通过更深一步的学习,我相信我可以做得更好的。 我完成了这次JAVA课程设计,不过这只是我学习路上的驿站。我相信我在未 来的学习中会记住从本次课程设计中所学到的东西, 并将它用到未来的学习工作 中去。

14

参考文献
[1]曲朝阳,杨杰明等.Java 程序设计. 北京: 清华大学出版社,2008.10 [2]耿祥以,张跃平.Java 大学生实用教程. 北京: 电子工业出版社,2012.6 [3]明日科技.Java 经典编程.北京:清华大学出版社,2012.10 [4]李尊朝,苏军.Java 语言程序设计.北京:中国铁道出版社,2004.2 [5]王博. 面向对象的建模、设计技术与方法. 北京希望电脑公司,1990.

15





短短的两周,Java 课程设计结束了。在这期间,我想感谢很多人给予我的 帮助。首先,是我的老师,因为您的指导和教诲,在设计中我基本能按照规范的 方法和步骤进行, 并通过查阅有关资料和生活中的计算器功能来确定迷你计算器 的方案, 然后设计并制作; 除此之外我要感谢我的同学、 朋友, 因为他们的帮助, 我才完成了这次课程设计, 才让我有信心、 有勇气去面对实践中遇到的种种困难。 在实践过程中我学到了很多 Java 中的知识,并巩固了学过的知识。

16

源程序
Application 程序:
package lianxi3; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.text.DecimalFormat; public class MyCalucator { private JFrame f; private JTextField tf; private JPanel panel1, panel2, panel3; private boolean IfResult = true, flag = false; private String oper = "="; private double result = 0; private Num numActionListener; private DecimalFormat df; public void go() { f=new JFrame("科学计算器"); df = new DecimalFormat("#.#####"); f.setLayout(new BorderLayout(5, 5)); panel3 = new JPanel(new BorderLayout(5, 5)); numActionListener = new Num(); tf = new JTextField(); tf.setEditable(false); tf.setBackground(Color.white); tf.setHorizontalAlignment(JTextField.RIGHT); tf.setText("0"); tf.setBorder(BorderFactory.createLoweredBevelBorder()); panel1 = new JPanel(new GridLayout(2, 6, 5, 5)); panel2 = new JPanel(new GridLayout(4, 5, 5, 5)); addButton(panel1, "1/x", new Signs(), Color.orange); addButton(panel1, "x^2", new Signs(), Color. orange); addButton(panel1, "sqrt", new Signs(), Color. orange); addButton(panel1, "e", numActionListener, Color.orange); addButton(panel1, "log", new Signs(), Color. orange ); addButton(panel1, "退出", new Signs(), Color. red); addButton(panel1, "-/+", new Clear(), Color.orange); addButton(panel1, "′″", new Signs(), Color.orange); addButton(panel1, "sin", new Signs(), Color. orange);
17

addButton(panel1, "cos", new Signs(), Color. orange); addButton(panel1, "tan", new Signs(), Color. orange); addButton(panel1, "n!", new Signs(), Color. orange); addButton(panel2, "7", numActionListener, Color.black); addButton(panel2, "8", numActionListener, Color.black); addButton(panel2, "9", numActionListener, Color.black); addButton(panel2, "DEL", new Clear(), Color.red); addButton(panel2, "AC", new Clear(), Color.red); addButton(panel2, "4", numActionListener, Color.black); addButton(panel2, "5", numActionListener, Color.black); addButton(panel2, "6", numActionListener, Color.black); addButton(panel2, "× ", new Signs(), Color.black); addButton(panel2, "÷ ", new Signs(), Color.black); addButton(panel2, "1", numActionListener, Color.black); addButton(panel2, "2", numActionListener, Color.black); addButton(panel2, "3", numActionListener, Color.black); addButton(panel2, "+", new Signs(), Color.black); addButton(panel2, "-", new Signs(), Color.black); addButton(panel2, "0", numActionListener, Color.black); addButton(panel2, ".", new Dot(), Color.black); addButton(panel2, "π", numActionListener, Color.black); addButton(panel2, "%", new Signs(), Color. black); addButton(panel2, "=", new Signs(), Color.black); panel3.add(panel1, BorderLayout.NORTH); panel3.add(panel2, BorderLayout.SOUTH); f.add(tf, BorderLayout.NORTH); f.add(panel3); f.pack(); f.setResizable(true); f.setVisible(true); f.setLocation(600, 200); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private void addButton(JPanel panel, String name, ActionListener action, Color color) { JButton bt = new JButton(name); panel.add(bt); bt.setForeground(color); bt.addActionListener(action); } private void getResult (double x) { if(oper == "+") {result += x;}
18

else if(oper == "-") {result -= x;} else if(oper == "× ") {result *= x;} else if(oper == "÷ ") {result /= x;} else if(oper == "=") {result = x;} tf.setText(df.format(result)); } class Signs implements ActionListener { public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); if(str.equals("sqrt")) { double i = Double.parseDouble(tf.getText()); if(i>=0) { tf.setText(String.valueOf(df.format(Math.sqrt(i)))); } else { tf.setText("负数不能开平方根"); } } else if(str.equals("log")) { double i = Double.parseDouble(tf.getText()); if(i>0) { tf.setText(String.valueOf(df.format(Math.log(i)))); } else { tf.setText("负数不能求对数"); } } else if(str.equals("%")) { tf.setText(df.format(Double.parseDouble(tf.getText()) / 100)); } else if(str.equals("1/x")) { double i=Double.parseDouble(tf.getText()); if( i== 0) {
19

tf.setText("除数不能为零"); } else { tf.setText(df.format(1 / Double.parseDouble(tf.getText()))); } } else if(str.equals("sin")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.sin(i)))); } else if(str.equals("cos")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.cos(i)))); } else if(str.equals("tan")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.tan(i)))); } else if(str.equals("n!")) { double i = Double.parseDouble(tf.getText()); if((i%2==0)||(i%2==1)) { int j = (int)i; int result=1; for(int k=1;k<=j;k++) result *= k; tf.setText(String.valueOf(result)); } else { tf.setText("无法进行阶乘"); } } else if(str.equals("x^2")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i*i))); } else if (str.equals("退出"))
20

{ System.exit(0); } else if(str.equals("′″")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(i/180*Math.PI)); } else { if(flag) { IfResult = false; } if(IfResult) { oper = str; } else { getResult(Double.parseDouble(tf.getText())); oper = str; IfResult = true; } } } } class Clear implements ActionListener { public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); if(str == "AC") { tf.setText("0"); IfResult = true; result = 0; } else if(str == "-/+") { double i = 0 - Double.parseDouble(tf.getText().trim()); tf.setText(df.format(i)); } else if(str == "DEL")
21

{ if(Double.parseDouble(tf.getText()) > 0) { if(tf.getText().length() > 1) { tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); } else { tf.setText("0"); IfResult = true; } } else { if(tf.getText().length() > 2) { tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); } else { tf.setText("0"); IfResult = true; } } } } } class Num implements ActionListener { public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); if(IfResult) { tf.setText(""); IfResult = false; } if(str=="π") { tf.setText(String.valueOf(Math.PI)); } else if(str=="e")
22

{ tf.setText(String.valueOf(Math.E)); } else { tf.setText(tf.getText().trim() + str); if(tf.getText().equals("0")) { tf.setText("0"); IfResult = true; flag = true; } } } }

class Dot implements ActionListener { public void actionPerformed(ActionEvent e) { IfResult = false; if(tf.getText().trim().indexOf(".") == -1) { tf.setText(tf.getText() + "."); } } } public static void main(String []args) { MyCalucator a=new MyCalucator(); a.go(); } }

Applet 程序:
package lianxi3; import java.applet.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.text.DecimalFormat; public class Base extends Applet {
23

private JFrame f; private JTextField tf; private JPanel panel1, panel2, panel3; private boolean IfResult = true, flag = false; private String oper = "="; private double result = 0; private Num numActionListener; private DecimalFormat df; public void init() { f=new JFrame("科学计算器"); df = new DecimalFormat("#.#####"); f.setLayout(new BorderLayout(5, 5)); panel3 = new JPanel(new BorderLayout(5, 5)); numActionListener = new Num(); tf = new JTextField(); tf.setEditable(false); tf.setBackground(Color.white); tf.setHorizontalAlignment(JTextField.RIGHT); tf.setText("0"); tf.setBorder(BorderFactory.createLoweredBevelBorder()); panel1 = new JPanel(new GridLayout(2, 6, 5, 5)); panel2 = new JPanel(new GridLayout(4, 5, 5, 5)); addButton(panel1, "1/x", new Signs(), Color.orange); addButton(panel1, "x^2", new Signs(), Color. orange); addButton(panel1, "sqrt", new Signs(), Color. orange); addButton(panel1, "e", numActionListener, Color.orange); addButton(panel1, "log", new Signs(), Color. orange ); addButton(panel1, "退出", new Signs(), Color. red); addButton(panel1, "-/+", new Clear(), Color.orange); addButton(panel1, "′″", new Signs(), Color.orange); addButton(panel1, "sin", new Signs(), Color. orange); addButton(panel1, "cos", new Signs(), Color. orange); addButton(panel1, "tan", new Signs(), Color. orange); addButton(panel1, "n!", new Signs(), Color. orange); addButton(panel2, "7", numActionListener, Color.black); addButton(panel2, "8", numActionListener, Color.black); addButton(panel2, "9", numActionListener, Color.black); addButton(panel2, "DEL", new Clear(), Color.red); addButton(panel2, "AC", new Clear(), Color.red); addButton(panel2, "4", numActionListener, Color.black); addButton(panel2, "5", numActionListener, Color.black); addButton(panel2, "6", numActionListener, Color.black); addButton(panel2, "× ", new Signs(), Color.black);
24

addButton(panel2, "÷ ", new Signs(), Color.black); addButton(panel2, "1", numActionListener, Color.black); addButton(panel2, "2", numActionListener, Color.black); addButton(panel2, "3", numActionListener, Color.black); addButton(panel2, "+", new Signs(), Color.black); addButton(panel2, "-", new Signs(), Color.black); addButton(panel2, "0", numActionListener, Color.black); addButton(panel2, ".", new Dot(), Color.black); addButton(panel2, "π", numActionListener, Color.black); addButton(panel2, "%", new Signs(), Color. black); addButton(panel2, "=", new Signs(), Color.black); panel3.add(panel1, BorderLayout.NORTH); panel3.add(panel2, BorderLayout.SOUTH); f.add(tf, BorderLayout.NORTH); f.add(panel3); f.pack(); f.setResizable(true); f.setVisible(true); f.setLocation(600, 200); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private void addButton(JPanel panel, String name, ActionListener action, Color color) { JButton bt = new JButton(name); panel.add(bt); bt.setForeground(color); bt.addActionListener(action); } private void getResult (double x) { if(oper == "+") {result += x;} else if(oper == "-") {result -= x;} else if(oper == "× ") {result *= x;} else if(oper == "÷ ") {result /= x;} else if(oper == "=") {result = x;} tf.setText(df.format(result)); } class Signs implements ActionListener { public void actionPerformed(ActionEvent e) { String str = e.getActionCommand();
25

if(str.equals("sqrt")) { double i = Double.parseDouble(tf.getText()); if(i>=0) { tf.setText(String.valueOf(df.format(Math.sqrt(i)))); } else { tf.setText("负数不能开平方根"); } } else if(str.equals("log")) { double i = Double.parseDouble(tf.getText()); if(i>0) { tf.setText(String.valueOf(df.format(Math.log(i)))); } else { tf.setText("负数不能求对数"); } } else if(str.equals("%")) { tf.setText(df.format(Double.parseDouble(tf.getText()) / 100)); } else if(str.equals("1/x")) { double i=Double.parseDouble(tf.getText()); if( i== 0) { tf.setText("除数不能为零"); } else { tf.setText(df.format(1 / Double.parseDouble(tf.getText()))); } } else if(str.equals("sin")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.sin(i)))); }
26

else if(str.equals("cos")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.cos(i)))); } else if(str.equals("tan")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.tan(i)))); } else if(str.equals("n!")) { double i = Double.parseDouble(tf.getText()); if((i%2==0)||(i%2==1)) { int j = (int)i; int result=1; for(int k=1;k<=j;k++) result *= k; tf.setText(String.valueOf(result)); } else { tf.setText("无法进行阶乘"); } } else if(str.equals("x^2")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i*i))); } else if (str.equals("退出")) { System.exit(0); } else if(str.equals("′″")) { double i = Double.parseDouble(tf.getText()); tf.setText(String.valueOf(i/180*Math.PI)); } else { if(flag) { IfResult = false;
27

} if(IfResult) { oper = str; } else { getResult(Double.parseDouble(tf.getText())); oper = str; IfResult = true; } } } } class Clear implements ActionListener { public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); if(str == "AC") { tf.setText("0"); IfResult = true; result = 0; } else if(str == "-/+") { double i = 0 - Double.parseDouble(tf.getText().trim()); tf.setText(df.format(i)); } else if(str == "DEL") { if(Double.parseDouble(tf.getText()) > 0) { if(tf.getText().length() > 1) { tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); } else { tf.setText("0"); IfResult = true; }
28

} else { if(tf.getText().length() > 2) { tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); } else { tf.setText("0"); IfResult = true; } } } } } class Num implements ActionListener { public void actionPerformed(ActionEvent e) { String str = e.getActionCommand(); if(IfResult) { tf.setText(""); IfResult = false; } if(str=="π") { tf.setText(String.valueOf(Math.PI)); } else if(str=="e") { tf.setText(String.valueOf(Math.E)); } else { tf.setText(tf.getText().trim() + str); if(tf.getText().equals("0")) { tf.setText("0"); IfResult = true; flag = true;
29

} } } } class Dot implements ActionListener { public void actionPerformed(ActionEvent e) { IfResult = false; if(tf.getText().trim().indexOf(".") == -1) { tf.setText(tf.getText() + "."); } } } }

30


赞助商链接
相关文章:
简易计算器设计说明书
简易计算器设计说明书_计算机硬件及网络_IT/计算机_专业资料。塔里木大学 摘要单片机的出现是计算机制造技术高速发展的产物, 它是嵌入式控制系统的核 心。如今,它已...
计算器——概要设计说明书
计算器——概要设计说明书_计算机硬件及网络_IT/计算机_专业资料。概要设计说明书 计算器 概要设计说明书 1、引言 1.1 编写目的 在程序设计中, 通过设计、 编制...
计算器详细设计说明书
计算器详细设计说明书 - 江西工业职业技术学院 毕业综合实践 课题名称: 安卓手机计算器 作分专 者: 院: 业: 廖杰 学 号: 20112715 电子与信息工程分院 计算机...
计算器需求分析说明书
计算器需求分析说明书 - 计算器 需求分析说明书 版本 1.0 作者: 完成日期:2009-10-2 1 引言 1.1 编写目的 该软件需求说明书主要是为设计“计算器程序”而...
计算器概要设计说明书
计算器概要设计说明书 - 江西工业职业技术学院 毕业综合实践 课题名称: 安卓手机计算器 作者: 分院: 专业: 廖杰 学号: 20112715 电子与信息工程分院 计算...
(3)计算器软件概要设计说明书
Date 计算机学院程序设计基础实践专用版权所有 侵权必究 软件概要设计说明书 密级: 修 改 履历 分类号: 起草部门 HDXY 标准名:计算器软件概要设计说明书 修改 NO...
Windows下的计算器设计说明书
Windows下的计算器设计说明书 - 课程设计说明书 Windows 环境下的计算器 学院名称: 专业班级: 学生姓名: 机械工程学院 测控 0901 李彧文 张世庆 副教授...
计算器说明书
设计说明书一份,内容包括:包含任务书一份 1) 中文摘要 100 字,关键词 3-5...计算器的计算器程序,要求实现标准型计算器,其中包含基本的四则运 算、倒数运算...
MFC简单计算器设计正文
MFC简单计算器设计正文 - 武汉理工大学《面向对象程序设计》课程设计说明书 实用计算器程序 1.基本功能描述 计算器是人们日常生活中非常实用的计算工具。预期设计目标...
计算器课程设计说明书
计算器课程设计说明书 - 课程设计说明书 设计题目: 指导教师: 院系: 计算器仿真程序设计 魏明军 信息工程学院 黄勇 201114600120 11 计算机一班 学生姓名...
更多相关标签: