java实验8指导(实训)1.8

更新时间:2024-01-30 08:53:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《Java程序设计与应用》实验教学大纲

一、实验目的和要求

1、实验目的

力图通过本实践课程的学习,使学生掌握编写、调试和运行Java程序的基本技巧,熟悉面向对象技术的主要原则和思维方法,借助Java把这些原则和特点融入具体的程序中,建立由感性到理性的深入认识;最后介绍Java编程的必备工具,包括类库、常用算法、GUI、Swing和网络编程,提高解决实际问题的能力。

2、实验要求

实验的编排本着循序渐近、由浅入深的原则,基本覆盖了Java程序设计的主要方面,要求学生实验前认真准备,实验后提供实验报告,给出详细设计结果以及设计依据。

实验报告的格式应采用统一封面,统一的实验报告纸。封面应包括:课程名称、实验序号、名称、专业、班级、姓名、同组实验者、实验时间。实验报告内容应包括:实验名称、目的、内容、实验步骤、实验记录、数据处理(或原理论证、或实验现象描述、或结构说明等)。

二、实验环境介绍

1、硬件设备要求

PC及其联网环境

2、软件设备要求

Windows xp操作系统;

Myeclipse6.5集成开发工具;

三、实验内容和学时分配

1、实验内容

实验一:创建用户类 实验二:重构用户类

实验三:使用集合(数组、向量)构建用户管理类 实验四:递归日志查询

实验五:对集合(数组、向量)进行排序查找 实验六:构建聊天客户端界面 实验七:输入输出流

1

实验八:数据库编程

2、课时分配

总学时:16学时 实验 1 2 3 4

学时数 2 2 2 2 实验 5 6 7 8 学时数 2 2 2 2 四、各实验简述

实验准备:

在E盘建立以自己姓名为名称的文件夹,以便保存实验数据。

2

实验一:创建用户类

1.1实验目的

1) 熟悉Java开发环境 2) 掌握Java语言基础知识

3) 运用基础知识实现聊天程序中的用户类

1.2实验内容

1) 新建一个Hello.java程序,在控制台打印”欢迎使用本聊天系统!”。

2) 新建一个Test类,在test类中打印下面表达式的运算结果,设a=3,b=-5,f=true:

(1) --a % b ++ (2) (a>=1&&a<=12?a:b)

3) 创建聊天程序中的用户类(User),用户拥有自己的名称、出生年份、年龄、密码等信息。其中年龄要通过出生年份计算出来。

1.3实验步骤

1) 在MyEclipse中新建一个Java工程,工程文件保存到E盘自己名字下,新建Hello.java程序

public class Hello {

public static void main(String[] args){ System.out.println(\欢迎使用聊天系统!\); } }

2) 新建Test类测试表达式 1.编写测试程序,打印测试结果

public class Test {

public static void main(String[] args){ } }

int a = 3; int b = -5; boolean f = true;

int c=--a % b ++;//自增,自减测试 System.out.println(c);

2.实验分析:

(1)各表达式的结果是怎么得出来的即表达式的执行顺序? (2)计算表达式的值(a>=1&&a<=12?a:b) ? 3) 创建用户类

3

确定类的属性和方法,定义用户类,模板如下:

//创建一个用户类。记得类名字要用英文书写,首字母大写 import java.util.Date; public class User{

//用户名 记得写注释 代码的排版要美观 String name = “”;//String name = “”; //密码

类型 密码(pwd) = 初值; //年龄

int age = -1; //出生年份 类型 born = -1;

//设置年龄的方法 记得方法名的第一个单词首字母小写,其它大写 private int setAge(){

int y = new Date().getYear()+1900;//获得当前年份

……//通过出生年份设置年龄值 年龄=当前年份(2011) 减去出生年份 }

//通过用户名、密码、出生年份创建一个用户 public User(String name, String pwd,int born){ this.name = name; this.pwd = pwd; this.born = born; this.age = setAge(); }

public static void main(String[] args){

User user = new User(“张三”,”s1234”,1900);

System.out.println(user.name+”的密码是”+user.pwd+”年龄是”+user.age);

} }

