Java课程设计-简单计算器_第1页
Java课程设计-简单计算器_第2页
Java课程设计-简单计算器_第3页
Java课程设计-简单计算器_第4页
Java课程设计-简单计算器_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

概要设计2.1整个程序的模块结构及流程根据课题要求,整个程序按分为数字键及加减乘除按键和显示屏。为更好地提供程序的人机交互能力,程序还应提供退出程序、重置等功能。图2-1整个程序各构成模块2.2实现可显示窗口界面由于用户需要在程序一次运行后能够获取按键(键盘按键除外)以及所的答案的信息,也就是说,这个运行结果要始终保留给用户,所以可以通过一个可视化的窗口把信息呈现给用户。这个可视化的窗口要求可以显示给用户,它应该相应的信息输出。第3章程序功能的实现3.1整个程序的构成模块本程序只存在一个类,但由四个模块构成分别为:构造按键、设置按键监听器并完成按键的布局、事件响应的处理的显示以及运算算法的构造。图3-1整个程序各构成模块3.2构成模块的介绍与分析3.2.1构造按键booleanp=true; JTextFielddisplay=newJTextField(20); JButton[]button_num=newJButton[11]; JButton[]button_bol=newJButton[5]; JButton[]button_fun=newJButton[1];{ for(inti=0;i<10;i++) button_num[i]=newJButton(""+i); button_num[10]=newJButton("."); button_bol[0]=newJButton("+"); button_bol[1]=newJButton("-"); button_bol[2]=newJButton("*"); button_bol[3]=newJButton("/"); button_bol[4]=newJButton("="); button_fun[0]=newJButton("重置"); }本程序在构造按键的过程中先将按键分为三个种类,分别为数字键、运算符号键以及其他键,并设置了输入输出框的大小以及不同种类的按键的个数。紧接着通过一个for循环给数字键赋予相应的显示。然后设置符号键与其它键的按键表示。3.2.2设置按键监听器并完成按键的布局calculater(){ inti=0; for(i=0;i<11;i++) button_num[i].addActionListener(this); for(i=0;i<5;i++) button_bol[i].addActionListener(this); button_fun[0].addActionListener(this);用两个for循环完成了对button_num[i]以及button_bol[i]的监听器的设置(也就是对数字键和符号键的监听器的设置)。因button_fun[i]只存在一个键(也就是重置键)所以直接对其进行监听,不需要用到for循环。 JPanelp1=newJPanel(); JPanelp2=newJPanel();构造p1与p2两个容器,用以存放案件。 FlowLayoutflow=newFlowLayout(); flow.setAlignment(FlowLayout.LEFT); p1.setLayout(flow); p1.add(display); p1.add(button_fun[0]);将出入输出框(display)以及重置键(button_fun[0])存放入容器p1,p1的布局管理器类型为FlowLayout型,右对齐,其布局结构如下:图3-2容器p1的布局显示 p2.setLayout(newGridLayout(4,4)); for(i=1;i<4;i++) p2.add(button_num[i]); p2.add(button_bol[0]); for(i=4;i<7;i++) p2.add(button_num[i]); p2.add(button_bol[1]); for(i=7;i<10;i++) p2.add(button_num[i]); p2.add(button_bol[2]); p2.add(button_num[10]); p2.add(button_num[0]); p2.add(button_bol[4]); p2.add(button_bol[3]); 将数字键(button_num[i])与运算符号键(button_bol[i])存放入容器p2,p2的布局管理器类型为GridLayout型,4行*4列,其布局结构如下:图2-3容器p2的布局显示 add(p1,BorderLayout.NORTH); add(p2,BorderLayout.CENTER);窗体布局使用BorderLayout布局,按图所示分别使p1在NORTH位置,p2在CENTER位置。图2-3窗体布局的布局显示 display.setEditable(false); setTitle("计算器"); setBounds(100,100,350,220); setVisible(true); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}对计算器的其他布局进行构造,具体为:使输入输出框中的数字输入只能按键输入,使键盘输入无效化。程序的执行窗口上显示“计算器”。确定执行窗口的大小以及在屏幕上出现的位置。使执行窗口可见。使执行窗口大小不可改变。设置是结束程序运行的按键。图3-4简单计算器布局完成图3.2.3事件响应的处理publicvoidactionPerformed(ActionEvente){ Stringstr=""; for(inti=0;i<11;i++){ if(e.getSource()==button_num[i]){ str=display.getText()+button_num[i].getActionCommand(); display.setText(str); } } for(inti=0;i<4;i++){ if(e.getSource()==button_bol[i]){ str=display.getText()+button_bol[i].getActionCommand(); display.setText(str); } }在首先在构造方法中为所有的JButton对象添加监听器,在actionPerformed(ActionEvente)方法中,首先有一个JButton类型的变量用来获取事件源的引用,然后程序根据事件源的不同做出不同的响应。 if(e.getSource()==button_bol[4]){ getValue(); }当事件源为“=”按钮时,除了在display后添加字符“=”,还要调用自定义的方法getValue()得到表达式的值并将此值添加在display之后。 elseif(e.getSource()==button_fun[0]){ display.setText(""); }}当事件源为“重置”按钮时,lable中的字符清空。3.2.4运算算法的构造publicvoidgetValue(){Stringtext=display.getText(); doubleresult=0; Strings[]={"+","-","*","/"};将四个运算符号作为一个数组。 Stringtmp=""; intcount=0; for(inti=0;i<s.length;i++){ if(text.contains(s[i])){ tmp=s[i]; count++; if(count>1){ JOptionPane.showMessageDialog(this,"输入格式错误!"); display.setText(""); } } }找出输入的算式中的运算符号并将它赋值于tmp。 if(tmp.equals("+")){ tmp=":"; text=text.replace('+',':'); }elseif(tmp.equals("-")){ tmp=""; text=text.replace('-',''); }elseif(tmp.equals("*")){ tmp=","; text=text.replace('*',','); }elseif(tmp.equals("/")){ tmp=";"; text=text.replace('/',';'); }因eclipse中无法用“+”、“-”、“*”、“/”作为分割字符的标志故分别将其用“:”、“”、“,”、“;”取代。 Stringstr[]=text.split(tmp);以tmp为标志将算式进行分割,分割出的两数分别为str[0](前者)和str[1](后者)。 switch(tmp){+ case":": result=Double.parseDouble(str[0])+Double.parseDouble(str[1]); break; case"": result=Double.parseDouble(str[0])-Double.parseDouble(str[1]); break; case",": result=Double.parseDouble(str[0])*Double.parseDouble(str[1]); break; case";": if(Double.parseDouble(str[1])==0){ JOptionPane.showMessageDialog(this,"除数不能为0!"); display.setText(""); } result=Double.parseDouble(str[0])/Double.parseDouble(str[1]); break; }判断算式中的符号,并根据符号对分割开来的两数进行相对应的运算。 Stringst=display.getText()+"="+result; display.setText(st);}得到算式的答案并与算式一起输出,完成getValue()方法。3.3程序的报错处理与分析3.3.1输入格式错误时的报错处理Strings[]={"+","-","*","/"}; Stringtmp=""; intcount=0; for(inti=0;i<s.length;i++){ if(text.contains(s[i])){ tmp=s[i]; count++; if(count>1){ JOptionPane.showMessageDialog(this,"输入格式错误!"); display.setText(""); } } }若输入的算式中存在两个或两个以上的符号时,则会跳出对话框显示“输入格式错误!”并清空输入输出框。图3-5进行两个数以上计算时的报错情况图3-6连续输入两个运算符号时的报错情况3.3.2当除数为0时的报错处理case";": if(Double.parseDouble(str[1])==0){ JOptionPane.showMessageDialog(this,"除数不能为0!"); display.setText("");return; } result=Double.parseDouble(str[0])/Double.parseDouble(str[1]); break; }若输入的算式中除数为0,则会跳出对话框显示“除数不能为0”并清空输入输出框。图3-7当除数为0时的报错情况第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。如何禁止用键盘对计算器的输入输出框进行修改解决方法:在对计算器的进行布局结构时加入语句:display.setEditable(false);“display.setEditable(booleanb);”语句是判断是否可对display也就是输入输出框进行编辑的语句,若为“display.setEditable(false);”则意为不可对输入输出框进行编辑。当算式中存在两个相同得符号时,如何进行错误的判断解决方法:对于加法、减法和乘法运算,先确定两个运算对象及其运算结果的位数,取这三个位数的最大值为width,然后以width+4为输出宽度(因为运算数左边可能还有运算符,大整数串和运算符之间还应留少许空白)分三行输出两个运算数及其运算结果。输出每个大整数时,还应按为零、为正数、为负数这三种情况具体讨论。第5章程序测试及分析运行程序,首先跳出执行窗口栏,其中有0-9十个数字键、“+”、“-”、“*”、“/”、“=”五个运算符号键,“重置”键以及输入输出框。图5-1执行窗口栏当随意输入一个数字和符号时,在输入输出框上便会显示这个数字,以4+3为例:图5-2输入数字与符号当输入等号时,所的答案会与之前输入的等式一起输出,所得的答案为浮点数。图5-3输入数字与符号本计算器和可计算小数与小数之间的简单运算。图5-3小数与小数之间的运算当进行除法运算时,若两数不能除尽时本计算器的运算结果如下:图5-4两除数无法除尽的情况显示第

温馨提示

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

评论

0/150

提交评论