实验报告
课程名称:JAVA语言程序设计
院系:计算机科学与工程学院
班级:网络091班
学号:2009083128
指导教师:王波(老师)
完成日期:2011年11月04日
一. 实验名称:设计一个简单的计算器
二. 实验目的:
1.熟悉java图形用户界面的设计原理和程序结构
2.能设计复核问题要求的图形用户界面程序
3.熟悉java awt和swing的组合
4.掌握常用组建的事件借口
5.会应用awt和swing组件进行应用程序设计
三. 实验硬件软件环境:
1.PC计算机一台,配置为CPU为P4 2.8G,内存为1G,硬盘为320G
2.Myseclipse 8.6 JAVA 开发环境
四. 实验算法设计:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
public class Text1 {
public static void main(String[] args) {
Jisuanqi JSQ=new Jisuanqi("计算器");
}
}
class Jisuanqi extends JFrame{//框架
JButton B[];
JTextField txt;
char temp=' ';//存储运算符
int flag=0;//标记button是否是运算符
int Flag=0;//标记button[0]是否有效
int j=0;
String Btxt;
double num1=0;
double num2=0;
double num3=0;
public Jisuanqi(String s){//构造
setTitle(s);
B=new JButton[18];//16个button
txt=new JTextField(16);//文本兰
FlowLayout flow=new FlowLayout();
flow.setHgap(2);
flow.setVgap(8);
setLayout(flow);
add(txt);
Actmonitor m=new Actmonitor();
for(int i=0;i<10;i++)
{
B[i]=new JButton(""+i);
}
B[10]=new JButton("+");
B[11]=new JButton("-");
B[12]=new JButton("*");
B[13]=new JButton("/");
B[14]=new JButton("=");
B[15]=new JButton(".");
B[16]=new JButton("del");
B[17]=new JButton("cle");
for(int i=0;i<18;i++)
{
add(B[i]);
B[i].addActionListener(m);//添加监听器
}
validate();
setBounds(100,100,200,250);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public class Actmonitor implements ActionListener{ //编辑监听器
public void actionPerformed(ActionEvent e){
Object o=e.getSource();
String str=txt.getText();
if(o==B[0]){
if(flag==0){
if(!"0".equals(str))
txt.setText(txt.getText()+"0");
}
else txt.setText("0");
}
if(o==B[1]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"1");
}
else {
txt.setText("1");
flag=0;
}
}
if(o==B[2]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"2");
}
else {
txt.setText("2");
flag=0;
}
}
if(o==B[3]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"3");
}
else {
txt.setText("3");
flag=0;
}
}
if(o==B[4]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"4");
}
else {
txt.setText("4");
flag=0;
}
}
if(o==B[5]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"5");
}
else {
txt.setText("5");
flag=0;
}
}
if(o==B[6]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"6");
}
else {
txt.setText("6");
flag=0;
}
}
if(o==B[7]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"7");
}
else {
txt.setText("7");
flag=0;
}
}
if(o==B[8]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"8");
}
else {
txt.setText("8");
flag=0;
}
}
if(o==B[9]){
if(flag==0) {
if(!"0".equals(str))
txt.setText(txt.getText()+"9");
}
else {
txt.setText("9");
flag=0;
}
}
if(o==B[10]&&!str.isEmpty()){ //"+"
{temp='+';
num1=Double.parseDouble(txt.getText());
flag=1;
}
}
if(o==B[11]&&!str.isEmpty()){ //"-"
temp='-';
num1=Double.parseDouble(txt.getText());
flag=1;
}
if(o==B[12]&&!str.isEmpty()){ //"*"
temp='*';
num1=Double.parseDouble(txt.getText());
flag=1;
}
if(o==B[13]&&!str.isEmpty()){ //"/"
temp='/';
num1=Double.parseDouble(txt.getText());
flag=1;
}
if(o==B[14]&&!str.isEmpty()){//"="
num2=Double.parseDouble(txt.getText());;
flag=1;
if(temp=='+'){
num3=num1+num2;
}
if(temp=='-'){
num3=num1-num2;
}
if(temp=='*'){
num3=num1*num2;
}
if(temp=='/'){
if(num2!=0)
num3=num1/num2;
else num3=0;
}
txt.setText(""+num3);
temp=' ';
}
if(o==B[15]&&!str.isEmpty()){ //"."
if(flag==0)
txt.setText(txt.getText()+".");
}
if(o==B[16]){
txt.setText(txt.getText().substring(0, txt.getText().length()-1));
}
if(o==B[17]){
char temp=' ';
int flag=0;
int Flag=0;
txt.setText("");
}
}
}
}
程序测试记录与结果说明:
1.运行得到如图1中的窗体
图10
五. 实验总结:
通过对计算器窗体的编写我熟悉java图形用户界面的设计原理和程序结构熟悉java awt和swing的组合。学会将书本上的知识运用在实际中,提升了编程能力。
第二篇:java计算器代码及实验报告
一、实验内容
题目:1、设计一个计算器
要求:1、使用layout进行布局,使界面更加友好
2、实现整数的加减乘除运算(不考虑优先级)二、实验过程
(这是实验报告极其重要的内容。要抓住重点,可以从理论和实践两个方面考虑。这部分要写明依据什么知识点以及使用方法进行实验以及实验步骤。不要简单照抄实习指导,更不可写一大堆源代码)
二、实验过程
1、进行计算器界面的布局:
a 、Panel的嵌套布局:
主要设置了七个Panel来将界面分成几个部分。且Panel都是用borderLayout来进行的布局。
如图所示,其中4、5、6、7分别表示Panel4、Panel5、Panel6、Panel7
Panel2由Panel4、Panel5组成;Panel3由Panel6、Panel7组成;
Panel1由Panel2、Panel3组成;
b、
(1)、在Panel6添加一个按钮并将border设置成LoweredBevel,设置按钮大小,并给按钮命名
(2)、将Panel7的layout 设置成FlowLayout,并添加三个按钮,设置按钮大小,并给按钮命名
(3)、将Panel5的layout 设置成gridLayout,并添加四个按钮,设置按钮大小,并给按钮命名
(4)、将Panel4的layout 设置成gridLayout,并添加二十个按钮,设置按钮大小,并给按钮命名
2、给对应按钮添加方法,实现起相应的功能
三、实验结果
1、计算器界面
2、实现功能
能进行整数基本的加减乘除运算、及其连续运算、清零。
四、讨论与分析
1、此实验主要是进行计算器界面的布局,根据电脑上的计算器设计布局
主要设置了七个Panel来将界面分成几个部分。且Panel都是用borderLayout来进行的布局。
2、刚刚开始不能实现连续运算,本程序的设计思路是,读取两次文本框的内容赋值给a,b。
后来在原来的 基础上增加了一个标志位,判断符号是不是第一次输入,如果不是则调用等于按钮功能,实现与等于相同的功能。
五、附录:关键代码
1、数字按钮方法:
如0:如果之前只输入过一次符号,则将数字添加在之前的数后面,否则将文本框置为数字"0"。
void num0_actionPerformed(ActionEvent e) {
if(flag1 == 0)
jTextField1.setText(jTextField1.getText() + "0");
else
{
jTextField1.setText("0");
flag1 = 0;
}
}
其它数字键相同的处理方法,即数字不一样
2、运算按钮:
若为加
void add_actionPerformed(ActionEvent e) {
if (flag == 0) {
a = Integer.parseInt(jTextField1.getText());
jTextField1.setText("");
}
else {
equ_actionPerformed(e);
flag1 = 1;
b = 0;
}
flag = 1;
}
若此次运算过程中第一次输入加号,则将文本框的内容转换成int型并赋值给a,再将文本框置空。否则,调用等于按钮方法,并将flag1 置1,b清零。最后符号位置1。
若为加法符号标志flag置1。若为减,符号标志flag置2。若为乘,符号标志flag置3。若为除,符号标志flag置4。
3、等于按钮:
void equ_actionPerformed(ActionEvent e) {
b = Integer.parseInt(jTextField1.getText());
switch (flag) {
case 1:
a += b;
break;
case 2:
a -= b;
break;
case 3:
a *= b;
break;
case 4:
a /= b;
break;
}
Flag= 0;
Flag 1 = 1;
jTextField1.setText(String.valueOf(a));
}
得到当前文本框内容,转换为整形,赋值给b。判断符号位,进行运算,将结果显示到文本框。
4、清零按钮
void jButton2_actionPerformed(ActionEvent e) {
jTextField1.setText("");
a = 0;
b = 0;
flag = 0;
flag1 = 0;
}
即将文本框,及所有变量置零