《面向对象程序设计》实验指导书
《面向对象程序设计》实验指导书
熊利祥编
武汉理工大学华夏学院
2015年1月
前言
一、实验课目的
通过本课程的学习培养学生对计算机软件开发语言及工具的综合能力。主要介绍Java 软件开发工具及编辑工具的使用方法、语言的语法及Java类的定义和使用、使用Java进行网络和多媒体编程的方法。通过本课程学习和上机实践,使学生掌握使用Java进行程序设计的基本技术与方法、具备软件开发的基础能力,为今后从事软件开发和应用打下基础。
二、实验要求:
1.课前预习
①认真阅读实验指导书,了解实验内容;
②认真阅读有关实验的理论知识;
③读懂程序代码。
2.实验过程
①按时到达实验室;
②认真听取老师对实验内容及实验要求的讲解;
③认真进行实验的每一步,观察程序代码与仿真结果是否相符;
④将实验过程中程序代码和仿真结果提交给老师审查;
⑤做完实验后,整理实验设备,关闭实验开发板电源、电脑电源后方可离开。
3.实验报告
①按要求认真填写实验报告书;
②认真分析实验结果;
③按时将实验报告交给老师批阅。
三、实验学生守则
1.保持室内整洁,不准随地吐痰、不准乱丢杂物、不准大声喧哗、不准吸烟、不准吃东西;
2.爱护公务,不得在实验桌及墙壁上书写刻画,不得擅自删除电脑里面的文件;
3.安全用电,严禁触及任何带电体的裸露部分,严禁带电接线和拆线;
4.任何规章或不按老师要求操作造成仪器设备损坏须论价赔偿。
目录
实验一JDK与Eclipse开发环境…………………………………………………………
实验二类的继承与多态实验…………………………………………………………
实验三GUI图形界面设计实验……………………………………………………………实验四网络编程实验………………………………………………………………………
实验一 JDK与Eclipse开发环境
一、实验目的
1.学会使用JDK编译和运行Java Application程序。
2.学会在Eclipse平台下编写、运行和管理Java程序。
二、实验要求
1.熟悉Java程序运行环境的安装、配置方法。
2.掌握编写与运行Java程序的方法。
三、实验内容
(一)在命令行方式下用JDK编译和运行Java程序。
(1)内容:用Windows记事本编辑如下Java源程序,并保存为源文件HelloWorld.java (2)程序源代码如下:
public class HelloWorld
{
public static void main(String[] args)
{
System.out.print("Hello World!");
}
}
(3)编译HelloWorld.java,产生类文件HelloWorld.class。
执行“开始-所有程序-附件-命令提示符”菜单命令打开DOS窗口,用“盘符:”和cd命令转到HelloWorld.java所在目录,在命令行上键入
javac HelloWorld.java
回车,如果不出现错误信息,则说明编译正确,编译后的中间文件名为HelloWorld.class,位于HelloWorld.java同一目录下。
(4)运行该程序
此时再键入
java HelloWorld
如果不出错,则在DOS窗口上看到输出“Hello World!”。
(二)Eclipse集成开发环境的使用。
(1)用Eclipse建立新的Java程序
①新建项目
启动Eclipse,执行“文件-新-Java项目”菜单命令,或执行“文件-新-项目”菜单命令,在弹出的“新建项目”对话框中双击“Java项目”,都会弹出“新建Java项目”对话框。在“项目名”一栏输入一个项目名称(假定为MyProject),点击“完成”。此时在窗口左边的“包资源管理器”中将会出现一个以项目名称命名的文件夹。(如果窗口左半部分未出现“包资源管理器”,可执行“窗口-打开透视图-Java”菜单命令将其打开)。
②新建包
单击项目名(例如MyProject)前面的加号展开该文件夹,将光标定位在其下的src文件夹上,执行“文件-新-包”菜单命令,在弹出对话框的“名称”一栏输入一个包(package)名(假定为myPackage),点击“完成”按钮。此时在“包资源管理器”的“MyProject / src”之下将出现一个以包命名的文件夹myPackage。
注:一个项目下可以建立多个包,包中任何源文件中定义的类都可以被同一个包中任何源文件中定义的类所直接引用。
③新建类
将光标定位在包名(例如myPackage)上,执行“文件-新-类”菜单命令,在弹出的对话框的“名称”一栏输入一个类名(假定为HelloWorld),点击“完成”按钮。此时在“包资源管理器”的“MyProject / src / myPackage”之下出现一个以类命名的Java源文件HelloWorld.java,窗口中部便是该文件中的Java源代码,其中第一行是包的声明:package myPackage;
其下则是类的定义。
④输入Java Application源代码
可以看到这里的类定义与前面“Java Application 程序实例”中的类定义的框架是完全相同的,将Java Application程序实例类框架中的3行源代码拷入类框架中,从而形成下列完整的Java Application源程序:
package myPackage;
public class HelloWorld
{
public static void main(String[] args)
{
System.out.print("Hello World!");
}
}
⑤运行Java Application程序
执行“运行-运行方式-Java应用程序”菜单命令,或执行“运行-运行”菜单命令,在弹出的对话框中选择“Java应用程序”。如果源程序无语法错误,则编译后会直接执行。代替命令行方式将结果输出到控制台上,Eclipse会将结果输出到窗口右下部的“控制台”子窗口中:
Hello World!
(2)用Eclipse管理老的Java程序
①删除项目、包或源文件
如果想删除Eclipse工作空间中的某些项目、包或源文件,则应当在Eclipse中进行而不应当在Windows资源管理器中进行,这是因为工作空间状态信息是被Eclipse实时地记录在每个项目的PROJECT文件中的,如果在Eclipse之外删除文件或文件夹,则会造成状态信息与文件系统的不同步。
先在资源管理器中用“复制”和“粘贴”命令将项目文件夹MyProject备份到另一逻辑盘上,然后在Eclipse的“包资源管理器”中将光标对准MyProject文件夹,按鼠标右键并选择“删除”,确认后,文件夹MyProject将从工作空间逻辑地删除。若确认时选中“删除磁盘上的内容”,则选定的文件或文件夹将同时从workspace文件夹物理地删除。
②导入备份项目到Eclipse工作空间
备份的Java项目要重新使用Eclipse进行管理,必须导入到硬盘的Eclipse工作空间。执行“文件-导入”菜单命令,在弹出的对话框中选择“常规-现有项目到工作空间中”,点击“下一步”,在弹出的对话框中点击“浏览”,在“浏览文件夹”对话框中找到MyProject 文件夹,将光标定位在该文件夹上,点击“确定”再点击“完成”,备份的项目就被整体导入Eclipse工作空间(注意:如果工作空间中已存在同名项目,则不能将该项目整体导入,只能按下述方法将文件或文件夹逐个导入)。
③导入Java源文件到Eclipse工作空间
备份的其它文件夹或Java源文件要使用Eclipse管理,也必须导入硬盘的Eclipse工作空间,但工作空间中必须有适当的项目和包来存放它们,如果没有,就必须按照前面所述的方法首先建立项目和包。现在我们在Eclipse下再次删除并重新建立项目MyProject和包myPackage,然后在“包资源管理器”中将光标定位在包myPackage上,执行“文件-导入”菜单命令,在弹出的对话框中选择“常规-文件系统”,点击“下一步”,在弹出的对话框中点击“浏览”,在“从目录中导入”对话框中找到备份文件夹MyProject,展开并进入其中的src文件夹,将光标定位在存放包的文件夹myPackage上,点击“确定”,在弹出的对话框的上部右栏选中源文件HelloWorld.java,再点击“完成”,即可将该源文件导入项目和包。
实验二类的封装、继承与多态实验
一、实验目的
1.通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想。
2.了解类的封装方法,以及如何创建类和对象。
3.了解成员变量和成员方法的特性。
4.掌握面向对象程序设计的方法。
5.掌握类的继承和多态的作用。
二、实验要求
1.编写一个体现面向对象思想的程序。
2.编写体现类的继承性(成员变量,成员方法、成员变量隐藏)的程序。
3.编写体现类的多态性(成员方法重载、构造方法重载)的程序。
三、实验内容
(一)编写一个体现面向对象思想的程序。
(1)程序功能:求某个数的若干次幂
(2)程序源代码如下:
class P
{
int a,b,pwr;
P(int i,int j)
{
a=i;
b=j;
pwr=1;
for(;j>0;j--)
pwr*=i;
}
int Getpwr()
{
return pwr;
}
}
public class power
{
public static void main(String[] args)
{
P p1=new P(5,3);
P p2=new P(17,2);
System.out.println(p1.a+"的"+p1.b+"幂等于"+p1.Getpwr());
System.out.println(p2.a+"的"+p2.b+"幂等于"+p2.Getpwr());
}
}
(3)编译power.java,产生类文件power.class。
(4)运行该程序
(二)编写一个体现类的继承性的程序。
1.继承的概念
新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。
当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。
Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。
2.创建父类
(1)编写程序文件father.java,源代码如下:
public class father
{
protected String xm; //具有保护修饰符的成员变量
protected int xh;
void setdata(String m,int h) //设置数据的方法
{
xm =m;
xh = h;
}
public void print() //输出数据的方法
{
System.out.println(xm+", "+xh);
}
}
3.创建继承的类
(1)程序功能:通过父类father产生子类son,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。在程序中调用了父类的print方法,同时可以看出子类也具有该方法。
(2)编写程序文件son.java,源代码如下:
public class son extends father
{
protected String xy;
protected String xi;
public static void main(String args[])
{
father f1 = new father();
f1.setdata("张三",12321) ;
f1.print();
son s1 = new son() ;
s1.setdata("李四",12345); //调用父类的成员方法
s1.xy="信息工程系"; //访问本类的成员变量
s1.xi="汽车系"; //访问本类的成员变量
s1.print();
System.out.print(s1.xm+", "+s1.xy+", "+s1.xi);
}
}
(3)编译并运行程序
注意:父类father与子类son要在同一文件夹(路径)内。
(三)编写一个体现类的多态性的程序。
1.理解类的多态性
类的继承发生在多个类之间,而类的多态只发生在同一个类上。在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。这种现象称为类的多态。
多态使程序简洁,为程序员带来很大便利。在OOP中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。
类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。
2.成员方法的重载
成员方法的重载是指对同名方法的不同使用方式。
(1)程序功能:定义四个重载的成员方法,它们的方法名相同,但是参数个数或者数据类型不同,方法体也不同。在调用时根据实参的个数和数据类型进行选择。
(2)编写A.java文件,源代码如下。
public class D
{
public static void main(String[] args)
{
B b1=new B();
int i=b1.add(1,3);
System.out.println(i);
int j=b1.add(1,3,5);
System.out.println(j);
double m=b1.add(1.0,3.0);
System.out.println(m);
double n=b1.add(1.0,3.0,5.0);
System.out.println(n);
}
}
class B
{
int add(int a,int b)
{
System.out.println("in add(int,int)");
return a+b;
}
int add(int a,int b,int c)
{
System.out.println("in add(int,int,int)");
return a+b+c;
}
double add(double a,double b)
{
System.out.println("in add(double,double)");
return a+b;
}
double add(double a,double b,double c)
{
System.out.println("in add(double,double,double)");
return a+b+c;
}
}
(3)编译并运行程序
3.构造方法的重载
构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。因此,构造方法不能直接调用,只能由new操作符调用。
构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。
(1)程序功能:定义三个重载的构造方法,它们的方法名相同,但是参数个数不同,方法体也不同。在调用时根据实参的个数进行选择。
(2)编写A.java文件,源代码如下。
public class A {
public static void main(String[] args)
{
B b1=new B();
B b2=new B(5);
B b3=new B(3,7);
b1.print();
b2.print();
b3.print();
}
}
class B
{
int a,b;
B()
{
a=b=0;
System.out.println("in B()");
}
B(int i)
{
a=b=i;
System.out.println("in B(int)");
}
B(int i,int j)
{
a=i;
b=j;
System.out.println("in B(int,int)");
}
void print()
{
System.out.println("a="+a+",b="+b);
}
}
(3)编译并运行程序
四、思考题
1.说明什么是构造方法。
2.说明程序中有多个类时如何确定源程序文件的名称。
3.说明类的继承和多态有什么作用,在使用上应该注意什么问题。
实验三 GUI图形界面设计实验
一、实验目的
1.了解图形用户界面基本组件(窗口、按钮、文本框、选择框、滚动条等)的使用方法。
2.掌握如何使用布局管理器对组件进行管理。
3.理解Java的事件处理机制。
二、实验要求
1.掌握在容器中添加组件的方法。
2.掌握使用布局管理器对组件进行管理的方法。
3.理解Java的事件处理机制、掌握为不同组件编写事件处理程序的方法。
4.掌握编写独立运行的窗口界面的方法。
三、实验内容
(一)创建图形用户界面
图形用户界面(Graphic User Interface,简称GUI)是为方便用户使用设计的窗口界面,在图形用户界面中用户可以看到什么就操作什么,取代了在字符方式下知道是什么后才能操作什么的方式。组件(Component)是构成GUI的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器(Container)内,容器是能容纳和排列组件的对象,如Applet、Panel(面板)、Frame(窗口)等。通过容器的add方法把组件加入到容器中。
在图形用户界面中,程序和用户的交互是通过组件响应各种事件来实现的。例如,用户单击了一个按钮,意味着发生了按钮的单击事件;选中下拉框中的一个选项,意味着发生了一个选项事件。在Java 中能产生事件的组件叫做事件源,如按钮。如果希望对单击按钮事件进行处理,可给事件源(按钮)注册一个事件监听器(如包含按钮的容器),如同签订了一个委托合同,当事件源发生事件时,事件监听器就代替事件源对发生的事件进行处理,这就是所谓的委托事件处理机制。
1.创建一个窗口界面
(1)程序功能:创建一个具有关闭功能的空白窗口。
(2)编写MyFrame.java程序文件,源代码如下:
import javax.swing.*;
import java.awt.event.*;
public class MyFrame extends JFrame
{
public static void main(String[] args)
{
new MyFrame();
}
MyFrame()
{
setTitle("初始窗口");//创建窗口对象
setSize(400,300);//设置窗口大小
setVisible(true);//设置窗口是可视的
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
(3)编译MyFrame.java,产生类文件MyFrame.class。
(4)运行该程序
2.在窗口中添加组件
(1)程序功能:在窗口中添加组件。
(2)编写MyFrame.java程序文件,源代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MyFrame extends JFrame
{
JButton sendbt;
JTextField inputField;
JTextArea chatContent;
public static void main(String[] args)
{
new MyFrame();
}
MyFrame()
{
setTitle("初始窗口");//创建窗口对象
setSize(400,300);//设置窗口大小
setLayout(new BorderLayout());//边界布局
chatContent = new JTextArea(12, 34); // 创建一个文本域
// 创建一个滚动面板,将文本域作为其显示组件
JScrollPane showPanel = new JScrollPane(chatContent);
chatContent.setEditable(false); // 设置文本域不可编辑
JPanel inputPanel = new JPanel(); // 创建一个JPanel面板
inputField = new JTextField(20); // 创建一个文本框
sendbt = new JButton("发送"); // 创建一个发送按钮
// 为按钮添加事件
sendbt.addActionListener(new ActionListener() { // 为按钮添加一个监听事件public void actionPerformed(ActionEvent e) {// 重写actionPerformed方法String content = inputField.getText(); // 获取输入的文本信息
// 判断输入的信息是否为空
if (content != null && !content.trim().equals("")) {
// 如果不为空,将输入的文本追加到到聊天窗口
chatContent.append("本人:" + content + "\n");
} else {
// 如果为空,提示聊天信息不能为空
chatContent.append("聊天信息不能为空" + "\n");
}
inputField.setText(""); // 将输入的文本域内容置为空
}
Label label = new Label("聊天信息"); // 创建一个标签
inputPanel.add(label); // 将标签添加到JPanel面板
inputPanel.add(inputField); // 将文本框添加到JPanel面板
inputPanel.add(sendbt); // 将按钮添加到JPanel面板
// 将滚动面板和JPanel面板添加到JFrame窗口
this.add(showPanel, BorderLayout.CENTER);
this.add(inputPanel, BorderLayout.SOUTH);
setVisible(true);//设置窗口是可视的
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
(3)编译MyFrame.java,产生类文件MyFrame.class。
(4)运行该程序
3.为窗口添加菜单
(1)程序功能:在窗口中添加菜单栏,在菜单栏添加菜单项,并添加下拉菜单和2级菜单,通过选择菜单项可以执行不同操作,如“打开” MyFrame类生成的窗口。
(2)编写MyFrame.java程序文件,源代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MyFrame extends JFrame
{
JButton sendbt;
JTextField inputField;
JTextArea chatContent;
JMenuBar mb; // 以下生成菜单组件对象
JMenu m1;
JMenuItem open;
JMenuItem close;
JMenuItem exit;
JMenu m12;
JMenuItem copy;
JMenuItem cut;
JMenuItem paste;
JMenu m2;
JMenuItem content;
JMenuItem index;
JMenuItem about;
public static void main(String[] args)
{
new MyFrame();
MyFrame()
{
setTitle("初始窗口");//创建窗口对象
setSize(400,300);//设置窗口大小
setLayout(new BorderLayout());//边界布局
chatContent = new JTextArea(12, 34); // 创建一个文本域
// 创建一个滚动面板,将文本域作为其显示组件
JScrollPane showPanel = new JScrollPane(chatContent);
chatContent.setEditable(false); // 设置文本域不可编辑
JPanel inputPanel = new JPanel(); // 创建一个JPanel面板
inputField = new JTextField(20); // 创建一个文本框
sendbt = new JButton("发送"); // 创建一个发送按钮
// 为按钮添加事件
sendbt.addActionListener(new ActionListener() { // 为按钮添加一个监听事件public void actionPerformed(ActionEvent e) {// 重写actionPerformed方法String content = inputField.getText(); // 获取输入的文本信息
// 判断输入的信息是否为空
if (content != null && !content.trim().equals("")) {
// 如果不为空,将输入的文本追加到到聊天窗口
chatContent.append("本人:" + content + "\n");
} else {
// 如果为空,提示聊天信息不能为空
chatContent.append("聊天信息不能为空" + "\n");
}
inputField.setText(""); // 将输入的文本域内容置为空}
});
Label label = new Label("聊天信息"); // 创建一个标签
inputPanel.add(label); // 将标签添加到JPanel面板
inputPanel.add(inputField); // 将文本框添加到JPanel面板
inputPanel.add(sendbt); // 将按钮添加到JPanel面板
// 将滚动面板和JPanel面板添加到JFrame窗口
this.add(showPanel, BorderLayout.CENTER);
this.add(inputPanel, BorderLayout.SOUTH);
mb=new JMenuBar(); // 以下生成菜单组件对象
m1=new JMenu("文件");
open=new JMenuItem("打开");
close=new JMenuItem("关闭");
exit=new JMenuItem("退出");
m12=new JMenu("编辑");
copy=new JMenuItem("复制");
cut=new JMenuItem("剪切");
paste=new JMenuItem("粘贴");
m2=new JMenu("帮助");
content=new JMenuItem("目录");
index=new JMenuItem("索引");
about=new JMenuItem("关于");
m1.add(open); // 将菜单项加入到菜单m1 中
m1.add(close);
m1.addSeparator(); //在菜单中添加分隔条
m1.add(exit);
mb.add(m1); // 将菜单m1 加入到菜单栏mb 中
m12.add(copy); m12.add(cut); m12.add(paste);
m1.add(m12);//将m12 作为2 级菜单添加到m1 菜单项中
m2.add(content); m2.add(index); m2.addSeparator(); m2.add(about);
mb.add(m2);
setJMenuBar(mb); // 设置菜单栏为mb
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
about.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JDialog dialog=new JDialog(MyFrame.this,true);
dialog.setTitle("关于");
dialog.setSize(200,80);
dialog.add(new JLabel("电子信息工程专业",SwingConstants.CENTER));
dialog.setVisible(true);
}
});
setVisible(true);//设置窗口是可视的
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
(3)编译MyFrame.java,产生类文件MyFrame.class。
(4)运行该程序
四、思考题
1.为该窗口添加弹出式菜单功能
实验四 socket网络编程实验
一、实验目的
1.掌握InetAddress类的使用。
2.掌握TCP与UDP编程:Socket与Datagram的概念和编程方法。
二、实验要求
1.通过Socket编程,掌握网络应用程序的开发方法。
2.掌握利用Socket进行TCP网络传输。
3.掌握利用DatagramSocket进行UDP网络传输。
三、实验内容
1. InetAddress类的方法
(1)程序功能:利用InetAddress类的方法实现域名解析和本地主机名和IP地址的获取。(2)编写MyInetAddress.java程序文件,源代码如下:
import https://www.360docs.net/doc/1615883758.html,.*;
public class MyInetAddress
{
public static void main(String[] args)
{
try
{
InetAddress localAddress = InetAddress.getLocalHost();
InetAddress remoteAddress = InetAddress.getByName("https://www.360docs.net/doc/1615883758.html,");
System.out.println("本机的IP地址:" + localAddress.getHostAddress());
System.out.println("本地的主机名为:" + localAddress.getHostName());
System.out.println("华夏学院的IP地址:" + remoteAddress.getHostAddress());
System.out.println("华夏学院的主机名为:" + remoteAddress.getHostName());
}
catch(Exception e)
{
System.out.println("解析失败");
}
}
}
(3)编译MyInetAddress.java,产生类文件MyInetAddress.class。
(4)运行该程序。
2.UDP通信
UDP把应用层所传递来的信息封装为一个个独立的数据报文,简称数据报,然后分别将这些数据报发送。UDP不保证每个数据报是否达到目的主机,因为有可能丢失,而且不保证数据报的到达时间和到达顺序。在Java网络API中与UDP数据报相关的类是DatagramPacket 类和DatagramSocket类,前者用于创建一个发送或接收的数据报对象,后者是创建一个可用来发送或接收数据报的Socket对象。
(1)程序功能:利用UDP协议设计接收端与发送端程序。
(2)编写UDPSend.java程序文件,源代码如下:
import https://www.360docs.net/doc/1615883758.html,.*;
public class UDPSend
{
public static void main(String[] args)
{
try
{
// 创建一个DatagramSocket对象
DatagramSocket ds = new DatagramSocket(3000);
String str = "hello world"; // 要发送的数据
/*
* 创建一个要发送的数据包,数据包包括发送的数据,数据的长度,接收端的IP地址以及端口号
*/
DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(),
InetAddress.getByName("localhost"), 8954);
System.out.println("发送信息");
ds.send(dp); // 发送数据
ds.close(); // 释放资源
}
catch(Exception e)
{
System.out.println("发送异常");
}
}
}
(3)编写UDPReceive.java程序文件,源代码如下:
import https://www.360docs.net/doc/1615883758.html,.*;
public class UDPReceive
{
public static void main(String[] args)
{
try
{
byte[] buf = new byte[1024]; // 创建一个长度为1024的字节数组,用于接收
// 定义一个DatagramSocket对象,监听的端口号为8954
DatagramSocket ds = new DatagramSocket(8954);
// 定义一个DatagramPacket对象,用于接收数据
DatagramPacket dp = new DatagramPacket(buf, 1024);
System.out.println("等待接收数据");
ds.receive(dp); // 等待接收数据,如果没有数据则会阻塞
// 调用DatagramPacket的方法获得接收到的信息,包括数据的内容、长度、发送的IP地址和端口号
String str = new String(dp.getData(), 0, dp.getLength()) + "from "
+ dp.getAddress().getHostAddress() + ":" + dp.getPort();
System.out.println(str); // 打印接收到的信息
ds.close();// 释放资源
}
catch(Exception e)
{
System.out.println("接收异常");
}
}
}
(4)编译UDPReceive.java和UDPSend.java,分别产生类文件UDPReceive.class和UDPSend.class。
(5)运行该程序。
3.TCP通信
从编程的角度,仅需要调用Socket所提供的接口就可以完成实际的网络通信,Socket 代表了TCP双向通信连接的一个端点,是对TCP网络连接的一种抽象。首先,通信双方需要建立Socket连接,之后双方都有各自的Socket对象,该Socket对象包含有两个流,一个是输入流,表示流入的数据流,其作用是接收数据。另一个是输出流,表示流出的数据,其作用是向外发送数据。
(1)程序功能:利用TCP协议设计客户端与服务器程序。
(2)编写TCPClient.java程序文件,源代码如下:
import java.io.*;
import https://www.360docs.net/doc/1615883758.html,.*;
public class TCPClient {
public static void main(String[] args)
{
try
{
//创建一个Socket并连接到给出地址和端口号的计算机
Socket client = new Socket(InetAddress.getLocalHost(), 7788);
OutputStream os = client.getOutputStream();// 获取客户端的输出流
System.out.println("开始与服务端交互数据");
os.write(("电子信息工程专业").getBytes()); // 当客户端连接到服务端时,向客户端输出数据
Thread.sleep(5000); // 模拟执行其它功能占用的时间
System.out.println("结束与服务端交互数据");
os.close();
client.close(); // 关闭Socket对象,释放资源}
catch(Exception e)
{
System.out.println("客户端异常");
}
}
}
(3)编写TCPServer.java程序文件,源代码如下:
import java.io.*;
import https://www.360docs.net/doc/1615883758.html,.*;
public class TCPServer {
public static void main(String[] args)
{
try
{
ServerSocket serverSocket = new ServerSocket(7788); // 创建ServerSocket 对象
Socket client = serverSocket.accept(); // 调用ServerSocket的accept()方法接收数据
InputStream is = client.getInputStream(); // 得到接收数据的流
byte[] buf = new byte[1024]; // 定义1024个字节数组的缓冲区
int len = is.read(buf); // 将数据读到缓冲区中
System.out.println(new String(buf, 0, len)); // 将缓冲区中的数据输出
is.close();
client.close();
}
catch(Exception e)
{
System.out.println("服务端异常");
}
}
}
(4)编译TCPClient.java和TCPServer.java,分别产生类文件TCPClient.class和TCPServer.class。
(5)运行该程序。
四、思考题
1.网络环境下的C/S模式的基本思想是什么?什么是客户机?什么是服务器?它们各自的作用如何?C/S模式的基本工作过程如何?
2.简述流式Socket的通信机制。它的最大特点是什么?
3.数据报通信有何特点?简述Java实现数据报通信的基本工作过程。
IQC抽检作业指导书
成品、包装物料抽检作业指导书 1.目的(Purpose) 规范进仓产品、包装物料抽查检验的计划,、方法和准则 2.0 适用范围(Scope) 成品、包装物料所有进仓的产品 3.0定义(Definitio) 批:通常指一个单位时段内生产的产品集合 4.0职责(Resposibilitie) 4.1对所有进仓产品或包装物料按照佛山市奥特玛陶瓷有限公司《成品分级内控标准》或《包装物料验收标准》验收,用标准的测量方法进行检验,完成产品的合格与不合格的判定。 4.2 IQC要对产品抽检过程中发现的质量问题进行跟踪处理,以及生产和市场反馈的重大产品质量问题的跟踪处理,并跟进产品市场销售质量状况。 4.3统计产品接收、检验过程中的质量数据,以日报或月报的形式反馈给相关部门,作为生产的质量控制和管理的依据。 5.0 作业流程 5.1成品检验准则 5.1.1检查印章是否清晰,包含了所必须的可追溯项目(产品编号、名称、品质状况、数量、产品规格)。 5.1.2对成品抽检必需做好防护措施(带手套或手指套)。 5.1.3审核工程单,根据工艺(或客户)要求确认使用产品及外包装材料等物料的规格及型号是否正 确。 5.14抽检标准: 采用正常检验的II级水准进行抽检。 5.15判断标准:依据《成品分级标准》、或《包装物料检验标准》、或客户要求进行判定是否合格。 5.13产品抽检顺序(特殊要求除外) a. 通常按照产品进仓检查顺序的原则,先生产或先进厂,先检验。 b. 对于急需销售或使用的产品或原材料可优先检查。 c. 抽检规则如下: 每批生产量在1000箱以内的,抽检量为5-10%,生产量在1000-5000箱的产品,抽检量为5-8%, 生产量超过5000箱的产品,抽检量为3-5%,对在生产过程中工艺要求复杂、生产难度大的产品, 且出现质量问题多的品种和对日常漏检次数多的跟班质检员多抽。大规格(超过600×600㎜)规 格的产品,抽检量按3-5%进行抽检,产品接收率按标准2%进行判定,若2件不合格品,且是一
最新浙江大学化工原理实验---填料塔吸收实验报告分析解析
实验报告 课程名称:过程工程原理实验(乙) 指导老师: 叶向群 成绩:__________________ 实验名称:吸收实验 实验类型:工程实验 同组学生姓名: 一、实验目的和要求(必填) 二、实验内容和原理(必填) 三、主要仪器设备(必填) 四、操作方法和实验步骤 五、实验数据记录和处理 六、实验结果与分析(必填) 七、讨论、心得 填料塔吸收操作及体积吸收系数测定 1 实验目的: 1.1 了解填料吸收塔的构造并熟悉吸收塔的操作; 1.2 观察填料塔的液泛现象,测定泛点空气塔气速; 1.3 测定填料层压降ΔP 与空塔气速u 的关系曲线; 1.4 测定含氨空气—水系统的体积吸收系数K y a 。 2 实验装置: 2.1 本实验的装置流程图如图1: 专业: 姓名: 学号: 日期:2015.12.26 地点:教十2109
2.2物系:水—空气—氨气。惰性气体由漩涡气泵提供,氨气由液氮钢瓶提供,吸收剂水采用自来水,他们的流量分别通过转子流量计。水从塔顶喷淋至调料层与自下而上的含氮空气进行吸收过程,溶液由塔底经过液封管流出塔外,塔底有液相取样口,经吸收后的尾气由塔顶排至室外,自塔顶引出适量尾气,用化学分析法对其进行组成分析。 3 基本原理: 实验中气体流量由转子流量计测量。但由于实验测量条件与转子流量计标定条件不一定相同,故转子流量计的读数值必须进行校正。校正方法如下:
3.2 体积吸收系数的测定 3.2.1相平衡常数m 对相平衡关系遵循亨利定律的物系(一般指低浓度气体),气液平衡关系为: 相平衡常数m与系统总压P和亨利系数E的关系如下: 式中:E—亨利系数,Pa P—系统总压(实验中取塔内平均压力),Pa 亨利系数E与温度T的关系为: lg E= 11.468-1922 / T 式中:T—液相温度(实验中取塔底液相温度),K。 根据实验中所测的塔顶表压及塔顶塔底压差△p,即可求得塔内平均压力P。根据实验中所测的塔底液相温度T,利用式(4)、(5)便可求得相平衡常数m。 3.2.2 体积吸收常数 体积吸收常数是反映填料塔性能的主要参数之一,其值也是设计填料塔的重要依据。本实验属于低浓气体吸收,近似取Y≈y、X≈x。 3.2.3被吸收的氨气量,可由物料衡算 (X1-X2) 式中:V—惰性气体空气的流量,kmol/h;
测试技术实验指导书及实验报告2006级用汇总
矿压测试技术实验指导书 学号: 班级: 姓名: 安徽理工大学 能源与安全学院采矿工程实验室
实验一常用矿山压力仪器原理及使用方法 第一部分观测岩层移动的部分仪器 ☆深基点钻孔多点位移计 一、结构简介 深基点钻孔多点位移计是监测巷道在掘进和受采动影响的整个服务期间,围岩内部变形随时间变化情况的一种仪器。 深基点钻孔多点位移包括孔内固定装置、孔中连接钢丝绳、孔口测读装置组成。每套位移计内有5~6个测点。其结构及其安装如图1所示。 二、安装方法 1.在巷道两帮及顶板各钻出φ32的钻孔。 2.将带有连接钢丝绳的孔内固定装置,由远及近分别用安装圆管将其推至所要求的深度。(每个钻孔布置5~6个测点,分别为;6m、5m、4m、3m、2m、lm或12m、10m、8m、6m、4m、2m)。 3.将孔口测读装置,用水泥药圈或木条固定在孔口。 4。拉紧每个测点的钢丝绳,将孔口测读装置上的测尺推至l00mm左右的位置后,由螺丝将钢丝绳与测尺固定在一起。 三、测试方法 安装后先读出每个测点的初读数,以后每次读得的数值与初读数之差,即为测点的位移值。当读数将到零刻度时,松开螺丝,使测尺再回到l00mm左右的位置,重新读出初读数。 ☆顶板离层指示仪 一、结构简介: 顶板离层指示仪是监测顶板锚杆范围内及锚固范围外离层值大小的一种监测仪器,在顶板钻孔中布置两个测点,一个在围岩深部稳定处,一个在锚杆端部围岩中。离层值就是围岩中两测点之间以及锚杆端部围岩与巷道顶板表面间的相对位移值。顶板离层指示仪由孔内固定装置、测量钢丝绳及孔口显示装置组成如图1所示。
二、安装方法: 1.在巷道顶板钻出φ32的钻孔,孔深由要求而定。 2.将带有长钢丝绳的孔内固定装置用安装杆推到所要求的位置;抽出安装杆后再将带有短钢丝绳的孔内固定装置推到所要求的位置。 3.将孔口显示装置用木条固定在孔口(在显示装置与钻孔间要留有钢丝绳运动的间隙)。 4.将钢丝绳拉紧后,用螺丝将其分别与孔口显示装置中的圆管相连接,且使其显示读数超过零刻度线。 三、测读方法: 孔口测读装置上所显示的颜色,反映出顶板离层的范围及所处状态,显示数值表示顶板的离层量。☆DY—82型顶板动态仪 一、用途 DY-82型顶板动态仪是一种机械式高灵敏位移计。用于监测顶底板移近量、移近速度,进行采场“初次来压”和“周期来压”的预报,探测超前支撑压力高 峰位置,监测顶板活动及其它相对位移的测量。 二、技术特征 (1)灵敏度(mm) 0.01 (2)精度(%) 粗读±1,微读±2.5 (3)量程(mm) 0~200 (4)使用高度(mm) 1000~3000 三、原理、结构 其结构和安装见图。仪器的核心部件是齿条6、指针8 以及与指针相连的齿轮、微读数刻线盘9、齿条下端带有读 数横刻线的游标和粗读数刻度管11。 当动态仪安装在顶底板之间时,依靠压力弹簧7产生的 弹力而站立。安好后记下读数(初读数)并由手表读出时间。 粗读数由游标10的横刻线在刻度管11上的位置读出,每小 格2毫米,每大格(标有“1”、“22'’等)为10毫米,微读数 由指针8在刻线盘9的位置读出,每小格为0.01毫米(共200 小格,对应2毫米)。粗读数加微读数即为此时刻的读数。当 顶底板移近时,通过压杆3压缩压力弹簧7,推动齿条6下 移,带动齿轮,齿轮带动指针8顺时针方向旋转,顶底板每 移近0.01毫米,指针转过1小格;同时齿条下端游标随齿条 下移,读数增大。后次读数减去前次读数,即为这段时间内的顶底板移近量。除以经过的时间,即得
什么是面向对象程序设计
1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。
抽样检验作业规范标准[详]
1.目的:规物料进料检验、制成过程控制抽样检验、成品入库抽样检验的标准,从而确保来 料、过程控制、产品包装检验整个生产中质量的稳定性和可靠性。 2.围:适用本公司IQC进料检验、IPQC过程控制检验、OQC成品出货检验的所有产品。 3.职责: a)IQC、IPQC、OQC负责执行本文件的规定 b)品质主管负责监督执行并视产品实际情况制定、修改本管理规定 4.名词解释 AQL:当一个连续系列批被提交验收时,可允许的最差过程平均质量水平,一般按照百分比来计算 A类不合格 ---- 单位产品的极重要质量特性不符合规定或者单位产品的质 量特性极严重不符合规定。 B类不合格 ---- 单位产品的重要质量特性不符合规定或者单位产品的质量 特性极严重不符合规定。 一般不合格---- 单位产品的重要质量特性符合技术要求,外观存在一定的瑕疵或缺陷。 Ac合格接收量 Re不合格拒绝接收量绝 5.程序: 5.1来料检验 1)抽样标准:按GB2828-2003Ⅱ级检查水平一次抽样进行 2)合格质量水准AQL规定进行检验 ①电子原件AQL:2.5 ②塑料件:关键指标AQL:2.5 外形外观一般指标AQL:4.0 金属件:AQL:2.5
3)检查严格度:正常检验 4)抽样方式:随机抽样 5)抽样批量:每一订单作为一个检查批次 以上规定了来料检验通用抽样检验标准,部分物料特别规定的除外,参见具体物料检验标准,特殊情况由物料品质部QE决定。 5.2过程控制检验 过程控制检验是指在对生产过程中的品质进行控制和验收,按照我公司规定实行三检制对生产过程中的质量进行预防和控制。IPQC需在生产过程中对每个工序进行巡检,对关键工序进行重点检验。巡检抽检的比列按照每天生产安排量5%进行,关键工序和重点工序的巡检比例而不得低于10%。关键过程和重点过程分别指对质量有重大影响的工序和质量事故频繁发生的工序,检验标准按照工艺标准作业指导书进行。 5.3成品出货检验 1)生产过程中的工序检验控制按照100%依次逐个检验,QC对其外观及性能在进行抽检,抽检比例按照1%进行。 2)检验严格度:正常检验 4)抽样方式:随机抽样 5.4进料检验规 进料检验(IQC)又称验收检验,是为了不让不良原物料进入物料仓库的控制方式,也是评鉴供料厂商主要的信息来源。 所进的物料,又因供料厂商的品质信赖度及物料的数量、单价、体积等,加以规划为全检、抽检、免检。 全检:数时少,单价高。 抽检:数量多,或经常性之物料。
填料塔吸收实验报告
实验6 填料吸收塔实验报告 第四组成员:王锋,郑义,刘平,吴润杰 一、 实验名称 填料吸收塔实验 二、 实验目的 1、 了解填料吸收塔的构造并实际操作。 2、 了解填料塔的流体力学性能。 3、 学习填料吸收塔传质能力和传质效率的测定方法。 三、实验内容 测定填料层压强降与操作气速的关系曲线,并用ΔP/Z —u 曲线转折点与观察现象相结合的办法,确定填料塔在某液体喷淋量下的液泛气速。 四、实验原理 1.气体通过填料层的压强降 压强降是塔设计中的重要参数,气体通过填料层压强降的大小决定了塔的动力消耗。压强降与气液流量有关,不同喷淋量下填料层的压强降ΔP 与空塔气速u 的关系如下图所示: 图6-1 填料层的ΔP ~u 关系 当无液体喷淋即喷淋量L0=0时,干填料的ΔP ~u 的关系是直线,如图中的直线0。当有一定的喷淋量时,ΔP ~u 的关系变成折线,并存在两个转折点,下转折点称为“载点” ,上转折点称为“泛点”。这两个转折点将ΔP ~u 关系分为三个区段:恒持液量区、载液区与液泛区。
五、实验装置和流程 图6-2 填料吸收塔实验装置流程图 1-风机、2-空气流量调节阀、3-空气转子流量计、4-空气温度、5-液封管、6-吸收液取样口、7-填料吸收塔、8-氨瓶阀门、9-氨转子流量计、10-氨流量调节阀、11-水转子流量计、12-水流量调节阀、13-U型管压差计、14-吸收瓶、15-量气管、16-水准瓶、17-氨气瓶、18-氨气温度、20-吸收液温度、21-空气进入流量计处压力 实验流程示意图见图一,空气由鼓风机1送入空气转子流量计3计量,空气通过流量计处的温度由温度计4测量,空气流量由放空阀2调节,氨气由氨瓶送出,?经过氨瓶总阀8进入氨气转子流量计9计量,?氨气通过转子流量计处温度由实验时大气温度代替。其流量由阀10调节5,然后进入空气管道与空气混合后进入吸收塔7的底部,水由自来水管经水转子流量计11,水的流量由阀12调节,然后进入塔顶。分析塔顶尾气浓度时靠降低水准瓶16的位置,将塔顶尾气吸入吸收瓶14和量气管15。?在吸入塔顶尾气之前,予先在吸收瓶14内放入5mL 已知浓度的硫酸作为吸收尾气中氨之用。吸收液的取样可用塔底6取样口进行。填料层压降用∪形管压差计13测定。 六、实验操作方法及步骤 1、测量干填料层(△P/Z)─u关系曲线: 先全开调节阀 2,后启动鼓风机,用阀 2 调节进塔的空气流量,按空气流量从小到大的顺序读取填料层压降△P,转子流量计读数和流量计处空气温度,测量12~15组数据?然后在双对数坐标纸上以空塔气速 u为横坐标,以单位高度的压降△P/Z为纵坐标,标绘干填料层(△P/Z)─u关系曲线。 2、测量某喷淋量下填料层(△P/Z)─u关系曲线: 用水喷淋量为30L/h时,用上面相同方法读取填料层压降△P,?转子流量计读数和流量计处空气温度并注意观察塔内的操作现象, ?一旦看到液泛现象时记下对应的空气转子流量计读数。在对数坐标纸上标出液体喷淋量为30L/h下(△P/z)─u?关系曲线,确定液泛气速并与观察的液泛气速相比较。 3、测量某喷淋量下填料层(△P/Z)─u关系曲线: 用水喷淋量为50L/h时,用上面相同方法读取填料层压降△P,?转子流量计读数和流量计处空气温度并注意观察塔内的操作现象, ?一旦看到液泛现象时记下对应的空气转子流量计读数。在对数坐标纸上标出液体喷淋量为50L/h下(△P/z)─u?关系曲线,确定液泛气速
混凝土结构实验指导书及实验报告(学生用)
土木工程学院 《混凝土结构设计基本原理》实验指导书 及实验报告 适用专业:土木工程周淼 编 班级::学 号: 理工大学 2018 年9 月
实验一钢筋混凝土梁受弯性能试验 一、实验目的 1.了解适筋梁的受力过程和破坏特征; 2.验证钢筋混凝土受弯构件正截面强度理论和计算公式; 3.掌握钢筋混凝土受弯构件的实验方法及荷载、应变、挠度、裂缝宽度等数据的测试技术 和有关仪器的使用方法; 4.培养学生对钢筋混凝土基本构件的初步实验分析能力。 二、基本原理当梁中纵向受力钢筋的配筋率适中时,梁正截面受弯破坏过程表现为典型的三个阶段:第一阶段——弹性阶段(I阶段):当荷载较小时,混凝土梁如同两种弹性材料组成的组合梁,梁截面的应力呈线性分布,卸载后几乎无残余变形。当梁受拉区混凝土的最大拉应力达到混凝土的抗拉强度,且最大的混凝土拉应变超过混凝土的极限受拉应变时,在纯弯段某一薄弱截面出现首条垂直裂缝。梁开裂标志着第一阶段的结束。此时,梁纯弯段截面承担的弯矩M cr称为开裂弯矩。第二阶段——带裂缝工作阶段(II阶段):梁开裂后,裂缝处混凝土退出工作,钢筋应力急增,且通过粘结力向未开裂的混凝土传递拉应力,使得梁中继续出现拉裂缝。压区混凝土中压应力也由线性分布转化为非线性分布。当受拉钢筋屈服时标志着第二阶段的结束。此时梁纯弯段截面承担的弯矩M y称为屈服弯矩。第三阶段——破坏阶段(III阶段):钢筋屈服后,在很小的荷载增量下,梁会产生很大的变形。裂缝的高度和宽度进一步发展,中和轴不断上移,压区混凝土应力分布曲线渐趋丰满。当受压区混凝土的最大压应变达到混凝土的极限压应变时,压区混凝土压碎,梁正截面受弯破坏。此时,梁承担的弯矩M u 称为极限弯矩。适筋梁的破坏始于纵筋屈服,终于混凝土压碎。整个过程要经历相当大的变形,破坏前有明显的预兆。这种破坏称为适筋破坏,属于延性破坏。 三、试验装置