计科系实验报告单
一、目标:
通过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));
}
}
}
五、程序运行结果演示
计算器界面
7+8
清空
9*4
7*8
退格
清零
六、总结
通过本次实验让我对Frame类、Panel类、5种布局管理器、文本框、标签及按钮的使用方法,有了进一步的了解。同时在实验过程中也发现了自己的许多不足,但通过查询对其有有了更深刻大大大的了解.
实验4计数器及其应用一实验目的1学习用集成触发器构成计数器的方法2掌握中规模集成计数器的使用及功能测试方法二实验原理计数器是一个用…
HUNANUNIVERSITY程序设计训练简单的计算器报告学生姓名田博鑫学生学号专业班级指导老师20xx年6月16日至20xx年7…
HTML网页实验报告院系计算机控制与工程学院班级计1241学号姓名完成日期1一实验名称设计一个网页计算器二需求分析计算器是日常生活…
目录一系统开发的背景1二系统分析与设计1一二计算器的主要功能1系统模块结构设计1三系统的设计与实现2一二计算器的初始界面2一般计算…
C计算器实验报告班级学号20xx13432姓名蔡启林一实验目的和要求设计一个简单计算器具有一般计算功能能进行基本的加减乘除运算还具…
实验一图灵机模型与计算机硬件系统虚拟拆装五实验报告实验名称学号姓名实验报告表11图灵机模型中的主要组成部分及作用班级实验时间年月日…
计算器实验报告一实验目的1熟悉java图形用户界面的设计原理和程序结构2能设计复核问题要求的图形用户界面程序3熟悉javaawt和…
实验报告20xx20xx学年第2学期课程名称嵌入式操作系统实验题目简易计算器的设计与实现专业计算机科学与技术信息处理是什么专业写什…
实验4计数器及其应用一实验目的1学习用集成触发器构成计数器的方法2掌握中规模集成计数器的使用及功能测试方法二实验原理计数器是一个用…
学号姓名实验三实验报告五实验报告实验名称字符编码与信息交换学号姓名班级实验时间年月日实验报告表31西文字符显示过程编码记录表实验报…
《计算机组成原理》实验报告学院:专业:班级学号:AP0804114学生姓名:实验日期:指导老师:成绩评定:五邑大学信息学院计算机组…