计算器实验报告

计科系实验报告单

 

第二篇:Java计算器实验报告

一、目标:

通过Java程序开发实训使学生掌握《面向对象程序设计(Java)》课堂讲授的内容,灵活运用到Java程序的开发与设计中。

二、要求:

按时参加Java程序开发实训训练,不得迟到和早退;独立完成程序设计;按要求撰写实践报告。

三、详细内容:

使用《面向对象程序设计(Java)》课程讲授内容,编写一个简单的计算器,要求实现如下功能:

1. 进行图形界面设计

通过图形界面设计,掌握Frame类、Panel类、5种布局管理器、文本框、标签及按钮的使用方法。

2. 实现计算器的基本功能

包括加减乘除四则运算、清除结果等功能。

3. 实现计算器的存储计算功能

包括清空、使用清零、退格。和基本运算

4.类的属性及所用到的方法布局

布局:

整个界面(Frame)采用BorderLayout布局

P1组件添加到Frame的南部

P1采用默认的流式布局添加文本框

P2组件添加到Frame的中部

P2采用网格布局四行五列放各种按钮

用到的类:

mycal

KeyAdapter

WindowAdapter

MyCal类:

mycal类的属性:

b[];按钮数组保存各种按键 以后放到Panel2中

tf;文本匡显示输入及运算结果

num1,num2,jieguo运算数

char c,ch;运算符号,ch为输入的运算符号,c保存ch输入的“+-*/”

Panel p1,p2;//两个组件p1放文本匡p2放按钮

P2的布局为网格布局5行4列

mycal类的方法:

1. 构造方法:

设置标题;

设置文本框;

文本框中添加匿名内置类(KeyAdapter)实现键盘的输入和运算;

将各种组件添加到容器,设置各种按键的颜色 ;

添加WindowListenr监听器设置关闭按钮;

2.Main方法:

新建一个mycal类;

4. actionPerformed 方法:

设置按钮的输入和运算,

当按下运算数将其显示在文本匡中如果之前清零则将零去除

当按下运算符将其保存在c中并将文本匡内容清空

当按下等号判断字符c的符号进行相应的运算并将结果显示在文本框中。

当按下清空按钮将文本框清空,当按下退格按钮取文本框中字符串的字串删除一个符号。

KeyAdapter类:

KeyAdapter类的属性:mycal类中的属性

KeyAdapter类的方法:

keyPressed()方法

当键盘按下时, 判断键盘的输入

当为“+-*/”时记录下num1及c;

当为”=”或“Enter”时记录下num2并将结果计算出来

keyReleased()方法

当键盘松开时,

如果是按下“+-*/”后松开

将文本框清空

如果是按下“=”或“Enter”后松开

将计算结果显示在文本框中

WindowAdapter类:

WindowAdapter类的属性:

WindowEvent e

WindowAdapter类的方法:

windowClosing();

设置关闭按钮

、四、源代码

/*

类mycal继承Frame实现了ActionListener接口;

往容器中添加两个组件Panel1,Panel2;

Panel中放置文本匡,Panel2中放置各种按键;

文本匡中以匿名内置类的方式添加键盘监听器实现键盘的输入及运算;

为Panel2中各种按键添加动作监听器实现按键的输入及运算;

*/

import java.awt.*;

import java.awt.event.*;

class mycal extends Frame implements ActionListener