运行程序,查看输出结果。

1.4实验报告

把实验内容2和实验内容3写到实验报告上。

实验二:重构用户类

2.1实验目的

运用Java核心知识(接口、抽象、继承、封装、多态等)实现聊天系统中的用户模块;在实现的过程中掌握核心知识。

4

2.2实验内容

1) 定义一个接口类Userable,其中包括一个information方法,这个方法没有形参,返回值为空;

2) 构建一个抽象的用户类User,User继承接口类Userable,User类拥有用户名、密码、出生年份、年龄及用户类型等属性;

3) 在User类中定义一个构造方法,它有三个形参用户名、密码和出生年份,把形参的值赋给相应的属性;

4) 在User定义每个属性的get/set方法,其中年龄只用定义get方法,在修改出生年份时修改年龄大小;

5) 新建一个普通用户类GeneralUser,GeneralUser继承User类,定义一个和User类拥有相同形参的构造方法,在方法中设置用户类型的值为1(1代表普通用户)。在GeneralUser中实现information方法,用information方法打印”abc(用户名)是普通用户20(年龄)岁”;

6) 新建VIP用户类VIPUser,VIPUser继承User, 定义一个和User类拥有相同形参的构造方法,在方法中设置用户类型的值为2(2代表VIP用户)。VIPUser实现information方法打印” abc(用户名)是VIP用户20(年龄)岁”。 7) 利用”package”把这些类封装到” qq.server.user”目录下。

2.3实验步骤

1) 在聊天程序中所有的用户可能都会有一些公共的方法,我们定义一个接口Userable来规定这些方法的形式。下面就使用关键字”interface”定义接口类吧! 2) 新建一个抽象的用户类User,继承接口类Userable,用户类有用户名、密码、出生年份、年龄及用户类型等属性。这里有个模板大家把它完善。

public ___ class User ____ Userable{

protected String name;//记得要写注释哦 protected String pwd;//用户密码

??其它的属性??

} 3)

接着我们在User类中定义一个构造方法,它有三个参数用户名、密码及出生年份。通过构造方法我们就能创建一个特定的对象。

public User(String name , ____,int born){

this.name=name;

_____ //在这里怎么给密码赋值 this.born=born;//给出生年份赋值

//别忘了还要根据出生年份计算年龄

int year = new Date().getYear()+1900;//得到现在是哪一年 __________ //怎么给年龄赋值 }

4) 我们不想让别人直接访问到User的属性和方法,为属性加上get/set方法,记得其中年龄只用定义get方法,在修改出生年份时就得修改年龄大小。

//定义用户名属性及get、set方法

protected String name;//如果是私有属性将无法被继承

5

public String getName() {

}

public void setName(String name) { this.name = name; }

return name;

5) 现在我们可以定义具体的类了,让我们来定义普通用户类GeneralUser,它要继承User类,然后定义一个和User类有相同参数的方法,并实现information方法打印”abc(用户名)是普通用户20(年龄)岁”。大家把模板完善一下:

public class GeneralUser extends User {

public GeneralUser(String name, String pwd,int born) {

_______ //怎么为属性赋值? this.type=1;//设置用户类型是普通用户 }

public void information() {

System.out.println(this.getName()+\是普通用户\+age+\岁\); } }

6) 有了上面的经验,现在我们怎么创建VIP用户类VIPUser了?大家自己完成吧!

7) 现在我们就完成了用户模块的所有用户类了,我们应该把功能相似的类放到同一个目录下。现在我们新建一个包”qq.server.user”,把所有的类剪切进来,在类最前面加上打包代码” package qq.server.user;”。ok,搞定!

8) 最后我们写一个程序类Test代码如下:

package qq.server.user.test;

import qq.server.user.GeneralUser; import qq.server.user.User; import qq.server.user.VIPUser;

