Java程序设计及应用-增量式项目驱动一体化教程(实验篇)_第1页
Java程序设计及应用-增量式项目驱动一体化教程(实验篇)_第2页
Java程序设计及应用-增量式项目驱动一体化教程(实验篇)_第3页
Java程序设计及应用-增量式项目驱动一体化教程(实验篇)_第4页
Java程序设计及应用-增量式项目驱动一体化教程(实验篇)_第5页
已阅读5页,还剩234页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

Java程序设计–

实验教学方案一、

实验目的掌握常用的Java程序设计软件,e.g.MyEclipse;掌握JavaGUI界面程序设计的一般流程;掌握Java的基本语法;熟悉面向对象程序设计的基本概念;了解采用Java进行小项目开发的一般过程;通过上述实验训练,使学生具备基本的Java编程能力,为下一步(程序设计实训)进行中大型Java项目的开发奠定编程基础。二、实验课思路(1/3)指导思想:实验教学方法要求多媒体化;实验内容侧重基本概念;实验内容的表现形式要尽量提高吸引力;实验过程为迭代、增量的过程;二、实验课思路(2/3)实验平台:以2至3个小型Java项目为实验平台、可视化GUI界面为切入点,通过提供部分模版代码,使学生在模仿的过程中掌握Java编程的方法、习得基本的编程能力,同时建立对程序设计过程的感性认识。实验可内容的设计思路:以GUI界面带动学生的学习兴趣,通过增量的软件开发过程降低编程的难度;在不同的实验环节,把Java的基本语法和面向对象编程的基本概念融入实验内容,使得学生在建立对知识点的感性认识的基础上再次复习Java的知识点,从而大幅提高实验课效果。二、实验课思路(3/3)项目选取原则:规模小;复杂度低;GUI界面朴素;能够覆盖大部分Java基本知识点;可选项目计算器(标准型和科学型)(项目1)点对点聊天工具(项目2)LED显示屏(课下练习)小游戏等(待开发)三、实验课内容及进度安排MyEclipse/Eclipse项目导入导出方法导出:Step1点中项目名称后,单击”File”导出:Step2单击File后,找到Export选项导出:Step3单击“Export”,在弹出窗中依次选择:General->ArcheiveFile->Next导出:Step4单击”Next”后,依次操作;单击“Finish”后,到桌面上找到该压缩文件。导入:Step1前提是该项目在MyEclipse中还不存在单击File,找到Import导入:Step2单击”Import”后,依次操作:General->ExistingProjects…->Next导入:Step3单击”Next”后,最后点击“Finish”后就可以看到该项目导入:Step4实验01Java开发环境的搭建16掌握Java开发环境的搭建;掌握编程的基本步骤;熟练Eclipse、MyEclipse的安装、配置及基本使用;读懂Java程序的编译错误和运行错误信息,学习依据这些错误信息调试源代码。实训目的17实训内容一、JDK的下载、安装、设置及测试二、Eclipse和MyEclipse安装三、Tomcat应用服务器的安装、设置及测试18Java开发环境分为学习型(JDK+文本编辑器)和开发型环境(Eclipse、MyEclipse等)。

本实训中的案例采用开发型环境Eclipse或者MyEclipse。一、JDK的下载、安装、设置19为了建立基于JDK的Java运行环境,需要先下载Sun的免费JDK软件包。JDK包含一整套开发工具,其中对编程最有用的是Java编译器、Applet查看器和Java解释器。JDK是免费的,可以到/technetwork/java/javase/downloads/index.html下载最新版本,本实训使用jdk6.0。下载后直接安装即可,建议安装在默认路径,因为选择其他路径对以后调试程序带来麻烦。1.下载并安装JDK20安装成功后,查看安装目录C:\ProgramFiles\Java\jdk1.6.0_21

的bin文件夹,其中包含编译器(javac.exe)、解释器(java.exe)、Applet查看器(appletviewer.exe)等可执行文件。2.JDK中的主要文件夹和文件

21JDK中的工具都是命令行工具,需要从命令行即MS-DOS提示符下运行。安装完成后需要设置三个环境变量。

不同的操作系统上,设定环境变量的方法不同,下面以Windows操作系统为例进行介绍。3、设置环境变量22在桌面“我的电脑”图标上单击右键,选择“属性”命令,弹出“系统属性”对话框,如图1所示:Win7系统需要在“控制面板”中进入“系统属性”,之后的操作相同。23切换到“高级”选项卡,单击“环境变量”按钮弹出“环境变量”对话框,如图2所示:24切换到“高级”选项卡,单击“环境变量”按钮弹出“环境变量”对话框,如图3所示:25需要依次设置JAVA_HOME、PATH和CLASSPATH三个变量:单击“new”/“新建”按钮,如果该环境变量已经存在,请在选中该环境变量后单击“Edit”/“编辑”按钮。在弹出“新建系统变量”(或编辑)对话框中,进行相应的创建或者编辑操作。JAVA_HOME:在变量名中输入JAVA_HOME,在变量值输入框中输入JDK的安装目录。CLASSPATH:它是一个路径列表,是用于搜索Java编译或者运行时需要用到的类。在设置JDK的CLASSPATH时会包含一个jre\lib\rt.jar,java查找类时会把这个.jar文件当做一个目录来进行查找。Path:当执行一个可执行文件时,如果该文件不能在当前路径下找到,则会到Path中依次寻找每一个路径;如果在Path中冶没有找到,就会报错。以上三个环境变量的设置如下图所示:26JAVA_HOME环境变量一般需要新建,请在相应栏目中填入正确内容:变量名:JAVA_HOME变量值:

C:\ProgramFiles\Java\jdk1.6.0_21;注:变量值需要找到并填写正确的JDK的安装目录JAVA_HOME环境变量一般需新建,请在相应栏目中填入正确内容:变量名:CLASSPATH变量值:

%JAVA_HOME%\jre\lib\rt.jar;JAVA_HOME环境变量一般需要编辑,请在相应栏目中填入正确内容:变量名:Path变量值:

