Java课程设计模板Word文档下载推荐.docx
《Java课程设计模板Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Java课程设计模板Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。
b、界面设计
图1计算器面板
c、类UML图
ArrayStackCharUML图如图2.3A所示:
ArrayStackDoubleUML图如图2.3B所示
图2图3
三、
类分析及实现
a、类层次分析及构建
类名:
This_number_too_big
作用:
自定义的异常类,用来处理计算结果溢出
继承的父类:
Exception类
实现的接口:
没有
classThis_number_too_bigextendsException
{
}//自定义的一个结果溢出异常类
Jsp2003
主类。
Frame类
ItemListener类,ActionListener类
classJsp2003extendsFrameimplementsItemListener,ActionListener
publicintnumber=0,length=18;
//number是用来记录输入的数字个数,
//length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制publiccharmark='
n'
;
//设置运算符号为没有即为‘n’,它的值是‘+’‘-’‘*’‘/’
publicdoubledata=0;
//设置运算数据为零
publiccharch;
//用来临时存放所按按钮的第一个字符
publicbooleanRefresh=false;
//设置lab是否要在输入数据的时候刷新,初始为否
程序的设计参考了SunJava网站里的大量实例,比如Layout的使用、Event的处理、Components的添加与应用等等。
其中:
publicclassNewCalcextendsJFrameimplementsActionListener
语句实现了ActionListener接口,因此可以调用addActionListener(this)方法对按钮进行点击监听,在下面的publicvoidactionPerformed(ActionEvente)方法里面对各个点击事件进行处理。
b、处理按了运算符后的计算:
publicvoidjs()throwsThis_number_too_big
{if(mark=='
)
{mark=ch;
/
data=Double.parseDouble(lab.getText());
Refresh=true;
}
else
{switch(mark)
{case'
+'
:
data+=Double.parseDouble(lab.getText());
break;
case'
-'
data-=Double.parseDouble(lab.getText());
*'
data*=Double.parseDouble(lab.getText());
/'
data/=Double.parseDouble(lab.getText());
lab.setText(Double.toString(data));
mark=ch;
number=lab.getText().length();
//System.out.println(lab.getText());
if(data>
Double.MAX_VALUE)
{thrownewThis_number_too_big();
}
}
处理输入字符:
{if(Refresh==true)
{lab.setText("
0"
);
number=0;
Refresh=false;
if(lab.getText().charAt(0)=='
0'
&
lab.getText().length()==1)
{lab.setText(Character.toString(ch));
number++;
if(number<
length)
{number++;
lab.setText(lab.getText()+ch);
八进制或十六进制转换成十进制I:
publicStringgoto_10(Strings,longl)
//参数s:
是要转换的字符串,由于输入的控制,保证了字符串的合法性;
//参数l:
使用来设置是将8进制还是16进制转换成10进制,它的有效值为8或16;
{Stringstr=s;
//用来转换的字符串
longj=l;
//表示进制
longlg=0,jing=1;
//lg用来记录权乘和,jing用来记录位权
charcha;
//临时记录要转换的字符
for(inti=1;
i<
=str.length();
i++)
{cha=str.charAt(str.length()-i);
switch(cha)
1'
lg=lg+1*jing;
break;
2'
lg=lg+2*jing;
3'
lg=lg+3*jing;
4'
lg=lg+4*jing;
5'
lg=lg+5*jing;
6'
lg=lg+6*jing;
7'
lg=lg+7*jing;
8'
lg=lg+8*jing;
9'
lg=lg+9*jing;
A'
lg=lg+10*jing;
B'
lg=lg+11*jing;
C'
lg=lg+12*jing;
D'
lg=lg+13*jing;
E'
lg=lg+14*jing;
F'
lg=lg+15*jing;
jing*=j;
//位权升一级,为下次使用做好准备
returnLong.toString(lg);
}//endStringgoto_10()method
c、程序流程图
图3绘制计算器方法PAD图
d、运行结果
图4计算结果显示
四、程序具体实现
a、主要程序代码及必要的代码解释
importjava.awt.*;
importjava.awt.event.*;
classThis_number_too_bigextendsException{
}//自定义的一个结果溢出异常类
//ActionLintsner是所有监听器的父类,其它监听器可以监听的事件都可以被它捕获
//ItemListener用于捕获带有item的组件产生的事件,如ComboBox,CheckBox,RadioButton,ToggleButton
classhejiangextendsFrameimplementsItemListener,ActionListener{
publichejiang(){
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
dispose();
System.exit(0);
}//给窗口注册一个事件监听器,当你点了窗口右上方的叉号时,此方法被调用
});
}
statichejiangmainFrame=newhejiang();
//创建一个mainFrame
staticLabellab1=newLabel("
staticLabellab=newLabel("
staticPanelpnl1=newPanel(newGridLayout(4,3,3,3));
//创建新的面板.布局管理
staticPanelpnl2=newPanel(newGridLayout(4,1,3,3));
staticPanelpnl3=newPanel(newGridLayout(1,2,3,3));
staticPanelpnl4=newPanel(newGridLayout(6,1,3,3));
staticButtonbt9=newButton("
9"
staticButtonbt8=newButton("
8"
staticButtonbt7=newButton("
7"
staticButtonbt6=newButton("
6"
staticButtonbt5=newButton("
5"
staticButtonbt4=newButton("
4"
staticButtonbt3=newButton("
3"
staticButtonbt2=newButton("
2"
staticButtonbt1=newButton("
1"
staticButtonbt0=newButton("
staticButtonbtdot=newButton("
."
staticButtonbtequ=newButton("
="
staticButtonbtadd=newButton("
+"
staticButtonbtsub=newButton("
-"
staticButtonbtmul=newButton("
*"
staticButtonbtdev=newButton("
/"
staticButtonbtA=newButton("
A"
staticButtonbtB=newButton("
B"
staticButtonbtC=newButton("
C"
staticButtonbtD=newButton("
D"
staticButtonbtE=newButton("
E"
staticButtonbtF=newButton("
F"
staticCheckboxckb8=newCheckbox("
八进制"
staticCheckboxckb10=newCheckbox("
十进制"
staticCheckboxckb16=newCheckbox("
十六进制"
staticButtonbtc=newButton("
clear"
staticButtonbtt=newButton("
backspace"
publicintnumber=0,length=18;
//number是用来记录输入的数字个数,length是用来设置在不同进制下允许输入的最多数字位数,默认为十进制
publiccharmark='
//设置运算符号为没有即为‘n’,它的值是‘+’‘-’‘*’‘/’
publicdoubledata=0;
//设置运算数据为零
publiccharch;
//用来临时存放所按按钮的第一个字符
publicbooleanRefresh=false;
//设置lab是否要在输入数据的时候刷新,初始为否
publicstaticvoidmain(Stringargs[]){
System.out.println("
Startinghejiang..."
lab.setAlignment(Label.RIGHT);
//对齐方式
lab.setBackground(Color.lightGray);
//背景色
lab.setForeground(Color.BLUE);
//前景色
lab.setFont(newFont("
Serief"
Font.BOLD,18));
//字体设置
lab.setBounds(14,33,216,40);
lab1.setAlignment(Label.RIGHT);
lab1.setBackground(Color.lightGray);
lab1.setForeground(Color.BLUE);
lab1.setFont(newFont("
lab1.setBounds(14,75,216,40);
mainFrame.add(lab);
mainFrame.add(lab1);
CheckboxGroupgrp=newCheckboxGroup();
ckb8.setCheckboxGroup(grp);
ckb10.setCheckboxGroup(grp);
ckb16.setCheckboxGroup(grp);
ckb8.setBounds(14,115,55,25);
//setBounds()方法是可以设定控件的大小和位置
ckb10.setBounds(69,115,55,25);
ckb16.setBounds(124,115,65,25);
ckb8.setState(false);
ckb10.setState(true);
ckb16.setState(false);
mainFrame.add(ckb8);
mainFrame.add(ckb10);
mainFrame.add(ckb16);
pnl1.setBounds(18,180,120,150);
pnl2.setBounds(144,180,40,150);
pnl3.setBounds(14,140,170,36);
pnl4.setBounds(190,140,40,190);
pnl1.add(bt7);
pnl1.add(bt8);
pnl1.add(bt9);
pnl1.add(bt4);
pnl1.add(bt5);
pnl1.add(bt6);
pnl1.add(bt1);
pnl1.add(bt2);
pnl1.add(bt3);
pnl1.add(bt0);
pnl1.add(btdot);
pnl1.add(btequ);
pnl2.add(btadd);
pnl2.add(btsub);
pnl2.add(btmul);
pnl2.add(btdev);
pnl3.add(btt);
pnl3.add(btc);
pnl4.add(btA);
pnl4.add(btB);
pnl4.add(btC);
pnl4.add(btD);
pnl4.add(btE);
pnl4.add(btF);
btA.enable(false);
btB.enable(false);
btC.enable(false);
btD.enable(false);
btE.enable(false);
btF.enable(false);
mainFrame.add(pnl1);
mainFrame.add(pnl2);
mainFrame.add(pnl3);
mainFrame.add(pnl4);
mainFrame.setResizable(false);
//窗口可以最小化和关闭,但是不能被任意改变大小
mainFrame.setLayout(null);
mainFrame.setSize(240,350);
mainFrame.setTitle("
小型计算器"
mainFrame.setVisible(true);
//组件可见
ckb8.addItemListener(mainFrame);
ckb10.addItemListener(mainFrame);
ckb16.addItemListener(mainFrame);
//把事件聆听者向各个组键注册
bt1.addActionListener(mainFrame);
bt2.addActionListener(mainFrame);
bt3.addActionListener(mainFrame);
bt4.addActionListener(mainFrame);
bt5.addActionListener(mainFrame);
bt6.addActionListener(mainFrame);
bt7.addActionListener(mainFrame);
bt8.addActionListener(mainFrame);
bt9.addActionListener(mainFrame);
bt0.addActionListener(mainFrame);
btadd.addActionListener(mainFrame);
btsub.addActionListener(mainFrame);
btmul.addActionListener(mainFrame);
btdev.addActionListener(mainFrame);
btt.addActionListener(mainFrame);
btc.addActionListener(mainFrame);
btdot.addActionListener(mainFrame);
btequ.addActionListener(mainFrame);
btA.addActionListener(mainFrame);
btB.addActionListener(mainFrame);
btC.addActionListener(mainFrame);
btD.addActionListener(mainFrame);
btE.addActionListener(mainFrame);
btF.addActionListener(mainFrame);
}//endmain()mothed
//checkbox事件的处理
publicvoiditemStateChanged(ItemEvente){
mark='
Refresh=false;
//规定当进制转换时以前输入的运算符失效
if(ckb8.getState()==true){
btA.enable(false);
btB.enable(false);
btC.enable(false);
btD.enable(false);
btE.enable(false);
btF.enable(false);
bt9.enable(false);
bt8.enable(false);
btdot.enable(false);
btadd.enable(false);
btmul.enable(false);
btsub.enable(false);
btdev.enable(false);
btequ.enable(false);
//在八进制的情况下对有些按件的管理
if(length==18){
lab.setText(goto10_8(lab.getText()));
number=lab.getText().length();
}
if(length==14){
lab.setText(goto_10(lab.getText(),16L));
//将其他进制转换成八进制
length=19;
//在八进制下允许输