{number++;lab。
setText(lab。
getText()+ch);}
}//endenter()method
-—-—-—-————--———-———-—------————-———--———-—-—————------—-————-—-—-—--—--——--———-—-———-—-———----—————--——
//八进制或十六进制转换成十进制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)
{case’1’:
lg=lg+1*jing;break;
case'2':
lg=lg+2*jing;break;
case'3’:
lg=lg+3*jing;break;
case'4’:
lg=lg+4*jing;break;
case'5':
lg=lg+5*jing;break;
case’6’:
lg=lg+6*jing;break;
case’7’:
lg=lg+7*jing;break;
case’8’:
lg=lg+8*jing;break;
case’9’:
lg=lg+9*jing;break;
case'A’:
lg=lg+10*jing;break;
case’B’:
lg=lg+11*jing;break;
case’C':
lg=lg+12*jing;break;
case’D':
lg=lg+13*jing;break;
case’E’:
lg=lg+14*jing;break;
case’F':
lg=lg+15*jing;break;}
jing*=j;//位权升一级,为下次使用做好准备
}
returnLong.toString(lg);
}//endStringgoto_10()method
}
(2)程序流程图
三、详细设计
importjava.awt.*;
importjava。
awt。
event。
*;
classThis_number_too_bigextendsException
{}//自定义的一个结果溢出异常类
classJsp2003extendsFrameimplementsItemListener,ActionListener{
publicJsp2003(){
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
dispose();
System.exit(0);
}
});
}
staticJsp2003mainFrame=newJsp2003();
staticLabellab=newLabel(”0");
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(”0");
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';//设置运算符号为没有即为‘n’,它的值是‘+’‘—’‘*’‘/’
publicdoubledata=0;//设置运算数据为零
publiccharch;//用来临时存放所按按钮的第一个字符
publicbooleanRefresh=false;//设置lab是否要在输入数据的时候刷新,初始为否
publicstaticvoidmain(Stringargs[]){
System。
out。
println("StartingJsp2003..。
");
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);
mainFrame.add(lab);
CheckboxGroupgrp=newCheckboxGroup();
ckb8。
setCheckboxGroup(grp);
ckb10.setCheckboxGroup(grp);
ckb16.setCheckboxGroup(grp);
ckb8.setBounds(14,75,55,25);
ckb10.setBounds(69,75,55,25);
ckb16.setBounds(124,75,65,25);
ckb8。
setState(false);
ckb10。
setState(true);
ckb16.setState(false);
mainFrame。
add(ckb8);
mainFrame.add(ckb10);
mainFrame。
add(ckb16);
pnl1.setBounds(14,140,120,150);
pnl2。
setBounds(144,140,40,150);
pnl3.setBounds(14,100,170,36);
pnl4.setBounds(190,100,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,300);
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='n';
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));
lab.setText(goto10_8(lab.getText()));
number=lab。
getText()。
length();
}
//将其他进制转换成八进制
length=19;
//在八进制下允许输入数字个数最多为19位
}
if(ckb10。
getState()==true)
{btA。
enable(false);
btB。
enable(false);
btC.enable(false);
btD。
enable(false);
btE。
enable(false);
btF.enable(false);
bt9。
enable(true);
bt8。
enable(true);
btdot.enable(true);
btadd。
enable(true);
btmul。
enable(true);
btsub.enable(true);
btdev。
enable(true);
btequ。
enable(true);
//在十进制的情况下对有些按件的管理
if(length==19){lab。
setText(goto_10(lab。
getText(),8L));
number=lab.getText()。
length();}
if(length==14){lab.setText(goto_10(lab。
getText(),16L));
number=lab。
getText()。
length();}
//进制转换成十进制
length=18;
//在十进制下允许输入数字个数最多为18位
}
if(ckb16.getState()==true)
{btA.enable(true);
btB.enable(true);
btC。
enable(true);
btD。
enable(true);
btE.enable(true);
btF。
enable(true);
bt9。
enable(true