java实现简单的计算器_第1页
java实现简单的计算器_第2页
java实现简单的计算器_第3页
java实现简单的计算器_第4页
java实现简单的计算器_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IIIjava实现简单的计算器目录目录 I1 需求分析 11.1 计算器的基本功能: 11.1.1 加法运算:用数字按钮和“+”按钮进行运算; 11.1.2 减法运算:用数字按钮和“-”按钮进行运算; 11.1.3 乘法运算:用数字按钮和“*”按钮进行运算; 11.1.4 除法运算:用数字按钮和“/”按钮进行运算; 11.2 退格键和清零键:用”Backspace”、”C”和”CE”按钮实现; 11.3 计算器的科学计算方法: 11.3.1 开方:用数字按钮和“Sqrt”按钮进行运算; 11.3.2 百分比:用数字按钮和“%”按钮进行运算; 11.3.3 求倒数:用数字按钮和“1/x”按钮进行运算; 11.3.4 求自然对数:用数字按钮和“ln”按钮进行运算; 11.3.5 三角函数:用数字按钮和“tan”“cos”“sin”按钮进行运算 11.3.6 角度换算成弧度:用数字按钮和“’””按钮进行运算 11.3.7 求反:用数字按钮和“-/+”按钮进行运算 11.3.8 平方和三次方:用数字按钮和“x^2”“x^3”按钮进行运算 11.4 常数: 21.4.1 π:用Math类中的PI来实现 21.4.2 自然对数e:用Math类中的E来实现 22 设计 22.1 用户界面设计 22.1.1 该计算器程序的设计:用户界面包括Swing组件,不过程序中大都使用的是AWT组件. 22.1.2 在AWT组件, 22.1.3 这个界面设计中包含了五个接口,分别控制运算符,数字,清除,存储功能和小数点的输入 22.1.4 程序设计中,使用了布局管理: 32.2 概要设计 32.2.1 它的功能是使用图形用户来实现计算器的界面设计和运算功能以及一些科学运算方法. 33 实现 34 测试 144.1 实现加法运算:4+12=16 144.2 实现乘法运算:3*9=27 154.3 用”C’实现清零功能: 164.4 用”Backspace”实现退格功能: 174.5 求倒数:1/4=0.25 18第32页共SECTIONPAGES32页需求分析该计算器程序除了具备加减乘除基本功能外,还有清零键C、CE和退格键Backspace,和一些部分的科学计算方法,包括开方、求倒、百分比,由于时间问题,之后会完善键盘事件的监听功能。计算器的基本功能:加法运算:用数字按钮和“+”按钮进行运算;减法运算:用数字按钮和“-”按钮进行运算;乘法运算:用数字按钮和“*”按钮进行运算;除法运算:用数字按钮和“/”按钮进行运算;退格键和清零键:用”Backspace”、”C”和”CE”按钮实现;计算器的科学计算方法:开方:用数字按钮和“Sqrt”按钮进行运算;百分比:用数字按钮和“%”按钮进行运算;求倒数:用数字按钮和“1/x”按钮进行运算;求自然对数:用数字按钮和“ln”按钮进行运算;三角函数:用数字按钮和“tan”“cos”“sin”按钮进行运算角度换算成弧度:用数字按钮和“’””按钮进行运算求反:用数字按钮和“-/+”按钮进行运算平方和三次方:用数字按钮和“x^2”“x^3”按钮进行运算常数:π:用Math类中的PI来实现自然对数e:用Math类中的E来实现设计用户界面设计该计算器程序的设计:用户界面包括Swing组件,不过程序中大都使用的是AWT组件.在AWT组件,使用了面板和按钮组:JPanelpanel1,panel2,panel3,panel4;ButtonGroupbgb;由于该组件按钮较多,设计一个方法简化按钮的设置voidaddButton(JPanelpanel,Stringname,ActionListeneraction,Colorcolor){ JButtonbt=newJButton(name); panel.add(bt);//在面板上增加按钮 bt.setForeground(color);//设置字体颜色 bt.addActionListener(action);//增加监听事件这个界面设计中包含了五个接口,分别控制运算符,数字,清除,存储功能和小数点的输入classSignsimplementsActionListenerclassNumimplementsActionListenerclassClearimplementsActionListenerclassMemoryimplementsActionListenerclassDotimplementsActionListener程序设计中,使用了布局管理:用边布局管理器(BorderLayout)设置计算器容器各方位组件:panel4=newJPanel(newBorderLayout(5,5))panel4.add(panel1,BorderLayout.NORTH); panel4.add(panel2,BorderLayout.CENTER); this.add(tf,BorderLayout.NORTH); this.add(panel3,BorderLayout.WEST);用网格布局管理器(GridLayout)设置面板panel1=newJPanel(newGridLayout(1,3,10,10)); panel2=newJPanel(newGridLayout(5,6,5,5)); panel3=newJPanel(newGridLayout(5,1,5,5));概要设计计算器的整个程序包括:一个Calculator类它的功能是使用图形用户来实现计算器的界面设计和运算功能以及一些科学运算方法.类中包含了Calculator()构造方法,和其他重要的成员方法,最终在main方法中实例化一个ca对象实现计算器的功能。实现packagecalculator;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.text.DecimalFormat;publicclassCalculatorextendsJFrame{ JTextFieldtf; JPanelpanel1,panel2,panel3,panel4; JMenuBarmyBar; JMenumenu1,menu2,menu3; JMenuItemeditItem1,editItem2,help1,help2,help3; JRadioButtonMenuItemseeItem1,seeItem2;//单选框 JCheckBoxMenuItemseeItem3;//复选框 ButtonGroupbgb; booleanIfResult=true,flag=false; Stringoper="="; doubleresult=0,memory=0; DecimalFormatdf; Calculator(){ super("科学计算器");//设置标题栏 df=newDecimalFormat("#.####");//保留四位小数 this.setLayout(newBorderLayout(10,5)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); //设置每个JPanel的参数 panel1=newJPanel(newGridLayout(1,3,10,10)); panel2=newJPanel(newGridLayout(5,6,5,5)); panel3=newJPanel(newGridLayout(5,1,5,5)); panel4=newJPanel(newBorderLayout(5,5)); /** *菜单栏 */ myBar=newJMenuBar(); menu1=newJMenu("编辑(E)"); menu2=newJMenu("查看(V)"); menu3=newJMenu("帮助(H)"); menu1.setFont(newFont("宋体",Font.PLAIN,12)); menu2.setFont(newFont("宋体",Font.PLAIN,12)); menu3.setFont(newFont("宋体",Font.PLAIN,12)); /** *编辑栏 */ editItem1=newJMenuItem("复制(C)Ctrl+C"); editItem2=newJMenuItem("粘贴(P)Ctrl+V"); editItem1.setFont(newFont("宋体",Font.PLAIN,12)); editItem2.setFont(newFont("宋体",Font.PLAIN,12)); /** *查看栏 */ seeItem1=newJRadioButtonMenuItem("科学型(T)"); seeItem2=newJRadioButtonMenuItem("标准型(S)"); seeItem3=newJCheckBoxMenuItem("数字分组(I)"); seeItem1.setFont(newFont("宋体",Font.PLAIN,12)); seeItem2.setFont(newFont("宋体",Font.PLAIN,12)); seeItem3.setFont(newFont("宋体",Font.PLAIN,12)); /** *帮助栏 */ help1=newJMenuItem("帮助主题(H)"); help2=newJMenuItem("关于计算器(A)"); help1.setFont(newFont("宋体",Font.PLAIN,12)); help2.setFont(newFont("宋体",Font.PLAIN,12)); bgb=newButtonGroup();//选项组 menu1.add(editItem1); menu1.add(editItem2); menu2.add(seeItem1); menu2.add(seeItem2); menu2.addSeparator();//添加一条分割线 menu2.add(seeItem3); menu3.add(help1); menu3.addSeparator();//添加一条分割线 menu3.add(help2); myBar.add(menu1); myBar.add(menu2); myBar.add(menu3); this.setJMenuBar(myBar); /** *文本域,即为计算器的屏幕显示区域 */ tf=newJTextField(); tf.setEditable(false);//文本区域不可编辑 tf.setBackground(Color.white);//文本区域的背景色 tf.setHorizontalAlignment(JTextField.RIGHT);//文字右对齐 tf.setText("0"); init();//对计算器进行初始化 } /** *初始化操作 *添加按钮 */ voidinit(){ addButton(panel1,"Backspace",newClear(),Color.red); addButton(panel1,"CE",newClear(),Color.red); addButton(panel1,"C",newClear(),Color.red); addButton(panel2,"1/x",newSigns(),Color.magenta); addButton(panel2,"ln",newSigns(),Color.magenta); addButton(panel2,"7",newNum(),Color.blue); addButton(panel2,"8",newNum(),Color.blue); addButton(panel2,"9",newNum(),Color.blue); addButton(panel2,"÷",newSigns(),Color.red); addButton(panel2,"n!",newSigns(),Color.magenta); addButton(panel2,"sqrt",newSigns(),Color.magenta); addButton(panel2,"4",newNum(),Color.blue); addButton(panel2,"5",newNum(),Color.blue); addButton(panel2,"6",newNum(),Color.blue); addButton(panel2,"×",newSigns(),Color.red); addButton(panel2,"sin",newSigns(),Color.magenta); addButton(panel2,"x^2",newSigns(),Color.magenta); addButton(panel2,"1",newNum(),Color.blue); addButton(panel2,"2",newNum(),Color.blue); addButton(panel2,"3",newNum(),Color.blue); addButton(panel2,"-",newSigns(),Color.red); addButton(panel2,"cos",newSigns(),Color.magenta); addButton(panel2,"x^3",newSigns(),Color.magenta); addButton(panel2,"0",newNum(),Color.blue); addButton(panel2,"-/+",newClear(),Color.blue); addButton(panel2,".",newDot(),Color.blue); addButton(panel2,"+",newSigns(),Color.red); addButton(panel2,"tan",newSigns(),Color.magenta); addButton(panel2,"%",newSigns(),Color.magenta); addButton(panel2,"π",newNum(),Color.orange); addButton(panel2,"e",newNum(),Color.orange); addButton(panel2,"′″",newSigns(),Color.orange); addButton(panel2,"=",newSigns(),Color.red); addButton(panel3,"MC",newMemory(),Color.red); addButton(panel3,"MS",newMemory(),Color.red); addButton(panel3,"MR",newMemory(),Color.red); addButton(panel3,"M-",newMemory(),Color.red); addButton(panel3,"M+",newMemory(),Color.red); panel4.add(panel1,BorderLayout.NORTH); panel4.add(panel2,BorderLayout.CENTER); this.add(tf,BorderLayout.NORTH); this.add(panel3,BorderLayout.WEST); this.add(panel4); pack(); //调整此窗口的大小,以适合其子组件的首选大小和布局 this.setResizable(false); //窗口不可改变大小 this.setLocation(300,200); } /** *统一设置按钮的的使用方式 */ voidaddButton(JPanelpanel,Stringname,ActionListeneraction,Colorcolor){ JButtonbt=newJButton(name); panel.add(bt);//在面板上增加按钮 bt.setForeground(color);//设置字体颜色 bt.addActionListener(action);//增加监听事件 } /** *计算器的基础操作(+-×÷) */ voidgetResult(doublex){ if(oper.equals("+")){result+=x;} elseif(oper.equals("-")){result-=x;} elseif(oper.equals("×")){result*=x;} elseif(oper.equals("÷")){result/=x;} elseif(oper.equals("=")){result=x;} tf.setText(df.format(result)); } /** *运算符号的事件监听 */ classSignsimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ /* *用ActionEvent对象的getActionCommand()方法取得与引发事件对象的字符串 */ Stringstr=e.getActionCommand(); /*sqrt求平方根*/ if(str.equals("sqrt")){ doublei=Double.parseDouble(tf.getText()); //将tf文本框中已经输入的数字字符串转化为double类型的变量 if(i>=0){ /* *String.valueOf()转换为字符串 *df.format()按要求保留四位小数 *Math.sqrt()求算数平方根 */ tf.setText(String.valueOf(df.format(Math.sqrt(i)))); } else{ tf.setText("负数不能开平方根"); } } /** *用log函数求自然对数 */ elseif(str.equals("ln")){ doublei=Double.parseDouble(tf.getText()); if(i>0){ tf.setText(String.valueOf(df.format(Math.log(i)))); }else{ tf.setText("负数不能求对数"); } } /*%求百分比*/ elseif(str.equals("%")){ tf.setText(String.valueOf(df.format(Double.parseDouble(tf.getText())/100))); } /*1/x求倒数*/ elseif(str.equals("1/x")){ if(Double.parseDouble(tf.getText())==0){ tf.setText("除数不能为零"); }else{ tf.setText(String.valueOf(df.format(1/Double.parseDouble(tf.getText())))); } } /*sin求正弦函数*/ elseif(str.equals("sin")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.sin(i)))); } /*cos求余弦函数*/ elseif(str.equals("cos")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.cos(i)))); } /*tan求正切函数*/ elseif(str.equals("tan")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(Math.tan(i)))); } /*n!求阶乘*/ elseif(str.equals("n!")){ doublei=Double.parseDouble(tf.getText()); if((i%2==0)||(i%2==1))//判断为整数放进行阶乘操作 { intj=(int)i;//强制类型转换 intresult=1; for(intk=1;k<=j;k++) result*=k; tf.setText(String.valueOf(result)); } else { tf.setText("无法进行阶乘"); } } /*x^2求平方*/ elseif(str.equals("x^2")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i*i))); } /*x^3求立方*/ elseif(str.equals("x^3")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i*i*i))); } /*′″角度转换*/ /** *将角度值转换成弧度值,方便三角函数的计算 */ elseif(str.equals("′″")){ doublei=Double.parseDouble(tf.getText()); tf.setText(String.valueOf(i/180*Math.PI)); } else{ if(flag){ IfResult=false; } if(IfResult){ oper=str; }else{ getResult(Double.parseDouble(tf.getText())); oper=str; IfResult=true; } } } } /** *清除按钮的事件监听 */ classClearimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ /* *用ActionEvent对象的getActionCommand()方法取得与引发事件对象的字符串 */ Stringstr=e.getActionCommand(); if(str=="C"){ tf.setText("0"); IfResult=true; result=0; }elseif(str=="-/+"){ doublei=0-Double.parseDouble(tf.getText()); tf.setText(String.valueOf(df.format(i))); }elseif(str=="Backspace"){ if(Double.parseDouble(tf.getText())>0){ if(tf.getText().length()>1){ tf.setText(tf.getText().substring(0,tf.getText().length()-1)); //使用退格删除最后一位字符 /* *函数:substring(intbeginIndex,intendIndex) *它的返回值为一个新的字符串,为原字符串的子串 *beginIndex为子字符串开始的地方,endIndex为子字符串结束的地方 */ }else{ tf.setText("0"); IfResult=true; } }else{ if(tf.getText().length()>1){ tf.setText(tf.getText().substring(0,tf.getText().length()-1)); }else{ tf.setText("0"); IfResult=true; } } }elseif(str=="CE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论