信息科学与技术学院《Java语言课程设计》报告题目:编写一个计算器程序专业:计算机科学与技术班级:学号:姓名:目录一、概述................................................31.1设计目的及思路......................................31.2功能模块设计........................................31.3程序结构(流程图)..................................4二、计算器的设计与实现...................................42.1程序界面............................................42.2程序源代码..........................................5三、参考文献............................错误!未定义书签。一、概述1.1设计目的及思路通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。利用JavaApplet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(inti)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现!1.2功能模块设计(1)加法:两个数据进行加操作,可以为小数。(2)减法:两个数据进行减操作,可以为负数相减。(3)乘法:两个数相乘操作。(4)除法:两个数相除操作。(5)阶乘:对任意一个数进行阶乘运算。(6)指数:对任意一个数进行指数运算。(7)倒数:对任意一个数进行倒数运算。1.3程序结构(流程图)计算器四则运算其他运算清零加减乘除阶乘指数撤消二、计算器的设计与实现2.1程序界面2.2程序源代码packagemine;importjava.awt.*;importjava.awt.event.*;publicclassCalculatorimplementsActionListener{privatedoubledata1=0.0,data2=0.0;privateStringt_content;booleannumber=false;//key用标示用户所按按钮即加减乘除//key0标示+1表示-2表示*3表示/shortkey=-1;//pkey取值-1~5//pkey-1表示第按=按钮5说明第按=按钮//pkey其值0,1,2,3别代表+-,*/shortpkey=-1;Frameframe=newFrame(计算器);//定义标题Calculator窗体TextFieldtextfield=newTextField(30);//定义计算机//定义backspace,ce,c0按钮Buttonbackspace=newButton(退格);Buttonce=newButton(撤消);Buttonc0=newButton(清空);//定义面板其backspace,ce,c0按钮计算机栏textfeild放面板p1//其余按钮放面板p2Panelp1=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(楷体_GB2312,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按钮注册addActionListenerbackspace.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布局管理器类型GridLayoutp2.setLayout(newGridLayout(4,5,5,5));//按钮组按钮注册addActionListenerfor(inti=0;inames.length;i++){bb[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(退格)&&number){t_content=textfield.getText();textfield.setText();for(inti=0;it_content.length()-1;i++){charc=t_content.charAt(i);textfield.setText(textfield.getText()+c);}}//用户单击撤消按钮if(s.equals(撤消)){textfield.setText();number=false;}//用户单击清空按钮if(s.equals(清空)){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求倒数按钮求倒数母能0if(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;itextfield.getText().length();i++)if('.'==textfield.getText().charAt(i)){g=true;break;}//Double数除100if(g=true){doubledtemp=Double.parseDouble(textfield.getText());dtemp=dtemp/100.0;textfield.setText(Double.toString(dtemp));}//int数能100整除则掉末尾两0else{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;it_content.length();i++){textfield.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(textf