public class TestUser {

public static void main(String args[]){ User gerneralUser =new GeneralUser(\ User vipUser =new VIPUser(\ gerneralUser.information(); vipUser.information(); } }

执行TestUser类,看输出结果。 9) 实验分析:

(1) GeneralUser能调用User类的属性吗? (2) GeneralUser类必须实现information方法吗? (3) 在User中实现information方法: public void information(){ System.out.println(name);

};

执行TestUser,程序结果是什么?

6

(4)把TestUser中

User gerneralUser = new GeneralUser(\User vipUser = new VIPUser(\改为:

User gerneralUser = new GeneralUser(\User vipUser = gerneralUser; 执行,程序结果是什么?

(5)把User中protected String name;改为: static protected String name;

执行,程序结果是什么?为什么?

2.4实验报告

写出所有的类,把实验步骤中第八步的输出结果写到报告上,实验分析写前三点

实验三:使用集合(数组、向量)构建用户管理类

3.1实验目的

1)掌握Java中数组的定义及vector的使用 2)使用集合完成聊天系统中的用户管理类

3.2 实验内容

1)定义用户类User,User拥有用户名、密码等属性,可以通过用户名和密码构造一个用户。 2)定义一个用户管理类UserManager.java。UserManager管理聊天系统中的所有用户,有添加用户(用户注册)、查询用户、比较两个用户是否相等、返回当前用户数等功能。 3)使用数组或Vector改写UserManager。

3.3 实验步骤

1)可以用实验二中定义的用户类,也可以自己重新编写一个用户类User.java. (1)定义属性 protected String name;//用户名

//密码

7

protected String pwd;

(2)定义构造函数 public User(String name,String pwd){

}

this.name=name; this.pwd=pwd;

(3)定义get/set方法

2) 定义一个用户管理类。

public class UserManager { }

3) 用户管理类是用来管理用户的,那么它首先得保存所有的用户信息,用什么保存多个用户信息?数组是也。那么我们就在用户管理类中添加一个用户数组了。

public class UserManager { }

//数组大小

private int size = 100;

//注意:数组声明的格式, 必须在创建时制定大小

private User[] userList = new User[size]; //当前用户数

private int index;

4)要管理用户我们得先往集合里面添加用户吧,写一个添加用户的方法。

}

5) 我们往数组里面添加用户了,怎么根据用户名查找用户?定义一个getUserByName

if(index

userList[index]=user;//添加用户 index++;//当前用户数+1 return true; return false;

public boolean addUser(User user){

}else{ }

的方法。

8

6) 判断用户是否存在(用户的登录名和密码是否正确),这里定义一个方法exist方法

。。。。。。//自己完成 }

7) 定义一个方法返回当前用户数。聪明的你还能定义出其它的方法吗?

public boolean exist(String name,String pwd){

}

8) 编写测试类Test.java

public static void main(String args[]){ }

9) 实验分析

(1) 实验结果是什么? (2) 打印出当前的用户数

(3) 怎么用Vector类代替数组?用Vector有什么好处? User u1 = new User(\张三\,\); User u2 = new User(\李四\,\); User u3 = new User(\王五\,\); UserManager um = new UserManager(); um.addUser(u1); um.addUser(u2); um.addUser(u3);

User user = um.getUserByName(\张三\);

System.out.println(user.name+\+ user.pwd); boolean bool=um.exist(\李四\, \); System.out.println(bool);

public class Test {

9

实验四:递归日志查询

4.1 实验目的

(1) (2) (3) (4)

了解递归的概念; 阅读并理解递归程序; 掌握递归编程方法;

使用递归完成用户日志的遍历

4.2 实验内容

1)使用递归的方法求1+2+3+….+100的值 2)使用递归的方法列取所有的用户日志,用户日志放在E盘”日志”目录下,在”日志”目录下是以用户名命名的”用户”文件夹,在用户文件夹下存放了用户的所有日志文件。

4.3 实验步骤

1) 求1+2+3+….+100的值 ,有如下定义:

f(n)=1+2+…..+n ,n=100 f(1)=1

f(n)=f(n-1)+n

我们可以定义一个函数public int f(int n),表示求1+2+3+…n的和。请大家完成方法体的定义。

10

2)日志存放如下:

E盘 日志 李四 张三 王五

