目录
第一部分 项目概况
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.参考的资料
第五部分 活动总结
第一部分 项目概况
项目名称:JAVA聊天室系统。
客 户:一般大众。
软件学院两年多的办学历程中,采用了印度NIIT的先进教学法,学生从中极大地提高了专业知识能力,对于学生的动手能力也得到了明显的提高。为了进一步地考察学生的专业知识能力,让其能够明确自我专业知识水平,提高学习的兴趣,弄清专业发展方向,为以后的就业打好基础,现特向我院领导申请举办软件学院首届“软件科技月”活动。本次活动面向全校计算机爱好者,并且与成都多所高校及IT企业联合开展系列活动。活动以软件学院学生为主体对象,主张“接触IT企业,明确专业方向,苦修专业知识”。
第二部分 项目计划
1. 项目目标
(1),允许新用户注册,同时开设帐户。
(2),允许用户进行在线的公聊和私聊。
(3),可以创建留言版面并且留言。
(4),允许用户创建私人包间、查找包间并且在包间内聊天。
(5),可通过帐户ID号对用户资料进行查询。
(6),友好的欢迎界面并显示上次登陆时间。
2. 项目范围
本软件适用于一般大众。
3. 项目策略
通过可视化编程的JAVA程序和SQL数据库的方式进行实现。
通过增量开发的方法进行此项目的设计与开发。
使用套节字进行客户与服务端的通讯。
4.项目开发周期
第一周 |
需求分析及初步设计阶段(决定每个功能所需的类及数据类型) |
第二周 |
根据相应功能设计出各类所用到的方法及数据类型 |
第三周 |
具体实现各个类中的各个方法 |
第四周 |
对各个界面和服务器进行调整及测试完善工作 |
5. 每项任务所需技能
数据库建立:熟练的SQL数据库编程。
服务端与客户端的连接:熟悉网络编程中的协议及数据流
程序界面设计:可视化编程技能。
代码实现:JAVA与数据库编程。
开发工具: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 "+ e6 Timer 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 |