JavaSwing计算器设计_第1页
JavaSwing计算器设计_第2页
JavaSwing计算器设计_第3页
JavaSwing计算器设计_第4页
JavaSwing计算器设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、JavaSwing计算器设计java程序设计课程设计报告课题名称:GUI计算器设计略……略提交报告时间:2008年12月20日1.课程设计题目基于GUI的计算器设计2. 课程设计目的1. 巩固和加深课堂所学知识;2. 将课本上的理论知识和实际应用有机的结合起来,培养同学们分析和解决实际问题的能力;3. 通过对java语言程序代码的阅读、修改、设计,理解和掌握复杂的java语言应用程序的编程,提高实践编程能力。3. 程序运行环境及开发工具本程序在WindowsXP的PC机上利用Jbuilder9.0的软件开发实现,在WindowsXP平台上Jbuilder

2、9.0及Eclipse环境中运行通过。4. 程序功能使用说明运行该程序后,参与运算的操作数可有鼠标点击相应按钮输入,也可有键盘输入,但操作符应有鼠标点击相应的按钮,当:1 .在简易计算中可以按照常规输入计算,基本无bug,“%”未设置其用途;2 .简易计算中,可以进行+、-、*、/、乘方(八)、开方(√)及阶乘(!)运算;3 .科学计算中有许多功能为实现,主要能进行加、减、乘、除、乘方、开方、幂、开n次方、倒数、阶乘、ln、e的x次幂、三角函数等高级运算;4 .例如:(1).1+9=10(2).25+-8=17(3).98-35=63

3、(4).96*2=192(5).96/4=24(6).4A3=64(7) .100√=10(8) .-9√=不能执行此操作!(9) .20!=2432902008176640000(10) .-20!=不能执行此操作!(11) .0!=1(12) .8ln=7.389056098930655124002.0794415416798357(13) .2Exp(14) .8xAy3(15) .20xA2(16) .100n!93326215443944152681699238856266700490715968264381621468592963895217

