基于Java聊天室的设计.docx
《基于Java聊天室的设计.docx》由会员分享,可在线阅读,更多相关《基于Java聊天室的设计.docx(12页珍藏版)》请在冰豆网上搜索。
基于Java聊天室的设计
《Java程序设计》
项目设计报告
(2011—2012学年第2学期)
题目:
基于JAVA的聊天室
专业:
计算机科学与技术
班级:
姓名:
指导教师:
成绩:
计算机科学与技术系
2012
年
月
日
一.项目设计总体目标
本项目实训是在学生自学完Java程序设计实用教程之后安排的综合实践训练,通过项目综合实训,使学生在掌握Java语言的计基本知识的基础上,加深学生对所学知识的理解,提高学生的综合应用能力和解决实际问题的能力。
二.系统总体设计
1.聊天室结构图(服务器与客户端是一对多的关系):
2.聊天室系统功能介绍:
(1)服务器端可以实时显示客户端的用户列表,当用户上线或者下线时,都会自动刷新
(2)服务器端可以实时显示用户聊天室信息,管理员对于发表非法言论或无理取闹者踢出聊天室,器管理员通过公告栏发送一些公告信息,服务器管理员也可以参与聊天室的聊天
(3)客户端显示所有的在线客户信息
(4)客户端可以向所有在线客户发送信息(聊天室里)和显示所有客户发送的群信息(聊天室里)
客户可以选择其他客户进行私聊,输入信息发送给对方,可以通过截屏发送给对方,对方可以接收截屏信息,可以选择文件发送给对方,对方可以接收文件信息,客户可以选择音乐文件进行播放
(5)客户不想聊时可以退出聊天室
2.功能需求与程序模块的对应关系:
需求
模块
用户登入
Login
用户注册
Register
显示在线用户
FriendsTree
聊天室(管理员默认加入)
ServerChatRoom,ClientChatRoom
私聊
PrivateChat
截图
PritScreen
发送文件、接收文件
FileSend,FileReceive
播放音乐
MusicPlayer
显示在线与不在线用户列表(服务端)
UserTree
数据库交互模块
ServerDaoTmpl
三.用户登入和用户注册:
1.用户注册和用户登入的流程图:
用户注册用户登入
界面(登入、注册)使用到Swing技术;随着模仿QQ,实现简单的qq功能:
注册、登陆、聊天功能。
运行服务器端,再运行客户端出现如(图1)的登入界面,单击注册,进入如(图2)的登入界面。
用户注册时,注册的信息会保留在userdata信息表中,(图2-1),实验中使用的数据库database是Access数据库,只有当输入的账号与密码和userdata信息表中的一致时才能登入,否则提示账号或密码输入错误。
图1
登录的代码:
publicvoidlogin(){
try{
Stringmessage=in.readUTF();
StringTokenizerst=newStringTokenizer(message,"|");
Stringstr=st.nextToken();
if(str.equals("success")){
this.setVisible(false);
this.dispose();
FriendsTreefrind=newFriendsTree(st.nextToken(),this.socket);
frind.setVisible(true);
}elseif(str.equals("error")){
JOptionPane.showMessageDialog(this,"用户名或密码错误","错误",JOptionPane.WARNING_MESSAGE);
textField.setText("");
passwordField.setText("");
}elseif(str.equals("resetLogin")){
JOptionPane.showMessageDialog(this,"该账户已经登录","提示",
JOptionPane.WARNING_MESSAGE);
}
}catch(IOExceptione){
e.printStackTrace();
}
}
图2
判断注册是否成功的代码:
publicvoidregister(){
try{
Stringmessage=in.readUTF();
StringTokenizerst=newStringTokenizer(message,"|");
Stringstr=st.nextToken();
if(str.equals("success")){
JOptionPane.showMessageDialog(this,"注册成功","成功",JOptionPane.WARNING_MESSAGE);
this.dispose();
}elseif(str.equals("usernameRepeat")){
JOptionPane.showMessageDialog(this,"账户已经被注册","注册失败",JOptionPane.WARNING_MESSAGE);
}elseif(str.equals("nameRepeat")){
JOptionPane.showMessageDialog(this,"该昵称已经被注册","注册失败",JOptionPane.WARNING_MESSAGE);
}elseif(str.equals("error")){
JOptionPane.showMessageDialog(this,"注册失败","错误",JOptionPane.WARNING_MESSAGE);
}
}catch(IOExceptione){
e.printStackTrace();
}
}
图2-1
四.聊天室和显示在线用户的设计:
登入后,进入聊天室界面,(图3)有三个客户端登入了聊天室,可以显示在线的用户,在新用户上线和用户下线时要更新每个客户端在线用户列表名,且可以和在线的用户实现一对一的私聊功能。
(图4)为服务器的已登入界面,服务器端实时显示在线用户,只要客户端用户点击聊天室,就能进入聊天室,在聊天室中大家可以随便聊天,管理员可以通过公告栏通知消息。
图3
图4
五.私聊:
私聊流程图:
客户端之间可以进行私聊,(图5)用户小宇宇与茂茂之间的聊天信息,两者之间还可以发送文件、接收文件(图6)、截图、选择音乐进行播放(图7)
图5
私聊的代码:
publicvoidmouseClicked(MouseEvente){
DefaultMutableTreeNodeuser_node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if(e.getClickCount()==2&&user_node.isLeaf()){
online_name=newString(user_node.toString());
if(online_name.equals("在线用户")&&user_node.isLeaf()){
JOptionPane.showMessageDialog(this,"暂无在线用户","警告",JOptionPane.WARNING_MESSAGE);
}elseif(chat.get(online_name)==null){
pri=newPrivateChat(online_name,name,this.socket);
chat.put(online_name,pri);
pri.setVisible(true);
}else{
JOptionPane.showMessageDialog(this,"你已经与"+online_name+"在聊天","警告",JOptionPane.WARNING_MESSAGE);
pri.setVisible(true);
}
}
}
图6
图7
五.总结
通过两个月的项目试验,收获很大,学到了很多书本上没有的知识。
也提高的解决问题的能力。
小组四人分工合作,遇到问题一起讨论,通过向同学请教,上网查资料一步一步的解决。
本次试验主要涉及图形用户界面的开发、布局和输入/输出流数据的控制,并且要通过Socket技术实现网络功能,整个程序采用Swing图形界面,要求熟练掌握Java图形用户界面的事件处理及部分Swing组件的使用,还要掌握数据库的应用,在实验中遇到问题最多的就是建立数据库部分,首先要设置好数据源,找到驱动,在Java中才能与数据库进行连接。
一开始在acceaa数据中的userdata信息表中没有注意日期的格式,导致在注册的时候一直无法成功,一遍一遍的检查,才发现了这个问题。
只有通过自己的实践,才能更好的将理论知识运用,才会发现自己不足之处和需要提高的知识,也提高了解决问题的能力,这对我们以后的学习和工作有很大的帮助。
指导教师
评语
设计
成绩
指导教师签字
年月日