(在最后添加);%JAVA_HOME%\bin;注:变量值已经存在,不需填写,只需修改变量值,并且添加的是英文字母和英文字符“;”27设置完成后,打开DOS窗口,在命令提示符下输入javac或java,回车后,如果出现其用法参数提示信息,则安装成功。28基本DOS命令进入DOS控制台窗口:“开始”->“运行”命令,在“运行”对话框中输入cmd,单击“确定”按钮;Dir:显示目录中的文件以及子目录,举例:dirc:desktop;Cls:清屏;Del:删除一个或多个文件,举例:delc:desktop\test.docx;Md:创建目录,举例:mdc:desktop\test;Copy:文件复制;Exit:退出DOS窗口;Help:帮助。29首先建立实验目录JavaTest。启动EJE,单击Build-->Choose

WorkDirectory命令,选定刚才建立的目录JavaTest。在EJE中输入如下代码:4、编写、编译Java源程序publicclassHelloWorld{ publicstaticvoidmain(String[]args){ system.out.println("HelloWorld!"); }}30把上页程序copy到记事本中,保存文件为HelloWorld.java。编译:从命令行换到JavaTest(文件存放目录)目录下,执行命令javac-dHelloWorld.java,如果屏幕没有错误提示,则编译成功,在目录下会生成中间字节码文件HelloWorld.class。运行:执行命令java-dHelloWorld,则会输出结果。31测试知识点:源代码文件名的后缀必须是.java;若类采用了public修饰,则源代码文件名必须与该类名相同(包括大小写);若类没用public,则源代码文件名可任取;在一个源代码文件中可声明多个类,其中若public类存在,则只能有一个;源代码被编译后,一个类生成一个对应的同名的.class文件,无论这些类是否在同一个源代码文件中;JVM启动执行的类中必须含有main()方法,无论该类是否被public修饰.32测试步骤(用记事本)(1)输入代码存盘为TT.txt,编译源代码并查看结果,说明原因。(2)输入代码保存为TT.java,编译源代码并查看结果,说明原因。(3)修改源(2)中的源文件名或者类名,使二者的大小写不一致,编译并查看结果,说明原因。classT{}publicclassT{}33(4)输入代码任意命名后保存,编译并查看结果,说明原因。(5)输入如下程序:保存为A.java,编译并查看结果,说明原因。classA{}classB{}classC{}classA{}34常犯的错误:环境变量path没有设置正确;源代码文件名没有后缀.java或者后缀名不正确;源代码中英文字母大小写混乱;源代码中中英文标点符号混乱;被编译的源代码文件找不到;被运行的程序没有main方法;被运行的类找不到。35为了能够实现可视化的程序开发,越来越多的人喜欢在Java集成开发环境(IDE)中进行程序的开发,抛开了使用文本编辑器编写程序代码,用DOS命令进行编译、运行的原始开发方式。原始开发方式很令开发者感到不便,在编写程序时,不知道是否有错误,只有编译后才会发现。Eclipse是一款功能强大且免费使用的JavaIDE之一。它即时编译的特性解决了原始开发方式中的不足,还提供了好多快捷键,为开发者提供了很大的方便。MyEclipse在Eclipse的基础之上提供了一个商业化的功能。二、搭建Eclipse或者MyEclipse开发环境36在安装Eclipse的前提是需下载Eclipse,可以到Eclipse的官方网站去下载,也可以到网络上自由下载。Eclipse是一款绿色软件,即不需要安装程序,只要将Eclipse压缩文件解压即可使用。1、下载并配置Eclipse37Eclipse汉化可下载eclipse多国语言包插件,进行汉化。3.2之前的版本插件的安装有两种:建立link文件的方式将插件文件直接复制到eclipse的plugins、features子目录中3.2之后的版本插件的安装:通过help菜单38Eclipse中文本编辑器编码设置为了能够在eclipse中采用统一的字符集进行文件的存放,以确保程序中中文信息能够正常地显示,需要在eclipse安装完多国语言包后,设置它的文本文件编码Eclipse默认在汉化后采用的字符编码是GBK,如果在使用时出现中文乱码可改变设置为UFT-8。设置方法为:在eclipse主菜单中选择“窗口”菜单中的“首选项…”,在弹出的“首选项”对话框左侧目录树种选择“常规”,再选择“工作空间”,在下面可以看到“文本文件编码”区。39MyEclipse是对Eclipse功能的扩展,MyEclipse以插件的形式运行在Eclipse平台上。利用MyEclipse实现对Spring、Struts、Hibernate、iBatis、WebWork等各种框架的使用。同时,它还具有将Web应用程序自动部署到Tomcat、JBoss、WebLogic等各类应用服务器上、浏览MySQL、Oracle、DB2等各种关系数据库的强大功能。MyEclipse的下载可以到网络上自行下载。MyEclipse是一个商业插件,也就是说需要收费的。要求使用者购买一个License来使用正版MyEclipse,但是购买前可以免费试用30天。如果不想使用商业软件,可以选择Eclipse官方提供的Web开发工具EclipseWTP,它同Eclipse一样是免费。不过功能要相对逊色一些。2、下载并安装MyEclipse40下面以MyEclise8.5为例来说明,Eclipse的操作基本相同。(1)启动MyEclipse。成功安装完毕后,就可进行;(2)选择工作区。启动过程中会让读者选择工作区,可以将工作区选择为D:\workspace。单击“OK”按钮,进入Eclipse工作台。(3)等待并关闭欢迎界面。如果是第一次启动Eclipse,会出现一个欢迎界面,可以在方框内打勾然后直接关掉它,就进入了MyEclipse工作界面。(4)创建Java项目。按下图1操作,之后进入图23、使用Eclipse或MyEclipse创建项目41(4)创建Java项目:图2,之后进入图3,然后选中HelloWorld项目,按图4操作,图2图342(4)创建Java类:图4;进而按图5指定文件名。图4图543(4)编辑,在main函数中添加下面代码图6System.out.println("HelloWorld!");System.out.println("姓名:"

+"张三"

+",学号:"

+"12345");(5)运行并查看结果图7,44作业要求:作业1:18、19页的结果和解释;作业2:创建一个Java项目,添加一个类,添加代码(请修改姓名和学号),运行并保存结果。按作业/实验格式要求提交报告到“实验1”子目录中.拓展题目,有能力的同学可以完成,并写进同一份报告:请在主函数(或使用子函数)输出一段Fabonacci数列。4546下面为后续内容,暂时不用对于JavaWeb开发来说,一个完整的JavaWeb开发环境,是由程序代码开发环境和程序代码运行环境两部分组成的。Tomcat是由Apache推出的一项免费的开源服务器,它的主要作用是提供了一个可以让Jsp和Servlet运行的平台。三、Tomcat服务器47(1)打开Tomcat官方网站/,在Download下,单击“Tomcat6.x”。(2)在跳转后的页面,单击Core下面的“zip”连接,就出现下载提示对话框,单击“保存”按扭即可下载到本地磁盘。(3)将下载后的apache-tomcat-6.0.20.zip,双击进行解压,解压后的文件就可以直接使用,不需要进行安装。1、Tomcat下载与安装48Tomcat的环境变量设置和JDK的环境变量的设置相同,作用也是相同的。只是设置的变量名字不同。具体的操作步骤如下:(1)在桌面上选中“我的电脑”,单击鼠标右键,在弹出来的菜单中,单击“属性”,(2)在弹出的系统属性的对话框中,单击“高级”选项卡,然后单击“环境变量”按扭(3)在弹出来的环境变量的对话框中,单击“新建”按扭(4)单击“新建”按扭,弹出新建用户变量对话框,在这里需要设置的3个变量,它们分别是:CATALINA_HOME、CLASSPATH、Path。2、环境变量的设置4950(1)成功安装完毕后,启动MyEclipse。启动的时候会让读者选择工作区(2)可以将工作区选择为D:\workspace。单击“OK”按钮,进入Eclipse工作台。如果是第一次启动Eclipse,会出现一个欢迎界面welcome,可以直接关掉它,进入了Eclipse工作界面。(3)单击菜单栏上的“Windows”,在弹出的菜单列表中,单击“Preference”菜单项(4)在弹出的Preference对话框中,单击“MyEclipse/Servers/Tomcat6.0”,单击“Browse”按扭,选择Tomcat的安装目录(5)单击“Apply”按扭后,就可以直接在MyEclipse中启动Tomcat,start:表示启动;stop:表示停止(6)在MyEclipse中,创建一个send.jsp,或者修改index.jsp(7)在MyEclipse中直接启动Tomcat,通过浏览器查看JSP文件的输出结果3、使用创建Web项目5152在Tomcat服务器上运行JavaWeb应用程序的主要步骤如下:(1)创建Tomcat工作区:首先进入到Tomcat的安装目录下,这时就会看到一个webapps文件夹,进入该文件夹后,新建一个文件夹,例如命名为My_Servlet。My_Servlet这个文件夹便是在Tomcat下创建的工作区。(2)创建目录WEB-INF。在My_Servlet文件夹下,建一文件夹WEB-INF。(3)在文件夹WEB-INF中创建一个文件web.xml。(4)编写JSP程序,将其保存至My_Servlet文件夹中。(5)进入Tomcat目录下bin文件夹中,双击startup.bat,启动Tomcat。(6)访问http://localhost:8080/My_Servlet/test.jsp,查看在Tomcat上的运行结果。4、发布Web应用程序5354实验三