4、599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000(17) .30sin=0.49999999999999994(0.5)(求sin30度)其他(cos,tan)依次类推;(18) .1/x计算有bug;(19) .3x√8=2(求8开3次方);(20).求余)95Mod10(95对105. 关键算法与技术:1 .大数阶乘;2 .界面切换;3 .GirdLayout布局管理器的使用;4 .事件响应;5 .匿名内部类的使用;6 .6. 设计思路:本

5、程序采用模块化设计,调试方便,程序的可读性好。在老师的指导下,由主程序启动简易计算器,根据使用者的需要可以在简易计算器中进行运算操作,若不能满足用户功能,可以选择使用科学计算器,具体操作与目前市面上的计算器差不多,用户还可以选择使用说明进行查看具体操作。由于时间及个人水平的问题,科学计算中还有很多功能未实现。具体思路:用户输入(点击)某一数字或操作符,程序将自行判断是操作数还是操作符,1. 若为一操作数的首次输入,则将显示区的“0”替换,若该操作数不为首次输入则将显示区的数字串接上此次输入的数字;2. 若为操作符,将判断是否为带符号操作数,若是则保存符号

6、,反之为纯操作符:若为二元操作符就将显示区的字符串转化为双精度数;若为等号就进行计算结果并显示结果;若为一目操作符就进行相应的一目运算并显示结果;3. 进行相应的初始化操作,为下一次输入做准备;4. 根据自己的理解画了下面的简单的流程图。7.编码实现:/package计算器;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjava.math.*;importjava.util.*;* <p>Title:用户应用界面计算器</p&g

7、t;* <p>Description:包含简易计算与功能更加强大的科学计算</p>* <p>Copyright:Copyright(c)2008</p>* <p>Company:四……学</p>* authorchwencong* version1.0* /publicclassCalculatstaticJTextFieldshow;/设置输入区,显示区staticdoubleopNum

8、=0;/存放操作数staticStringopChar="="/存放操作符staticbooleanflag=true;/设置标志publicstaticvoidmain(Stringargs)newEasyFrame();/产生首界面简易计算器classEasyFrame/片勾建简易计算器框架界面staticJFrameframe;publicEasyFrame()frame=newJFrame("简易计算器”力Toolkitkit=Toolkit.getDefaultToolkit();/设置图标/下面这条语句不好,不具有可移植性Imageimage=kit.

9、getImage("D:jbprojectnetTestsrcnettest1471.jpg");frame.setIconImage(image);frame.addWindowListener(newWindowAdapter()/响应关闭事件publicvoidwindowClosing(WindowEvente)System.exit(0););JMenuBarmb=newJMenuBar();/创建菜单栏JMenum1=newJMenu("编辑");/创建菜单JMenum2=newJMenu("操作");JMenum3=ne

10、wJMenu("帮助");JMenuItemmi1c=newJMenuItem("复制",KeyEvent.VK_C);/创建菜单项JMenuItemmi1v=newJMenuItem("粘贴",KeyEvent.VK_V);JMenuItemmi21=newJMenuItem("基本计算");JMenuItemmi22=newJMenuItem("科学计算");JMenuItemmi31=newJMenuItem("使用说明");JMenuItemmi32=newJMenu

11、Item("About.");frame.setJMenuBar(mb);/添加菜单到窗口mb.add(m1);mb.add(m2);mb.add(m3);m1.add(mi1c);m1.add(mi1v);m2.add(mi21);m2.add(mi22);m3.add(mi31);m3.add(mi32);/*菜单项监听事件*/mi11.addActionListener(newMenuItemListener();/监听复制mi12.addActionListener(newMenuItemListener();/监听粘贴mi22.addActionListener(

12、newMenuItemListener();mi31.addActionListener(newMenuItemListener();mi32.addActionListener(newMenuItemListener();Containercp=frame.getContentPane();/获取内容窗格cp.add(neweasyCalPanel();/将简易计算器面板加入到框架中frame.setSize(280,250);/frame.pack();/将框架设置合适的大小frame.setVisible(true);/设置框架可见classAdvanceFrame/构建高级计算器框架界

13、面staticJFrameframe;publicAdvanceFrame()frame=newJFrame("科学计算器”力Toolkitkit=Toolkit.getDefaultToolkit();/设置图标Imageimage=kit.getImage("D:jbprojectnetTestsrcnettest1471.jpg");frame.setIconImage(image);JMenuBarmb=newJMenuBar();/创建菜单栏JMenum1=newJMenu("编辑");JMenum2=newJMenu("操

14、作");JMenum3=newJMenu("帮助");JMenuItemmi1c=newJMenuItem("复制",KeyEvent.VK_C);JMenuItemmi1v=newJMenuItem("粘贴",KeyEvent.VK_V);JMenuItemmi21=newJMenuItem("基本计算");JMenuItemmi22=newJMenuItem("科学计算");JMenuItemmi31=newJMenuItem("使用说明");JMenuItem

15、mi32=newJMenuItem("About.");frame.setJMenuBar(mb);/添加菜单栏mb.add(m1);mb.add(m2);mb.add(m3);/添加菜单m1.add(mi1c);m1.add(mi1v);m2.add(mi21);m2.add(mi22);m3.add(mi31);m3.add(mi32);mi11.addActionListener(newMenuItemListener();/监听复制mi12.addActionListener(newMenuItemListener();/监听粘贴mi21.addActionList

16、ener(newMenuItemListener();/监听简易计算mi31.addActionListener(newMenuItemListener();/监听使用说明mi32.addActionListener(newMenuItemListener();/监听关于Containercp=frame.getContentPane();/获取框架的内容窗格cp.add(newAdvanceCalPanel();/添加高级计算面板frame.pack();/设置适当的大小frame.setVisible(true);/可见frame.addWindowListener(newWindowAd

17、apter()/响应关闭按钮publicvoidwindowClosing(WindowEvente)System.exit(0););classMenuItemListenerimplementsActionListener/响应菜单事件publicvoidactionPerformed(ActionEvente)if(e.getActionCommand().equals("基本计算")newEasyFrame();/切换到简易计算器窗口AdvanceFrame.frame.setVisible(false);elseif(e.getActionCommand().eq

18、uals("科学计算")newAdvanceFrame();/切换到高级计算界面EasyFrame.frame.setVisible(false);elseif(e.getActionCommand().equals("复制")/elseif(e.getActionCommand().equals("粘贴")/elseif(e.getActionCommand().equals("使用说明")tryFileInputStreamfis=newFileInputStream("使用说.txt");

19、InputStreamReaderisr=newInputStreamReader(fis);BufferedReaderbr=newBufferedReader(isr);JTextAreahelpArea=newJTextArea(15,48);/helpArea.enable(false);helpArea.setEditable(false);helpArea.setDisabledTextColor(Color.black);JScrollPanescroll=newJScrollPane(helpArea);Strings;while(s=br.readLine()!=null)h

20、elpArea.append(s);helpArea.append("n");JOptionPane.showMessageDialog(null,scroll,"帮助主题",JOptionPane.PLAIN_MESSAGE);br.close();catch(IOExceptionex)ex.printStackTrace();/System.exit(0);/如果加上此句,当关掉JOptionPane时就会关掉JFrame;elseif(e.getActionCommand().equals("About.")JTextArea

21、aboutArea=newJTextArea();aboutArea.setText("版权拥有者:陈文聪n开发时间:2008-12-16n个人博客:JOptionPane.showMessageDialog(null,aboutArea,"关于计算器",JOptionPane.PLAIN_MESSAGE);classAdvanceCalPanelextendsJPanel/创建高级计算面板publicAdvanceCalPanel()setLayout(newBorderLayout();/设置布局方式Calculat.show=newJTextField(&q

22、uot;0",27);/显示文本区Calculat.show.setFont(newFont("Dialog",Font.PLAIN,16);/设置字体Calculat.show.setHorizontalAlignment(JTextField.RIGHT);/设置光标位置JPanelps=newJPanel();/创建面板加载显示区文本框ps.add(Calculat.show);JPanelpbl=newJPanel();/创建面板加载按钮pbl.setLayout(newGridLayout(10,5,1,1);/设置按钮面板的布局pbl.setBorde

23、r(BorderFactory.createEtchedBorder();/设置边框/pbr.setLayout(newGridLayout(5,6,1,2);/pbr.setBorder(BorderFactory.createEtchedBorder();Stringlarr=/按钮"Sta","F-E","(",")","MC","clr","Avg","dms","Exp","ln",&q

24、uot;MR","Dec","Sum","sin","xAy","log","MS","Bin","E(x)","cos","xA2","n!","M+","Oct","D(x)","tan","x√","1/x","P

25、I","Hex","D","E","F","/","Mod","And","A","B","C","*","Or","Xor","7","8","9","-","Lsh","Not","4"

26、,"5","6","+","Int","shift","1","2","3",".","0","="for(inti=0;i<larr.length;i+)addButton(pbl,larri);/创建按钮setBorder(BorderFactory.createEtchedBorder();/设置边框add(pbl,BorderLayout.CENTER);

27、/分别添加两面板到框架中add(ps,BorderLayout.NORTH);privatevoidaddButton(Containerc,Strings)/创建按钮,加入到面板并监听按钮事件JButtonbt=newJButton(s);c.add(bt);bt.addActionListener(newbuttonListener();classeasyCalPanelextendsJPanel/操作基本等同于创建高级/计算面板publiceasyCalPanel()setLayout(newBorderLayout();Calculat.show=newJTextField("

28、;0",17);Calculat.show.setFont(newFont("Dialog",Font.PLAIN,18);Calculat.show.setHorizontalAlignment(JTextField.RIGHT);JPanelps=newJPanel();ps.add(Calculat.show);JPanelpb=newJPanel();pb.setLayout(newGridLayout(5,4,1,1);pb.setBorder(BorderFactory.createEtchedBorder();Stringbts="%A&a

29、mp;#8730;!789/456*123-0.=+”;for(inti=0;i<bts.length();i+)addButton(pb,bts.substring(i,i+1);add(pb,BorderLayout.CENTER);add(ps,BorderLayout.NORTH);privatevoidaddButton(Containerc,Strings)JButtonbt=newJButton(s);bt.setFont(newFont("Dialog",Font.PLAIN,18);/设置字体c.add(bt);bt.addActionLis

30、tener(newbuttonListener();classbuttonListenerimplementsActionListener/响应按钮事件publicvoidactionPerformed(ActionEvente)Strings=e.getActionCommand();/获取命令if('0'<=s.charAt(0)&&s.charAt(0)<='9'|s.equals(".")/该命令为正操作数if(Calculat.flag)/若初次输入该操作数(如:输入&am

31、p;#8220;123”中的“1”)Calculat.show.setText(s);else/(如:输入“123”中的"2"或"3")Calculat.show.setText(Calculat.show.getText()+s);Calculat.flag=false;/修改标志else/命令为操作数为负数或操作符if(Calculat.flag)/初次输入if(s.equals("-")/为负数Calculat.show.setT

32、ext(s);Calculat.flag=false;else/连续输入几个操作符Calculat.opChar=s;/else/为操作符calculatecal=newcalculate();/创建计算类实例doublex=Double.parseDouble(Calculat.show.getText();/将输入的操作数转换为double型cal.calopr1(x);/双目运算及处理单目运算的操作数Calculat.opChar=s;/保存运算符if(Calculat.opChar.equals("!")|Calculat.opChar.equals("&

33、amp;#8730;")/操作数必须为正的单目运算|Calculat.opChar.equals("n!")if(Calculat.opNum<0)Calculat.show.setText("不能执行此操作!”);elsecal.calopr2(int)Calculat.opNum,Calculat.opChar);/单目运算Calculat.opChar="="/保存符号为下一次运算做准备elseif(Calculat.opChar.equals("1/x")|Calculat.opChar.eq

34、uals("xA2")|Calculat.opChar.equals("ln")|Calculat.opChar.equals("log")|Calculat.opChar.equals("sin")|Calculat.opChar.equals("cos")|Calculat.opChar.equals("tan")|Calculat.opChar.equals("Exp")/普通单目运算cal.calopr2(int)Calculat.opNum,Ca

35、lculat.opChar);/单目运算Calculat.opChar="="/保存符号为下一次运算做准备Calculat.flag=true;/设置标志为下一次运算做准备classcalculate计算处理publicvoidcalopr1(doublen)/处理双目运算及单目运算的操作数Stringstr=""if(Calculat.opChar.equals("+")Calculat.opNum+=n;elseif(Calculat.opChar.equals("-")Calculat.opNum-=n;el

36、seif(Calculat.opChar.equals("*")Calculat.opNum*=n;elseif(Calculat.opChar.equals("/")if(n=0)str="除数为0!"elseCalculat.opNum/=n;elseif(Calculat.opChar.equals("A")|Calculat.opChar.equals("xAy")Calculat.opNum=Math.pow(Calculat.opNum,n);elseif(Calculat.opCh

37、ar.equals("x√")Calculat.opNum=Math.pow(n,1/Calculat.opNum);elseif(Calculat.opChar.equals("=")Calculat.opNum=n;elseif(Calculat.opChar.equals("Mod")Calculat.opNum=Math.abs(Math.IEEEremainder(Calculat.opNum,n);Calculat.show.setText(str+Calculat.opNum);publicvoidcalopr2(intn,StringopChar)/处理单目运算if(opChar.equals("!")|opChar.equals("n!")Calculat.show.setText(newFactorial().factorial(int)Calculat.opNum).toString();elseif(opChar.equals("√")Calculat.show.setText(""+Math.sqrt(n);elseif(opChar.equals(&

温馨提示

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

评论

0/150

提交评论