计算器论文再次修改好的.docx
《计算器论文再次修改好的.docx》由会员分享,可在线阅读,更多相关《计算器论文再次修改好的.docx(27页珍藏版)》请在冰豆网上搜索。
计算器论文再次修改好的
Java程序设计
课程设计论文
设计题目:
Java计算器
学生姓名:
指导教师:
专业名称:
所在院系:
2010年12月30日
摘要
该计算器是由Java语言所编写的标准计算器,可以进行十进制下的四则运算(加、减、乘、除)、开平方、百分号、求倒数,还可以实现其他按钮的功能。
添加了一个编辑、查看、帮助的主菜单并能实现其功能。
Backspace表示逐个删除,CE表示全部清除,C表示一次运算完成后,单击“C”按钮即可清除当前的运算结果,再次输入时可开始新的运算,MC表示清除储存数据,MR表示读取储存的数据,MS表示将所显示的数存入存储器中,存储器中原有的数据被冲走,M+表示计算结果并加上已经储存的数。
界面类似Windows自带的计算器。
该计算器围绕Java编程语言在编程方面的具体应用,论述了使用面向对象方法,对计算器程序进行需求分析、概要设计、详细设计,最后使用Java编程实现的全过程。
在编程使用Java语言,是目前比较流行的编程语言。
在当今这个网络的时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。
Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。
关键词:
Java语言、标准、计算器
目录
摘要2
第1章标准计算器概述 4
1.1设计目的4
1.2功能模块设计4
1.3系统功能图4
1.4本次设计的重大意义5
1.5本章小结5
第2章 设计实现的详细步骤6
2.1使用软件介绍6
2.2图形界面设计方法7
2.2.1标准计算器界面7
2.2.2界面设计代码7
2.3程序运行效果9
2.4本章总结12
第3章设计中遇到的重点及难点13
3.1设计中的重点13
3.2设计中的难点13
3.2.1设计难点1:
布局13
3.2.2设计难点2:
代码13
3.2.3设计难点3:
运行结果14
3.3本章总结14
第4章本次设计中存在不足与改良方案15
4.1设计不足15
4.2改良方案15
4.3本章总结18
结论19
参考文献20
致谢21
指导教师评语22
答辩委员会评语23
第1章标准计算器概述
1.1设计目的
1)复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力;
3)培养学生在项目开发中团队合作精神、创新意识及能力。
1.2功能模块设计
以下为标准计算器的基本功能:
(1)加法
两个数据进行加操作,可以为小数。
(2)减法
两个数据进行减操作,可以为负数相减。
(3)乘法
两个数据进行乘操作。
(4)除法
两个数据进行相除。
(5)四则混合运算
对任何数进行任意运算
(6)开平方
对任意一个数进行开方运算,可以是小数。
(7)百分号
对任意一个数进行百分号运算。
(8)求倒数
对任意一个数进行求倒数运算。
(9)各菜单项功能
实现每一个菜单项的功能
(10)各功能键功能
实现每一个功能键的功能,如MS、MR、M+、Backspace、CE、C等。
1.3系统功能图
表1-1计算器基本功能图
1.4本次设计的重大意义
通过本次设计能够更好的掌握Java编程技巧,增强实践编程能力,以及团队合作能力,为以后的编程道路奠下坚实的基础。
这次编写的java计算器是用来进行简单运算的,随着人们通信或了解信息的越来越数据化,特别是要求高速度的获取想要的信息,计算器的要求越来越高,不仅是在其容量上越来越大,特别是在其功能上要求的实现越来越多,数据类型和精确度越来越准确。
该程序是一个基于Java的程序设计界面设计的功能简单的计算器,实现了加、减、乘、除,求倒,百分比,等功能,而且还具有保存等记忆功能,还具有清除,归零等功能。
它具有简单方便的特点,是人们在运用计算机时必不可少的一个工具。
1.5本章小节
通过本章的学习,对该计算器有了初步的了解,标准计算器的概念在你的脑中已初步形成,这次程序设计在设计类的时候。
考虑到了简单明了。
这们设计的优点是:
条理清晰,容易理解,容易修改。
第2章设计实现的详细步骤
2.1使用软件介绍
本次设计使用的软件是eclipseSDK。
eclipseSDK是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。
Eclipse最初是由IBM公司开发的替代商业软件VisualAgeforJava的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(EclipseFoundation)管理。
2003年,Eclipse3.0选择OSGi服务平台规范为运行时架构。
2007年6月,稳定版3.3发布。
2008年6月发布代号为Ganymede的3.4版。
2009年7月发布代号为GALILEO的3.5版。
Eclipse是著名的跨平台的自由集成开发环境(IDE)。
最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
许多软件开发商以Eclipse为框架开发自己的IDE。
Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。
IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。
目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。
Eclipse是一个开发源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。
近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。
虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。
Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。
由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
基于Eclipse的应用程序的突出例子是IBM的WebSphereStudioWorkbench,它构成了IBMJava开发工具系列的基础。
例如,WebSphereStudioApplicationDeveloper添加了对JSP、servlet、EJB、XML、Web服务和数据库访问的支持。
Eclipse的主要组成:
Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。
它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——EclipsePlatform、JDT、CDT和PDE.JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。
它提供建造块和构造并运行集成软件开发工具的基础。
EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。
EclipseSDK(软件开发者包)是EclipsePlatform、JDT和PDE所生产的组件合并,它们可以一次下载。
这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到EclipsePlatform中的工具。
EclipseSDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。
Eclipse项目生产的软件以CPL发布,第三方组件有各自自身的许可协议。
2.2图形界面设计方法
2.2.1标准计算器界面
图2-1标准计算器界面
计算器界面由一个文本框、一个菜单栏及27个按钮组成。
由于按钮太多,所以在原有的面板中又加入一个面板,放运算符和数字键,代码实现如下:
2.2.2界面设计代码
//以下为计算器所引入的全部变量
privateStringstr="";//@jve:
decl-index=0:
//str字符串中所存放的内容为文本框中的内容
privatedoubledata_one;//data_one中存放每次运算的结果
privatecharOperator='A';//Operator字符型成员变量,程序根据它的值来决定进行何种运算
staticdoublem;//m为静态变量,储存内存中的数据
privatebooleanf=false;//f为逻辑型数据,判断是否为第一次按运算符
DecimalFormatdf=newDecimalFormat("0.0##############");//df为双精度,定义其精度
privatedoubledata_two=0;//每次运算的运算数
//程序中所用包说明及注释
importjavax.swing.SwingUtilities;
importjava.awt.*;//包含用于创建用户界面和绘制图形图像的所有类
importjava.awt.BorderLayout;//提供围绕Swing组件绘制特殊边框的类和接口
importjavax.swing.*;//提供一组“轻量级”(全部是Java语言)组件,尽量让这些组件在所有平台上的工作方式都相同
importjava.awt.Font;//包含字体设置的所有类
importjava.awt.Color;//包含字体颜色设置的所有类
importjava.awt.event.InputEvent;//包含输入事件的所有类
importjava.awt.event.KeyEvent;//包含键盘事件的所有类
importjava.io.IOException;//包含输入输出异常的所有类
importjava.text.DecimalFormat;//设置数值精度
//程序中所用面板说明及注释
privateJPanelgetJPanel1(){
if(jPanel1==null){
GridLayoutgridLayout=newGridLayout();//定义jPanel1的布局为4行5列,水平垂直间距都为5
gridLayout.setRows(4);//jPanel分为4行
gridLayout.setColumns(5);jPanel分为5列
gridLayout.setHgap(5);//水平距为5
gridLayout.setVgap(5);//垂直间距为5
jPanel1=newJPanel();//创建一个新的面板
jPanel1.setLayout(gridLayout);//设置面板的布局方式为gridLayout
jPanel1.setBounds(newRectangle(54,69,192,116));//设置面板的大小
}
returnjPanel1;
}
2.3程序运行效果
(1)程序运行主要界面如下:
A.乘法运算
B.
4.1*
2
=
B.四则混合运算
5
+
3
-
2
*
3
/
2
=
C.开平方
9
sqrt
D.百分号
3
%
E.倒数
5
1/x
2.4本章总结
本章主要介绍了用java创建计算器的部分代码以及运行后的效果图。
运行java计算器以后出现的那个框架图就是我们所说的java图形用户界面(GUI),它是程序与用户进行交流的图像窗口,为应用程序提供一个图形化的界面,程序通过GUI与用户交互,GUI通过事件机制响应用户和程序的交互。
如当用户单击某个按钮时就会产生动作事件,要处理产生的事件,需要在特定的方法中编写处理事件的程序。
这样,当产生某种事件时就会调用处理这种事件的方法,从而实现用户与程序的交互。
另外GUI能使一个应用程序具有与众不同的“外观”与“感觉”。
有了GUI,用户就不用花很多时间去记忆各个键盘序列的功能,从而把更多的时间投入到有效地使用应用程序本身上。
第3章设计中遇到的重点及难点
3.1设计中的重点
在设计过程中,最重要的就是代码的套用、图形界面的设计、按钮与面板的布局、以及代码的输写。
计算器能不能做出来,做的完不完美就集中在这几个方面了。
在这次设计中,遇到的重点有以下两点:
(1)Java计算器在支行时会出现IOException异常。
处理方法是在遇到异常时用try,catch方法对异常进行捕获。
(2)java计算器中还用到了继承
继承是面向对象方法中一个十分重要的的概念,并且是提高软件开发效率的重要原因之一。
继承实际上是存在于面向对象程序中的两个类之间的一种关系。
继承的实现主要有以下几个步骤。
(1)确定父类。
根据将创建的子类需要选择一个相应的类作为继承父类。
新定义的子类可以从父类那里自动继承所有非私有的属性和方法作为自己的成员。
选择一个恰当的父类可以达到事半功倍的效果。
(2)定义子类。
Java中的继承是通过extends关键字来实现的,在定义类时使用extends关键字指明新定义类的父类,就在两个类之间建立了继承关系。
(3)实现子类的功能。
子类具体要实现的功能由类体中相应的域和方法来实现,其编写和一般的类是完全相同的。
通过继承,子类拥有父类的所有非私有成员。
使用继承具有以下的好处:
降低了代码编写中的冗余度,更好地实现了代码复用的功能,从而提高了程序编写的效率;由于降低了代码的冗余度,使得程序在维护时就变得非常的方便。
3.2设计中的难点
3.2.1设计难点1:
布局
计算器的界面虽然是按照系统中的计算器为模型的,但是由于按钮太多,使得计算器的布局就相对的难一点了。
3.2.2设计难点2:
代码
代码的运用是计算器设计成功的关键所在,每一个按钮上的代码都不一样,不一样的按钮实现的功能也不一样,尤其是小数点和等号的代码,因为这两个按钮关系着整个计算器的运算,计算器能否设计成功就在这两个按钮上了。
而这两个按钮代码的编写既是重点也是难点,稍稍有一点的错误就有能够运算出正确结果。
在编写java计算器时有异常出现。
异常是这次设计中的重点也是一个难点。
任何计算机语言的程序都难免有漏洞,捕获错误最理想的是在编译期间,最好在试图运行程序以前。
Java支持的异常处理功能比其他语言提供的更灵活。
当java程序执行中发生错误时,错误事件对象可能导致的程序运行错误称为异常,异常会输出错误消息,使其知道该如何正确地处理遇到的问题。
当java运行系统在得到一个异常对象时,它将会寻找处理这一异常的代码,找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。
如果java运行时系统找不到可以捕获异常的方法,则运行时系统将会终止,相应的java程序也将退出。
这次在java记事本程序用到的就是try,catch来捕获的异常。
3.2.3设计难点:
运行结果
运行结果也是难点之一,你的代码编写再正确运行不出结果也是徒劳的,所以代码正确了那也不算是全正确,只有代码和运行结果全都正确那才是真起码的正确呢。
3.4本章总结
本章主要讲述了一些在计算器设计过程中的重难点,通过对这些重难点的掌握,不管是在知识的运用还是在整体布局上都提高了程序设计者的水平。
通过这一章我们了解到了继承和异常的处理。
在面向对象的程序设计中,通过采用继承的机制来组织、设计系统中的类,可以提高程序的抽象程序,使之更接近于人类的思维方式,同时也可以提高程序开发效率,降低维护的工作量。
我们还知道了一些异常处理的情况,异常是在运行时发生的错误,使用java异常处理子系统,就可以用一种结构化的可控方式来处理运行时的错误。
在使用try,catch来捕获异常时。
这两个关键字要一起使用,只有try而没有catch,或者是只有catch而没有try都是不可以的。
当try描述的代码段遇到异常发生时,计算机控制权由try转移到catch异常处理代码块。
当抛出一个异常时,异常会由相应的catch语句来捕获并处理。
第4章本次设计中存在不足与改良方案
4.1设计不足
想要成功地设计一个计算器,那必定要经历无数次的失败之后才能达到你真正想要的结果,或者说是令人满意的结果。
在本次的设计过程中出现了许许多多的不足之处,下面是本人在设计过程中发现的不足之处:
(1)不能清楚的知道MC、MR、MS、M+以及C、CE这几个按扭实现的功能,通过查阅资料知道能这几个按钮的功能后,又无法实现这几个按扭的功能;
(2)Backspace键功能的实现存在的不足。
(3)数字按钮0、=、以及小数点等几处存在的不足。
(4)四则混合运算的实现。
(5)菜单上的快捷键的实现,以及帮助菜单不能调出系统中的帮助菜单等。
4.2改良方案
有问题就要解决。
这是一个学者所必须要拥有的东西,所以经过多方查阅,以及多次运行验证以上问题都有一个不错的改良方案。
下面具体的改良方案:
(1)CE表示全部清除,C表示一次运算完成后,单击“C”按钮即可清除当前的运算结果,再次输入时可开始新的运算,MC表示清除储存数据,MR表示读取储存的数据,MS表示将所显示的数存入存储器中,存储器中原有的数据被冲走,M+表示计算结果并加上已经储存的数。
以上为这些功能键要实现的功能,以下为这些功能的实现方法
//以下为MC所要实现的代码
jToggleButton1.setText("");//清除存储数字,并清除jToggleButton1中的"M"
jTextField1.setText("0.");
//以下为MR实现的代码
if(jToggleButton1.getText().trim()!
=""){
jTextField1.setText(""+m);
//以下为MS实现的代码
m=Double.parseDouble(jTextField1.getText().trim());//保存编辑框中的数字,并在jToggleButton1中显示"M"
jToggleButton1.setText("M");
jTextField1.setText("0.");
str="";
//以下为M+实现的代码
m=m+Double.parseDouble(jTextField1.getText().trim());//将编辑框中的数字与存储的数字相加
//以下为C实现的代码
pointIsTyped=false;//清除全部运算的结果
str="";
f=false;
Operator='A';
data_one=0;
data_two=0;
m=0;
jTextField1.setText("0.");
//以下为CE实现的代码
pointIsTyped=false;//清除一次运算
str="";
jTextField1.setText("0.");
(2)Backspace表示逐个删除,下面是按钮实现的代码:
pointIsTyped=false;
if(str.length()>1)//只有在字符串长度大于1的时候此键才能发挥其功能
{
if(str.contains(".")==true&&str.lastIndexOf(".")!
=str.length()-1){//只有在字符串中包含有小数点以及小数点的位置是最后一位的时候者能运行以下代码
str=str.substring(0,str.length()-1);
jTextField1.setText(str);
}else{
str=str.substring(0,str.length()-1);
jTextField1.setText(str+".");}
}else{
str="";
jTextField1.setText("0.");
}
(3)首先,不能在没有小数点的情况下输出多个0;其次,小数点出现的次数必须是1次;再次,等号必须能实现运算的功能。
下面是这些功能实现的代码:
//0实现的代码
if(str.length()==0)//0的问题
{
str="0";
jTextField1.setText("0.");
}
else
{
if(str.substring(0,1)!
="0")
{str+="0";
if(pointIsTyped==false)
{
jTextField1.setText(str+".");
}
else
{
jTextField1.setText(str);
}}
}
//小数点实现的代码
if(str.length()==0){
str+="0";
}
if(pointIsTyped==false){
str+=".";
jTextField1.setText(str);
pointIsTyped=true;
}
//等号实现的代码
if(str==""){
str="0";
}
data_two=Double.parseDouble(str);