admin 管理员组

文章数量: 887031


2024年1月13日发(作者:matlab下载之后打不开)

《网络编程技术》结课论文

《网络编程技术》结课论文

2012 — 2013学年第二学期

题 目: 简单计算器程序

专业班级: 网信10-2

学 号: ************

姓 名: -----------

指导老师: ---------

日 期: 2013-06-25

《网络编程技术》结课论文

目 录

1引言 ................................................... 3

2基础理论 ............................................... 3

2.1 AWT 组件 ......................................... 3

2.2 Swing 组件 ....................................... 3

2.3 java事件处理机制 ................................. 4

3 功能设计 ............................................... 5

3.1计算器系统概述 ..................................... 5

3.2功能模块设计....................................... 6

3.3详细设计 .......................................... 6

4 系统实现 ............................................... 7

4.1需求分析 .......................................... 7

4.2设计思路 .......................................... 8

4.3主要代码展示及说明 ................................. 8

4.4调试与分析 ....................................... 12

5 总结 .................................................. 12

参考文献 ................................................ 13

1引言

近年来随着计算机和网络在社会领域的发展,java的应用正在不断地走向深入, Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口为企业计算及电子商务应用系统提供了有关技术和丰富的类库。

本次设计是通过java编程技术来设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算,该计算器可以实现加法、减法、乘法、除法的简单运算,也可以实现一些简单的扩展运算,这次课程设计的主要目的在于检测对java应用的熟练程度,发现问题并及时改正和提高,同时扩展对java知识的进一步了解和认识,强化自己的编程能力,为将来在新的旅途中能更好的发挥自身的才能!

2基础理论

2.1 AWT 组件

布局管理器管理组件如何放置在容器中,AWT 中最常用的四种布局类:FlowLayout、BorderLayout、GridLayout、CardLayout。本项目主要采用了GridLayout 布局。

2.2 Swing 组件

Swing组件的多样化:

Swing是AWT的扩展,它提供了许多新的图形界面组件。Swing组件以"J"开头,除了有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格3

(JTable)、树(JTree)。

MVC(Model-View-Control)体系结构

Swing胜过AWT的主要优势在于MVC体系结构的普遍使用。在一个MVC用户界面中,存三个通讯对象:模型、视图和控件。模型是指定的逻辑表示法,视图是模型的可视化表示法,而控件则指定了如何处理用户输入。当模型发生改变时,它会通知所有依赖它的视图,视图使用控件指定其相应机制。

为了简化组件的设计工作,在Swing组件中视图和控件两部分合为一体。每个组件有一个相关的分离模型和它使用的界面(包括视图和控件)。比如,按钮JButton有一个存储其状态的分离模型ButtonModel对象。组件的模型是自动设置的,例如一般都使用JButton 而不是使用ButtonModel 对象。另外,通过Model类的子类或通过实现适当的接口,可以为组件建立自己的模型。把数据模型与组件联系起来用setModel( )方法。

MVC是现有的编程语言中制作图形用户界面的一种通用的思想,其思路是把数据的内容本身和显示方式分离开,这样就使得数据的显示更加灵活多样。比如,某年级各个班级的学生人数是数据,则显示方式是多种多样的,可以采用柱状图显示,也可以采用饼图显示,也可以采用直接的数据输出。因此在设计的时候,就考虑把数据和显示方式分开,对于实现多种多样的显示是非常有帮助的。

2.3 java事件处理机制

Java 最新的事件处理方法是基于授权事件模型,事件源生成事件并将其发送至一个或多个监听器,监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。

事件:

在授权事件模型中,事件是一个描述事件源状态改变的对象 。

通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。 如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。

事件源:

事件源是一个生成事件的对象

一个事件源可能会生成不同类型的事件,事件源提供了一组方法,用于为事件注4

册一个或多个监听器。每种事件的类型都有其自己的注册方法。一般形式为:

public void addListener (TypeListener e)

AWT采取的事件控制过程:

监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”,事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。 事件源将在发生事件时向所有注册的监听器发送事件对象。 监听器对象使用事件对象中的信息来确定它们对事件的响应

事件模型:

1.基于代理(授权)事件模型

事件处理是一个事件源授权到一个或者多个事件监听器。其基本原理是:组件激发事件,事件监听器监听和处理事件,可以调用组件的addListener方法向组件注册监听器。把其加入到组件以后,如果组件激发了相应类型的事件,那么定义在监听器中的事件处理方法会被调用。

2.此模型主要由以三种对象为中心组成

事件源

