java程序
计算器论文
本 科 学 年 论 文
论文题目: java计算器——图形界面设计 院 系: 信息科学与技术 专 业: 计算机 姓 名: 学 号:
指导教师: 撰写学年: 2009 至2010 学年
二零一零年六月
目 录
中文摘要„„„„„„„„„„„„„„„„„„„„„„„„„„
章 标准计算器概述„„„„„„„„„„„„„„„„„„„ 第一
1.1 设计目的„„„„„„„„„„„„„„„„„„„„„
1.2 功能模块设计„„„„„„„„„„„„„„„„„„„
1.3 系统功能图 „„„„„„„„„„„„„„„„„„„„ 第二章 标准计算器设计与实现„„„„„„„„„„„„„„„„
Java技术概述„„„„„„„„„„„„„„„„„„„ 2.1
2.2 Java主要特点„„„„„„„„„„„„„„„„„„„
2.3 图形界面设计
„„„„„„„„„„„„„„„„„
2.4 标准计算器界面„„„„„„„„„„„„„„„„„„
2.5 JAVA计算器的具体实现代码„„„„„„„„„„„„„ 程序设计过程中的问题„„„„„„„„„„„„„„„„„„„„ 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„
中文摘要
本计算器是由java语言所编程设计的标准计算器,可以进行十进制下的四则运算(加、减、乘、除)、开根号、百分号、求倒数,还可以实现数值的符号转换操作。 ,Backspace
示退格, CE表示将当前文本框内数据清除,C表示文本框内数据清除。此外还提供了“编辑”、“查看”、“帮助”三个菜单项,使用者可通过使用菜单项实现复制、粘贴功能。界面类似windows自带计算器界面。
关键词: java语言;计算器;标准
第一章 标准计算器概述
1.1设计目的
图形界面设计,熟悉java.awt包中的组件,掌握图形界面设计方法,理解
委托事件处理模型。从而检测对这门课的掌握情况,有助于及时查漏补缺。
1.2功能模块设计
, 标准计算器
以下为标准计算器的基本功能:
)加法 (1
两个数据进行加操作,可以为小数。
)减法 (2
两个数据进行减操作,可以为负数相减。 (3)乘法
两个数相乘操作。
(4)除法
两个数相除操作。
(5)开平方
对任意一个数进行开方运算,可以是小数。 (6)百分号
对任意一个数进行百分号运算。
(7)倒数
对任意一个数进行倒数运算。
1.3系统功能图
加法运算 倒数运算
减法运算
标准计算器 开平方运算
乘法运算
除法运算 百分号运算
第二章 标准计算器设计与实现
2.1 标准计算器界面
2.2 界面设计代码
计算器的界面由一个菜单栏 一个文本框及27个按钮组成,具体实现代码如下所示:
MenuBar myB=new MenuBar();
setMenuBar(myB);
Menu m1=new Menu("编辑(E)");
MenuItem m11= new MenuItem("复制(C) Ctrl+C");
m11.addActionListener(this);
m1.add(m11);
MenuItem m12=new MenuItem("粘贴(P) Ctrl+V");
m12.addActionListener(this);
m1.add(m12);
myB.add(m1);
Menu m2=new Menu("查看(V)");
m2.add(new MenuItem("标准型(T)"));
m2.add(new MenuItem("科学型(S)"));
m2.addSeparator();
m2.add(new MenuItem("数字分组(I)"));
m2.addActionListener(this);
myB.add(m2);
Menu m3=new Menu("帮助(H)");
MenuItem m31=new MenuItem("帮助主题(H)");
m31.addActionListener(this);
m3.add(m31);
m3.addSeparator();
MenuItem m32=new MenuItem("关于计算器(A)");
m32.addActionListener(this);
m3.add(m32);
myB.add(m3);
//////////
JPanel pa1=new JPanel();
pa1.setBackground(new Color(236,231,210));
text=new JTextField("0.",31);
pa1.add("North",text);
//面板添加和按钮的设置
JPanel pa=new JPanel();
JPanel pa2=new JPanel();
JButton bt1=new JButton("Backspace");
JButton bt2=new JButton("CE");
JButton bt3=new JButton("C");
bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
pa2.add(bt1);
pa2.add(bt2);
pa2.add(bt3);
pa.setLayout(new BorderLayout());
pa.add(pa2,"North");
JPanel p1=new JPanel();
p1.setLayout(new GridLayout(4,1,2,5));
JButton bt4=new JButton("MC");
JButton bt5=new JButton("MR");
JButton bt6=new JButton("MS");
JButton bt7=new JButton("M+");
p1.add(bt4);
p1.add(bt5);
p1.add(bt6);
p1.add(bt7);
pa.add(p1,"West");
JPanel p = new JPanel();
p.setLayout(new GridLayout(4, 5,2,5));
String buttons[] =
{"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0"
,".","=","+","+/-"};
JButton btn[]=new JButton[buttons.length];
for (int i = 0; i < buttons.length; i++)
{addButton(p, buttons[i]);
pa.add(p, "Center");
}
pa1.add("South",pa);
this.getContentPane().add(pa1);
}
private void addButton(Container c, String s)
{ JButton b = new JButton(s);
c.add(b);
b.addActionListener(this);
第三章 标准计算器的实现与演示
3.1 Java技术概述
Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。
Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.5,最近版本为Java1.7。
Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。
* Java SE(Java Platform,Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
* Java EE(Java Platform,Enterprise Edition)。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented
architecture,SOA)和 Web 2.0 应用程序。
* Java ME(Java Platform,Micro Edition)。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、
健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能
3.2 Java主要特点
1、Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。
3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的
),它提供了用于网Java应用编程接口中有一个网络应用编程接口(java.net络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等 4
是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。
6、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。
10、Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使
用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
11、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
3.3 标准计算器演示
(1)启动计算器
(2)加法、乘法运算
分别输入9和3然后分别计算其加法、乘法运算
9 +
3 = 9 * 3 = (3)开平方运算
sqrt
(4)百分号运算
% (5)倒数运算
1/x
JAVA程序设计计算器的具体实现代码 import java.awt.*;
import java.awt.event.*; import javax.swing.*;
public class jisuanqi extends JFrame implements
ActionListener,ItemListener{
JTextField text;
JTextField textMemory;
boolean clickable;
double memoryd; //使用内存中存储的数字
int memoryi;
String copy;
public jisuanqi(){
super("计算器");
setSize(357,253);
}
public void init(){
clickable = true;
//添加菜单栏
MenuBar myB=new MenuBar();
setMenuBar(myB);
Menu m1=new Menu("编辑(E)");
MenuItem m11= new MenuItem("复制(C) Ctrl+C");
m11.addActionListener(this);
m1.add(m11);
MenuItem m12=new MenuItem("粘贴(P) Ctrl+V");
m12.addActionListener(this);
m1.add(m12);
myB.add(m1);
Menu m2=new Menu("查看(V)");
m2.add(new MenuItem("标准型(T)"));
m2.add(new MenuItem("科学型(S)"));
m2.addSeparator();
m2.add(new MenuItem("数字分组(I)"));
m2.addActionListener(this);
myB.add(m2);
Menu m3=new Menu("帮助(H)");
MenuItem m31=new MenuItem("帮助主题(H)");
m31.addActionListener(this);
m3.add(m31);
m3.addSeparator();
MenuItem m32=new MenuItem("关于计算器(A)");
m32.addActionListener(this);
m3.add(m32);
myB.add(m3);
//////////
JPanel pa1=new JPanel();
pa1.setBackground(new Color(236,231,210));
text=new JTextField("0.",31);
pa1.add("North",text);
//面板添加和按钮的设置
JPanel pa=new JPanel();
JPanel pa2=new JPanel();
JButton bt1=new JButton("Backspace");
JButton bt2=new JButton("CE");
JButton bt3=new JButton("C");
bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
pa2.add(bt1);
pa2.add(bt2);
pa2.add(bt3);
pa.setLayout(new BorderLayout());
pa.add(pa2,"North");
JPanel p1=new JPanel();
p1.setLayout(new GridLayout(4,1,2,5));
JButton bt4=new JButton("MC");
JButton bt5=new JButton("MR");
JButton bt6=new JButton("MS");
JButton bt7=new JButton("M+");
p1.add(bt4);
p1.add(bt5);
p1.add(bt6);
p1.add(bt7);
pa.add(p1,"West");
JPanel p = new JPanel();
p.setLayout(new GridLayout(4, 5,2,5));
String buttons[] =
{"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0"
,".","=","+","+/-"};
JButton btn[]=new JButton[buttons.length];
for (int i = 0; i < buttons.length; i++)
{addButton(p, buttons[i]);
pa.add(p, "Center");
}
pa1.add("South",pa);
this.getContentPane().add(pa1);
}
private void addButton(Container c, String s)
{ JButton b = new JButton(s);
c.add(b);
b.addActionListener(this);
}
//功能的实现
public void actionPerformed(ActionEvent evt)
{
String s = evt.getActionCommand();
if(s.equals("CE")||s.equals("C")){
text.setText("");
}
////////////////////
else if(s.equals("+/-"))//单击"+/-"选择输入的运算数是正数还是负数
{ double x;
x=Double.parseDouble(text.getText().trim());
text.setText(""+(-x));
}
else
if (s == "sqrt") {
String s1 = text.getText();
if (s1.charAt(0) == '-'&& clickable == true) {
text.setText("负数不能开根号");
clickable = false;
}
else
text.setText(Double.toString(java.lang.Math.sqrt(Double.
parseDouble(text.getText()))));
}
else if(s.equals("%"))//单击了"%"按钮
{ double x;
x=Double.parseDouble(text.getText().trim());
text.setText(""+(0.01*x));
// str.setLength(0);
//y=0d;
}
else if(s.equals("1/x"))//单击了"1/X"按钮
{ double x;
x=Double.parseDouble(text.getText().trim());
if(x==0)
{
text.setText("除数不能为零");
}
else
{
text.setText(""+(1/x));
}
//按下'+/-'按钮时处理
if (s== "+/-" && clickable == true) {
boolean isNumber = true;
String s1 = text.getText();
for (int i = 0; i < s.length(); i++)
if (! (s1.charAt(i) >= '0' && s1.charAt(i) <= '9' ||
s1.charAt(i) == '.' ||
s1.charAt(i) == '-')) {
isNumber = false;
break;
}
if (isNumber == true) {
//如果当前字符串首字母有'-'号,代表现在是个负数,再按下时,则将首符号去掉
if (s.charAt(0) == '-') {
text.setText("");
for (int i = 1; i < s1.length(); i++) {
char a = s1.charAt(i);
text.setText(text.getText() + a);
}
}
//如果当前字符串第一个字符不是符号,则添加一个符号在首字母处
else
text.setText('-' + s);
}
}
//计算器有关内存操作
//'MC'的操作,将内存清0
else
if (s == "MC" && clickable == true) {
memoryd = memoryi = 0;
textMemory.setText("");
}
//'MS'的操作,将当前文本框内容保存入内存,显示'M'
else
if (s == "MS" && clickable == true) {
boolean isDot = false;
textMemory.setText(" M");
for (int i = 0; i < text.getText().length(); i++)
if ('.' == text.getText().charAt(i)) {
isDot = true;
break;
}
//如果是double,则存入memoryd(double存储器)
if (isDot == true) {
memoryd = Double.parseDouble(text.getText());
memoryi = 0; //保证存储器中存放最新的值
}
//如果是int,则存入memoryi(int存储器)
else {
memoryi = Integer.parseInt(text.getText());
memoryd = 0; //保证存储器中存放最新的值
}
}
//'MR'的操作,将存储器中的信息输出
else
if (s == "MR" && clickable == true) {
if (memoryd != 0)
text.setText(Double.toString(memoryd));
if (memoryi != 0)
text.setText(Integer.toString(memoryi));
}
//'M+'的功能,将当前文本框里的数据和存储器中数据相加后,再存入
存储器
else
if (s == "M+" && clickable == true) {
boolean isDot = false;
for (int i = 0; i < text.getText().length(); i++)
if ('.' == text.getText().charAt(i)) {
isDot = true;
break;
}
if (memoryi != 0) { //存储中是一个int型数
if (isDot == false) //被加数是一个int型数
memoryi += Integer.parseInt(text.getText());
else { //被加数是一个double型数,则将int存储器中数传入
double存储器与当前数相加,int存储器清零
memoryd = memoryi + Double.parseDouble(text.getText());
memoryi = 0;
}
}
else
memoryd += Double.parseDouble(text.getText());
}
}
//按下'复制'菜单栏
else
if (s.equals("复制(C) Ctrl+C")) {
copy = text.getText();
}
//按下'粘贴'菜单栏
else
if (s .equals("粘贴(P) Ctrl+V") ) {
text.setText(copy);
}
//按下'Backspace'键,利用循环将当前字符串中的最后一个字母删除
else
if (s.equals("Backspace") && clickable == true) {
String s1 = text.getText();
text.setText("");
for (int i = 0; i < s1.length() - 1; i++) {
char a = s1.charAt(i);
text.setText(text.getText() + a);
}
}
/* //按下'帮助主题'菜单栏
if (s == "帮助主题(H)") {
JOptionPane.showMessageDialog(panel, scrollHelp);
}*/
///////////
else
if ('0' <= s.charAt(0) && s.charAt(0) <= '9' || s.equals("."))
{ // text.setText("");
if (start)
text.setText(s);
else text.setText(text.getText() + s);
start = false;
}
else
{ if (start)
{ if (s.equals("-"))
{ text.setText(s); start = false; }
else op = s;
}
else
{
double x=Double.parseDouble(text.getText());
calculate(x);
op = s;
start = true;
}
}
}
public void calculate(double n)
{ if (op.equals("+")) arg += n;
else if (op.equals("-")) arg -= n;
else if (op.equals("*")) arg *= n;
else if (op.equals("/")) arg /= n;
else if (op.equals("=")) arg = n;
text.setText("" + arg);
}
private double arg = 0;
private String op = "=";
private boolean start = true;
///////
public void itemStateChanged(ItemEvent e)
{
}
public static void main(String args[])
{
JFrame frame=new JFrame();
jisuanqi myMenu=new jisuanqi();
myMenu.init();
myMenu.setVisible(true);
frame.show();
}
}
程序设计过程中的问题
该设计目前还不太完整全面,在测试时有以下问题:
(1) 在进行aqrt 、%、 1/x这三个运算后再输入数据就在文本框中继续
输入,不能重新输入。需要按下清零键才可继续输入下一数据再进行
运算。
(2) 菜单栏中虽然设计了“查看—标准型、科学型、数字分组”以及“帮
助—帮助主题、关于计算器”可是其功能并没有时间。
(3) 该计算器设计了有关内存的操作,可是并没有达到预期中的效果。
[参考文献]
[1]. 施霞萍 张欢欢 王瑾德 马可幸 编著 《Java 程序设计教程》 北京:机械工业出版社,2006.9
[2]. 李芝兴 杨瑞龙 主编 《Java EE Web 编程(Eclipse 平台)》 北京:机械工业出版社,2007.11
等编著 《Java 项目开发全过程实录》 北京:清华大学出版社, [3]. 苗春义
类的命名及功能实现
包名 类名 类的功能实现 Package 主类jia 主类包含了界面的定义和
布局并且实现了运算的功
能;
树组件的类shu 实现了“帮助文档”的树
形分层结构