课程设计--简易计算器.docx

上传人:李司机 文档编号:6724979 上传时间:2024-01-10 格式:DOCX 页数:16 大小:134.93KB
返回 下载 相关 举报
课程设计--简易计算器.docx_第1页
第1页 / 共16页
课程设计--简易计算器.docx_第2页
第2页 / 共16页
课程设计--简易计算器.docx_第3页
第3页 / 共16页
课程设计--简易计算器.docx_第4页
第4页 / 共16页
课程设计--简易计算器.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《课程设计--简易计算器.docx》由会员分享,可在线阅读,更多相关《课程设计--简易计算器.docx(16页珍藏版)》请在三一办公上搜索。

1、第1章课题概述11.1 课题的目的11.2 课题的要求1第2章概要设计22.1整个程序的模块结构及流程2第3章计算器详细设计33.1计算器界面33.1.1CAL主类的显示布局33.1.2计算器显示界面实现代码33.2监听各个按钮的类53.2.1编写监听类目的53.2.2监听类实现代码53.3按键响应类63.3.1响应类编写的目的63.3.2响应类实现代码63.4运算处理类93.4.1处理方式93.4.2处理类实现代码9第4章调试及发现问题的解决10第5章程序测试及分析11第6章总结14参考文献15第1章课题概述本次课程设计的题目是设计并实现仿照Window系统中的“计算器”,利用Java的GU

2、I实现一个简单的计算器。1.1 课题的目的日常生活中我们经常会遇到一些小型数据计算的问题,计算器在我们的生活中常常会使用到,本课程设计就是以此为出发点,设计了这样一个简单的计算器,用以实现基本的数学运算。在java语言当中通过定义类,类中的各种方法实现对计算器相关功能的实现,并通过与用户自己手动输入并选择运算功能实现计算功能,是一个完全由用户控制的简易计算器。本次课程设计,通过界面以及其中的逻辑处理,完成了四则运算的处理。通过awt包或者SWing包中的界面设计部分对界面设计的细节可以有更多的了解。利用面向对象的思想,将各个组件的事件响应分别用不同的类表达出来。面向对象的思想从很大程度上可以让

3、程序的思路更加清晰,而且可重用性很高。对于具有相同事件响;应的组件则可以调用相同的类来处理事件。除此之外,利用栈的知识来解决运算符优先的问题也让我们对java中的栈有了更多的了解。1.2 课题的要求仿照Window系统中的“计算器”,利用JaVa的GUI实现一个简单的计算器。程序的基本功能:1 .单击“计算器”上的数字按钮(0-9)可以设置参与计算的运算数。2 .单击“计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。3 .单击“计算器”上的“二”按钮显示计算结果。4 .应用自己所学课程知识完成对计算器的基本任务。5 .查阅相关资料,学习和掌握项目中涉及的新知识,提高自学能力。6 .通

4、过应用java程序编写计算器来提升自己对简单的图形界面有一定的掌握和了解。第2草概要设计2.1整个程序的模块结构及流程在设计程序的时候,考虑到计算器的功能,首先编写一个CAL类,在该类中按照其功能分别写了一个方法实现,在程序开始后,可以看到一个控制面板形式的计算器界面展现在用户面前,用户自己输入数据和选择要运算的功能进行计算。具体方法有:加减乘除运算、乘方开方运算、正余弦正切运算、删除阶乘运算等具体的关系结构如图27所示i2U运算输出运算结果图2-1整个程序各功能模块间的流程第3章计算器详细设计3.1 计算器界面3 .1.1CAL主类的显示布局为了方便用户的使用,创建了一个带按钮的控制面板。将

