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

下载本文档

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

文档简介

j目录TOC\o"1-3"\u第1章课题概述 第1章课题概述本次课程设计的题目是设计并实现仿照Window系统中的“计算器”,利用Java的GUI实现一个简单的计算器。1.1课题的目的日常生活中我们经常会遇到一些小型数据计算的问题,计算器在我们的生活中常常会使用到,本课程设计就是以此为出发点,设计了这样一个简单的计算器,用以实现基本的数学运算。在java语言当中通过定义类,类中的各种方法实现对计算器相关功能的实现,并通过与用户自己手动输入并选择运算功能实现计算功能,是一个完全由用户控制的简易计算器。本次课程设计,通过界面以及其中的逻辑处理,完成了四则运算的处理。通过awt包或者swing包中的界面设计部分对界面设计的细节可以有更多的了解。利用面向对象的思想,将各个组件的事件响应分别用不同的类表达出来。面向对象的思想从很大程度上可以让程序的思路更加清晰,而且可重用性很高。对于具有相同事件响;应的组件则可以调用相同的类来处理事件。除此之外,利用栈的知识来解决运算符优先的问题也让我们对java中的栈有了更多的了解。1.2课题的要求仿照Window系统中的“计算器”,利用Java的GUI实现一个简单的计算器。程序的基本功能:1.单击“计算器”上的数字按钮(0-9)可以设置参与计算的运算数。2.单击“计算器”上的运算符按钮(+、-、*、/)可以选择运算符号。3.单击“计算器”上的“=”按钮显示计算结果。4.应用自己所学课程知识完成对计算器的基本任务。5.查阅相关资料,学习和掌握项目中涉及的新知识,提高自学能力。6.通过应用java程序编写计算器来提升自己对简单的图形界面有一定的掌握和了解。第2章概要设计2.1整个程序的模块结构及流程在设计程序的时候,考虑到计算器的功能,首先编写一个CAL类,在该类中按照其功能分别写了一个方法实现,在程序开始后,可以看到一个控制面板形式的计算器界面展现在用户面前,用户自己输入数据和选择要运算的功能进行计算。具体方法有:加减乘除运算、乘方开方运算、正余弦正切运算、删除阶乘运算等具体的关系结构如图2-1所示图2-1整个程序各功能模块间的流程第3章计算器详细设计3.1计算器界面3.1.1CAL主类的显示布局为了方便用户的使用,创建了一个带按钮的控制面板。将所有的运算键、数字键等都放在该面板中方便用户选择与使用。所有的运算选择都完全由用户掌控。3.1.2计算器显示界面实现代码publicvoiddisp(){ frame=newJFrame(); frame.setTitle("陈路尧的个人计算器"); frame.setSize(360,230); frame.setLocation(380,260); frame.setBackground(Color.LIGHT_GRAY); frame.setLayout(newFlowLayout(FlowLayout.CENTER)); frame.setResizable(false); //计算器disTop模块,包括数字显示文本框、back,ce,c,about按钮 show=newJTextField(31); 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)); bc=newJButton("Back"); bc.setForeground(Color.BLUE); dispTop.add(bc); ce=newJButton("CE"); ce.setForeground(Color.BLUE); dispTop.add(ce); c=newJButton("C"); c.setForeground(Color.BLUE); dispTop.add(c); //广告按钮,显示计算器制作者 ab=newJButton("About"); ab.setForeground(Color.BLUE); dispTop.add(ab); about=newJDialog(frame,"关于计算器",true); Labelct=newLabel("本计算器由陈路尧制作",1); ct.setForeground(Color.RED); about.add(ct,"Center"); about.setSize(200,100); about.setLocation(500,300); //主要按钮显示面板包括disLeft和disRight PaneldispMain=newPanel(); frame.add(dispMain); dispMain.setLayout(newGridLayout(1,2,10,10)); //disLeft面板,包括0-9、+/-、。这十二个按钮 PaneldispLeft=newPanel(); dispMain.add(dispLeft); dispLeft.setLayout(newGridLayout(4,3,3,3)); PaneldispRight=newPanel(); //disRight面板,包括+、-、*、/、sqrt、%、1/x、=这个人几个按钮 dispMain.add(dispRight); dispRight.setLayout(newGridLayout(4,2,3,3)); //新建0-9这是个按钮,并将其添加到disLeft中 for(l=9;l>=0;l--){ b[l]=newJButton(String.valueOf(l)); dispLeft.add(b[l]); b[l].addActionListener(this); } //新建其余按钮,并分别将其添加到各自的面板中 jia=newJButton("+"); jia.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("%"); ds=newJButton("1/x"); 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监听类实现代码算法的代码实现如下://为各个按钮绑定监听器 about.addWindowListener(this); bc.addActionListener(this); ce.addActionListener(this); c.addActionListener(this); ab.addActionListener(this); jia.addActionListener(this); jian.addActionListener(this); cheng.addActionListener(this); chu.addActionListener(this); equ.addActionListener(this); point.addActionListener(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响应类实现代码算法的主体代码实现如下:publicvoidactionPerformed(ActionEvente){ getValue=Double.valueOf(show.getText()).doubleValue(); if(e.getSource()==jia){//加运算,可连加 if(j==0){ sum=getValue; }elseif(action==1){ sum+=getValue; } setSum(); j++; p=0; i=0; action=1; }elseif(e.getSource()==jian){//减运算,可连减 if(j==0){ sum=getValue; }elseif(action==2){ sum-=getValue; } 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){//等号,运算最后一个操作数 switch(action){ case1: show.setText(String.valueOf(sum+=getValue)); break; case2: show.setText(String.valueOf(sum-=getValue)); break; case3: show.setText(String.valueOf(sum*=getValue)); break; case4: show.setText(String.valueOf(sum/=getValue)); break; } setSum(); i=0; j=0; action=0; }elseif(e.getSource()==point){//小数点,只能按一个小数点 if(p==0) show.setText(show.getText()+e.getActionCommand()); p=1; }elseif(e.getSource()==c||e.getSource()==ce){//清空与复位 i=0; j=0; p=0; sum=0; action=0; show.setText("0"); }elseif(e.getSource()==bc){//退格 Strings=show.getText(); if(s.length()>1){ show.setText(""); for(l=0;l<s.length()-1;l++){//按一下,删除尾部一位 chara=s.charAt(l); show.setText(show.getText()+a); } }else show.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){//正负号切换,正号不显示 Strings=show.getText(); chara=s.charAt(0); if(a=='-'){ show.setText(""); for(l=1;l<s.length();l++){//去掉负号 show.setText(show.getText()+s.charAt(l)); } }elseif(getValue!=0){//加上负号 show.setText("-"+s); } }for(l=0;l<10;l++){//0~9数字键触发 if(e.getSource()==b[l]){ if(i==0) show.setText(""); Strings=show.getText(); if(s.length()<slength) show.setText(show.getText()+e.getActionCommand()); if(e.getSource()==b[0]&&getValue==0&&p==0) show.setText("0"); if(e.getSource()!=b[0]&&getValue==0&&p==0) show.setText(e.getActionCommand()); i++;//i用来标记数字键触发的状态 }3.4运算处理类3.4.1处理方式通过获得上诉用户所按下数字键和运算功能键的信息,用响应类的处理结果信息进行判断标示符的形式对号入座进行调用不同运算处理并把运算结果显示在输入数据框中。3.4.2处理类实现代码publicvoidsetSum(){//把计算结果显示出来 show.setText(String.valueOf(sum)); Strings=show.getText(); chara=s.charAt((s.length()-1)); charb=s.charAt((s.length()-2)); if(a=='0'&&b=='.'){//如果是整数,则去掉后面的小数点和0 show.setText(String.valueOf(Math.round(sum))); } } publicvoidwindowClosing(WindowEvente){ if(e.getSource()==about) about.setVisible(false); elseif(e.getSource()==frame) System.exit(0); } 第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。设计难点1:布局计算器的界面虽然是按照系统中的计算器为模型的,但是由于按钮太多,使得计算器的布局就相对的难一点了。设计难点2:代码代码的运用是计算器设计成功的关健所在,每一个按钮卜的代码都不一样,不一样的按钮实现的功能也不一样,尤其是小数点和等号的代码,因为这两个按钮关系着整个计算器的运算,计算器能否设计成功就在这两个按钮上了。而这两个按钮代码的编写既是重点也是难点,稍稍有一点的错误就有能够运算出正确结果。在编写java计算器时有异常出现。异常是这次设计中的重点也是一个难点。任何计算机语言的程序都难免有漏洞,捕获错误最理想的是在编译期间,最好在试图运行程序以前。Java支持的异常处理功能比其他语言提供的更灵活。当java程序执行中发生错误时,错误事件对象可能导致的程序运行错误称为异常,异常会输出错误消息,使其知道该如何正确地处理遇到的问题。当java运行系统在得到一个异常对象时,它将会寻找处理这一异常的代码,找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将会终止,相应的java程序也将退出。这次在java记事木程序用到的就是try,catch来捕获的异常。设计难点3:运行结果运行结果也是难点之一,你的代码编写再正确运行不出结果也是徒劳的,所以代码正确了那也不算是全正确,只有代码和运行结果全都正确那才是真起码的正确呢。第5章程序测试及分析运行程序,首先显示程序主菜单。图5-1所示,是程序主界面。图5-1简单计算器主界面图5-2所示,是简单计算器实现加减乘除功能的运算。例如:333乘于555。图5-2简单计算器的加减乘除功能实现图5-3所示,是简单计算器实现退格的运算。例如;例如:333乘于555结果的退格。图5-3简单计算器实现退格的运算图5-4所示,是简单计算器实现清零功能的运算。例如:333乘于555结果的清零。图5-4简单计算器实现清零功能的运算图5-5所示,是简单计算器实现开方功能的运算。例如:36开方图5-5简单计算器实现开方功能的运算图5-6所示,是简单计算器实现倒数功能的运算。例如:88的倒数图5-6简单计算器实现开方功能的运算图5-7所示,是简单计算器实现百分数功能的运算。例如:百分之25图5-7简单计算器实现百分数功能的运算第6章总结本次课程设计到此算是告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对java的认识与了解。在这次课程设计中,独自编写计算器的各个功能,并对其进行按键的排版、监听、处理、运算等各个步骤的亲力亲为,基本上完成了任务书上的各项内容。在做本项目的时候,会遇到很多小问题,比如说,在整个运算过程中要如何确保输入的计算数据哪个是第一个计算数据的,哪个是第二个计算数据的,同时也要区分运算符,因为该计算器程序应用的都是利用字符串来完成计算的,而且不能重复输出运算符,更不能将运算符错误的存储在了第一个计算数据的数值中,也得考虑到万一不小心重复点击了运算符按钮会不会造成第一个计算数据的重新赋值等等问题,最后想到利用布尔类型来很好的控制运算符的应用!在设计这个系统的时候,我查阅了很多相关的书籍,并通过网络解决了不少问题。通过这次课程式设计,我对eclipse的开发环境有了更多的认识和了解,让我对java语言的认识又加深了一步,不仅使我学会了如何查阅资料,同时也让了网络这个好老师

温馨提示

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

评论

0/150

提交评论