由它来激发产生事件,是产生或抛出事件的对象。

事件监听器

由它来处理事件,实现某个特定EventListener 接口,此接口定义了一种或多种方法,事件源调用它们以响应该接口所处理的每一种特定事件类型 。

事件

具体的事件类型,事件类型封装在以bject为根的类层次中。当事件发生时,事件记录发生的一切事件,并从事件源传播到监听器对象

3 功能设计

3.1计算器系统概述

标准计算器的界面采用“图形界面程序设计(GUI)”。GUI 为用户和应用程序之间的交互提供了直观、方便的交流方式。用户使用鼠标、键盘操作图形界5

面上的按钮、菜单等元素向计算机系统发送命令,系统运行的结果以图形的方式显示给用户。

编写java 计算器主要使用了Swing 组件和AWT 布局类。Swing 组件主要包括按钮、标签、文本输入类、等组件,AWT 主要运用了其中的布局管理器。

3.2功能模块设计

以下是标准计算器的各项功能:

(1)加法:

两个及两个以上数据进行加法操作,可以为小数形式。

(2)减法:

两个及两个以上数据进行减法操作,可以为负数形式。

(3)乘法:

两个及两个以上数据进行乘法操作。

(4)除法:

两个及两个以上数据进行除法操作。

3.3详细设计

程序流程图

6

界面设计

界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用awt中的BorderLayout和GridLayout布局管理方式,窗体名称jisuan继承JFrameActionListener接口,并实现public void

actionPerformed(ActionEvent e){}方法。定义菜单、菜单条、菜单项、按钮、文本框、容器,设置为private类型。定义变量double memoryd;//使用内存中存储的数字;DecimalFormat df;//保留小数位数。使用private JButton

getJButton()方法添加按钮并给按钮命名。

4 系统实现

4.1需求分析

1.设计的计算器可以完成加法、减法、乘法、除法的简单运算。

2.实现一些简单的扩展运算,如:正负号、倒数、退格、清零等功能。

3.添加小数点功能,用以实现浮点型数据的计算。

4.使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输入,并完成相关的计算。

7

4.2设计思路

1.根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本框,17个按钮,总体界面用BorderLayout布局,文本框放置在最上边,然后0到9以及+,-,*,/等按钮放置到一个面板Panel中,完成界面设计。

2.设计计算流程,首先点击数字按钮时,将按钮数值添加到文本框当中,并将该数值保存到一个字符串中,再次点击数字按钮时,将之前保存的字符串与新的数值拼接起来,再添加到文本框当中,直到点击运算符按钮时,将文本框当中的字符串保存在一个字符串变量中,然后重置文本框内容,将运算符号显示到文本框中,随后输入第二个计算数据时,用同样的办法保存数据,最后通过控制“=”运算符先将字符串数据转化成双精度类型,然后计算出结果并显示到文本框当中。

3.基本运算设计完成以后则开始考虑其他个别功能的实现,例如清零,清零直接重置文本框内容。

4.3主要代码展示及说明

总体代码的设计:

程序采用继承windowadapter类,新建Jframe窗体,利用数组来定义JBotton按钮,同时利用数组注册监听,采用4行5列网格布局,完成计算器界面的基本设置,在窗体的正常关闭方面,采用匿名类实现窗体的正常关闭。最后对按钮进行计算分析,分别设定输入数据的A类、运算符控制的Opertion类,退格功能的BackSpace类、计算结果的Result类等等,一步步实现计算器的基本功能。

1.类A的设计(数据的输入)

class A implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

String a = t();

String s = ionCommand();

if(("0.")||("+")||("-")||("*")||("/"))

8

}

}

功能解释:

t(s);

else

{

if(flag2)

{

t(s);

flag2=false;

}

else

t(a+s);

}

程序开始时,程序初始化文本框的内容为“0.”,点击数字按钮,则调用类A,首先用a来获取当前文本框内容,s来获取按钮数值,然后进行判断,若a的值为上述代码的值则输出s的值,再次点击数字按钮时,再次调用A类,此时a的值为上次输入的s值,第一个if语句不满足,执行下个if语句if(flag2),flag2初始值为false,该语句的功能是在执行了“=”号按钮时,防止新的数字按钮的值合并到到已经得出的结果上,例如:12+12=24,此时再点击数字按钮3时,则文本框内容被重置,输出数值3,而不是243,如果if(flag2)不满足,则将字符串a和s合并并输出,得出第一个要计算的数据。

2.类Opertion的设计:(运算符的控制)

class Opertion implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

cal=ionCommand();