其中1.txt和2.txt都是是李四的日志文件,张三和王五也有类似的日志文件,现在用递归的方法遍历日志文件夹,列出所有用户的日志文件名。 知识说明: java.io.File 类:Java中的文件类,通过它可以获得文件信息。 File file = new File(“E://日志”);//创建”日志”文件夹的File对象 file.getName();//返回文件的名称 file.isFile();//判断是否为文件

file.isDirectory();//判断是否为目录

file.listFiles();//如果是目录,通过此方法返回目录下的文件列表集合

代码模板:

public static void main(String args[]){ }

(1) 实验一的执行顺序是什么样的? (2) 实验二的打印结果是多少? (3) 怎么列出E盘下的所有文件

可选(4) 把日志文件的后缀名改为log,在递归的过程中创建日志对象,日志对象有日志

File file = new File(\日志\); listFile(file);

3) 实验分析

名、所有者等属性

11

实验五:对集合(数组、向量)进行排序查找

5.1 实验目的

掌握排序与查找的概念与方法;

5.2 实验内容

1)定义用户类User,User拥有用户名、密码、年龄等属性,可以通过用户名和密码构造一个用户。 2)定义一个用户管理类UserManager.java。UserManager用一个用户数组保存用户类,当添加一个用户到用户数组里面时,要求按用户年龄对用户进行排序。年龄小的用户排在前面。 3)找出所有处于某一岁数(20岁或25岁)的用户

5.3 实验步骤

}

1) 定义用户类User.java

protected String name; //密码

protected String pwd; protected int age;

public User(String name,String pwd,int age){ }

this.name=name; this.pwd=pwd; this.age=age;

public class User {

2) 定义UserManager类,定义用户数组

12

st中的所有用户 User[] list = new User[index];

for(int i=0;i

if(index == 0){//添加第一个用户

userList[index]=user;//添加用户 index++;//当前用户数+1 return true;

for(int i=0;i

//数组中都是比当前用户小的用户 userList[index]=user; index++; return true; return false;

User u = userList[i]; if(u.age>user.age){ }

//在数组中这个位置插入当前用户 userList[i]=user;

for(int j=i+1;j<=index;j++){ userList[j]=_______;//填空 j-1 }

index++; return true;

list[i]=userList[i];

3) 定义addUser方法 ,public boolean addUser(User user)。

public boolean addUser(User user){

//创建一个临时的用户数组,保存userLi

}else if(index

户的用户

}else{

13

}

}

4) 在UserManager定义toString方法,打印出用户信息 public String toString(){

}

for(int i=0;i

User u = userList[i];

System.out.println(u.name+\年龄:\+u.age); }

return null;

5) 定义Test类

public class Test { }

6) 实验分析

(1) 运行程序,结果是多少?是不是依据年内大小排的序? (2) 多添加一些用户,在运行,看结果. (4) 怎么找出处于某一年龄的所有用户 (5) 能不能更改一下排序方法

public static void main(String args[]){ }

User u1 = new User(\张三\,\,21); User u2 = new User(\李四\,\,20); User u3 = new User(\王五\,\,18); UserManager um = new UserManager(); um.addUser(u1); um.addUser(u2); um.addUser(u3);

User user = um.getUserByName(\张三\); um.toString();

实验六:构建聊天客户端界面

5.1 实验目的

1) 了解Java系统图形用户界面的工作原理和界面的设计步骤; 2) 了解图形界面的事件响应机制;

3) 常握图形界面基本组件、布局策略的设计与使用;

5.2 实验内容

1) 构建聊天客户界面,包括消息显示窗口、消息发送窗口、选择好友的选择窗口、发

14

送按钮。

2) 为发送按钮添加事件,把消息显示在消息窗口中。

5.3 实验步骤

我们首先开发一个简单的界面程序ClientChatUI,一个界面首先是一个JFrame对象,即一个窗体;然后我们就可以在窗体上添加组建;最后为组建添加事件。

1) 完成一个拥有窗体的界面

15

}

}

//显示一个窗体界面的方法

public void showFrame(){ }

//设置标题

this.setTitle(\欢迎\ + this.userName);

