中国矿业大学java 实验报告_第1页
中国矿业大学java 实验报告_第2页
中国矿业大学java 实验报告_第3页
中国矿业大学java 实验报告_第4页
中国矿业大学java 实验报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

中国矿业大学计算机学院 2012 级本科生课程报告 课程名称 网络编程 报告时间 2015 年 1 月 8 日 学生姓名 陈开武 学 号 08123634 专 业 信息安全 任课教师 目 录 序言2 实验三 面向对象程序设计.3 3.1 求最小公因数 .3 3.2 复数类 Complex 的设计 .4 3.3 编写一个包含圆类的程序 .5 3.4 编写含有一个圆类、圆柱类和主类的程序 .6 3.5 编写一个学生类 .8 3.6 了解抽象类程序 10 3.7 了解接口程序 11 实验七 图形用户界面应用程序设计12 7.1PressMe 类实现事件接口 .12 7.2mouseUp 实现笑脸哭脸轮换 .13 7.3“自助早餐”的图形界面事件处理程序 .15 7.4 加减乘除运算器 18 实验九 异常处理,线程控制21 9.1 自定义异常类 21 9.2 实现两个定时线程 22 9.3 实现三个定时线程 23 9.4Applet 用一个线程控制标签移动 25 9.5 图形界面两线程控制两个标签移动 26 实验总结.29 任课教师评语.31 第 1 页 共 34 页 序 言 网络编程是计算机科学与技术专业、电子科学与技术专业、信息安全专业和 网络工程专业的专业实践课程,是配合专业选修课程Java 语言与网络编程和专业 平台课程数据库原理等课程的实践课程,课程内容以Java 语言与网络编程课 程的实验内容为主,辅助配合数据库原理课程的实践需求。 1. 课程的目的与任务 通过本课程的独立程序设计过程和实践,巩固Java 语言与网络编程 、 数据库 原理课堂所学的知识,掌握实际操作技术,提高程序设计能力和动手能力。 2. 课程的基本要求 1) 掌握 Java 开发工具的安装、配置和使用; 2) 掌握 Java 语言基本语法和面向对象的程序设计方法; 3) 掌握 Java 系统包的使用; 4) 掌握图形用户界面、Applet 的程序设计技术; 5) 掌握的异常处理、线程控制的程序设计技术; 6) 了解和基本掌握 Java 网络编程技术; 7) 了解和基本掌握 JDBC。 2. 课程内容 实验一 开发工具和语言基础. 实验二 流程控制程序设计. 实验三 面向对象程序设计 实验四 语言基础与面向对象 实验五 Java 类库 实验六 图形用户界面程序设计基础 实验七 图形用户界面应用程序设计 实验八 Applet 程序设计 实验九 异常处理、线程控制 实验十 I/O 编程 实验十一 网络通讯编程 实验十二 JDBC 程序设计 注:本实验报告只涉及三,七,九实验内容 实验三 面向对象程序设计 一、实验目的和要求 掌握类、对象、方法、继承、接口的编程技术; 要求至少完成实验内容题的70%。 二、实验内容 1编一程序,求两个正整数 m、n 的最大公约数。 要求程序中有两个方法,分别使用循环和递归求最大公约数,最后在主方法中分别 调用这两个方法求解56与91的最大公约数。 提示:用辗转相除法。 方法:(1) 求 m 除 n 的余数 r; (2) 如果 r 为0,则 n 为最大公约数,结束。否则转(3); (3) 用 n 置 m,用 r 置 n ,回到(1) 。 源程序代码: import java.io.*; import java.util.*; public class gys private static int m; private static int n; gys(int a,int b) m=a; n=b; public int digui(int m,int n) if(n=0)return m; else return digui(n,m%n); public int xh(int m,int n) while(n!=0) int temp=m; m=n; n=temp%n; return m; public void getnum()throws IOException try System.out.print(“请输入两个数字:“); Scanner in=new Scanner(System.in); 第 3 页 共 34 页 m=in.nextInt(); n=in.nextInt(); catch(Exception e) System.out.print(“输入有错!“); System.exit(-1); public static void main(String args) throws IOException gys h=new gys(56,91); System.out.println(“要求解的两个数分别是:“+m+“ “+n); System.out.println(“递归法求得:“+h.digui(m,n); System.out.println(“循环法求得:“+h.xh(m,n); h.getnum(); System.out.println(“要求解的两个数分别是:“+m+“ “+n); System.out.println(“递归法求得:“+h.digui(m,n); System.out.println(“循环法求得:“+h.xh(m,n); 结果演示: 2编写一个完整的 Java Application 程序,其中设计一个复数类 Complex,利用它验证 两个复数 1+2i 和3+4i 相加产生一个新的复数 4+6i 。复数类 Complex 的设计必须满 足如下要求: 1)Complex 的属性有: realPart:int 型,代表复数的实数部分; maginPart:int 型,代表复数的虚数部分。 2)Complex 的方法有: Complex():构造方法,将复数的实部和虚部都置0; Complex(int r , int i ):构造方法,形参 r 为实部的初值, i 为虚部的初值。 3)Complex complexAdd(Complex a):将当前复数对象与形参复数对象相加,最后的 结果仍是一个复数对象,返回给此方法的调用者。 4)String toString(): 把当前复数对象的实部、虚部组合成 a+bi 的字符串形式,其中 a 和 b 分别为实部和虚部的数据。 源程序代码: class Complex private double RealPart, ImaginPart; public Complex(double r, double i) this.RealPart = r; this.ImaginPart = i; public Complex() this.RealPart = 0; this.ImaginPart = 0; public Complex complexAdd(Complex a) Complex temp = new Complex(); temp.RealPart=this.RealPart+a.RealPart; temp.ImaginPart=this.ImaginPart+a.ImaginPart; return temp; public String toString() return “(“+RealPart+“+“+ImaginPart+“i)“; public static void main(String args) Complex c1=new Complex(1,2); Complex c2=new Complex(3,4); Complex c3=new Complex(); c3 = plexAdd(c2); System.out.println(c1.toString()+“+“+c2.toString()+“=“ +c3.toString(); 结果演示: 3编写一个包含圆类的程序,并为圆类设计几个构造方法和一般方法,在主方法中创 建一个圆类对象并输出它的周长和面积。 要求: 属性有3个:x,y,r,分别放置圆心坐标和半径; 第 5 页 共 34 页 构造方法有2个。一个是无参的,用于设置3个属性的值都为0;另一个有参的,用 于设置3个属性的值,以确定一个具体的圆。 计算周长的方法:double zc() ; 计算面积的方法:double mj()。 源程序代码: public class Circle double x,y,r; Circle() x=y=r=0; Circle(int x1, int y1, int r1) this.x=x1; this.y=y1; this.r=r1; double zc() return Math.PI*2*r; double mj() return Math.PI*r*r; void print() System.out.println(“圆心位置:(“+x+“,“ +y+ “)“); System.out.println(“圆的半径:“+r); public static void main(String args) Circle c1=new Circle(4, 4, 4); c1.print(); System.out.println(“周长:“ + c1.zc() ); System.out.println(“面积:“ + c1.mj() ); 结果演示: 4编写一个程序,它含有一个圆类、圆柱类和主类。 要求: 1)圆类参考上一题中的圆类; 2)圆柱类:继承圆类,并加入一个属性 h(高); 构造方法(给4个属性赋值); 计算面积的方法(double mj() ; 计算体积的方法(double tj() 。 注意,要充分利用父类的方法。 3)主类:在主方法中创建圆和圆柱类的对象,然后计算并输出它们的面积及圆柱 的体积。 源程序代码: public class Mainmath public static void main(String args) Circle circle=new Circle(5,6,7); Cylinder cylinder=new Cylinder(6,7,8,9); System.out.println(“圆的周长为:“+circle.zc(); System.out.println(“圆的面积为:“+circle.mj(); System.out.println(“圆柱的面积为:“+cylinder.mj(); System.out.println(“圆柱的体积为:“+cylinder.tj(); class Circle protected double x,y,r; public Circle(int x1,int y1,int r1) this.x =x1; this.y =y1; this.r =r1; public double zc()return Math.PI*2*r; public double mj()return Math.PI*r*r; class Cylinder extends Circle private double hight; public Cylinder(int x,int y,int r,int hight) super(x,y,r); this.hight=hight; public double mj() 第 7 页 共 34 页 return 2*super.mj()+hight*super.zc(); public double tj() return hight*super.mj(); 结果演示: 5编写一个含有5个类的程序: 类 Person: 属性:编号、姓名、性别; 构造方法:确定编号和姓名; 一般方法:修改编号、姓名,获取编号、姓名。 类 Teacher:继承类 Person 并增加: 属性:系别; 构造方法:调用父类的构造方法; 一般方法:修改、获取系别。 类 Student:继承类 Person 并增加: 属性:班级; 构造方法:调用父类的构造方法; 一般方法:修改、获取班级属性值。 类 Classes: 属性:班级名称,学生名单(Student 类对象的数组); 构造方法:确定班级名称; 一般方法:建立学生名单,输出学生名单。 类 Main: 主类。主方法中创建一个班级,然后建立该班级的学生名单,最后 输出学生名单。 源程序代码: public class Mainclass public static void main(String args) Classes c1=new Classes(“信安 12-3“); c1.Studentlist(); class Person String num, name, sex; public Person(String n,String m,String s) this.num=n; =m; this.sex=s; public void Set(String n,String m) this.num=n; =m; public String Getnum() return num; public String Getname() return name; class Teacher extends Person String depatrment; public Teacher(String n,String m,String s) super(n,m,s); public void Setdepatrment(String d) this.depatrment=d; public String Getdepatrment() return depatrment; class Student extends Person String classroom; public Student(String n, String m,String s,String c) super(n, m,s); this.classroom = c; public void SetClassroom(String c) 第 9 页 共 34 页 this.classroom = c; public String getClassroom() return classroom; public String Getsex() return sex; class Classes private String classname; private Student students; public Classes(String c) this.classname=c; public void SetClassname(String c) this.classname = c; public String GetClassname() return classname; public void Studentlist() System.out.println(“学生名单:“); students=new Student4; students0=new Student(“08123634“,“陈开武“,“男“,“信安 12-3“); students1=new Student(“08123635“,“陈秋羽“,“男“,“信安 12-3“); students2=new Student(“08123636“,“刘师师“,“女“,“信安 12-3“); students3=new Student(“08123637“,“党涛涛“,“男“,“信安 12-3“); for(int i=0;i6) t.setText(“求您不要再点了“); 结果演示: 第 13 页 共 34 页 2编写一个“ 变脸” 程序:将实验六第 5题中的两个脸合到一个程序中,利用事件处理 程序 mouseUp()实现程序运行后出现一张笑脸,鼠标点击一次则变成哭脸,再点击一次 又变成笑脸,依次轮换。 源程序代码: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ChangeFace extends Panel public static int i=0; public static boolean bool=true; public static void main(String args) JFrame f=new JFrame(“变脸“); ChangeFace mb=new ChangeFace(); f.add(mb); f.setBounds(200, 200, 200, 220); f.setVisible(true); public void paint(Graphics g) g.setColor(Color.blue); if(bool) g.drawOval(50,50,80,100); g.drawArc(70,80,14,7,0,180); g.drawArc(110,80,14,7,0,180); g.drawArc(70,110,40,20,180,180); g.drawString(“笑!“,30,55); else g.drawOval(50,50,80,100); g.drawArc(70,80,14,7,180,180); g.drawArc(110,80,14,7,180,180); g.drawArc(70,110,40,20,0,180); g.drawString(“哭!“,30,55); public boolean mouseUp(Event event,int x, int y) i+; if(i%2=1)bool=false;repaint();return true; else bool=true; repaint();return true; 结果演示: 3设计一个“ 自助早餐” 的图形界面事件处理程序,运行后界面如下图左;选择早点后 界面如下图右;点击“ 退出 ”则结束程序运行。 (提示:需要编写列表的 itemStateChanged()事件处理方法 ) 第 15 页 共 34 页 源程序代码: import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.text.DecimalFormat; public class Breakfast extends JFrame TextArea t1; List list=new List(10,true); public Breakfast() Panel p=new Panel(); Label la1,la2; la1=new Label(“请选择早点:“); la1.setBounds(10,5,70,30); la2=new Label(“您选择了:“); la2.setBounds(120, 5, 60, 30); p.add(la1); p.add(la2); t1=new TextArea(); list.setBounds(4,35,80,170); p.add(list); list.add(“ 名称 单价“); list.add(“*“); list.add(“ 馒头 0.20 元“); list.add(“ 花卷 0.30 元“); list.add(“ 面包 0.50 元“); list.add(“ 蛋糕 0.20 元“); list.add(“ 豆浆 0.80 元“); list.add(“ 牛奶 1.00 元“); t1=new TextArea(); p.add(t1); t1.setBounds(90,35,140,140); Button b1=new Button(“退出“); b1.setBounds(120, 177, 70, 30); p.add(b1); p.setLayout(null); item n=new item(); myListener m=new myListener(); b1.addActionListener(m); list.addItemListener(n); this.add(p); private class myListener implements ActionListener public void actionPerformed(ActionEvent e) System.exit(0); private class item implements ItemListener public void itemStateChanged(ItemEvent e) int a; String a1; float sum=0; DecimalFormat df=new DecimalFormat(“0.00“); a1=list.getSelectedItems(); a=list.getSelectedIndexes(); sum=0; t1.setText(“ “); for(int i=0;i60) IOException a=new IOException(“随机数大于 60“); throw a; else return i; 结果演示: 2编写一个多线程程序,在其中实现两个定时线程,一个线程每隔1秒显示一次秒数, 另一个每隔3秒显示一次字母(a,b,)。 源程序代码: public class Timer extends Thread private int a; private int b; private String name; public Timer (String m,int a,int b) =m; this.a=a; this.b=b; public void run() if(a=1) try for(int i=0;i=b;i+ ) System.out.println(name+“: “+ i); Thread.sleep(1000); catch(Exception e) System.out.println(e.toString(); if(a=3) try for(char c=97;(c-97)=b;c+) System.out.println(name+“:“+c); Thread.sleep(3000); catch(Exception e) System.out.println(e.toString(); public static void main(String args) Thread timer1=new Timer(“first“,1,10); Thread timer2=new Timer(“second“,3,5); timer1.start(); timer2.start(); 第 23 页 共 34 页 结果演示: 3编写一程序,在其中定义一个线程类 ABC,它能够实现下面三种功能之一: 1)每隔1秒显示一次秒数; 2)每隔2秒显示一个字母(A,B,); 3)每隔3秒显示一个字母(H,I,) 。 构造方法有二个整型参数:m,n,m 确定时间间隔(也是由它确定要实现的功能),n 确定输出的字符的个数。 在主方法中建立三个线程对象:A1、A2、A3,分别设置它们的优先级为:4,6,8, 最后启动这三个线程,输出110、AE 、HK,请观察运行结果。 源程序代码: public class ABC extends Thread private int m; private int n; public ABC(int m,int n) this.m=m; this.n=n; public void run() if(m=1) try for(int i=1;i=n;i+ ) System.out.println(i); Thread.sleep(1000); catch(Exception e) System.out.println(e.toString(); if(m=2) try for(char a=65;a=n;a+) System.out.println(a); Thread.sleep(2000); catch(Exception e) System.out.println(e.toString(); if(m=3) try for(char h=72;h=n;h+) System.out.println(h); Thread.sleep(3000); catch(Exception e) System.out.println(e.toString(); public static void main(String args) Thread A1=new ABC(1,10); Thread A2=new ABC(2,69); Thread A3=new ABC(3,75); A1.setPriority(4); A2.setPriority(6); A3.setPriority(8); A1.start(); A2.start(); A3.start(); 第 25 页 共 34 页 结果演示: 4编写一个 Applet(或 JApplet) ,Applet 窗体宽300,高100,布局管理器为 null,窗 体上有一个标签和一个按钮,标签的位置是(10,20) ,按钮的位置是(100,60) ,它们 的宽度和高度都是80和20。 再编写一个线程,该线程可以让标签向右移动10次,每次 移动10个单位,间隔1秒,通过按钮的动作事件启动上述线程。 界面如下图所示。 源程序代码: import java.applet.*; import java.awt.*; import java.awt.event.*; public class Yudong extends Applet implements ActionListener,Runnable static Label l; Button btn; public static int a=10; public void init() this.setLayout(null); this.setSize(300, 100); l=new Label(“向右移 标签“); l.setBounds(10,20,80,20); btn=new Button(“启动“); btn.setBounds(100,60,80,20); add(l); add(btn); btn.addActionListener(this); public void actionPerformed(ActionEvent e) Thread t=new Thread(new Yudong(); t.start(); public void run() for(int i=0;i=10;i+) try l.setBounds(a, 20, 80, 20); a=a+10; Thread.sleep(1000); catch(Exception e) System.out.println(e.toString(); 结果演示: 5编写一个图形用户界面程序,窗体的宽度300,高度150,布局管理器为 null,窗体 上有二个标签和二个按钮,标签的位置为(10,30)和(200,60) ,按钮的位置为 (50,100)和(150,100) ,它们的宽度和高度都是80和20。编写一个线程,该线程可以 让标签向右或向左移动10次,每次移动10个单位,间隔1秒,通过按钮的动作事件启动 上述线程, “向右走”按钮启动“向右移标签” , “向左走”按钮启动“向左移标签” , 第 27 页 共 34 页 界面如下图所示。 源程序代码: import java.awt.*; import java.awt.event.*; public class Yudong1 extends Frame implements ActionListener,Runnable static Label l1; static Label l2; static Button btn1; static Button btn2; static boolean bool; public static int a=10; public static int b=200; public Yudong1(String name) super(name); public Yudong1() super(); public void sz() this.setLayout(null); this.setBounds(200,200,300,150); l1=new Label(“向右移标签“); l1.setBounds(10,30,80,20); l2=new Label(“向左移标签“); l2.setBounds(200,60,80,20); btn1=new Button(“向右走“); btn1.setBounds(50,100,80,20); btn2=new Button(“向左走“); btn2.setBounds(150,100,80,20); add(l1);add(l2); add(btn1);add(btn2); btn1.addActionListener(this); btn2.addActionListener(this); public static void main(String args) Yudong1 yd=new Yudong1(“移动标签“); yd.sz(); yd.setVisible(true); public void actionPerformed(ActionEvent e) if(e.getSource()=btn1) Thread t1=new Thread(new Yudong1(); bool=true; t1.start(); if(e.getSource()=btn2) Thread t2=new Thread(new Yudong1(); bool=false; t2.start(); public void run() if(bool) for(int i=0;i=10;i+) try l1.setBounds(a,30,80,20); a=a+10; Thread.sleep(1000); catch(Exception e) System.out.println(e.toString(); else for(int i=0;i=10;i+) try l2.setBounds(b,60,80,20); b=b-10; 第 29 页 共 34 页 Thread.sleep(1000); catch(Exception e) System.out.println(e.toString(); 结果演示: 实验总结 实验三是面向对象的程序设计,说到面向对象,就不得不从修饰符说起;成员变 量,成员方法,类的的声明都需要修饰符,Java 修饰符包括 public,protected,private

温馨提示

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

评论

0/150

提交评论