5、所有的运算键、数字键等都放在该面板中方便用户选择与使用o所有的运算选择都完全由用户掌控。4 .1.2计算器显示界面实现代码publicvoiddisp()(frame=newJFrame();frame.SetTitIe(陈路尧的个人计算器”);frame.setSize(360,230);frame.SetLocation(380,260);frame.SetBackground(Color.LIGHTGRAY);frame.SetLayout(newFlowLayout(FlowLayout.CENTER);frame.SetResizable(false);计算器disTop模块,包括数

6、字显示文本框、back,ce,c,about按钮show=newJTextFicld(Bl);show.SetTeXt(0);show.SetHorizontalAlignment(SwingConstants.RIGHT);show.SetEditable(false);frame,add(show);PaneldispTop=newPanel();frame.add(dispTop);dispTop.SetLayout(newGridLayout(1,4,3,3);be=newJButton(/zBack);be.SetForeground(Color.BLUE);dispTop.add(

7、be);ce=newJButton(/zCE);ce.SetForeground(Color.BLUE);dispTop.add(ce);c=newJButton(,C);c.SetForeground(Color.BLUE);dispTop.add(c);广告按钮,显示计算器制作者ab=newJButton(/zAbout);ab.SetForeground(Color.BLUE);dispTop.add(ab);about=newJDialog(frame,“关于计算器“,true);Labelct=newLabCI(”本计算器由陈路尧制作“,1);ct.SetForeground(Col

8、or.RED);about,add(ct,Center);about.setSize(200,100);about.SetLocation(500,300);主要按钮显示面板包括disLeft和disRightPaneldispMain=newPanel();frame,add(dispMain);dispMain.SetLayout(newGridLayout(1,2,10,10);disLeft面板,包括0-9、+/-、。这十二个按钮PaneldispLeft=newPanel();dispMain.add(dispLeft);dispLeft.SetLayout(newGridLayou

9、t(4,3,3,3);PaneldispRight=newPanel();disRight面板,包括+、-、*、/、Sqrt、1/x、=这个人几个按钮dispMain.add(dispRight);dispRight.SetLayout(newGridLayout(4,2,3,3);新建0-9这是个按钮,并将其添加到disLeft中for(1=9;1=0;1-)bl=newJButton(String,valuef(1);dispLeft.add(bl);bl.addActionListener(this);)新建其余按钮,并分别将其添加到各自的面板中jia=newJBUtton(+);jia

10、.SetForeground(Color.RED);jian=newJBUttOn(一);jian.SetForeground(Color.RED);cheng=newJBUtton(*);cheng.SetForeground(Color.RED);chu=newJBUtton(/);chu.SetForeground(Color.RED);equ=newJBUtton(=);equ.SetForeground(Color.RED);point=newJBUttOn;zf=newJButton(/+/-);sqrt=newJBUttOn(sqrt);bfh=newJButton(Y);ds=

11、newJButton(,zlzz);dispRight.add(chu);dispRight.add(sqrt);dispRight.add(cheng);dispRight.add(bfh);dispRight.add(jian);dispRight.add(ds);dispRight.add(jia);dispRight.add(equ);dispLeft.add(zf);dispLeft.add(point);3.2监听各个按钮的类3.2.1编写监听类目的编写监听类的目的主要监听用户所按下的数字键和运算键,为了计算机后续的取得数据并进行运算做预备工作。给后续计算工作提供保障。3.2.2监

12、听类实现代码算法的代码实现如下:为各个按钮绑定监听器about.addWindowListener(this);be.addActionListener(this);ce.addActionListener(this);c.addctionListener(this);ab.addActionListener(this);jia.addActionListener(this);jian.addActionListener(this);cheng.addctionListener(this);chu.addActionListener(this);equ.addActionListener(th

13、is);point.addctionListener(this);zf.addActionListener(this);sqrt.addActionListener(this);bfh.addActionListener(this);ds.addActionListener(this);frame.addWindowListener(this);frame.setVisible(true);3.3按键响应类3.3.1响应类编写的目的通过监听类的监听,采集用户所按下的按键信息进行分析,并将分析结果保存为不同的方法和标记,通过不同的标记在运算过程中调用处理类中的不同方法实现计算功能。3.3.2响应

14、类实现代码算法的主体代码实现如下:publicvoidactionPerformcd(ActionEvente)getValue=Double,valuef(show.getText().doubIeVaIue();if(e.getSource()=jia)/加运算,可连加if(j=0)sum=getValue;elseif(action=1)sum+=getValue;)setSum();j+;P=O;i=0;action=1;elseif(e.getSource()=jian)/减运算,可连减if(j=0)sum=getValue;elseif(action=2)sum-=getValue

15、;)setSum();j+;P=0;i=0;action=2;elseif(e.getSource()=cheng)(/乘运算,可连乘if(j=0)sum=getValue;elseif(action=3)sum*=getValue;)setSum();j+;P=0;i=0;action=3;elseif(e.getSource()=chu)/除运算,可连除if(j=0)sum=getValue;elseif(action=4)sum/=getValue;)setSum();j+;P=0;i=0;action=4;elseif(e.getSource()=equ)/等号,运算最后一个操作数sw

16、itch(action)case1:show.setText(String,valuef(sum+=getValue);break;case 2:show.setText(String,valuef(sum-=getValue);break;case 3:show.setText(String,valuef(sum*=getValue);break;case 4:show.setText(String,valuef(sum/=getValue);break;)setSum();1 =0;j=0;action=0;elseif(e.getSource()=point)/小数点,只能按一个小数点i

17、f(p=0)show.setText(show.getText()+e.getActionCommand();P=1;elseif(e.getSource()=ce.getSource()=ce)(/清空与复位i=0;j=0;P=0;sum=0;action=0;show.SetTeXt(0);elseif(e.getSource()=be)/退格Strings=show.getText();if(s.length()1)show.setText();for(1=0;1s.length()-1;l+)/按一下,删除尾部一位chara=s.charAt(1);show.setText(show.

18、getText()+a);)elseshow.SetTeXt(0);elseif(e.getSource()=ab)/关于about.SetVisible(true);elseif(e.getSource()=sqrt)/开2次方根sum=Math,sqrt(getValue);setSum();i=0;elseif(e.getSource()=ds)/求倒数sum=1/getValue;setSum();i=0;elseif(e.getSource()=bfh)/百分号sum=getValue/100;setSum();i=0;elseif(e.getSource()=zf)/正负号切换,正

19、号不显示Strings=show.getText();chara=s.charAt(0);if(a=)show.setText();for(1=1;1s.length();l+)/去掉负号show.setText(show.getText()+s.charAt(1);)elseif(getValue!=0)(/加上负号show.setText(,-,+s);)for(1=0;110;1+)/09数字键触发if(e.getSource()=bl)(if(i=0)show.setText(”);Strings=show.getText();if(s.length()slength)show.set

20、Text(show.getText()+e.getActionCommand();if(e.getSource()=b0&getValue=0&p=0)show.SetTeXt(0);if(e.getSource()!=b0&getValue=0&p=0)show.setText(e.getActionCommand();i+;i用来标记数字键触发的状态)3.4运算处理类3.4.1处理方式通过获得上诉用户所按下数字键和运算功能键的信息,用响应类的处理结果信息进行判断标示符的形式对号入座进行调用不同运算处理并把运算结果显示在输入数据框中。3.4.2处理类实现代码publicvoidsetSum(

21、)/把计算结果显示出来show.setText(String,valuef(sum);Strings=show.getTextO;chara=s.charAt(s.IengthO-1);charb=s.charAt(s.IengthO-2);if(a=0&b=.)如果是整数,则去掉后面的小数点和0show.setText(String,valuef(Math,round(sum);)publicvoidwindowClosing(WindowEvente)if(e.getSourceO=about)about.SetVisible(false);elseif(e.getSourceO=fram

22、e)System.exit(0);第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。设计难点1:布局计算器的界面虽然是按照系统中的计算器为模型的,但是由于按钮太多,使得计算器的布局就相对的难一点了。设计难点2:代码代码的运用是计算器设计成功的关健所在,每一个按钮卜的代码都不一样,不一样的按钮实现的功能也不一样,尤其是小数点和等号的代码,因为这两个按钮关系着整个计算器的运算,计算器能否设计成功就在这两个按钮上了。而这两个按钮代码的编写既是重点也是难点,稍

23、稍有一点的错误就有能够运算出正确结果。在编写java计算器时有异常出现。异常是这次设计中的重点也是一个难点。任何计算机语言的程序都难免有漏洞,捕获错误最理想的是在编译期间,最好在试图运行程序以前。JaVa支持的异常处理功能比其他语言提供的更灵活。当java程序执行中发生错误时,错误事件对象可能导致的程序运行错误称为异常,异常会输出错误消息,使其知道该如何正确地处理遇到的问题。当java运行系统在得到一个异常对象时,它将会寻找处理这一异常的代码,找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(CatCh)异常。如果JaVa运行时系统找不到可以捕获

24、异常的方法,则运行时系统将会终止,相应的java程序也将退出。这次在java记事木程序用到的就是try,catch来捕获的异常。设计难点3:运行结果运行结果也是难点之一,你的代码编写再正确运行不出结果也是徒劳的,所以代码正确了那也不算是全正确,只有代码和运行结果全都正确那才是真起码的正确呢。第5章程序测试及分析运行程序,首先显示程序主菜单。图5T所示,是程序主界面。图5-1简单计算器主界面图5-2所示,是简单计算器实现加减乘除功能的运算。例如:333乘于5550图5-2简单计算器的加减乘除功能实现图5-3所示,是简单计算器实现退格的运算。例如;例如:333乘于555结果的退格。图5-3简单计算

25、器实现退格的运算图5-4所示,是简单计算器实现清零功能的运算。例如:333乘于555结果的清零。图5-5所示,图5-4简单计算器实现清零功能的运算是简单计算器实现开方功能的运算。例如:36开方图5-6所示,图5-5简单计算器实现开方功能的运算是简单计算器实现倒数功能的运算。例如:88的倒数图5-7所示,图5-6简单计算器实现开方功能的运算是简单计算器实现百分数功能的运算。例如:百分之25近陈路尧的个人计算器一百1图5-7简单计算器实现百分数功能的运算第6章总结本次课程设计到此算是告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对java的认识与了解。在这次课程设计中,独自

26、编写计算器的各个功能,并对其进行按键的排版、监听、处理、运算等各个步骤的亲力亲为,基本上完成了任务书上的各项内容。在做本项目的时候,会遇到很多小问题,比如说,在整个运算过程中要如何确保输入的计算数据哪个是第一个计算数据的,哪个是第二个计算数据的,同时也要区分运算符,因为该计算器程序应用的都是利用字符串来完成计算的,而且不能重复输出运算符,更不能将运算符错误的存储在了第一个计算数据的数值中,也得考虑到万一不小心重复点击了运算符按钮会不会造成第一个计算数据的重新赋值等等问题,最后想到利用布尔类型来很好的控制运算符的应用!在设计这个系统的时候,我查阅了很多相关的书籍,并通过网络解决了不少问题。通过这

27、次课程式设计,我对eclipse的开发环境有了更多的认识和了解,让我对java语言的认识又加深了一步,不仅使我学会了如何查阅资料,同时也让了网络这个好老师发挥了作用,总之收获了很多。,此次课程设计让我更了解熟悉了JaVa中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。在接下来的时间里,我觉得我要更加努力的往深一层次的方面看齐,了解更多有关j

28、ava的知识,对java有更深一步的了解,我会一步一步的走下去!参考文献1朱福喜.Java语言程序设计(第二版).科学出版社2陈国君等.Java程序设计基础(第二版).清华大学出版社3 DeiteLJava大学基础教程(第六版).电子工业出版社4 MaryCampione.Java语言导学(第四版).机械工业出版社5 Y.DanielLiang.Java语言程序设计基础篇(第六版).机械工业出版6 KathySierra.HeadFirstJava(第二版).东南大学出版社7(美)埃克尔著,陈昊鹏译Java编程思想(第4版).机械工业出社8李兴华Java从入门到精通人民邮电出版社2010-4T

29、版臧萌编著Java入门1-2-3清华大学出版社2010-5-1版10李钟尉,周小彤,陈丹丹等编著Java从入门到精通(第2版)清华大学出版社11李辉打通经脉Java基础入门编程详解中国铁道出版社2010-11-01版12(美)卡登赫斯第Java编程入门经典(第4版)人民邮电出版社13喻桃阳Java快速入门与商用项目培训清华大学出版社2011-03-01版14温沿书Java入门与实战教程人民邮电出版社201(三)3-01版15李钟尉Java范例完全自学手册人民邮电出版社2009TOT16(美)斯采尔德著,马海军Java2实用教程清华大学出版社2004TT17(美)贝茨(Bates,B.)HeadFirstJava(中文版)中国电力出版社2007-2-1版18辛运帏Java程序设计(第二版)清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号