java课程设计计算器.docx
《java课程设计计算器.docx》由会员分享,可在线阅读,更多相关《java课程设计计算器.docx(21页珍藏版)》请在冰豆网上搜索。
java课程设计计算器
java课程设计--计算器
Java程序设计课程设计报告
(2011--2012年度第1学期)
计算器
专业
计算机科学与技术(网络工程)
学生姓名
赵宝文
班级
B计算机102
学号
1010704227
指导教师
徐森
完成日期
2012年1月8日
题目
1概述
1.1课程设计目的
1.熟悉Java的运行环境及其使用;
2.掌握Java图形界面的使用;
3.加强Java程序的分析能力;
4.加强使用Java知识解决实际问题的能力。
1.2课程设计内容
设计GUI界面的计算器程序,用户可以通过鼠标依次输入参加计算的数值,进行加、减、乘、除等混合运算。
2系统需求分析
2.1系统目标
要求所设计的GUI界面计算器是一个使用很方便的程序,能进行加、减、乘、除等混合运算。
2.2主体功能
用户可以通过鼠标依次输入参加计算的数值,进行加、减、乘、除等混合运算。
2.3开发环境
Eclipse集成开发环境
3系统概要设计
3.1系统的功能模块划分
本计算机文件共有3个java源文件。
类之间的主要关系如下图所示
ComputerPad(主类)
NumberButton
OperationButton
ComputerPad.java
该java源文件生成的类负责创建计算器的“主窗口”。
该类含有main方法,整个程序从该类开始执行。
NumberButton.java
该文件生成的类负责为主类创建数字按钮对象,使用鼠标单击数字按钮可依次输入参加运算的数值的各位数字。
OperationButton.java
该文件生成的类负责为主类创建运算符号按钮对象。
使用鼠标单击运算符号按钮可选择所要进行的运算。
3.2系统流程图
4系统详细设计
4.1ComputerPad(主类)
①成员变量
成员变量描述
变量类型
名称
数字按钮数组
NumberButton[]
numberButton
运算符号按钮数组
OperationButton[]
operationButton
小数点按钮
Button
小数点按钮
正负号按钮
Button
正负号按钮
退格按钮
Button
退格按钮
求倒数按钮
Button
求倒数按钮
等号按钮
Button
等号按钮
清零按钮
Button
清零按钮
显示计算结果
JTextField
resultShow
存储数据的链表
LinkedList
链表
②方法
名称
功能
备注
ComputerPad
创建窗口
构造方法
ActionPerformed
处理ActionEvent事件
接口方法
Main
程序运行入口
③代码
见附录Ⅰ。
4.2NumberButton
①成员变量
成员变量描述
变量类型
名称
按钮代表的数字
Int
number
②方法
名称
功能
备注
NumberButton
创建数字按钮
构造方法
getNumber
获取按钮代表的数字
③代码
见附录Ⅱ。
4.3OperationButton
①成员变量
成员变量描述
变量类型
名称
按钮代表的数字
String
Operator
②方法
名称
功能
备注
OperationButton
创建符号按钮
构造方法
getOperator
获取按钮代表的符号
③代码
见附录Ⅲ。
5测试
5.1测试方案
图5-1
5.1.1加法测试:
1+2=?
图5-1-1
5.1.2乘法测试:
2*3=?
图5-1-2
5.2测试结果
加法测试结果:
1+2=
图5-2-1
乘法测试结果:
2*3=
图5-2-2
6小结
本文利用Java语言编写了一个计算器程序,其中涉及到很多的基础内容,如类、构造方法、继承、接口、GUI等。
通过对这些内容的综合运用,加深了对Java的理解,为进一步学习打下基础。
参考文献
[1]耿祥义,张跃平. Java2实用教程(第三版)[M].北京:
清华大学出版社,2006
[2]耿祥义. Java课程设计(第三版)[M].北京:
清华大学出版社,2004
[3]张跃平.Java2实用教程实验指导与习题解答(第三版)[M].北京:
清华大学出版社,2004
[4]JacquieBarker,Java面向对象编程指南,电子工业出版社,2001
附录
附录Ⅰ源程序清单
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.border.*;
importjava.util.LinkedList;
publicclassComputerPadextendsFrameimplementsActionListener
{
NumberButtonnumberButton[];//数字按钮数组。
OperationButtonoperationButton[];//运算符号按钮数组。
Button小数点按钮,正负号按钮,退格按钮,求倒数按钮,等号按钮,清零按钮;
Panelpanel;//添加各种按钮的面板。
JTextFieldresultShow;//显示计算结果的文本条。
String运算符号[]={"+","-","*","/"};
LinkedList链表;//负责存储数据的链表。
boolean是否按下等号=false;
publicComputerPad()
{
super("计算器");
链表=newLinkedList();
numberButton=newNumberButton[10];//共有10个数字按钮。
for(inti=0;i<=9;i++)
{
numberButton[i]=newNumberButton(i);
numberButton[i].addActionListener(this);
}
operationButton=newOperationButton[4];//共有4个运算符号。
for(inti=0;i<4;i++)
{
operationButton[i]=newOperationButton(运算符号[i]);
operationButton[i].addActionListener(this);
}
小数点按钮=newButton(".");
正负号按钮=newButton("+/-");
等号按钮=newButton("=");
求倒数按钮=newButton("1/x");
退格按钮=newButton("退格");
清零按钮=newButton("C");
清零按钮.setForeground(Color.red);
退格按钮.setForeground(Color.red);
等号按钮.setForeground(Color.red);
求倒数按钮.setForeground(Color.blue);
正负号按钮.setForeground(Color.blue);
小数点按钮.setForeground(Color.blue);
退格按钮.addActionListener(this);
清零按钮.addActionListener(this);
等号按钮.addActionListener(this);
求倒数按钮.addActionListener(this);
正负号按钮.addActionListener(this);
小数点按钮.addActionListener(this);
resultShow=newJTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(newFont("TimesRoman",Font.PLAIN,14));
resultShow.setBorder(newSoftBevelBorder(BevelBorder.LOWERED));
resultShow.setBackground(Color.white);
resultShow.setEditable(false);
panel=newPanel();//放置按钮的面板容器。
panel.setLayout(newGridLayout(4,5));
//面板中的第一行:
panel.add(numberButton[1]);
panel.add(numberButton[2]);
panel.add(numberButton[3]);
panel.add(operationButton[0]);
panel.add(清零按钮);
//面板中的第二行:
panel.add(numberButton[4]);
panel.add(numberButton[5]);
panel.add(numberButton[6]);
panel.add(operationButton[1]);
panel.add(退格按钮);
//面板中的第三行:
panel.add(numberButton[7]);
panel.add(numberButton[8]);
panel.add(numberButton[9]);
panel.add(operationButton[2]);
panel.add(求倒数按钮);
//面板中的第四行:
panel.add(numberButton[0]);
panel.add(正负号按钮);
panel.add(小数点按钮);
panel.add(operationButton[3]);
panel.add(等号按钮);
add(panel,BorderLayout.CENTER);
add(resultShow,BorderLayout.NORTH);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
setVisible(true);
setBounds(100,50,240,180);
setResizable(false);
validate();
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()instanceofNumberButton)//如果鼠标单击数字按钮。
{
NumberButtonb=(NumberButton)e.getSource();
if(链表.size()==0)
{
intnumber=b.getNumber();//获取按钮上的数字。
链表.add(""+number);//将数据添加到链表。
resultShow.setText(""+number);
是否按下等号=false;
}
elseif(链表.size()==1&&是否按下等号==false)
{
intnumber=b.getNumber();
Stringnum=(String)链表.getFirst();
Strings=num.concat(""+number);//将两个数字首尾相接。
链表.set(0,s);
resultShow.setText(s);
}
elseif(链表.size()==1&&是否按下等号==true)
{
intnumber=b.getNumber();
链表.removeFirst();
链表.add(""+number);//将数据添加到链表。
是否按下等号=false;
resultShow.setText(""+number);
}
elseif(链表.size()==2)//链表中已有2个节点。
{
intnumber=b.getNumber();//获取按钮上的数字。
链表.add(""+number);//链表添加第三个节点,注意:
第2个节点是运算符号。
resultShow.setText(""+number);
}
elseif(链表.size()==3)//链表中已有3个节点。
{
intnumber=b.getNumber();
Stringnum=(String)链表.getLast();
Strings=num.concat(""+number);//与链表第3个节点中的数字首尾相接。
链表.set(2,s);
resultShow.setText(s);
}
}
elseif(e.getSource()instanceofOperationButton)//如果单击运算符号按钮。
{
OperationButtonb=(OperationButton)e.getSource();
if(链表.size()==1)
{
Stringfuhao=b.getOperator();
链表.add(fuhao);//链表添加第2个节点:
运算符号。
}
elseif(链表.size()==2)
{
Stringfuhao=b.getOperator();
链表.set(1,fuhao);//改变运算符号。
}
elseif(链表.size()==3)
{
Stringfuhao=b.getOperator();
Stringnumber1=(String)链表.getFirst();
Stringnumber2=(String)链表.getLast();
String运算符号=(String)链表.get
(1);
try
{
doublen1=Double.parseDouble(number1);
doublen2=Double.parseDouble(number2);
doublen=0;
if(运算符号.equals("+"))
{
n=n1+n2;
}
elseif(运算符号.equals("-"))
{
n=n1-n2;
}
elseif(运算符号.equals("*"))
{
n=n1*n2;
}
elseif(运算符号.equals("/"))
{
n=n1/n2;
}
链表.clear();//根据链表内已有的数进行运算,其结果作为新的运算数值。
链表.add(""+n);
链表.add(fuhao);//添加下一次计算的运算符。
resultShow.setText(""+n);
}
catch(Exceptionee)
{
}
}
}
elseif(e.getSource()==等号按钮)
{
是否按下等号=true;
if(链表.size()==1||链表.size()==2)
{
Stringnum=(String)链表.getFirst();
resultShow.setText(""+num);
}
elseif(链表.size()==3)
{
Stringnumber1=(String)链表.getFirst();
Stringnumber2=(String)链表.getLast();
String运算符号=(String)链表.get
(1);
try
{
doublen1=Double.parseDouble(number1);
doublen2=Double.parseDouble(number2);
doublen=0;
if(运算符号.equals("+"))
{
n=n1+n2;
}
elseif(运算符号.equals("-"))
{
n=n1-n2;
}
elseif(运算符号.equals("*"))
{
n=n1*n2;
}
elseif(运算符号.equals("/"))
{
n=n1/n2;
}
resultShow.setText(""+n);
链表.set(0,""+n);
链表.removeLast();//将链表中第二个运算数删除。
链表.removeLast();//再将运算符号删除。
}
catch(Exceptionee)
{
}
}
}
elseif(e.getSource()==小数点按钮)
{
if(链表.size()==0)//链表中还没有节点。
{
是否按下等号=false;
}
elseif(链表.size()==1)
{
Stringdot=小数点按钮.getLabel();//获取按钮上的小数点。
Stringnum=(String)链表.getFirst();
Strings=null;
if(num.indexOf(dot)==-1)//加入数字中不含有小数点。
{
s=num.concat(dot);
链表.set(0,s);
}
else//如果数字中已含有小数点。
{
s=num;
}
链表.set(0,s);
resultShow.setText(s);
}
elseif(链表.size()==3)
{
Stringdot=小数点按钮.getLabel();//获取按钮上的小数点。
Stringnum=(String)链表.getFirst();
Strings=null;
if(num.indexOf(dot)==-1)
{
s=num.concat(dot);
链表.set(2,s);
}
else
{
s=num;
}
resultShow.setText(s);
}
}
elseif(e.getSource()==退格按钮)
{
if(链表.size()==1)
{
Stringnum=(String)链表.getFirst();
if(num.length()>=1)
{
num=num.substring(0,num.length()-1);
链表.set(0,num);
resultShow.setText(num);
}
else
{
链表.removeLast();
resultShow.setText("0");
}
}
elseif(链表.size()==3)
{
Stringnum=(String)链表.getLast();
if(num.length()>=1)
{
num=num.substring(0,num.length()-1);
链表.set(2,num);
resultShow.setText(num);
}
else
{
链表.removeLast();
resultShow.setText("0");
}
}
}
elseif(e.getSource()==正负号按钮)
{
if(链表.size()==1)
{
Stringnumber1=(String)链表.getFirst();
try
{
doubled=Double.parseDouble(number1);
d=-1*d;
Stringstr=String.valueOf(d);
链表.set(0,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
elseif(链表.size()==3)
{
Stringnumber2=(String)链表.getFirst();
try
{
doubled=Double.parseDouble(number2);
d=-1*d;
Stringstr=String.valueOf(d);
链表.set(2,str);
resultShow.setText(str);
}
catch(Exceptionee)
{
}
}
}
elseif(e.getSource()=