标准型计算器

-简单图形用户界面(GUI)设计陈海山一、实验目的了解GUI(GraphicalUserInterface)的组成;掌握无布局管理器时GUI界面的设计流程掌握JTextField和Jbutton的简单使用方法二、JavaGUI介绍介绍JavaGUI(主窗口和控件)的组成和概念;介绍GUI程序设计的一般过程。2.1、JavaGUI界面的组成和概念主窗口Title默认关闭功能按钮主窗口内容Pane原点(左上角坐标)内容Pane文本框outputFieldButton的原点(左上角坐标)按钮名,ActionCommand名按钮:JButton默认显示值主窗口图标坐标:y轴坐标:x轴2.1、JavaGUI界面的组成和概念高y宽(x)OriginOffsetXComponentSpaceXComponentHeightComponentSpaceY2.1、JavaGUI界面的组成和概念高y宽(x)OriginOffsetXComponentSpaceXComponentHeightComponentSpaceY2.2、介绍GUI程序设计的一般过程设计/画出主窗口中的界面元素(控件)e.g.文本框和按钮;确定控件之间的排列关系,e.g.几行几列,每行每列的控件是什么;确定控件之间的距离,e.g.距离主窗口原点的偏移,每行每列控件间距;

确定控件的大小和位置,e.g.原点坐标、宽和高;按照程序模版添加程序代码X轴,列Y轴,行012012三、实验内容(1/1)题目1【必做】:扩充程序输出下面界面,四、实验报告1、源代码导出压缩包后与实验报告一起再压缩成单个文件,按”学号-姓名”格式命名,传到作业目录。2、报告要求:运行结果和界面设计体会,按”学号-姓名”格式命名word文档。实验04标准型计算器-

程序优化I陈海山一、实验目的通过优化前后的程序对比,通过数组和循环的应用替代大量的重复代码,让学生深刻体会到数组和循环语句的优点和应用情景。通过程序优化,提高学生程序设计的能力。掌握对象数组的使用方法。掌握循环语句。二、实验内容及重点学习对象数组的使用方法;学习循环语句;使用数组和循环语句优化实验3的程序。2.1数组的应用应用数组的原因:源程序中每一个Button及坐标信息Rectangle都是单独声明的;Button及Rectangle的声明代码中,除了行列不同以外代码都相同,代码过于重复;一个简单的界面2.1数组的应用对象数组的定义和创建,以数字按钮为例定义:例子代码29-30行JButtonbuttonNumbers[]=newJButton[MAX_NUM_BUTTON_NUM];privatecharbuttonNumberNames[]={'1','2','3','4','5','6','7','8','9','0'};2.1数组的应用数组元素的创建和引用,以数字按钮为例创建:例子代码173-178行//第五步:初始化按钮for(inti=0;i<MAX_NUM_BUTTON_NUM;i++)

