目录
第一部分 项目概况
1.项目说明………………………………………………………………………..4
2.项目背景………………………………………………………………………..4
第二部分 项目计划
1. 项目目标……………………………………………………………… ………4
2. 项目范围……………………………………………………………… ………4
3. 项目策略……………………………………………………………… ………4
4. 项目开发周期………………………………………………………… ………4
5. 每项任务所需技能…………………………………………………… ……. ..5
6. 所采用的工具和技术清单…………………………………………………….5
第三部分 项目设计
1 需求分析……………………………………………………………………….5
2 软件功能……………………………………………………………………….5
3 概要设计……………………………………………………………………….6
4 详细设计……………………………………………………………………….6
第四部分 项目测试
1. 测试阶段
2.程序界面.…………………………………………………………………7
3.程序运行的条件
4.参考的资料
第五部分 活动总结
第一部分 项目概况
1.项目说明
项目名称:JAVA聊天室系统。
客 户:一般大众。
2、项目背景
软件学院两年多的办学历程中,采用了印度NIIT的先进教学法,学生从中极大地提高了专业知识能力,对于学生的动手能力也得到了明显的提高。为了进一步地考察学生的专业知识能力,让其能够明确自我专业知识水平,提高学习的兴趣,弄清专业发展方向,为以后的就业打好基础,现特向我院领导申请举办软件学院首届“软件科技月”活动。本次活动面向全校计算机爱好者,并且与成都多所高校及IT企业联合开展系列活动。活动以软件学院学生为主体对象,主张“接触IT企业,明确专业方向,苦修专业知识”。
第二部分 项目计划
1. 项目目标
(1),允许新用户注册,同时开设帐户。
(2),允许用户进行在线的公聊和私聊。
(3),可以创建留言版面并且留言。
(4),允许用户创建私人包间、查找包间并且在包间内聊天。
(5),可通过帐户ID号对用户资料进行查询。
(6),友好的欢迎界面并显示上次登陆时间。
2. 项目范围
本软件适用于一般大众。
3. 项目策略
通过可视化编程的JAVA程序和SQL数据库的方式进行实现。
通过增量开发的方法进行此项目的设计与开发。
使用套节字进行客户与服务端的通讯。
4.项目开发周期
第一周
需求分析及初步设计阶段(决定每个功能所需的类及数据类型)
第二周
根据相应功能设计出各类所用到的方法及数据类型
第三周
具体实现各个类中的各个方法
第四周
对各个界面和服务器进行调整及测试完善工作
5. 每项任务所需技能
数据库建立:熟练的SQL数据库编程。
服务端与客户端的连接:熟悉网络编程中的协议及数据流
程序界面设计:可视化编程技能。
代码实现:JAVA与数据库编程。
6. 所采用的工具
开发工具:Microsoft JAVALE(jdk1.3)+ Microsoft SQL Server
开发环境:windows2000+个人电脑
第三部分 项目设计
1.需求分析
随着经济的日益发展,网络的观念深入人心。人们越来越需要通过网络高效简捷的交流,聊天室就是其中的一个工具。
2.软件主要功能
(1),允许新用户注册,同时开设帐户。
(2),允许用户进行在线的公聊和私聊。
(3),可以创建留言版面并且留言。
(4),允许用户创建私人包间、查找包间并且在包间内聊天。
(5),可通过帐户ID号对用户资料进行查询。
(6),友好的欢迎界面并显示上次登陆时间。
程序中要用到的类
1、客户端
BaojianNew >>创建包间
BaoJianFind >>查找包间加入包间
BaoJianEnter >>进入包间
BaoJianQu >>包间区聊天
NewPanel >>界面背景图处理
PrivateMessage >>私聊功能
UserFind >> 查找用户功能
Register >> 注册功能
EnterGUI >> 登陆功能
ChatRoom >> 公共聊天功能
LiuYan >>留言板
SocketConstants>>接口(包含服务端IP地址,以及自定义端口号#6655)
2、服务端
Server
>>处理聊天内容
三、设计细节与构造
(一) 编写服务端程序
(1) 问题陈述
需要在JAVA中开发一个中间层服务器应用程序,其功能如下:
a.接受用户注册信息并保存在一个表中(需连接数据库).
b.执行用户的设定的查找功能.
c.能够允许注册过的用户登陆聊天界面并可以聊天.
d.能够接受私聊信息并发送给特定的用户
e.能够接受用户创建的包间信息并保存到一张表中BaoJian
f.能够允许用户查找,登陆,加入包间并进行聊天
g.能够接受用户的留言,并保存到以用户名为文件名的文件内
h.服务器运行在自定义的端口上#1001.
(2) 计划解答
a. 选择创建网络服务器应用程序所需引用的类和方法。
b、确定用户自定义的类、他们的目的、方法。
c、确定用户自定义的类中的数据类型和变量。
d、确定服务器的IP地址和端口号。
e、确定何时连接到数据库中。
f、确定查询参数。
g、确定要处理的例外。
h、确定例外的出错信息。
任务a. 选择创建网络服务器应用程序所需引用的类和方法。
任务
解答来源
结果
选择创建网络服务器应用程序所需引用的类和方法。
类
方法
Serversocket
accept ()
Thread
Start(),run()
Socket
getInputStream(),getOutputstream()
ObjectInputStream
readObject()
ObjectOutputStream
writeObject()
BufferedReader
readLine()
Vector
addElement(),removeElement()
任务b、确定用户自定义的类、他们的目的、方法。
任务
解答来源
结果
确定用户自定义的类、他们的目的、方法。
类
目的
方法
Serversocket
监听客户请求
run(), ServerSocket()
Connect
处理客户端的各种操作
Connect(),enter(),register(),find()
send(), enter(), time()
Members
保留申请人信息
BaoJian
保留包间信息
Applicant
保留留言信息
任务c、确定用户自定义的类中的数据类型和变量。
任务
解答来源
结果
确定用户自定义的类中的数据类型和变量。
类
数据类型
变量
Serversocket
ServerSocket
Socket
Thread
Server
FromClient
serverThread
Connect
Members
ObjectInputStream
ObjectOutputStream
PrintStream
BufferedReader
String
StringBuffer
Vector
Vector
Vector
Vector
Result
data
ObjIn
streamFromClient
out
in
user
vmessage
vprivate,vprivatemessage
vbaojian,vbaojianmessage
vbaojianClient
vpeople
result2
Members
String
String
String
String
String
String
String
String
memberID;
memberName;
memberPassword;
memberSex;
memberAddress;
memberPosition;
memberAge;
memberInterest;
BaoJian
String
String
String
BaoJianID
BaoJianName;
BaoJianMiaoShu;
Applicant
String
utxt
任务d、确定服务器的IP地址和端口号。
任务
解答来源
结果
确定服务器的IP地址和端口号。
IP地址:本机IP地址
端口:1001
任务e、确定何时连接到数据库中。
任务
解答来源
结果
确定何时连接到数据库中。
(1) 当用户注册时,插入注册信息
(2) 当用户登陆时,检验是否存在ID
(3) 当用户查找时,选出有关信息
(4) 当用户创建,查找,加入,进入包间时
任务f、确定查询参数。
任务
解答来源
结果
确定查询参数。
vMemberPassword,vMemberName,vBaoJianID
任务g、确定要处理的例外。
任务
解答来源
结果
确定要处理的例外。
例外
发生场合
Exception
IOException
InvalidClassException
NotSerializableException
创建Thread对象时,
当调用accept()方法时,
当调用getInputStream()
以及getOutputStream()方法时,
当调用writeObject(),println (),readLine()方法时当连接数据库时
当调用readObject()方法时
当调用readObject()方法时
当调用readObject()方法时
任务h、确定例外的出错信息。
任务
解答来源
结果
确定例外的出错信息。
例外
出错信息
Exception
IOException
InvalidClassException
NotSerializableException
"Cannot start the Thread"
"not listen to the client"
"the wrong is this :"+e
"the wrong is here :"+e
"the wrong is here2 :"+e
"the wrong is here3 :"+e
"the wrong .......... :"+e
"cannot read from client :"+e
"cannot write the vmessage"+e
"cannot serialize Members class"+e
"Object is not serializable"+e
(3) 实施解答
a. 编写服务器程序
b. 保存程序
c. 编译程序
d. 运行程序
(4)验证解答:在创建好客户端后进行验证.
(二) 编写客户端程序
1、编写注册界面程序
(1) 问题陈述:
编写一个客户端程序将用户注册的信息发送给服务端.
(2) 计划解答
a.选择创建该程序所需要引用的类和方法
b.确定用户自定义的包、类、它们的目的及方法
c.确定用户定义类中的数据类型和变量
d.确定建立连接时服务器的IP地址和端口号
e.确定提交到服务器上的数据
f.确定何时提交数据
g.确定要处理的例外
h.确定例外的出错信息
任务a.选择创建该程序所需要引用的类和方法
任务
解答来源
结果
选择创建该程序所需要引用的类和方法
类
方法
Socket
ObjectOutputStream
PrintStream
BufferedReader
ObjectInputStream PrintStream out=null; BufferedReader in=null; ObjectInputStream objIn; ObjectOutputStream objOut=n PrintStream out=null; BufferedReader in=null; ObjectInputStream objIn; ObjectOutputStream objOut=n PrintStream out=nu BufferedReader
getOutputStream()
writeObject()
println();
readLine();
readObject();
任务b.确定用户自定义的包、类、它们的目的及方法
任务
解答来源
结果
.确定用户自定义的包、类、它们的目的及方法
类
目的
方法
Members
保留申请人信息
Register
实现界面及功能
openRegister()
main()
register()
actionPerformed()
任务c.确定用户定义类中的数据类型和变量
任务
解答来源
结果
确定用户定义类中的数据类型和变量
类
数据类型
变量
Members
String
String
String
String
String
String
String
String
memberID;
memberName;
memberPassword;
memberSex;
memberAddress;
memberPosition;
memberAge;
memberInterest;
Register
Socket
ObjectOutputStream
以及其中的许多空控件
ClientSocket
objOut
任务d.确定建立连接时服务器的IP地址和端口号
任务
解答来源
结果
d.确定建立连接时服务器的IP地址和端口号
IP地址:本机IP地址
端口号:1001
任务e.确定提交到服务器上的数据
任务
解答来源
结果
e.确定提交到服务器上的数据
Members类中的一个对象
任务f.确定何时提交数据
任务
解答来源
结果
确定何时提交数据
点击buttonHandIn按钮时
任务g.确定要处理的例外
任务
解答来源
结果
.确定要处理的例外
例外
发生场合
InvalidClassException
NotSerializableException
IOException
当调用writeObject()方法时
当调用writeObject()方法时
当调用writeObject()方法时
任务h.确定例外的出错信息
任务
解答来源
结果
确定例外的出错信息
例外
出错信息
InvalidClassException
NotSerializableException
IOException
"The RegisterApply class is invalid :"+e1
"The object is not serializable :"+e2
"Cannot write to the server :"+e3
(3) 实施解答
(4) 验证解答
2、编写查找界面程序
(1) 问题陈述
编写一个查找界面的程序,将信息显示在文本框内.
(2) 计划解答(略)
(3) 实施解答
a. 编写注册界面程序
b. 保存程序
c. 编译程序
d. 运行程序
(4) 验证解答:输入一个已经注册的ID执行后看有关信息是否显示;
输入一个没有注册的ID执行后看其效果;
3、编写登陆界面程序
(1) 问题陈述
(2)计划解答(略)
a.选择创建该程序所需要引用的类和方法
b.确定用户自定义的包、类、它们的目的及方法
c.确定用户定义类中的数据类型和变量
d.确定建立连接时服务器的IP地址和端口号
e.确定提交到服务器上的数据
f.确定何时提交数据
g.确定要处理的例外
h.确定例外的出错信息
(2) 实施解答
a. 编写注册界面程序
b. 保存程序
c. 编译程序
d. 运行程序
(4)验证解答
4、编写聊天界面程序
(1)问题陈述
(2)计划解答
a.选择创建该程序所需要引用的类和方法
b.确定用户自定义的包、类、它们的目的及方法
c.确定用户定义类中的数据类型和变量
d.确定建立连接时服务器的IP地址和端口号
e.确定提交到服务器上的数据
f.确定何时提交数据
g.确定要处理的例外
h.确定例外的出错信息
任务a.选择创建该程序所需要引用的类和方法
任务
解答来源
结果
选择创建该程序所需要引用的类和方法
类
方法
Thread
Socket
PrintStream
BufferedReader
ObjectInputStream
ObjectOutputStream
Vector
Timer
run()
getInputStream(),get……..
println()
readLine();
readObject();
writeObject()
elementAt(),size()
.start(),actionPerformed
任务b.确定用户自定义的包、类、它们的目的及方法
任务
解答来源
结果
确定用户自定义的包、类、它们的目的及方法
包
类
目的
方法
ChartingRoom.Room
Room
TimeAction
处理消息的
发送定时地接受消息并显示在文本区内
main()
OpenRoom()
actionPerformed()
run()
actionPerformed()
任务c.确定用户定义类中的数据类型和变量
任务
解答来源
结果
确定用户定义类中的数据类型和变量
数据类型
变量
Socket
PrintStream
BufferedReader
ObjectInputStream
Vector
String
Int
clientSocket,time clientSocket
out, timeout
in, timein;
objIn,timeobjIn;
vmessage,vpeople
sDate,sTime,sStatus;
countmessage,countpeople
任务d.确定建立连接时服务器的IP地址和端口号
任务
解答来源
结果
确定建立连接时服务器的
IP地址和端口号
IP地址:本机IP地址
端口号:6655
任务e.确定提交到服务器上的数据
任务
解答来源
结果
确定提交到服务器上的数据
发送区内地消息
任务f.确定何时提交数据
任务
解答来源
结果
确定何时提交数据
当点击按钮 ”send”
任务g.确定要处理的例外
任务
解答来源
结果
确定要处理的例外
例外
发生场合
InvalidClassException
NotSerializableException
IOException
Exception
InterruptedException
接受消息时
接受消息时
接受消息时
Timer 启动时
时间线程启动时
任务h.确定例外的出错信息
任务
解答来源
结果
确定例外的出错信息
InvalidClassException
NotSerializableException
IOException
Exception
InterruptedException
"The RegisterApply class is invalid :"+e
"The object is not serializable :"+e
"Cannot write to the server :"+e
"Timer has wrong "+ e6Timer
println(e)
(3)实施解答
a. 编写注册界面程序
b. 保存程序
c. 编译程序
d. 运行程序
(4)验证解答
5.编写登陆界面程序
( 1 ) 问题陈述
(2)计划解答(略)
a.选择创建该程序所需要引用的类和方法
b.确定用户自定义的包、类、它们的目的及方法
c.确定用户定义类中的数据类型和变量
d.确定建立连接时服务器的IP地址和端口号
e.确定提交到服务器上的数据
f.确定何时提交数据
g.确定要处理的例外
h.确定例外的出错信息
(3) 实施解答
a. 编写包间界面程序
b. 保存程序
c. 编译程序
d. 运行程序
6. 编写创建包间界面程序
( 1 ) 问题陈述
(2)计划解答(略)
a.选择创建该程序所需要引用的类和方法
b.确定用户自定义的包、类、它们的目的及方法
c.确定用户定义类中的数据类型和变量
d.确定建立连接时服务器的IP地址和端口号
e.确定提交到服务器上的数据
f.确定何时提交数据
g.确定要处理的例外
h.确定例外的出错信息
(4) 实施解答
a. 编写注册界面程序
b. 保存程序
c. 编译程序
d. 运行程序
7.编写查找包间界面程序
i. 问题陈述
(2)计划解答(略)
a.选择创建该程序所需要引用的类和方法
b.确定用户自定义的包、类、它们的目的及方法
c.确定用户定义类中的数据类型和变量
d.确定建立连接时服务器的IP地址和端口号
e.确定提交到服务器上的数据
f.确定何时提交数据
g.确定要处理的例外
h.确定例外的出错信息
ii. 实施解答
a. 编写注册界面程序
b. 保存程序
c. 编译程序
d. 运行程序
8. 入包间以及在包间内聊天(略)
9. 私聊界面(略)
10.留言界面(略)
控制
条件
值
预期结果
实际结果
结论
整理
按钮"发送"
None
被点击
消息显示
YES
OK
OK
按钮"查找"
None
被点击
打开查找界面
YES
OK
OK
按钮"退出"
None
被点击
退出
在用户列表中清除了用户名
OK
OK
TimeAction
None
自动执行
不断更新消息
YES
OK
OK
菜单“留言”
None
被点击
YES
OK
OK
菜单“界面
None
被点击
YES
OK
OK
菜单项“创建”
None
被点击
YES
OK-----
OK-----
菜单项“查找”
None
被点击
YES
OK----
OK---
菜单项“进入”
None
被点击
打开包间界面
OK----
OK---
用户列表
None
被双击
打开私聊界面
OK
OK
发送区
None
按下Enter键
发送信息
OK
OK
2、注册界面
控制
条件
值
预期结果
实际结果
结论
整理
按钮“Register”
表中没有同一ID
被点击
插入表中
YES
OK
OK
按钮“ReWrite”
None
被点击
清除内容
YES
OK
OK
按钮“GoOut”
None
被点击
退出
YES
OK
OK
3、登陆界面
控制
条件
值
预期结果
实际结果
结论
整理
按钮”Enter”
表中存在ID并且Password正确
被点击
进入聊天室,并且
名字显示在标题上
YES
OK
OK
按钮”Register”
None
被点击
进入注册界面
YES
OK
OK
按钮”ReWrite”
None
被点击
清除所填内容
YES
OK
OK
按钮”GoOut”
None
被点击
退出
YES
OK
OK
4、查找界面
控制
条件
值
预期结果
实际结果
结论
整理
按钮“Find”
表中存在ID
被点击
显示出查找用户的信息
YES
OK
OK
按钮”GoOut”
None
被点击
退出
YES
OK
OK
5.私聊界面
控制
条件
值
预期结果
实际结果
结论
整理
按钮 “回复
发送信息
被点击
YES
OK
OK
按钮”返回“
None
被点击
退出
YES
OK
OK
发送区
Enter键
发送
Timer对象
定时接受
自动
接受信+显示
6.包间聊界面(与私聊界面相似)
控制
条件
值
预期结果
实际结果
结论
整理
按钮 “回复
发送信息
被点击
YES
OK
OK
按钮”返回“
None
被点击
退出
YES
OK
OK
发送区
Enter键
发送
Timer对象
定时接受
自动
接受信+显示
7.包间查找创建界面(略)
8.留言界面
控制
条件
值
预期结果
实际结果
结论
整理
按钮“提交”
None
被点击
提交信息
YES
OK
OK
按钮”返回”
None
被点击
退出
YES
OK
OK