Java课程设计--小型计算器姓名:郑建羊学号:104412专业:软件技术指导教师:姜子敬提交时间:2013年1月8日一设计任务书1.程序具备的功能:(1)使用图形用户界面:一个文本框;0-9数字按钮;加、减、乘、除运算符;“等于”符号,“点”符号,“sqrt”符号,“1/x”符号,“退格”按钮和“%”符号;(2)完成整数、实数的四则运算以及两个数的取余运算和一个数的倒数运算;(3)通过按钮点击实现数据的复位(清零);(4)实数运算中小数位的精度一致。2.课程设计的主要设计思想对于此计算器程序,首先要设计其GUI界面,总体界面有一个文本框,20个按钮,按钮总体界面用GridLayout布局。按钮和文本框则使用BorderLayout布局,文本框放置在最NORTH,然后按钮放置到一个面板Panel中,添加到整体布局的CENTER,界面设计完成。布局设计好后再添加按钮事件。对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。在进行加、减、乘、除计算时要把点击加、减、乘、除按钮之前的数值保存下来,运算时是这个被保存下来的数值和文本框中的数值加、减、乘、除。二总体方案设计1.界面设计界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如下:2.功能介绍这是计算器中的一种:简单计算器,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个小功能:点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除四则运算和取余运算以及求倒数运算;如果输入有误时可以按“退格”重新输入数据。三详细设计主题任务程序流程图如下:四程序的调试与运行结果说明事件1:加法:45+89预计结果134。事件2:减法89-45预计结果44。事件3:乘法45*4预计结果是180。事件4:除法48/4预计结果是12。事件5:取余6/45预计结果6。事件6:求倒数6的倒数预计结果。五设计源代码importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassJisuanqiimplementsActionListener{doubleop1=0,op2=0;//操作数intpreOp,currentOp=0;//标准位StringBufferstr=newStringBuffer();JTextFieldjg=newJTextField(,30);booleanisDouble=false;//是否为实数;publicJisuanqi(){JButtonyi=newJButton(1);yi.setForeground(Color.blue);yi.addActionListener(this);JButtoner=newJButton(2);er.setForeground(Color.blue);er.addActionListener(this);JButtonsan=newJButton(3);san.setForeground(Color.blue);san.addActionListener(this);JButtonsi=newJButton(4);si.setForeground(Color.blue);si.addActionListener(this);JButtonwu=newJButton(5);wu.setForeground(Color.blue);wu.addActionListener(this);JButtonliu=newJButton(6);liu.setForeground(Color.blue);liu.addActionListener(this);JButtonqi=newJButton(7);qi.setForeground(Color.blue);qi.addActionListener(this);JButtonba=newJButton(8);ba.setForeground(Color.blue);ba.addActionListener(this);JButtonjiu=newJButton(9);jiu.setForeground(Color.blue);jiu.addActionListener(this);JButtonling=newJButton(0);ling.setForeground(Color.blue);ling.addActionListener(this);JButtonjia=newJButton(+);jia.setForeground(Color.red);jia.addActionListener(this);JButtonjian=newJButton(-);jian.setForeground(Color.red);jian.addActionListener(this);JButtoncheng=newJButton(*);cheng.setForeground(Color.red);cheng.addActionListener(this);JButtonchu=newJButton(/);chu.setForeground(Color.red);chu.addActionListener(this);JButtonqy=newJButton(%);qy.setForeground(Color.red);qy.addActionListener(this);JButtonxy=newJButton(1/x);xy.setForeground(Color.red);xy.addActionListener(this);JButtonfg=newJButton(sqrt);fg.setForeground(Color.red);fg.addActionListener(this);JButtonbs=newJButton(退格);bs.setForeground(Color.red);bs.addActionListener(this);JButtondeng=newJButton(=);deng.setForeground(Color.red);deng.addActionListener(this);JButtondian=newJButton(.);dian.setForeground(Color.red);dian.addActionListener(this);JPanelpanel=newJPanel();JPanelpanel2=newJPanel();JPanelpanel3=newJPanel();panel2.setLayout(newFlowLayout());panel2.setSize(50,300);panel2.add(jg);panel3.setLayout(newGridLayout(4,5,8,8));panel3.add(qi);panel3.add(ba);panel3.add(jiu);panel3.add(chu);panel3.add(fg);panel3.add(si);panel3.add(wu);panel3.add(liu);panel3.add(cheng);panel3.add(qy);panel3.add(yi);panel3.add(er);panel3.add(san);panel3.add(jian);panel3.add(xy);panel3.add(ling);panel3.add(bs);panel3.add(dian);panel3.add(jia);panel3.add(deng);panel.setLayout(newBorderLayout());panel.add(panel2,BorderLayout.NORTH);panel.add(panel3,BorderLayout.CENTER);JFrameframe=newJFrame();frame.add(panel);frame.setTitle(Java课程设计--计算器);frame.setSize(350,250);frame.setVisible(true);frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);}publicvoidactionPerformed(ActionEvente){Strings=e.getActionCommand();if(s.equals(退格)){if(!jg.getText().trim().equals()){//如果文本框中有内容if(str.length()!=1&&str.length()!=0){jg.setText(str.delete(str.length()-1,str.length()).toString());}else{jg.setText();str.setLength(0);}}//op2=Double.parseDouble(jg.getText().trim());}elseif(s.equals(1/x)){//如果按键为1/x则将文本框中的数据为它的倒数Stringtemp=jg.getText().trim();doubledtemp=Double.parseDouble(temp);jg.setText(dtemp+的倒数是+1/dtemp);}elseif(s.equals(sqrt)){//如果按键为sqrt则将文本框中的内容求平方根Stringtemp=jg.getText().trim();doubledtemp=Double.parseDouble(temp);jg.setText(temp+的开放根为+Math.sqrt(dtemp));}elseif(s.equals(+)){str.setLength(0);if(currentOp==0){preOp=currentOp=1;op2=0;jg.setText(+op1);}else{currentOp=preOp;preOp=1;switch(currentOp){case1:op1+=op2;jg.setText(+op1);break;case2:op1-=op2;jg.setText(+op1);break;case3:op1*=op2;jg.setText(+op1);break;case4:op1/=op2;jg.setText(+op1);case5:op1=op1%op2;jg.setText(+op1);break;}}}elseif(s.equals(-)){str.setLength(0);if(currentOp==0){preOp=currentOp=2;//op1=op2;op2=0;jg.setText(+op1);}else{currentOp=preOp;preOp=2;switch(currentOp){case1:op1=op1+op2;jg.setText(+op1);break;case2:op1=op1-op2;jg.setText(+op1);break;case3:op1=op1*op2;jg.setText(+op1);break;case4:op1=op1/op2;jg.setText(+op1);break;case5:op1=op1%op2;jg.setText(+op1);break;}}}elseif(s.equals(*))//*{str.setLength(0