计算器.docx
《计算器.docx》由会员分享,可在线阅读,更多相关《计算器.docx(17页珍藏版)》请在冰豆网上搜索。
计算器
《程序设计综合训练》
设 计 报 告
题目:
计算器
专业:
软件工程
班级:
11软件2Z
学号:
姓 名:
指导教师:
常玉慧
成 绩:
计算机学院
2012年2月
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassCalculatorimplementsActionListener{
privatedoubledata1=0.0,data2=0.0;
privateStringt_content;
booleannumber=false;
//key用来标示用户所按下的按钮即加减乘除
//key为0标示+,为1表示-,为2表示*,为3表示/
shortkey=-1;
//pkey的取值为-1~5
//pkey为-1表示第一次按下=按钮,为5说明不是第一次按下=按钮
//pkey为其他值0,1,2,3时分别代表+,-,*,/
shortpkey=-1;
Frameframe=newFrame("Calculator");//定义标题为Calculator的窗体
TextFieldtextfield=newTextField(30);//定义计算机
//定义backspace,ce,c0按钮
Buttonbackspace=newButton("Backspace");
Buttonce=newButton("CE");
Buttonc0=newButton("C");
//定义面板,其中backspace,ce,c0按钮和计算机兰textfeild放在面板p1中
//其余按钮放在面板p2中
Panelp1=newPanel();
Panelp2=newPanel();
//定义界面上的按钮数组,即除去backspace,ce,c0按钮的所有按钮
Stringnames[]={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
Buttonbb[]=newButton[names.length];
publicstaticvoidmain(String[]args){
Calculatorcal=newCalculator();
cal.go();
}
publicvoidgo(){
frame.setSize(300,200);
frame.setLayout(newBorderLayout());
Fontfonts=newFont("楷体",Font.PLAIN,12);//第一页
//设置面板p1的字体和布局管理类型,将textfeild对象添加到面板中
p1.setFont(fonts);
p1.setLayout(newGridLayout(2,1,5,10));
textfield.setFont(fonts);
p1.add(textfield,null);
//backspace,ce,c0按钮注册addActionListener方法
backspace.addActionListener(this);
ce.addActionListener(this);
c0.addActionListener(this);
//将backspace,ce,c0按钮添加到p1面板中
p1.add(backspace,null);
p1.add(ce,null);
p1.add(c0,null);
//设置面板p2的布局管理器类型为GridLayout
p2.setLayout(newGridLayout(4,5,5,5));
//为按钮组中的按钮注册addActionListener方法
for(inti=0;ibb[i]=newButton(names[i]);
p2.add(bb[i]);
bb[i].addActionListener(this);
}
//设置面板p1和面板p2在窗体中的位置
//面板p1在窗体的North方向,面板p2在窗体的South方向
frame.add(p1,BorderLayout.NORTH);
frame.add(p2,BorderLayout.SOUTH);
frame.setVisible(true);
//当单击关闭按钮时退出系统
frame.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
}
publicvoidactionPerformed(ActionEventae){
Strings;
//通过ActionEvent类的getActionCommand()方法,得出动作是由哪个按钮触发的。
//第二页
s=ae.getActionCommand();
//用户单击一次,计算栏里便去掉一个字符
//先将计算栏里的字符清空,再添加除最好一个字符的字符串
if(s.equals("Backspace")&&number){
t_content=textfield.getText();
textfield.setText("");
for(inti=0;icharc=t_content.charAt(i);
textfield.setText(textfield.getText()+c);
}
}
//用户单击的是CE按钮,计算栏清空
if(s.equals("CE")){
textfield.setText("");
number=false;
}
//用户单击的是C按钮
if(s.equals("C")){
textfield.setText("");
data1=data2=0.0;
number=false;
}
//用户单击的是sqrt按钮,其中负数不能被开方
if(s.equals("sqrt")&&number){
t_content=textfield.getText();
if(t_content.charAt(0)=='-'){
textfield.setText("负数不能被开方");
number=false;
}else{
textfield.setText(Double.toString(java.lang.Math.sqrt(Double.parseDouble(t_content))));
}
}
//用户单击的是1/x求倒数按钮,求倒数时分母不能为0
if(s.equals("1/x")&&number){
t_content=textfield.getText();
if(t_content.equals("0")){//第三页
textfield.setText("零不能求倒数");
number=false;
}else{
textfield.setText(Double.toString(1/Double.parseDouble(t_content)));
}
}
//用户单击的是%按钮
if(s.equals("%")&&number){
if(data2==0){
t_content=textfield.getText();
textfield.setText(t_content);
}else{
booleang=false;
for(inti=0;iif('.'==textfield.getText().charAt(i)){
g=true;
break;
}
//如果是Double数,除100
if(g=true){
doubledtemp=Double.parseDouble(textfield.getText());
dtemp=dtemp/100.0;
textfield.setText(Double.toString(dtemp));
}
//如果是int数但能被100整除,则去掉末尾两个0
else{
if(Integer.parseInt(textfield.getText())%100==0){
intitemp=Integer.parseInt(textfield.getText());
itemp/=100;
textfield.setText(Integer.toString(itemp));
}
//如果是int数,但不能被100整除,则按Double数处理
else{
doubledtemp=Double.parseDouble(textfield.getText());
dtemp=dtemp/100.0;
textfield.setText(Double.toString(dtemp));
}
}
}//第四页
}
//对正负数字的处理
if(s.equals("+/-")){
t_content=textfield.getText();
if(t_content.charAt(0)=='-'){
textfield.setText("");
Stringcontent;
for(inti=1;itextfield.setText(textfield.getText()+t_content.charAt(i));
}
}else{
textfield.setText("-"+t_content);
}
}
//所按下的按钮为+按钮
if(s.equals("+")){
switch(pkey){
case0:
data2+=Double.parseDouble(textfield.getText());
break;
case1:
data2+=Double.parseDouble(textfield.getText());
break;
case2:
data2+=Double.parseDouble(textfield.getText());
break;
case3:
if(textfield.getText().equals("0")){
textfield.setText("除数不能为零");
number=false;
}else{
key=-1;
data2/=data1;
textfield.setText(Double.toString(data2));
break;
}
default:
data2=Double.parseDouble(textfield.getText());
}
pkey=key=0;
textfield.setText("");
}
//第五页
//所按下的按钮为-按钮
if(s.equals("-")){
switch(pkey){
case0:
data2+=Double.parseDouble(textfield.getText());
break;
case1:
data2+=Double.parseDouble(textfield.getText());
break;
case2:
data2+=Double.parseDouble(textfield.getText());
break;
case3:
if(textfield.getText().equals("0")){
textfield.setText("除数不能为零");
number=false;
}else{
key=-1;
data2/=data1;
textfield.setText(Double.toString(data2));
break;
}
default:
data2=Double.parseDouble(textfield.getText());
}
pkey=key=1;
textfield.setText("");
}
//所按下的按钮为*按钮
if(s.equals("*")){
switch(pkey){
case0:
data2+=Double.parseDouble(textfield.getText());
break;
case1:
data2+=Double.parseDouble(textfield.getText());
break;
case2:
data2+=Double.parseDouble(textfield.getText());
break;
case3:
if(textfield.getText().equals("0")){//第六页
textfield.setText("除数不能为零");
number=false;
}else{
key=-1;
data2/=data1;
textfield.setText(Double.toString(data2));
break;
}
default:
data2=Double.parseDouble(textfield.getText());
}
pkey=key=2;
textfield.setText("");
}
//所按下的按钮为/按钮
if(s.equals("/")){
switch(pkey){
case0:
data2+=Double.parseDouble(textfield.getText());
break;
case1:
data2+=Double.parseDouble(textfield.getText());
break;
case2:
data2+=Double.parseDouble(textfield.getText());
break;
case3:
if(textfield.getText().equals("0")){
textfield.setText("除数不能为零");
number=false;
}else{
key=-1;
data2/=data1;
textfield.setText(Double.toString(data2));
break;
}
default:
data2=Double.parseDouble(textfield.getText());
}
pkey=key=3;
textfield.setText("");
}//第七页
//所按下的按钮为=,求结果
if(s.equals("=")&&number){
//如果不是第一次按下=按钮
if(pkey==5){
switch(pkey){
case0:
data2+=data1;
textfield.setText(Double.toString(data2));
break;
case1:
data2-=data1;
textfield.setText(Double.toString(data2));
break;
case2:
data2*=data1;
textfield.setText(Double.toString(data2));
break;
case3:
if(textfield.getText().equals("0")){
textfield.setText("除数不能为零");
number=false;
}else{
data2/=data1;
textfield.setText(Double.toString(data2));
break;
}
}
}
//如果是第一次按下=按钮
else{
data1=Double.parseDouble(textfield.getText());
switch(key){
case0:
key=-1;
data2+=Double.parseDouble(textfield.getText());
textfield.setText(Double.toString(data2));
break;
case1:
key=-1;
data2-=Double.parseDouble(textfield.getText());
textfield.setText(Double.toString(data2));//第八页
break;
case2:
key=-1;
data2*=Double.parseDouble(textfield.getText());
textfield.setText(Double.toString(data2));
break;
case3:
if(textfield.getText().equals("0")){
textfield.setText("除数不能为零");
number=false;
}else{
key=-1;
data2/=Double.parseDouble(textfield.getText());
textfield.setText(Double.toString(data2));
break;
}
}
}
pkey=5;
}
//按下的按钮时数字按钮
else{
switch(s.charAt(0)){
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
number=true;
textfield.setText(textfield.getText()+s);
break;
//对.的处理
case'.':
t_content=textfield.getText();
booleang=false;//第九页
//对计算机栏中的数据进行检验
//如果其中有小数点,则用户单击该按钮时不在添加小数点
for(inti=0;iif(t_content.charAt(i)=='.'){
g=true;
break;
}
}
//数据中已经有小数点
if(g==true)
break;
//数据中没有小数点,当用户单击小数点时添加小数点
if(g==false)
textfield.setText(t_content+".");
}
}
}
privateStringInteger(Stringstring){
//TODOAuto-generatedmethodstub
returnnull;
}
}