{

//创建按钮对象并给按钮命名buttonNumbers[i]=newJButton(""+buttonNumberNames[i]);

//创建bound对象boundButtonNumbers[i]=newRectangle(posXButtonNumbers[i],posYButtonNumbers[i],ButtonWidth,ComponentHeight);引用:例子代码179-180行//设置按钮边界buttonNumbers[i].setBounds(boundButtonNumbers[i]);2.2循环的应用循环语句的应用场景:需要多次处理具有相同的程序逻辑但不同数据的情况。循环语句的语法:参考书3.4节2.2循环的应用循环语句的应用,参考例子代码172-181行

//第五步:初始化按钮

for(inti=0;i<MAX_NUM_BUTTON_NUM;i++)

{

//创建按钮对象并给按钮命名buttonNumbers[i]=newJButton(""+buttonNumberNames[i]);

//创建bound对象boundButtonNumbers[i]=newRectangle(posXButtonNumbers[i],posYButtonNumbers[i],ButtonWidth,ComponentHeight);

//设置按钮边界buttonNumbers[i].setBounds(boundButtonNumbers[i]);

}三、实验要求学习数组和循环的例子代码;完成剩余程序的优化部分:未完成的数组应用未优化的代码作业提交:代码需要导出;优化体会及实验结果写进实验报告;代码包和实验报告放进一个文件夹;所有文件及文件夹命名方式为:学号–姓名参考知识数组:第6章循环:第3章第4节程序优化的概念:/view/575595.htm实验05

标准型计算器

-事件处理陈海山,苑俊英一、实验目的掌握GUI事件的一般处理流程;掌握JTextField和Jbutton事件的含义;掌握JTextField和Jbutton事件的处理方法;掌握List的概念和使用方法;掌握String和double/整形数据类型之间相互转换。二、实验内容事件处理器的注册;事件的捕获;实验String的常用API;实验String和double/整形数据类型之间相互转换;使用StringList存储GUI界面的事件信息;按钮功能实现。2.1事件处理器的注册参考代码:文件的149、165行主要函数:buttonOps[i].addActionListener(this);使用方法:调用控件的成员函数addActionListener,该函数的参数为当前对象。本例中,this指的是JavaTest_5_GUI_V1javatest=newJavaTest_5_GUI_V1();注册的作用:把javatest的actionPerformed成员函数指定为事件处理的函数。如果有鼠标点击中界面上的控件的话,javatest会调用actionPerformed函数来处理该事件。2.2事件及事件源的捕获参考代码:publicvoidactionPerformed(ActionEvente)函数事件的捕获是通过JAVAJFrame的内部机制实现;事件源的捕获方法有多种:判断事件源if(e.getSource()==buttonNumbers[i])

{}A事件源

为创建的控件对象判断时间对应的命令名If(e.getActionCommand().compareTo("1")){}ActionCommand为创建按钮是指定的名称JButtonbuttonOne=newJButton("1");【实验5-2-1】事件处理方法请把以下的实验结果和心得写进实验报告:【实验5-2-1】事件处理方法(1/4)准备:注释掉类JavaTest_5_GUI_V1的actionPerformed函数中的代码(在其起始花括号处加/*,在结束花括号处加*/);1.事件监听的必要性:没有注册事件监听的控件得不到处理验证方法:Step

1:去掉操作按钮对事件监听的注册,方法:注释掉文件JavaTest_5_GUI_V1.java的160行;Step2:把被点击控件的名字打印到Cosole中,方法:在类JavaTest_5_GUI_V1的actionPerformed函数中开始处填加如下代码:System.out.println("监测到来自控件"

+e.getActionCommand()+"的鼠标右击事件");Step3:运行程序,分别点击数字按钮和操作按钮,查看MyEclipseCosole中输出的不同。Step4:回复Step1中注释掉的代码,再次运行程序,并查看Cosole中输出的不同2.文本输出控件内容的更新方法:

文本框的定义:JTextFieldoutputField=newJTextField(150);以下所有代码均在JavaTest_5_GUI_V1的actionPerformed函数中进行(黑色部分表示改动前已有代码不需再输入,红色部分表示新加入的代码)

2.1如何取得文本输出框(outputField.getText)方法:添加如下代码【请添加程序、运行并分析Cosole和文本框的输出内容】System.out.println("监测到来自控件"

+e.getActionCommand()+"的鼠标右击事件");System.out.println(“当前文本框的内容:”

+outputField.getText());2.2设置当前文本框中的内容(outputField.setText):方法:添加如下代码【请添加程序、运行并分析Cosole和文本框的输出内容】StringoutputFieldStr=newString();outputFieldStr=e.getActionCommand();System.out.println("监测到来自控件"

+e.getActionCommand()+"的鼠标右击事件");outputField.setText(outputFieldStr);System.out.println(“当前文本框的内容:”

+outputField.getText());【实验5-2-1】事件处理方法(2/4)上述试验中,我们虽然能够看到点击不同控件时输出内容不同,但是并不能对不同的操作做出不同的处理。在处理之前首先应该判断出事件来自什么控件:3.事件来源的判断方法以下所有代码均在JavaTest_5_GUI_V1的actionPerformed函数中进行(黑色部分表示改动前已有代码不需再输入,红色部分表示新加入的代码)首先注释掉已经添加的代码3.1事件来源:e.getSource()3.2事件来源判断(条件语句),以数字按钮“1”为例:StringoutputFieldStr=newString();if(e.getSource()==buttonNumbers[0]){System.out.println("监测到来自控件0的鼠标右击事件");

outputFieldStr=e.getActionCommand();outputField.setText(outputFieldStr);System.out.println("当前文本框的内容:"

+outputField.getText());

}【实验5-2-1】事件处理方法(3/4)3.3使用条件语句(if{…}elseif{…}…else{…})完成对所有控件的来源判断,并参考3-2在Cosole和文本输出框中输出相应内容。【实验5-2-1】事件处理方法(4/4)2.3GUI按钮功能实现(1/3)要求:实现标准型计算器的基本共能:清空、加、减、等于、回退、乘、除等操作,不考虑“.”。解题思路1:输入到第2个算数运算操作符时开始计算考虑下面的输入流如何处理:“123+456-345*567/789”,当“-”输入时,即计算“123+456”,把计算结果与“345”计算,继而把计算结果与567计算,再与789计算。需要考虑的问题:不同情况下应该输出框显示什么内容,什么情况下才开始计算2.3GUI按钮功能实现(2/3)解题思路1的参考实现:为类JavaTest_5_GUI_V1添加以下相应的成员变量(下面用到的)当有控件事件捕获到时,代码请补充:如果输入的是数字或者小数点,把数字键的名字存入Stringstr:str+=str+e.getActionCommand();此时界面输出str当输入

“+”、“-”、“*”、“/”时,str的输入结束,:Step1:如果当前已经存储了0个操作数(op为空),把str转换为数字num1,此时界面文本框输出num1,;把此操作符存入Stringop:op=e.getActionCommand();,Step2:否则,如果当前已经存储了1个操作数(op不为空),把str转换为数字num2,按op操作处理num1与num2,并把结果赋给num1,此时界面输出num1,把此操作符存入Stringop:op=e.getActionCommand();Step3:把str清空;当输入是清除(C)时,使str和op均为空,界面输出“0.”;当输入是后退(<)时,如果str为空,不做任何操作,界面输出“0.”;否则,截取str的前N-1个字符赋给str,界面输出str;2.3GUI按钮功能实现流程(3/3)【实验5-2-2】数字的保存(1)【实验5-2-3】算术运算功能实现(2)【实验5-2-4】清空键(C)实现(3)【实验5-2-5】后退键功能实现(4)三、实验报告1、源代码导出压缩包后与实验报告一起再压缩成单个文件或放在同一个文件夹,按”学号-姓名”格式命名,传到作业目录。2、报告要求:运行结果和界面设计体会,按”学号-姓名”格式命名word文档。【参考1】String的常用API例子代码:参见函数stringDemo()【参考2】String和double/整形数据类型之间相互转换例子代码:参见函数stringDemo()以字符串str=“12345.678”为例:去掉尾部一个字符:str=str.subString(0,str.length()-1);判断两个字符串是否相等if(pareTo(“123”)==0)转换为double型:doubled=Double.parseDouble(str);double型转换为String:str=Double.toString(12345.678);【参考3】ArrayList例子代码:参见函数stringArrayListDemo()以右图为例(ArrayList对象为strList):取得字符串456:strList.getString(2);取得最后一个字符串:strList.getString(strList.size()-1);删除字符串456:strList.remove(2);向strList末尾加一个字符串:strList.add(“+”);把字符串“789”更新为“78”:strList.set(4,“78”);清空strList:strList.clear();123+456-7892.3GUI按钮功能实现(思路2)要求:实现标准型计算器的基本共能:清空、加、减、等于、回退、乘、除等操作,不考虑“.”。解题思路2:计算一般以“=”号输入为开始标志,故需要保存一个输入记录,所以可以采用字符串;输入数据中既有数字(实际上为字符串),也有操作符(可以用操作符字符串表示),为了简化输入字符串分析,最好把数字字符串和操作符字符串分开表示,所以可以采用字符串数组ArrayList来记录输入的数字串和操作串;接收到“清空”操作时,必须清空输入历史,并且显示初始值”0”;当输入其它操作符后,只需要显示之后输入的数字;“回退”需要考虑到ArrayList是否为空,必须考虑到如何处理ArrayList;加减法优先级相同,乘除法优先级较高,故应先处理所有的乘除法操作,再处理加减法操作。2.6GUI按钮功能实现题目1【必做】使用ArrayList记录输入历史,其中“回退”、“等于”操作符不需存储,”.”作为数字处理。存储结构如2-6-1例子所示。123+456.4-789图2-6-12.6GUI按钮功能实现题目2【必做】实现“清空”操作。分析:需要清空输入记录,需要把文本输出框设为默认值。2.6GUI按钮功能实现题目3【必做】实现“回退”操作,“回退”必须考虑到下面的情况:输入历史为空;图2-6-3-a图2-6-3-b,文本框应该输出“+”123+图2-6-3-a123+4图2-6-3-a2.6GUI按钮功能实现题目4【必做】实现“加”、“减”操作,可参考图2-6-4-a,2-6-4-b。1+6-5加减2图2-6-4-b图2-6-4-c2.6GUI按钮功能实现题目5【选做】在题目4的基础上,实现“乘”、“除”操作。分析:必须对输入历史先处理“乘”、“除”操作,再进行题目4的操作,如下图所示。图2-6-5-a1+6-51+4/2*3-5乘除加减2图2-6-5-b图2-6-5-c2.6GUI按钮功能实现题目6【选做】考虑各种输入的异常情况,并编写代码予以相应的处理,例如:输入数字过大;连续输入2个或多个操作符;除法操作的除数为0;双精度数以”.”开始等实验05

标准型计算器

-事件处理陈海山,苑俊英一、实验目的掌握GUI事件的一般处理流程;掌握JTextField和Jbutton事件的含义;掌握JTextField和Jbutton事件的处理方法;掌握List的概念和使用方法;掌握String和double/整形数据类型之间相互转换。二、实验内容事件处理器的注册;事件的捕获;实验String的常用API;实验String和double/整形数据类型之间相互转换;使用StringList存储GUI界面的事件信息;按钮功能实现。2.1事件处理器的注册参考代码:文件的149、165行主要函数:buttonOps[i].addActionListener(this);使用方法:调用控件的成员函数addActionListener,该函数的参数为当前对象。本例中,this指的是JavaTest_5_GUI_V1javatest=newJavaTest_5_GUI_V1();注册的作用:把javatest的actionPerformed成员函数指定为事件处理的函数。如果有鼠标点击中界面上的控件的话,javatest会调用actionPerformed函数来处理该事件。2.2事件及事件源的捕获参考代码:publicvoidactionPerformed(ActionEvente)函数事件的捕获是通过JAVAJFrame的内部机制实现;事件源的捕获方法有多种:判断事件源if(e.getSource()==buttonNumbers[i])

{}A事件源

为创建的控件对象判断事件对应的命令名If(e.getActionCommand().compareTo("1")){}ActionCommand为创建按钮是指定的名称JButtonbuttonOne=newJButton("1");【实验5-2-1】事件处理方法请把以下的实验结果和心得写进实验报告:【实验5-2-1】事件处理方法(1/4)准备:注释掉类JavaTest_5_GUI_V1的actionPerformed函数中的代码(在其起始花括号处加/*,在结束花括号处加*/);1.事件监听的必要性:没有注册事件监听的控件得不到处理验证方法:Step

1:去掉操作按钮对事件监听的注册,方法:注释掉文件JavaTest_5_GUI_V1.java的162行;Step2:把被点击控件的名字打印到Cosole中,方法:在类JavaTest_5_GUI_V1的actionPerformed函数中开始处填加如下代码:System.out.println(“监测到来自控件”

+e.getActionCommand()+“的鼠标左击事件");Step3:运行程序,分别点击数字按钮和操作按钮,查看MyEclipseCosole中输出的不同。Step4:恢复Step1中注释掉的代码,再次运行程序,并查看Cosole中输出的不同2.文本输出控件内容的更新方法:

文本框的定义:JTextFieldoutputField=newJTextField(150);以下所有代码均在JavaTest_5_GUI_V1的actionPerformed函数中进行(黑色部分表示改动前已有代码不需再输入,红色部分表示新加入的代码)

2.1如何取得文本输出框(outputField.getText)方法:添加如下代码【请添加程序、运行并分析Cosole和文本框的输出内容】System.out.println(“监测到来自控件”

+e.getActionCommand()+“的鼠标左击事件");System.out.println(“当前文本框的内容:”

+outputField.getText());2.2设置当前文本框中的内容(outputField.setText):方法:添加如下代码【请添加程序、运行并分析Cosole和文本框的输出内容】StringoutputFieldStr=newString();outputFieldStr=e.getActionCommand();System.out.println(“监测到来自控件”

+e.getActionCommand()+“的鼠标左击事件");outputField.setText(outputFieldStr);System.out.println(“当前文本框的内容:”

+outputField.getText());【实验5-2-1】事件处理方法(2/4)上述试验中,我们虽然能够看到点击不同控件时输出内容不同,但是并不能对不同的操作做出不同的处理。在处理之前首先应该判断出事件来自什么控件:3.事件来源的判断方法以下所有代码均在JavaTest_5_GUI_V1的actionPerformed函数中进行(黑色部分表示改动前已有代码不需再输入,红色部分表示新加入的代码)首先注释掉已经添加的代码3.1事件来源:e.getSource()3.2事件来源判断(条件语句),以数字按钮“1”为例:StringoutputFieldStr=newString();if(e.getSource()==buttonNumbers[0]){System.out.println(“监测到来自控件0的鼠标左击事件");

outputFieldStr=e.getActionCommand();outputField.setText(outputFieldStr);System.out.println("当前文本框的内容:"

+outputField.getText());

}【实验5-2-1】事件处理方法(3/4)3.3使用条件语句(if{…}elseif{…}…else{…})完成对所有控件的来源判断,并参考3-2在Cosole和文本输出框中输出相应内容。【实验5-2-1】事件处理方法(4/4)2.3GUI按钮功能实现(1/3)要求:实现标准型计算器的基本功能:清空、加、减、等于、回退、乘、除等操作,不考虑“.”。解题思路1:输入到第2个算数运算操作符时开始计算考虑下面的输入流如何处理:“123+456-345*567/789”,当“-”输入时,即计算“123+456”,把计算结果与“345”计算,继而把计算结果与567计算,再与789计算。需要考虑的问题:不同情况下应该输出框显示什么内容,什么情况下才开始计算2.3GUI按钮功能实现(2/3)解题思路1的参考实现:为类JavaTest_5_GUI_V1添加以下相应的成员变量(下面用到的)当有控件事件捕获到时,代码请补充:如果输入的是数字或者小数点,把数字键的名字存入Stringstr:str+=str+e.getActionCommand();此时界面输出str当输入

“+”、“-”、“*”、“/”时,str的输入结束,:Step1:如果当前已经存储了0个操作数(op为空),把str转换为数字num1,此时界面文本框输出num1,;把此操作符存入Stringop:op=e.getActionCommand();,Step2:否则,如果当前已经存储了1个操作数(op不为空),把str转换为数字num2,按op操作处理num1与num2,并把结果赋给num1,此时界面输出num1,把此操作符存入Stringop:op=e.getActionCommand();Step3:把str清空;当输入是清除(C)时,使str和op均为空,界面输出“0.”;当输入是后退(<)时,如果str为空,不做任何操作,界面输出“0.”;否则,截取str的前N-1个字符赋给str,界面输出str;2.3GUI按钮功能实现流程(3/3)【实验5-2-2】数字的保存(1)【实验5-2-3】算术运算功能实现(2)【实验5-2-4】清空键(C)实现(3)【实验5-2-5】后退键功能实现(4)三、实验报告1、源代码导出压缩包后与实验报告一起再压缩成单个文件或放在同一个文件夹,按”学号-姓名”格式命名,传到作业目录。2、报告要求:运行结果和界面设计体会,按”学号-姓名”格式命名word文档。【参考1】String的常用API例子代码:参见函数stringDemo()【参考2】String和double/整形数据类型之间相互转换例子代码:参见函数stringDemo()以字符串str=“12345.678”为例:去掉尾部一个字符:str=str.subString(0,str.length()-1);判断两个字符串是否相等if(pareTo(“123”)==0)转换为double型:doubled=Double.parseDouble(str);double型转换为String:str=Double.toString(12345.678);【参考3】ArrayList例子代码:参见函数stringArrayListDemo()以右图为例(ArrayList对象为strList):取得字符串456:strList.getString(2);取得最后一个字符串:strList.getString(strList.size()-1);删除字符串456:strList.remove(2);向strList末尾加一个字符串:strList.add(“+”);把字符串“789”更新为“78”:strList.set(4,“78”);清空strList:strList.clear();123+456-7892.3GUI按钮功能实现(思路2)要求:实现标准型计算器的基本共能:清空、加、减、等于、回退、乘、除等操作,不考虑“.”。解题思路2:计算一般以“=”号输入为开始标志,故需要保存一个输入记录,所以可以采用字符串;输入数据中既有数字(实际上为字符串),也有操作符(可以用操作符字符串表示),为了简化输入字符串分析,最好把数字字符串和操作符字符串分开表示,所以可以采用字符串数组ArrayList来记录输入的数字串和操作串;接收到“清空”操作时,必须清空输入历史,并且显示初始值”0”;当输入其它操作符后,只需要显示之后输入的数字;“回退”需要考虑到ArrayList是否为空,必须考虑到如何处理ArrayList;加减法优先级相同,乘除法优先级较高,故应先处理所有的乘除法操作,再处理加减法操作。2.6GUI按钮功能实现题目1【必做】使用ArrayList记录输入历史,其中“回退”、“等于”操作符不需存储,”.”作为数字处理。存储结构如2-6-1例子所示。123+456.4-789图2-6-12.6GUI按钮功能实现题目2【必做】实现“清空”操作。分析:需要清空输入记录,需要把文本输出框设为默认值。2.6GUI按钮功能实现题目3【必做】实现“回退”操作,“回退”必须考虑到下面的情况:输入历史为空;图2-6-3-a图2-6-3-b,文本框应该输出“+”123+图2-6-3-a123+4图2-6-3-a2.6GUI按钮功能实现题目4【必做】实现“加”、“减”操作,可参考图2-6-4-a,2-6-4-b。1+6-5加减2图2-6-4-b图2-6-4-c2.6GUI按钮功能实现题目5【选做】在题目4的基础上,实现“乘”、“除”操作。分析:必须对输入历史先处理“乘”、“除”操作,再进行题目4的操作,如下图所示。图2-6-5-a1+6-51+4/2*3-5乘除加减2图2-6-5-b图2-6-5-c2.6GUI按钮功能实现题目6【选做】考虑各种输入的异常情况,并编写代码予以相应的处理,例如:输入数字过大;连续输入2个或多个操作符;除法操作的除数为0;双精度数以”.”开始等实验06标准型计算器–

界面美化与程序优化II陈海山一、实验目的理解为什么必须进行界面美化:用户友好,符合用户使用习惯。进一步掌握界面编程的方法。体会界面与事务处理分离的优势。掌握枚举数据类型的使用。二、实验内容与重点界面美化应用枚举数据类型处理操作按钮事件2.1界面美化理解界面美化的原因:实现界面用户友好,符合用户使用习惯。一种简化版标准型计算器。结组(2-3人)讨论:自己喜欢的标准型计算器界面,并分别实现之。2.2程序优化

2.2.1Calculator类的重命名,要求:重命名为BasicCaculator:重命名方法:通过MyEclipse的Refactor操作可以改变所有代码中类、类的属性名、成员函数名、以及所有引用到他们的地方Refactor使用步骤:选中所要重命名的标识符;鼠标右击或者选择Refactor菜单,找到Rename(重命名),鼠标单击;该更该标识符,单击回车键即可完成。2.2程序优化

2.2.2

Calculator类与main函数的分离新建一个类,命名为JavaTest_06在JavaTest_06的main函数中添加代码:newBasicCaculator();同时删除BasicCaculator类中的main函数。处理BasicCaculator中的main函数,把其功能在BasicCaculator的构造函数BasicCaculator()中实现参见BasicCaculator.java第107-110,166-167行。2.2程序优化

2.2.3把’.’操作符当作数字来处理:因为处理代码都相同。2.2程序优化2.2.4应用枚举数据类型处理操作按钮事件枚举类型的定义方法:enumOPERATIONS{OP_BACKSPACE,OP_PLUS,OP_SUBTRACT,OP_MULTIPLY,OP_DIVIDE,OP_DOT,OP_EQUAL,OP_CLEAR};2.2程序优化枚举值与整数之间的关系OPERATIONS.OP_CLEAR.ordinal()可以返回枚举值OP_CLEAR在枚举类型中的序号,序号从0开始依次递增,每次增量为1.通过下面代码即可获得OP_CLEAR的整数值,并把它作为buttonOps的下标来使用:if(e.getSource()==buttonOps[OPERATIONS.OP_CLEAR.ordinal()]){outputField.setText(".0");outputFieldEmpty=1;}三、实验报告1、源代码导出压缩包后与实验报告一起再压缩成单个文件或放在同一个文件夹,按”学号-姓名”格式命名,传到作业目录。2、报告要求:运行结果和设计体会,按”学号-姓名”格式命名word文档。实验07科学型计算器–

界面及功能实现陈海山一、实验目的在标准型计算器的基础上,扩充为科学性计算器。进一步提高界面编程及其事件处理的编程能力二、实验内容实现科学型计算器的界面;实现科学型计算器的函数功能。2.1要求实现的界面和功能在界面上添加”sin”,”cos”,”square”,“x-1”(1/x),“ln”五个按钮并实现函数功能;要求每种函数处理其前面出现的第一个数字。

注:暂不考虑连续输入函数功能符的情况。

注:暂不考虑稳定不影响原有的功能。2.2Java的Math程序包参见例子代码:

publicstaticvoidmathDemo()三、实验报告1、源代码导出压缩包后与实验报告一起再压缩成单个文件或放在同一个文件夹,按”学号-姓名”格式命名,传到作业目录。2、报告要求:运行结果和设计体会,按”学号-姓名”格式命名word文档。扩展部分(选做)请考虑连续输入功能函数的情况。实验08科学型计算器–

代码重构陈海山一、实验目的理解继承的概念理解多态(运行时)的概念理解Package的概念应用继承和多态的概念重构实验07的科学型计算器代码二、实验内容封装继承多态应用继承和多态的概念重构实验07的科学型计算器代码2.0面向对象的基本概念–引入考虑下面这句话中有哪些对象(实体:睁开眼看见天亮了,那是因为有光,抬头望望窗外,太阳出来了...睁开眼(Object:Eye)看见天(Object:Sky)亮了,那是因为有光(Object:Light),抬头(Object:Head)望望窗(Object:Window)外,太阳(Object:Sun)出来了...2.0面向对象的基本概念–引入再考虑对象(实体)都有什么行为:睁开眼(Object)看见天(Object)亮了,那是因为有光(Object),抬头(Object)望望窗(Object)外,太阳(Object)出来了...睁开(Eye.Open)眼(Object:Eye)看见(Event:I.See)天(Object:Sky)亮(Sky.Dawn)了,那是光(Object:Light),抬(Head.Up)头(Object:Head)望望(I.Look)窗(Object:Window)外,太阳(Object:Sun)出来(Sun.Sunup)了...2.0面向对象的基本概念–引入睁开(Eye.Open)眼(Object:Eye)看见(Event:Eye.See)天(Object:Sky)亮(Sky.Dawn)了,那是光(Object:Light),抬(Head.Up)头(Object:Head)望望(Eye.Look)窗(Object:Window)外,太阳(Object:Sun)出来(Sun.Sunup)了...//面向对象的代码:Eyeeye;Skysky=eye.see();Sky.dawn();Headhead;head.raise().Windowwindow;Sunsun=eye.see(window);Sun.sunup();2.0面向对象的基本概念–例子分组讨论一下下面几个概念的特点、区别和联系:链条1.动物--》狗--》斗牛犬、牧羊犬;链条2.动物--》鸽子--》冠鸽、雀鸽分别找出他们的特征(如高度、长度、重量、颜色等),有哪些行为(跑、跳、飞、咬),有什么共同/不同的特征和行为,同一生物链条内生物的特征和行为的演化。时间:15分钟2.0面向对象的基本概念Animal为Animal的父类,Dog为Animal的子类;Dog为BullDog、HeardingDog的父类,BullDog、HeardingDog为Dog的子类;继承:子类继承了父类的所有特征与行为,并拥有与父类一些不同之处;多态:Pigeon和Dog都集成了父类的makeSound行为,但是它们发出的声音是不同的,同一种行为有不同的实现方式。2.1封装Animal这个对象既有一些属性,也有一些行为,并且属性和行为都放在了类的定义之中Animal的属性都是私有的,外界不能直接使用,必须通过方法,所以保证了属性数据的安全Animal的行为一般都是公有的,外可以直接使用,从可可以与外界交互2.2继承以Dog为例:BullDog拥有Dog的所有特征和行为,同时也拥有Animal的所有特征和行为。同作为Dog的子类,BulllDog和HeardingDog既有很多相同之处,又有一些不同之处,一个更明显的特征是争斗,一个是保护羊群。如果需要在子类中直接访问父类的属性(数据),需要把父类的相关数据访问属性改为protected。Protected类型的数据只能供父类和子类共同访问,其它类不能够访问。2.3多态同作为Animal的子类,Dog和Pigeon都有同样的行为:jump和run,但是其方式大不相同。如果我们不知道一个Animal到底是Dog还是Pigeon的话,我们照样可以通过调用jump和run,实现正确的行为,Java通过动态链接调用正确物种的行为:Dog.jump()或者Pigeon.jump()纯虚类:包含纯虚函数的类,虚函数:被abstract修饰并且不能够定义的函数。纯虚类也需要abstract修饰。2.4Package把所有的Animal的类可以同一组织为一个整体,可以采用包的概念。通过在java文件的开头写上下面代码即可事项对Animal及其所有子类的打包:packageAnimal;其它程序如果需要访问Animal及其子类的话,需要在使用前引入Animal包:importAnimal;面向对象概念的例子–Animal及其使用2.4代码重构科学型计算器拥有标准型计算器的所有功能,同时拥有新的功能:函数功能,故科学型计算器是标准型计算器的一个子类,两者之间是继承的关系。两者的计算方法均为startCalculation(),故可实现计算方法的多态。实现继承于标准型计算器的科学型计算器,可以考虑修改的部分包括:构造函数ActionPerformed函数科学计算器界面上的元素及相关属性startCaculation函数inputArrList需要修改访问属性:由private至protected三、实验报告1、源代码导出压缩包后与实验报告一起再压缩成单个文件或放在同一个文件夹,按”学号-姓名”格式命名,传到作业目录。2、报告要求:运行结果和设计体会,按”学号-姓名”格式命名word文档。扩展部分(选做)可以考虑实现一个纯虚的AbstractCaculator类。请查看是否还有其它方法是多态。面向对象的里外一个例子:参见Animal中的messages程序包。实验09标准+科学型计算器-界面及功能实现陈海山一、实验目的深入理解抽象类的概念;深入理解运行时多态的概念;应用多态的概念实现既有标准模式,也有科学模式的计算器。实验内容纯虚函数与纯虚类既有标准模式,也有科学模式的计算器2.1抽象类抽象函数与抽象类的概念抽象类在Animalpackage中的应用2.1.1抽象函数与抽象类Java中有抽象函数的概念,用abstract关键字表示;java中抽象函数必须在抽象类中,而且抽象函数不能有函数体:如抽象类Animal的纯虚函数crawl,makeSound等;抽象类不能被实例化,只能由其子类实现抽象函数:Aniamlanimal=newAnimal();是不对的 Dog实现了父类Animal的抽象函数crawl,makeSound等 Dogdog;语法是正确的如果某个抽象类的子类仍是抽象类,那么该子类不需要实现其父类的抽象函数。用抽象类别统一子类型来进行操作,有利于以后的扩展,移植、复用:参见AnimalTest的main函数。抽象类知识的扩展:浅析Java抽象类和接口的比较Animalanimal是不正确的;但可以创建Animal的数组(相当于指针):Animalanimals[]=newAnimals[3];可以创建Dog的对象:Dogdog=newDog();2.1.2抽象类在Animalpackage中的应用参见AnimalTest的main函数2.2既有标准模式,也有科学模式的计算器实现既有标准模式,也有科学模式的计算器

温馨提示

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

评论

0/150

提交评论