{

private Button[] b;

private TextField tf;

private double num1,num2,jieguo;//运算数

private char c,ch;//运算符

Panel p1,p2;//两个组件

public mycal()

{

setTitle("My Calculator 1.0");

p1=new Panel();

tf=new TextField(25);

tf.addKeyListener(new KeyAdapter(){ //添加键盘监听器现键盘的输入及运算

public void keyPressed(KeyEvent e)

{

char ch=e.getKeyChar();

if("+-*/".indexOf(ch)!=-1)

{

num1=Double.parseDouble(tf.getText());

c=ch;

}

if(ch=='='|ch==e.VK_ENTER)

{

num2=Double.parseDouble(tf.getText());

switch(c)

{

case '+': jieguo=num1+num2; break;

case '-': jieguo=num1-num2; break;

case '*': jieguo=num1*num2; break;

case '/': jieguo=num1/num2; break;

}

}

}

public void keyReleased(KeyEvent e)

{

char ch=e.getKeyChar();

if("+-*/".indexOf(ch)!=-1)

{

tf.setText(null);

}

if(ch=='='|e.getKeyCode()==e.VK_ENTER)

{

tf.setText(Double.toString(jieguo));

}

}

});

p1.add(tf);

add(p1,"North");

p2=new Panel();

p2.setLayout(new GridLayout(5,4,10,8));

b=new Button[21];

for(int i=1;i<21;i++)

{

b[i]=new Button();

b[i].setFont(new Font("仿宋",0,16));

}

String str1="/789*456-123+0";

b[1].setLabel("退格");

b[2].setLabel("清空");

b[3].setLabel("清零");

for(int i=4;i<=17;i++)

{

b[i].setLabel(str1.charAt(i-4)+"");

}

b[18].setLabel("+/-");

b[19].setLabel(".");

b[20].setLabel("=");

for(int i=1;i<21;i++)

{

p2.add(b[i]);

b[i].addActionListener(this);

b[i].setBackground(new Color(20,130,180));

b[i].setForeground(Color.yellow);

}

for(int i=1;i<4;i++)

{

b[i].setBackground(new Color(120,180,170));

b[i].setForeground(Color.blue);

}

for(int i=1;i<=4;i++)

{ b[i*4].setBackground(new Color(120,180,170));

b[i*4].setForeground(Color.red);

}

b[20].setBackground(Color.red);

add(p2);

//Dimension di=this.getPreferredSize();

//System.out.println(di.width+","+di.height);

setBounds(100,200,230,300);

setVisible(true);

addWindowListener(new WindowAdapter(){//设置关闭按钮

public void windowClosing(WindowEvent e)

{

e.getWindow().setVisible(false);

e.getWindow().dispose();

System.exit(0);

}

});

}

public static void main(String args[])

{

new mycal();

}

public void actionPerformed(ActionEvent e)// 为Panel2中各种按键添加动作监听器实现按键的输入及运算;

{

String str=e.getActionCommand().trim();

if("0123456789.".indexOf(str)!=-1)

{

if(tf.getText().equals("0"))tf.setText(null);

tf.setText(tf.getText()+str);

return;

}

if("+-*/".indexOf(str)!=-1)

{

num1=Double.parseDouble(tf.getText());

c=str.charAt(0);

tf.setText(null);

return;

}

else if(str.equals("="))

{

num2=Double.parseDouble(tf.getText());

switch(c)

{

case '+': jieguo=num1+num2; break;

case '-': jieguo=num1-num2; break;

case '*': jieguo=num1*num2; break;

case '/': jieguo=num1/num2; break;

}

tf.setText(Double.toString(jieguo));

}

else if(str.equals("+/-"))

{

if(tf.getText().isEmpty()==false)

{

Double lnum=-(Double.parseDouble(tf.getText()));

tf.setText(Double.toString(lnum));

}

else

{

tf.setText("-");

}

}

else if(str.equals("清空"))

{

tf.setText(null);

}

else if(str.equals("清零"))

{

tf.setText("0");

}

else if(str.equals("退格"))

{

tf.setText(tf.getText().substring(0,tf.getText().length()-1));

}

}

}

五、程序运行结果演示

计算器界面

Java计算器实验报告

7+8

Java计算器实验报告

清空

Java计算器实验报告

9*4

Java计算器实验报告

7*8

Java计算器实验报告

退格

Java计算器实验报告

清零

Java计算器实验报告

六、总结

通过本次实验让我对Frame类、Panel类、5种布局管理器、文本框、标签及按钮的使用方法,有了进一步的了解。同时在实验过程中也发现了自己的许多不足,但通过查询对其有有了更深刻大大大的了解.

相关推荐