计算器模拟程序
姓 名: 学 号: 指导教师: 系 别: 信息科学与工程系 专 业:班 级: 09计网1班
提交时间:20xx年 12 月14日
1
2009级计算机网络《Java程序设计》课程设计
安排计划书
指导老师: 指导方式:集体辅导、分组讨论研究
主要参考资料:
《Java程序设计》
《算法分析与设计》,王晓东编著,电子工业出版社
服务课程名称:数据结构
一、 课程设计教学目的及基本要求
1、 培养独立的Java语言与算法设计方法,具备初步的独立分析和设计能力;
2、 学习软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3、 训练综合运用所学的理论知识和方法进行独立分析和解决问题的能力;
4、 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
5、 设计的题目要求达到一定工作量(300行以上代码),程序能够运行,并对标准的测试数据有正确的输出结果。按系部要求的书写格式编写出课程设计报告书,报告书不少于10页(代码不算)。
二、 计划安排
1、 任务书下达时间:16周
2、 任务讲解与动员:16周星期一
3、 任务设计与辅导:
辅导教师:汪政
辅导形式:以学生自行设计为主,教师现场解答学生疑难问题。
纪律要求:上课前学生签到,课后学习委员交名单给老师。
三、课程设计课题与安排
计算器模拟程序
功能要求:该程序显示GUI用户界面,能实现整数的加、减、乘、除四则运算。 界面要示:用图形界面实现。可参考下图。
2
图1 计算器模拟程序界面
五、成绩评定
1、根据平时上机考勤(考勤20分);注重平时上机成绩,教师要不定期检查学生进度,学生不得以自己有私人电脑为借口而不来上机。
2、根据程序运行结果(上机演示30分);
3、根据《Java语言课程设计报告》,学生能对自己的程序面对教师提问并能熟练地解释清楚(报告50分)
4、无报告书者,课程设计记0分。
指导教师:
3
目 录
一、课程设计任务及要求 ............................................ 5
二、需求分析 ................................................................ 5
三、设计思路 ................................................................ 5
四、详细设计 ................................................................ 6
五、运行调试与分析讨论 .......................................... 10
六、设计体会与小结 .................................................. 11
七、参考文献 .............................................................. 12
4
一、课程设计任务及要求
1.课程设计任务:
设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算。通过对计算器的编辑来检测和提升自己的java编程能力,并最终完成课程设计报告!
2. 课程设计教学目的及基本要求
1) 培养独立的Java语言与算法设计方法,具备初步的独立分析和设计能力;
2) 学习软件开发过程的问题分析、系统设计、程序编码、测试等基本方法
和技能;
3) 训练综合运用所学的理论知识和方法进行独立分析和解决问题的能力
4) 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者
所应具备的科学的工作方法和作风。
5) 设计的题目要求达到一定工作量(300行以上代码),程序能够运行,并
对标准的测试数据有正确的输出结果。
6) 按系部要求的书写格式编写出课程设计报告书。
二、需求分析
1) 设计的计算器可以完成加法、减法、乘法、除法的简单运算。
2) 实现一些简单的扩展运算,如:正负号、倒数、退格、清零等功能。
3) 添加小数点功能,用以实现浮点型数据的计算。
4) 使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输
入,并完成相关的计算。
三、设计思路
1. 界面设计:
5
2.设计思路:
1) 根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本
框,20个按钮,总体界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/等按钮放置到一个面板Panel中,完成界面设计。
2) 设计计算流程,首先点击数字按钮时,将按钮数值添加到文本框当中,并将该数值
保存到一个字符串中,再次点击数字按钮时,将之前保存的字符串与新的数值拼接起来,再添加到文本框当中,直到点击运算符按钮时,将文本框当中的字符串保存在一个字符串变量中,然后重置文本框内容,将运算符号显示到文本框中,随后输入第二个计算数据时,用同样的办法保存数据,最后通过控制“=”运算符先将字符串数据转化成双精度类型,然后计算出结果并显示到文本框当中。
四、详细设计
1.程序流程图:
6
2.程序分析:
1)类Calculator继承自ActionListener接口,通过这一接口来处理界面中的按钮所触发的动作事件。ActionListener接口可以接收ActionEvent,该接口有一个事件方法actionPerformed(ActionEvent e ),在该方法中将触发需要实现的功能。
2)ActionEvent类继承自AWTEvent,代表的是一个语义事件,用来指出某组件(component)所定义“行动”发生了。这种事件由一个组件(如Button)引发,而触动的时机则是当这组件的某种特定动作(如该Button被单击)发生之时。此事件产生后,系统会将它分配给该组件所注册(用addActionListenert()方法实现注册)的每一个ActionListener(监听者),来接收并处理这种事件。所以如果一个按钮组件注册一个addActionListener方法,那么当用户用鼠标单节此按钮时,就会产生ActionEvent事件。
3)在程序运行中,每当单击数字按钮和运算符按钮,都会触发动作
actionPerformed(ActionEvent e),利用类ActionEvent得getActionCommand()方法确定是由哪一个按钮触发的,进行相应的计算操作。
4)在AWT中提供了五种布局管理类。布局管理器指明了容器中构件的位置和尺寸大小。通过布局管理器,只需知道放置的构件同其他构件的相对应的位置即可,有助于实现软件的平台无关性。本程序中用到的布局管理管理器的
BorderLayout、GridLayout。其中BorderLayout类使用地理上的方向North、South、West和Center来确定构件添加的位置。其中前四个方向占据屏幕的四边,而Center方向占据剩下的空白;GridLayout是比较复杂但是却很灵活得AWT布局,可以精确地指定组件的放置位置,它是在将屏幕划分成网格的基础上,允许每个机构占据一个或多个单元(显示区域)。在程序中用到GridLayout的构件函数GridLayout(int rows ,int cols,int hasp,int vgap)其中的参数分别表示行数,列数,水平间距和垂直间距。
5)AWT中提供了可以用来盛装构件的面板(Panel),可以把对象放在面板上,在把面板镶到窗口中,每一个面板有颜色、大小,甚至页面设计等属性。
3.部分代码和解析
A.框架的设计
7
B.面板的定义:
C.监听单机的事件:
8
D.布局管理
E.运算符的控制和值得输入输出。
public void actionPerformed(ActionEvent e)
{
String command = e.getActionCommand();
if(command=="CE") //清零键 按下时返回初始状态
{
y=0;
tf.setText("0.");
s1="";s2="";s3="";//记录输入值的变量清空
}
else if(command=="退出") System.exit(0);//退出键
else if(y==0&&command!="*"&&command!="/" &&command!="+"&&command!="-"
&&command!="=")//判断输入是否为数字
{
s1=s1.concat(command);
tf.setText(s1);
}
if(command=="*"||command=="/"
||command=="+"||command=="-")//判断是否输入运算符 {
y=1;
s2=command;
}
if(y==1&&command!="*"&&command!="/" &&command!="+"&&command!="-"
&&command!="=")
{
s3=s3.concat(command);
tf.setText(s3);
}
if(command=="=")
{
Double ob1=Double.valueOf(s1);
Double ob3=Double.valueOf(s3);
d1=ob1.doubleValue();
关闭应用程序9
d3=ob3.doubleValue(); if(s2=="+") d4=d1+d3; if(s2=="-") d4=d1-d3; if(s2=="*") d4=d1*d3; Double ob4=new Double(d4); tf.setText(ob4.toString()); if(s2=="/") { if(d3==0)
tf.setText("除数不能为零"); else{ d4=d1/d3; ob4=new Double(d4);
tf.setText(ob4.toString());} } y=0; } }
五、运行调试与分析讨论
1、简单的运算(以123+456为例)
分析:计算的结果为469.0,为双精度型,计算的结果被设置在文本框的最左端,该计算器的一个特点是可直接在文本框中输入数据以及进行更改。
2.返回功能键的运用(以469.0为例)
10
分析:在使用时,我们要从
新开始进入下一个,但是我们
有不想一次进行空格,所以使
用“CE”。
六、设计体会与小结
本次课程设计到此算是告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对java的认识与了解。
在做本项目是时候,会遇到很多小问题,比如说,在整个运算过程中要如何确保输入的计算数据哪个是第一个计算数据的,哪个是第二个计算数据的,同时也要区分运算符,因为该计算器程序应用的都是利用字符串来完成计算的,而且不能重复输出运算符,更不能将运算符错误的存储在了第一个计算数据的数值中,也得考虑到万一不小心重复点击了运算符按钮会不会造成第一个计算数据的重新赋值等等问题,最后想到利用布尔类型来很好的控制运算符的应用!
此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。
在接下来的时间里,我觉得我要更加努力的往深一层次的方面看齐,了解更多有关java的知识,对java
有更深一步的了解,我会一步一步的走下去! 11
七、参考文献
[1] 丁振凡. Java语言实用教程(第2版)[M]. 北京邮电大学出版社. 2008.1
[2] 丁振凡. Java语言实用教程实验指导(第2版)[M]. 北京邮电大学出版社. 2008.1
[3] 陈明. Java
语言程序设计课程实践 [M]. 清华大学出版社. 2009.1 12
第二篇:Java课程设计-计算器系统
Java程序设计
课程设计(论文)说明书
题目: 简 易 计 算 器
学生姓名: 陈 晨 院 系: 专 业: 软件外包服务 学 号: 201002161323 指导教师: 黄 国 军
摘 要
在人们的日常生活中,计算器系统是很常见的。本次的课程设计就是研究这类的问题,利用Java语言实现简单的加、减、乘、除运算,还要对在运算过程中可能出现的问题进行处理,在本程序中,利用try、catch语句来实现对可能出现的异常进行捕获、处理。在课程设计中,系统开发平台为Windows 7,程序设计设计语言采用Java,程序运行平台为Windows 7,程序开发工具为Eclipse,其中还要用到JDK的配置等。计算器要实现简单的加、减、乘、除运算,其中在除法运算中对除数不能为零的情况做简单的处理,把问题抛出,并在计算器的文本框中输出相应的 “除数不能为零!” 信息。
在本次课程设计中,将重点学习GUI的设计。在GUI的设计中,学习容器、组件的相关知识,并且对其中的组件设置事件监听,然后处理监听到的事件。整个系统有一个无参构造函数;九个方法,其中包括一个主方法;八个类,其中包括七个事件监听类。
关键词:Java程序设计、Eclipse的安装配置、JDK的安装配置、系统变量、try-catch语句、GUI图形用户界面、主方法、容器、组件、无参构造函数、事件监听类
黄冈职业职业技术学院电子信息学院 软件外包服务专业
目 录
第一章 前 言 ............................................................................................... 4
1.1工作基础及应用环境 .............................................................................. 4
1.2研究意义 ................................................................................................ 4
第二章 开发环境的集成 ................................................................................ 4
2.1 Eclipse及JDK的安装配置 ................................................................... 4
2.1.1 Eclipse的安装配置 ...................................................................... 4
2.1.2 JDK的安装配置 ........................................................................... 5
第三章 系统需求分析及实现目标 .................................................................. 6
3.1系统需求分析 ........................................................................................ 6
3.2系统实现目标 ........................................................................................ 7
第四章 计算器系统设计 ................................................................................ 7
第五章 实现过程 ........................................................................................ 10
第六章 总结 ............................................................................................... 12
参考文献 ...................................................................................................... 13
致 谢........................................................................................................ 13
黄冈职业职业技术学院电子信息学院 软件外包服务专业
第一章 前 言
1.1工作基础及应用环境
经过一学期的java学习,对java的基本知识有了一定的了解,对各方面的知识形成了一定的系统,在这样的基础下进行java课程设计,加强这一学期所学的知识点,巩固系统知识,并在实际应用中灵活的应用。
应用环境是:在Windows的操作系统中都可以应用此软件。
1.2研究意义
通过实训把知识形成系统,把自己所学的知识在实际问题中加以运用。如果自己编写的程序能够给更多的人带来方便,并且得到人们的好评,那么自己编写的程序就可以实现商品化,形成产品给更多的人利用,并实现一定的商品价值。
1.3进度安排及分组情况
进度安排:利用第十六周一周的时间,把计算器程序的代码编写出来,并且能够运行,实现预期所想要的结果;第十七周的时间主要是书写实训报告,中间穿插软件测试的内容,把软件的功能完善;在第十七周的最后一次课之前进行答辩,完成本次的课程设计实训。
第二章 开发环境的集成
2.1 Eclipse及JDK的安装配置
2.1.1 Eclipse的安装配置
Java开发工具有很多,比如:Eclipse 3.7、Netbeans 7.0、Myeclipse,其中Myeclipse就是Eclipse集成了很多插件,此软件工具是要收费的。我所用的java开发工具是Eclipse,此软件是设计好的软件,不需要安装就可以使用。
2.1.2 JDK的安装配置
JDK环境变量的配置方法有两种,具体配置方法如下:
一、JDK环境变量的配置:
1、新建系统变量:JAVA_HOME,其变量值为:"c:\java\jdk1.6.0_10"。
2、编辑系统变量:Path,在其变量值文本框末端添加字符串:";%JAVA_HOME%\bin;"。
3、新建用户变量:CLASSPATH,其变量值为:".;c:\java\jdk1.6.0_10\lib\tools.jar;"。
二、JDK环境变量的配置:
1、新建系统变量:JAVA_HOME,其变量值为:"c:\java\jdk1.6.0_10"。
2、编辑系统变量:Path,在其变量值文本框末端添加字符串:";%JAVA_HOME%\bin;"。
3、新建系统变量:CLASSPATH,其变量值为:".;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar"。
下面以Window 7操作系统具体介绍JDK的配置方法:
1、打开系统属性对话框,然后点击下面的环境变量按钮:
2、在打开的环境变量对话框中,进行JDK环境变量的设置,具体的设置方法参考2.1.2 JDK的安装与配置:
第三章 系统需求分析及实现目标
3.1系统需求分析
本次课程设计的题目是制作简易的计算器,整个系统需要实现的功能是:简单的加、减、乘、除功能,并且对可能出现的异常进行处理,还要输出异常信息。在执行计算功能时,要注意计算数据的范围,不能输入超出范围之内的数据,对于异常的输入能够有提示信息。
我主要负责的是在没有点击等号按钮之前,实现加减乘除的算法,并把算的结果在文本框中显示出来。在实现除法运算的过程中,要注意除数不能为零的情况,在程序具体实现过程中用try语句扑捉异常,把除数为零的情况以异常类抛出,在后面用catch语句捕获异常,然后在计算器文本框中输出“除数不能为零!”的字幕。其他的算法主要是注意运算的范围,不能输入太大或是太小的数据,如果输入的数据太大,运算的结果就不会以double型数据显示。
3.2系统实现目标
系统要实现的功能是简单的加减乘除算法,并且要在遇到异常的情况下,把异常抛出。比如:除法运算中除数不能为零的情况,当在运算的过程中如果除数为零,程序就会把除数为零的情况以异常类抛出,并且在文本框中显示捕获的异常信息。还有运算的结果过大或是过小的情况。
系统在实现除法运算时,如果输入的除数为零会显示如下信息:
第四章 计算器系统设计
本系统整体上说还是有一定的难度,其中用到了一个构造函数、八个类、九个方法,包括一个主方法和八个事件监听类。在公共类中对面板、按钮等容器或组件进行了申明和创建对象;在构造函数Calculate()中只做了退出界面的设置和调用JbInit();在JbInit()方法中对每个按钮或是面板进行了设置,设置它的大小、位置,还有对应触发的事件;还有其他的方法和类就是对加减乘除算法的实现,以及面板中二十个按钮所对应的事件响应,和八个事件监听类。
我主要做的是加减乘除算法的实现,还要考虑到在计算的过程中可能出现的异常,在这里主要是对除法运算中除数不能为零的情况进行处理,我所用到的方
法是用try-catch语句把异常抛出并且进行异常类的处理,并把相关的异常信息输出在计算器的文本框中。
计算器系统中唯一的一个界面如下:
在没有用try-catch语句进行异常处理的时候,除法运算中除数为零的情况,运算得到的结果为:
在用到try-catch语句进行异常处理的时候,除法运算中除数为零的情况,运算得到的结果为:
第五章 实现过程
这里只列出了自己所做部分代码:
public void btnEqual_actionPerformed(ActionEvent e) {
if(!flag3)//未曾按下等于运算符
behind = txtResult.getText();//返回此文本组件表示的文本。
else
front = re; //re用于存储运算结果的字符串格式
try { //front - 要解析的字符串。
double a1 = Double.parseDouble(front);//Double 类在对象中包装一个基本类型 double的值。每个 Double 类型的对象都包含一个 double 类型的字段。
double b1 = Double.parseDouble(behind);//parseDouble:返回一个新的 double 值,该值被初始化为用指定 String 表示的值
if (op == "+") { //返回:由字符串参数表示的 double 值。 result = a1 + b1; //result用于存储运算结果
} else if (op == "-") 用于记录运算符
{ result = a1 - b1; }
else if (op == "*")
{ result = a1 * b1; }
else { result = a1 / b1;
if(b1==0)
{throw new ArithmeticException("除数不能为零!");}
}re = Double.toString(result);//toString:返回此 Double对象的字符串表示形式。 txtResult.setText(re);//将此文本组件显示的文本设置为指定文本。
//re - 新文本;如果此参数为 null,则将文本设置为空字符串 ""
}catch (ArithmeticException ce)
{ txtResult.setText(ce.getMessage());
} if (!flag3)
flag3 = true;//确认已经按下等号
} public void btnPoint_actionPerformed(ActionEvent e) {
int num=txtResult.getText().indexOf(".");//返回索引在这个字符串的第一个发生指定子串。
if(num<0 && !flag)//flag用于记录是否按下了运算符
txtResult.setText(txtResult.getText()+e.getActionCommand());
//getActionCommand:返回此按钮激发的动作事件的命令名称。如果命令名称为 null(默认),则此方法返回按钮的标签。
if(flag)
flag1=true;//flag1用于判断是否输入了点运算符
}
具体的实现方法如以下流程图:
程序中点号的实现代码:
public void btnPoint_actionPerformed(ActionEvent e)
{
int num=txtResult.getText().indexOf(".");//返回索引在这个字符串的第一个发生指定子串。
if(num<0 && !flag)//flag用于记录是否按下了运算符
txtResult.setText(txtResult.getText()+e.getActionCommand());//getActionCommand:返回此按钮激发的动作事件的命令名称。如果命令名称为 null(默认),则此方法返回按钮的标签。
if(flag)
flag1=true;//flag1用于判断是否输入了点运算符
}
第六章 总结
在答辩中老师的提问:
问:在点击按钮之后,怎样让程序知道这个事件?代码中是如何实现的? 答:在点击按钮之后,主要是利用事件监听,对按钮设置,监听按钮的动作,然后在用具体的方法体去实现此按钮的具体功能。课程设计中总共用到了七个事件监听类,九个方法体。
在本次的课程设计中,主要用到以下的方法和事件监听类:
class Calculate_btnCancel_actionAdapter implements ActionListener //实现“←”号功能的监听
class Calculate_btnMinus_actionAdapter implements ActionListener //实现“+/-”号功能的监听
class Calculate_btnBegin_actionAdapter implements ActionListener //实现“C”号功能的监听
class Calculate_btnPoint_actionAdapter implements ActionListener //实现点号功能的监听
class Calculate_btnEqual_actionAdapter implements ActionListener //实现等号功能的监听
class Calculate_btnIncrease_actionAdapter implements ActionListener //实现加、减、乘、除功能的监听
class Calculate_btnZero_actionAdapter implements ActionListener //实现数字0-9功能的监听
具体功能的实现方法体如下:
无参构造函数:public Calculate()
主方法:public static void main(String[] args)
其他实现功能的方法:
private void jbInit() throws Exception
public void btnZero_actionPerformed(ActionEvent e)
public void btnIncrease_actionPerformed(ActionEvent e)
public void btnEqual_actionPerformed(ActionEvent e)
public void btnPoint_actionPerformed(ActionEvent e)
public void btnBegin_actionPerformed(ActionEvent e)
public void btnMinus_actionPerformed(ActionEvent e)
public void btnCancel_actionPerformed(ActionEvent e)
课程设计总结:
通过两周的实训明白了,书本中都是一些非常基础的知识,如果想要把一个实训项目做好就必须自学其他的知识点,参考一些书籍或是在网上查阅一些资料,就算是这样我们仍然不能很完美的实现所有的功能,我们也是会学到很多的,然后这就要我们在以后的学习中完善自己,多积累编程经验。
还有实训让我明白了团队的重要性,如果你遇到了一个问题,一个人思考永远都比不上几个人思考的快,就算是问题很难,但是在一个团队中几个人一起讨论,问题就会很快解决。团队也让我们活跃了很多,没有像人们想的那样,编程有多枯燥无味,不会让我们对编程产生反感。团队之间相互交流还可以促进进步,有可能你不知道的知识点其他人知道,这样不用看课本就可以把知识记得很牢。
在我们拿到一个题目的时候不要以为这个题目会很难,任何问题都是有解决办法的,我们要把问题细化,分成不同的模块逐步求解,这样就算是再难的问题我们都有办法解决。
参考文献
Java程序设计项目教程 中国人民大学出版社
Java程序设计案例教程 西北工业大学出版社
Java语言程序设计 中国铁道出版社
网上搜索的相关资料
致 谢
能够完成本次的课程设计,要感谢老师在课程设计中的指导。我们在平时的课堂上学到的知识点都是一些基础,没有做过什么实际的项目,知识点都不能形成系统。通过本次的课程设计让我们加强了个知识点之间的联系,更能在实际中加以利用。
俗话说:师傅领进门,修行在个人。重点在于自己,遇到任何问题都要学会思考,学会自学,只要具备这样的能力,不管问题再难都不是问题了,自己都可以很轻松的解决。