java.awt.FlowLayout fl = new java.awt.FlowLayout(0); this.setLayout(fl); this.setSize(300, 500);

this.setDefaultCloseOperation(3); //窗体关闭时程序退出 this.setVisible(true);

2) 定义一个initUI方法,在方法中添加组建。

两个JLabel,一个显示”接收到的消息:”,一个显示”发送给:”

一个显示消息区域JTextArea,一个消息发送窗口JTextField,一个选择用户的选择窗口JComboBox,一个发送按钮JButton。 代码片段:

16

3) 添加发送事件

4) 实验分析

运行程序,看是否得到了预期结果? 服务器界面怎么写?

17

实验七:输入输出流

7.1 实验目的

(1) 了解流式输入输出的基本概念;

(2) 熟悉Java.io包中常用的基本输入输出类; (3) 掌握程序与文件之间的基本输入输出操作;

7.2 实验内容

1) 把字符串“20102324,张三,男,25,软件工程”,保存到文件”d:\\\\a.txt”

中,并读取打印a.txt文件中的内容。

2) 把我们在聊天界面中发送的消息保存到日志文件里面,在界面上添加一个历史按钮,当点击历史按钮时读取日志文件内容。

7.3 实验步骤

1)把字符串“20102324,张三,男,25,软件工程”,保存到文件”d:\\\\a.txt”

中,并读取打印a.txt文件中的内容。 (1) 定义变量message,值为“20102324,张三,男,25,软件工程”; (2) 创建指向”D:\\\\a.txt”的文件对象 (3) 创建输出流

(4) 把message写入流(文件)中 (5) 关闭输出流 (6) 创建输入流 (7) 读取文件内容 (8) 打印文件内容 (9) 关闭输入流

2) 把我们在聊天界面中发送的消息保存到日志文件里面,在界面上添加一个历史按钮,当点击历史按钮时读取日志文件内容。

(1) 编写聊天界面,添加发送按钮的鼠标点击事件

(2) 在事件处理方法中把聊天信息写入文件,注意不能覆盖文件里面已有的信息。

File myFile=new File(\);

FileOutputStream fout = new FileOutputStream(myFile,true);//不覆盖

(4) 在界面上添加一个”历史”按钮,完成事件处理方法。当点击按钮时,把日志(a.txt)

里面的内容显示到聊天界面中。

18

实验八:数据库编程

8.1 实验目的

1) 掌握sql建表,CRUD常用语法;

2) 掌握jdbc编程技术;

3) 使用JDBC完成用户登陆验证。

8.2 实验内容

1) 使用sql语句在sql server 2008中新建用户表User,表结构如下: 字段名 user_login user_name user_psw 插入以下记录: 用户表(user) 字段类型 约束限制 PK VARCHAR(15) Not null VARCHAR(20) Not null VARCHAR(20) 用户姓名 张三 李四 说明 用户登录名 用户姓名 用户登陆密码 用户登陆密码 111111 111111 用户登录名 张三 lisi 2) 新建登陆界面,完成用户的登陆认证。当用户登陆成功时弹出“登陆成功界面”,失败时弹出”登陆名或密码错误!”。

8.3 实验步骤

1) 在sqlserver2008中新建聊天数据库chat。写出创建用户表user的sql语句,在数据库chat的查询窗口中执行此语句。

2) 使用sql语句往user表中插入用户数据。

3) 新建用户登陆界面,如下图,添加登陆事件。

4) 新建ConnToSqlServer类,实现连接数据库的验证方法。 package user.login; import java.sql.Connection;

19

import java.sql.DriverManager;

}

}

}else{ System.out.println(\没有此用户\ }

} catch (Exception e) { System.out.println(\数据库连接失败!\ e.printStackTrace(); }

return bool;

5) 在登陆事件的处理方法中调用ConnToSqlServer.connDB方法,返回真显示”登陆成功”,否则显示”登陆失败”。 参考方法:

JOptionPane.showMessageDialog(null, \登陆成功!!\弹出一个窗口,显示登陆成功。

20

本文来源:https://www.bwwdw.com/article/jb1w.html

Top