版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《JAVA程序设计》课程设计简单计算器姓名:陈凯昂班级:物联网(二)班学号:121210325指导教师:李玮瑶成绩:完成时间:2014.06.12一、设计目的使用Java的GUI图形用户界面编程设计并编写一个计算器程序,用户可以通过鼠标或者键盘操作输入参加运算的的数值和运算符,要求能进行加、减、乘、除等混合运算。二、功能介绍本程序能实现下列各项功能:(1)实现加、减、乘、除等基本运算;(2)实现开方,百分率,倒数等运算;(3)实现退格,清除,存储,读取存储数据等功能。三、概要设计3.1自定义类说明classCalFrameextendsJFrame//自定义子类CalFrame继承于父类JFrame;classCalService//计算器计算方法;classMyMath//算数进度运算;publicclassCal//主类;3.2方法定义说明privatefinalString[]...//定义按键字符privatefinalJButtonbutton//定义按键privateJPanelpanel//定义面板privateJTextField//定义文本privateJTextArea//定义文本区域privateJButton[]//定义按键组publicvoidinitialize()//初始化计算器界面publicActionListenergetActionListener()//设置侦听器publicvoidactionPerformed(finalActionEvente)//设置动作事件privateJTextFieldgetTextField()//初始化输入框privateJButton[]getMButton()//获取计算器的存储区显示等按键privateJButton[]getRButton()//获得计算器的退格清零等按键privateJButton[]getNButton()//获得计算器的加减乘除等其他按键publicvoidsetTextArea(JTextAreatextArea)//设置文本区域publicStringcallMethod(Stringcmd,Stringtext)//调用该方法并返回计算结果publicStringcal(Stringtext,booleanisPercent)//用来结算加、减、乘、除法,并返回封装成String类型的结果,参数text是显示框中的内容,boolean代表是否有“%”运算publicStringsetReciprocal(Stringtext)//计算倒数publicStringsqrt(Stringtext)//开方运算publicStringsetOp(Stringcmd,Stringtext)//设置操作符publicStringsetNegative(Stringtext)//设置正负数,text是正数是返回负数数字字符串,反之,返回正数数字字符串publicStringcatNum(Stringcmd,Stringtext)//连接输入的数字,每次单击数字,都把新加数字追加到后面,并封装成字符串返回publicStringbackSpace(Stringtext)//退后一个字符,并返回结果publicStringmCmd(Stringcmd,Stringtext)//用来实现“M+”“MC”“MR”“MS”等与存储有关的功能publicStringclearAll()//清空所有计算结果publicStringclear(Stringtext)//清除上次计算结果四、详细设计4.1简单计算器界面设计1、具体实现过程本程序采用Calaframe子类继承于父类JFrame,采用BorderLayout边界布局和GridLayout网格布局,将面板添加到里面来布置文本区域以及按键区域。同时,设置监听器ActionListener来实现各个按键的动作功能。2、关键代码设计//导入组件importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.math.BigDecimal;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextArea;importjavax.swing.JTextField;importjavax.swing.border.EmptyBorder;//定义继承父类Jframe的子类CalFrameclassCalFrameextendsJFrame{ privatestaticfinallongserialVersionUID=-4043419751779156119L; privatefinalString[]nOp={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};privatefinalString[]mOp={"MC","MR","MS","M+"};privatefinalString[]rOp={"BackSpace","CE","C"};privatefinalStringopString="+-*/";privatefinalJButtonbutton=newJButton();privatefinalCalServiceservice=newCalService();privateJPanelpanel;privateJTextFieldtextField1;privateJTextFieldtextField2;privateJTextAreatextArea;privateJButton[]mButton;privateJPanelpanel1;//显示框放置区privateJPanelpanel2;//按键组m放置区privateJButton[]rButton;privateJPanelpanel3;privateJPanelpanel31;//按键组r放置区privateJButton[]nButton;privateJPanelpanel32;//其他按键放置区publicCalFrame(){super();//访问父类initialize();}publicvoidinitialize()//初始化计算器界面{this.setTitle("计算器by陈凯昂");panel=newJPanel();panel.setLayout(newBorderLayout(10,10));panel1=newJPanel(newBorderLayout());panel1.setBackground(Color.white);getTextField();panel1.add(textField1,BorderLayout.CENTER);panel1.add(textField2,BorderLayout.NORTH);panel2=newJPanel();mButton=getMButton();panel2.setLayout(newGridLayout(5,1,0,5));for(finalJButtonb:mButton)panel2.add(b);panel3=newJPanel();panel3.setLayout(newBorderLayout(0,3));rButton=getRButton();panel31=newJPanel();panel31.setLayout(newGridLayout(1,3,3,0));for(finalJButtonb:rButton)panel31.add(b);nButton=getNButton();panel32=newJPanel();panel32.setLayout(newGridLayout(4,5,3,3));for(finalJButtonb:nButton)panel32.add(b);panel3.add(panel31,BorderLayout.NORTH);panel3.add(panel32);panel.add(panel1,BorderLayout.NORTH);panel.add(panel2,BorderLayout.WEST);panel.add(panel3);this.add(panel);this.setResizable(false);this.setLocationRelativeTo(null);}//设置侦听器publicActionListenergetActionListener(){returnnewActionListener(){publicvoidactionPerformed(finalActionEvente){finalStringcmd=e.getActionCommand();Stringresult=null;try{result=service.callMethod(cmd,textField1.getText());}catch(finalExceptionex){System.out.println(ex.getMessage());}if(opString.indexOf(cmd)!=-1){textField2.setText(textField2.getText()+textField1.getText()+cmd);}elseif(cmd.equals("=")){textField2.setText("");}elseif(cmd.indexOf("MC")==0)button.setText("");elseif(cmd.indexOf("M")==0&&service.getStore()>0)button.setText("M");if(result!=null)textField1.setText(result);}};}//初始化输入框privateJTextFieldgetTextField(){textField1=newJTextField();textField1.setBorder(newEmptyBorder(0,0,0,0));textField1.setText("0");textField1.setHorizontalAlignment(JTextField.RIGHT);textField1.setEditable(false);textField1.setOpaque(false);textField2=newJTextField();textField2.setBorder(newEmptyBorder(0,0,0,0));textField2.setHorizontalAlignment(JTextField.RIGHT);textField2.setEditable(false);textField2.setOpaque(false);returnnull;}//获得计算器的存储显示等按键privateJButton[]getMButton(){finalJButton[]result=newJButton[this.mOp.length+1];result[0]=this.button;for(inti=0;i<this.mOp.length;i++){finalJButtonb=newJButton(this.mOp[i]);b.addActionListener(getActionListener());b.setForeground(Color.black);result[i+1]=b;}returnresult;}//获得计算器的退格清零等按键privateJButton[]getRButton(){finalJButton[]result=newJButton[this.rOp.length];for(inti=0;i<this.rOp.length;i++){finalJButtonb=newJButton(this.rOp[i]);b.addActionListener(getActionListener());b.setForeground(Color.red);result[i]=b;}returnresult;}//获得计算器的加减乘除等其他按键privateJButton[]getNButton(){finalJButton[]result=newJButton[this.nOp.length];for(inti=0;i<this.nOp.length;i++){finalJButtonb=newJButton(this.nOp[i]);b.addActionListener(getActionListener());b.setForeground(Color.blue);result[i]=b;}returnresult;} //设置文本区域publicvoidsetTextArea(JTextAreatextArea) { this.textArea=textArea; } //获得文本区域publicJTextAreagetTextArea() { returntextArea; }}//计算方法classCalService{privatedoublestore;privatebooleanisSecondNum=false;privateStringnumString=".0123456789";privateStringopString="+-*/";privateStringlastOp;privateStringfirstNum="0";privateStringsecondNum;privatebooleanflag=true;publicdoublegetStore(){returnstore;}//调用该方法并返回计算结果publicStringcallMethod(Stringcmd,Stringtext){if(cmd.equals("C"))returnclearAll();elseif(cmd.equals("CE"))returnclear(text);elseif(cmd.equals("BackSpace"))returnbackSpace(text);elseif(numString.indexOf(cmd)!=-1)returncatNum(cmd,text);elseif(opString.indexOf(cmd)!=-1)returnsetOp(cmd,text);elseif(cmd.equals("=")){flag=false;returncal(text,false);}elseif(cmd.equals("+/-"))returnsetNegative(text);elseif(cmd.equals("1/x"))returnsetReciprocal(text);elseif(cmd.equals("sqrt"))returnsqrt(text);elseif(cmd.equals("%"))returncal(text,true);elsereturnmCmd(cmd,text);}publicStringcal(Stringtext,booleanisPercent)//用来结算加、减、乘、除法,并返回封装成String类型的结果,参数text是显示框中的内容,boolean代表是否有“%”运算{doublesecondResult=secondNum==null?Double.valueOf(text).doubleValue():Double.valueOf(secondNum).doubleValue();if(secondResult==0&&this.lastOp.equals("/"))return"0";if(isPercent)firstNum=String.valueOf(MyMath.multiply(Double.valueOf(firstNum),MyMath.divide(secondResult,100)));elseif(this.lastOp.equals("+"))firstNum=String.valueOf(MyMath.add(Double.valueOf(firstNum),secondResult));elseif(this.lastOp.equals("-"))firstNum=String.valueOf(MyMath.subtract(Double.valueOf(firstNum),secondResult));elseif(this.lastOp.equals("*"))firstNum=String.valueOf(MyMath.multiply(Double.valueOf(firstNum),secondResult));elseif(this.lastOp.equals("/"))firstNum=String.valueOf(MyMath.divide(Double.valueOf(firstNum),secondResult));secondNum=null;this.isSecondNum=true;returnfirstNum;}publicStringsetReciprocal(Stringtext)//计算倒数{if(text.equals("0"))returntext;else{this.isSecondNum=true;returnString.valueOf(MyMath.divide(1,Double.valueOf(text)));}}publicStringsqrt(Stringtext)//开方运算{this.isSecondNum=true;returnString.valueOf(Math.sqrt(Double.valueOf(text)));}publicStringsetOp(Stringcmd,Stringtext)//设置操作符{if(!firstNum.equals("0")&&flag)firstNum=cal(text,false);else{this.firstNum=text;this.secondNum=null;this.isSecondNum=true;flag=true;}this.lastOp=cmd;returnfirstNum;}publicStringsetNegative(Stringtext)//设置正负数,text是正数是返回负数数字字符串,反之,返回正数数字字符串{returnString.valueOf(0-Double.valueOf(text));}publicStringcatNum(Stringcmd,Stringtext)//连接输入的数字,每次单击数字,都把新加数字追加到后面,并封装成字符串返回{Stringresult=cmd;if(!text.equals("0")){if(isSecondNum){isSecondNum=false;}else{result=text+cmd;}}if(result.indexOf(".")==0)result="0"+result;returnresult;}publicStringbackSpace(Stringtext)//退后一个字符,并返回结果{return(text.equals("0")||text.equals(""))?"0":text.substring(0,text.length()-1);}publicStringmCmd(Stringcmd,Stringtext)//用来实现“M+”“MC”“MR”“MS”等与存储有关的功能{if(cmd.equals("M+"))//累加结果store=MyMath.add(store,Double.valueOf(text));elseif(cmd.equals("MC"))//清除结果store=0;elseif(cmd.equals("MR"))//读取结果{isSecondNum=true;returnString.valueOf(store);}elseif(cmd.equals("MS"))//保存结果store=Double.valueOf(text).doubleValue();returnnull;}publicStringclearAll()//清空所有计算结果{ this.secondNum=null; this.firstNum="0";returnthis.firstNum;}publicStringclear(Stringtext)//清除上次计算结果{return"0";}}classMyMath{privatestaticBigDecimalgetBigDecimal(doublenumber){returnnewBigDecimal(number);}publicstaticdoubleadd(doublenum1,doublenum2){BigDecimal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 特殊教育收费政策调整方案
- 吉林师范大学《美国文学概论I》2021-2022学年第一学期期末试卷
- 养老院志愿者服务方案
- 公共场所核酸检测便民服务方案
- 吉林师范大学《导游业务》2021-2022学年第一学期期末试卷
- 吉林大学《液压传动》2021-2022学年第一学期期末试卷
- 2024建筑施工机械设备租赁合同
- 职业教育教师工作总结及反思
- 2024个人担保借款合同范本
- 2024个人新版租房合同范本
- 江苏省中等职业学校学业水平考试语文卷含答案
- 保洁员安全保证书
- 2024-2025学年二年级上学期数学期中模拟试卷(苏教版)(含答案解析)
- 2024年天津市专业技术人员继续教育网公需课答案
- 期中测试卷-2024-2025学年统编版语文四年级上册
- 公司解散清算的法律意见书、债权处理法律意见书
- 立冬节气介绍立冬传统习俗气象物候起居养生课件
- 劳务派遣 投标方案(技术方案)
- 小学六年级数学100道题解分数方程
- 礼修于心 仪养于行 课件-2023-2024学年高一上学期文明礼仪在心中养成教育主题班会
- 麻醉学第二十二章 多器官功能障碍综合征
评论
0/150
提交评论