if(flag1==true)

x=t();

t(cal);

flag1=false;

}

}

功能解释:

当点击运算符控制按钮时,首先将运算符的数值赋值给cal(初值为空),9

紧接着进行判断,flag1初值为ture,该类的作用为在点击运算符按钮时,将计算的第一个数据保存在x字符串变量当中,然后将文本框内容重置为点击的运算符的数值,类的结尾将flag1赋值为false,防止再次点击运算符按钮时改变了x的值。

(附:此时文本框内容为运算符的值,输入第二个计算数据时,点击数字按钮,则再次调用A类,此时满足A类中第一个if语句,文本框内容被重置为数字按钮的值,接下来与获取第一个计算数据步骤一样,直到点击“=”号运算符为止!)

3.类Result的设计:(计算并输出结果)

class Result implements ActionListener //计算并显示结果

{

public void actionPerformed(ActionEvent e)

{

double num1;

num1=ouble(x);

y=t();

double num2;

num2=ouble(y);

double result=0;

if(num2!=0)

{

if(("+"))

result=num1+num2;

if(("-"))

result=num1-num2;

if(("*"))

result=num1*num2;

String s1=ng(result);

t(s1);

}

if(("/"))

{

if(num2==0)

t("除数不能为0");

else

{

result=num1/num2;

String s1=ng(result);

t(s1);

}

10

}

flag1=true;

flag2=true;

}

}

功能解释:

首先定义两个Double型num1,num2,将之前保存的第一个计算数据x强制转换为Double型后赋值给num1,接着用字符串变量y来获取当前文本框的内容,即第二个计算数据的值,同样再将其强制转换Double型后赋值给num2,然后进行运算符判断,对cal的值进行比较,然后进行相应的计算,将计算的结果转换成字符串后将其输出到文本框中,在类的最后将flag1、flag2赋值为true,作用是将计算的结果当作第二次计算的数据进行再运算,即将结果重新赋值给x作为第一个计算数据!

(附:在此类中还考虑了当除数为零的情况。)

4.类BackSpace的设计:(功能类—退格)

class BackSpace implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

String s = ionCommand();

String s1 = t();

if(("退格"))

s1=new String (ing(0,()-1));

t(s1);

}

}

功能解释:

这是计算器附加功能的实现,这里只介绍退格功能,像正负号、求倒数、清零等功能相似,所以就不再一一介绍。首先获取退格按钮的命令值赋给s,然后获取当前文本框的内容,即输入的数据,将其赋给s1,接着进行判断,利用substring函数将s1字符串截取为从第一个字符至倒数第二个字符为止的字符串并重新赋值给s1,再将其输出到文本框,实现退格的功能。

11

4.4调试与分析

程序运行窗口

问题分析:

设计实现退格功能的时候出现了错误,并没有实现退格的功能,调试之后没有解决问题,最后删除了退格功能。

在实现小数的加法时候出现问题,经过调试后解决了问题。

5 总结

在做本项目是时候,会遇到很多小问题,比如说:如何保存输入的数字和下一个数进行加、减、乘、除运算。经过不断地尝试与调整,在此次的课程设计实践中,我学到了教科书上没有的东西。这次课程设计,我按照课程设计的要求,分块实现程序的功能。在实践中我遇到许多的问题,通过网上的BBS的交流,和同学的帮助,最后都克服,最终我成功的完成了这次课程设计。从中我充分理解了Java面对对象的特性,并体会到Java与C语言的不同之处 在实践的同时,我又从中成长了许多,特别是在对程序的编译和调试中掌握了许多的技巧和方法。

(1)通过编写这个相对复杂的程序,让我认识解决实际问题前应现建立模型,12

再通过建立的模型使问题简单化,从而解决问题。

(2)这次编写的程序大部分是通过调用各包中的方法来实现的,这也让我充分理解了包和类调用的关系。

(3)由于这次编写的程序相对比较复杂,所以不能一次性编写、调试,也由此让我学会把程序分块,逐个编写、调试。

参考文献

[1] 耿祥义等.《java大学实用教程》(第二版).电子工业出版社

[2] 朱福喜.《Java语言程序设计》(第二版).科学出版社

[3] 陈国君等.《Java程序设计基础》(第二版).清华大学出版社

[4] Deitel.《Java大学基础教程》(第六版).电子工业出版社

[5] MaryCampione.《Java语言导学》(第四版.机械工业出版社

[6] Liang.《Java语言程序设计基础篇》(第六版).机械工业出版社

13


本文标签: 事件 按钮 数据 组件 实现