聊天程序JAVA课程设计报告书文档格式.docx
- 文档编号:8441427
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:28
- 大小:104.70KB
聊天程序JAVA课程设计报告书文档格式.docx
《聊天程序JAVA课程设计报告书文档格式.docx》由会员分享,可在线阅读,更多相关《聊天程序JAVA课程设计报告书文档格式.docx(28页珍藏版)》请在冰点文库上搜索。
基于Socket的局域网通信软件应用围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。
第1章系统分析与设计
随着互联网的发展,网上聊天已经成为当今的一种时尚,,MSN等聊天工具为人们提供一个更为广大的交流平台。
本设计的聊天系统实现了网络聊天室的登录,注册,聊天室的选择等功能,并支持单人和多人聊天方式,同时也加入了管理员的角色,管理员对聊天室的用户进行管理,包括删除用户和赶出聊天室。
1.1系统功能需求
本系统主要通过客户端,服务器端来体现聊天系统的基本功能。
1.1.1服务器端
1.处理用户注册
2.处理用户登录
3.处理用户发送信息,服务器监控聊天容
4.处理用户得到信息
5.处理用户退出
1.1.2客户端
1.用户注册界面与结果
2.用户登录界面与结果
3.用户发送信息界面与结果
4.用户得到信息界面与结果
5.用户退出界面与结果
1.2模块设计
通过上述需求分析,本系统分为登录与选择聊天室模块,注册模块,聊天模块,管理用户模块,数据库操作模块五大模块,具体描述如表1-1
表1-1聊天系统模块表
模块名
类名
功能描述
数据库操作模块
DBHandler
封装了一下JDBC的API,向本聊天系统提供数据库操作方面的接口。
登录与选择模块
LoginFrame
登陆界面,其中提供权限检测的功能
SelRoomFrame
聊天室选择界面,提供了聊天室选择功能
注册模块
注册界面,提供普通用户注册功能
管理用户模块
ManageFrame
管理用户界面,提供管理员删除用户的功能
聊天模块
ChatFrame
聊天界面,提供用户聊天功能,支持单人聊天,多人聊天,以与管理员赶人的功能
ChatServer
聊天服务器,用来转发,过滤用户的聊天信息,以与向用户发送信息
ChatDialog
供用户输入聊天信息的对话框
Listen
用户监听聊天服务器的线程
在整个聊天系统中里,数据库操作模块提供了相应的数据库接口,比如添加注册用户,删除用户,获取用户的权限等。
登录与聊天室选择模块分成登录和聊天室选择两部分。
登录界面是管理员和普通用户的入口,普通用户可以从登陆界面进入注册界面或者聊天室选择界面,管理员可以聊天室界面或者管理员用户界面。
聊天室选择界面提供了“谈天说地”,“缘分天空”,“休闲娱乐”三个聊天室选择,用户可以任意选择一个进入。
注册模块提供了普通用户的注册功能。
新用户注册需要输入用户名和密码,当系统中有重名时会弹出警告,要求用户重新输入。
管理用户模块提供了删除用户的功能。
管理员可以将普通用户从系统中删除,被删除用户不能登录聊天系统。
聊天模块包含服务器端和客户端两部分。
客户端聊天界面包含聊天在线用户列表以与聊天信息发布区域。
聊天对话框是用户输入聊天信息的地方。
客户端通过启动监听进程。
1.3数据库设计
本聊天系统使用SQLServer2005作为后台支持的数据库,根据需求分析的结果,使用数据库中系统数据库“model”,在此数据库里存放所有关于实现聊天逻辑的数据表。
在“model”数据库中创建名为“userInfo”的表,用来记录用户的注册数据,包括用户名,密码以与用户权限。
其中字段如表2
表1-2userInfo表结构
字段
中文描述
数据类型
是否为空
备注
userID
描述登录信息的ID
int
否
自增长,主键
name
登录用户名
Varchar(50)
password
登录密码
role
用户权限
是
0表示管理员
1表示普通用户
第2章详细设计
2.1数据库模块操作
本设计使用的是JDBC连接SQLServer2005数据库,其核心代码如下。
privatestaticConnectiongetConn(){
//数据库的URL
Stringurl="
jdbc:
sqlserver:
//localhost:
1433;
DatabaseName=model"
;
try{
Class.forName("
.microsoft.sqlserver.jdbc.SQLServerDriver"
);
Stringname="
sa"
Stringpassword="
jiajunp"
return(DriverManager.getConnection(url,name,password));
}catch(SQLExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptione){
}
returnnull;
}
上面的代码是通过Class.forName("
)命令载入驱动JDBC的驱动程序,然后通过DriverManager.getConnection函数获取数据库的连接。
其中连接数据库的URL为url="
,用户名与密码自己数据库配置是用户名和密码所致的一致。
2.2登录与聊天室选择模块
登录界面是所有用户的入口,包括用户进入聊天室选择界面,用户注册界面的入口,以与为管理员提供的管理用户界面的入口。
聊天室选择界面提供了“谈天说地”,“缘分天空”以与“休闲娱乐”三个可供选择的聊天室,用户每次登录只能选择其中一个聊天室,并且在同一个聊天室中用户只能保持一个连接。
(1)登录界面的实现(LoginFrame.java)。
登录界面中可以进行三种操作:
登录,注册以与管理。
在登录操作时,程序会调用DBHandler.java类的isAuthorized的方法,验证用户是否具有权限。
如果是,则创建SelRoomFrame对象,进入聊天室选择界面。
在注册操作时,程序会创建RegisterFrame对象,进入注册界面。
当管理动作发生后,程序会调用DBHandler.java类的isAdmin方法,判断用户是否为管理员。
如果是,则创建MangeFrame对象,进入管理用户界面。
publicLoginFrame(){
//设置显示外观为本地系统外观。
注意此句需放在初始化所有控件之前。
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exceptione){
initComponents();
(2)聊天室选择界面(SelRoomFrame.java)。
在本系统中有三个聊天室可供选择,“谈天说地”,“缘分天空”和“休闲娱乐”。
用户可以选择任意一个聊天室进入。
在聊天室选择界面中,用户可以进行聊天室选择动作,也可以退出回到登陆界面。
当用户选择一个聊天室,并按下“进入”按钮后,将创建一个ChatFrame对象,进入聊天室界面。
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand().equals("
进入"
)){
Stringchoice=getSelButton().getText();
if(choice.equals("
谈天说地"
room="
}elseif(choice.equals("
缘分天空"
)){
room="
}else{
//休闲娱乐
休闲娱乐"
}
ChatFramechatframe=newChatFrame(name,room,prio);
}
this.dispose();
publicAbstractButtongetSelButton(){
Enumeration<
AbstractButton>
e=group.getElements();
while(e.hasMoreElements()){
AbstractButtonab=e.nextElement();
if(ab.isSelected())returnab;
在使用单选按钮时,应该把所有按钮放入一个ButtonGroup里,以保证组的按钮只能有一个被选中。
getButton()函数通过遍历ButtonGroup里所有的按钮,来确定被选中的按钮。
Swing中所有的按钮都实现了AbstractButton接口,因此通过返回AbstractButton接口来提高通用性。
2.3注册模块(RegisterFrame.java)
第一次登录聊天系统可以进行用户注册。
在注册界面中,用户将提供登录所需的用户名和密码信息。
密码将采用两次输入的方法来确认输入无误。
当用户没有输入用户名或没有输入密码或两次输入的密码不一致时,将会有相应的对话框弹出。
用户注册信息将通过调用DBHandler类的regUser方法保存到userInfo表中。
如果数据库操作失败,将会弹出提示失败的对话框,如果注册成功,将返回登陆界面。
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand().equals("
注册"
)){
//用户点击“注册”按钮
if(!
(jTextFieldPw1.getText().equals(jTextFieldPw2.getText()))){
JOptionPane.showMessageDialog(this,"
密码不一致!
请重新输入"
return;
if(jTextFieldPw1.getText().equals("
"
密码不能为空!
if(jTextFieldName.getText().equals("
用户名不能为空!
intstatus=DBHandler.regUser(jTextFieldName.getText(),
jTextFieldPw1.getText());
if(status==0){
注册成功!
f.show();
this.dispose();
}elseif(status==1){
有重名!
}else{
数据库操作失败!
}elseif(e.getActionCommand().equals("
退出"
//用户按下“退出”按钮。
f.show();
this.dispose();
2.4管理用户模块(MangeFrame.java)
管理模块是只有管理员才能进入的区域,管理员通过管理员模块对整个聊天系统进行管理。
管理员模块提供给管理员的功能主要是从数据库中删除不好的聊天用户。
publicManageFrame(LoginFramef){
loginf=f;
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
this.setVisible(true);
if(e.getActionCommand().equals("
删除"
String[]selItems=list.getSelectedItems();
if(selItems.length==0){
请选择被删除的人!
return;
if(JOptionPane.showConfirmDialog(this,"
确定要删除么?
"
JOptionPane.OK_CANCEL_OPTION)==JOptionPane.CANCEL_OPTION){
for(inti=0;
i<
selItems.length;
i++){
if(!
DBHandler.deleteUser(selItems[i])){
JOptionPane.showMessageDialog(this,"
+selItems[i]
+"
失败"
}else{
list.remove(selItems[i]);
}
list.repaint();
}else{
loginf.show();
dispose();
如果不选择用户,而直接单击“删除”按钮,则会弹出“请选择删除的人!
”的对话框。
管理员可以同时删除多个用户。
在删除用户是会弹出“确定要删除么?
如果选择“是”,将进行删除操作;
如果选择“否”则不删除。
当删除操作失败时,会弹出“失败×
×
失败”的对话框。
2.5聊天模块
聊天模块是整个系统的核心模块,按功能可以分为普通用户聊天和管理员聊天两部分。
普通用户部分实现单人和多人聊天模式,以与防止重复登录功能。
管理员聊天部分除了普通用户聊天功能之外还加入了“踢人”功能。
表2-1聊天系统消息表
类型
格式
传递方向
解释
login
Login:
<
房间>
:
用户名>
双向
通知服务器用户登录
namelist
Nmaelist:
服务器到用户
服务器把聊天室在线用户发送给用户
notify
notify:
消息容>
通知指定用户消息
kick
Kick:
:
管理员名>
通知踢人的消息
talk
Talk:
用户名1>
用户名2>
用户到服务器
用户1向用户2传送信息
quit
Quit:
用户离开聊天室
reload
Reload:
服务器通知用户重复登录
聊天模块由聊天室界面(ChatFrame.java),服务器(ChatServer.java),聊天对话框(ChatDialog.java)以与用户监听线程(Listen.java)组成。
2.5.1聊天室界面(ChatFrame.java)
在聊天室界面中,用户可以进行单人和多人聊天。
在聊天室界面初始化的时候会产生一个客户端socket,用来与服务器进行连接。
同时会新建一个监听进程listen来练接服务器端的消息。
当用户按下“聊天”或者“对所有人聊天”按钮后,将弹出聊天输入对话框。
当管理员按下“踢人”按钮后,将向服务器发送kick消息。
在聊天室界面代码中覆盖率processWindowEvent函数,用来处理用户关闭窗口操作。
用户关闭窗口时,向服务器发送quit消息,然后断开socket连接。
部分代码如下:
if(e.getActionCommand().equals("
聊天"
//如果“聊天按钮被按下”
if(selList.getSelectedItems().length!
=0){
dialog.input.setText("
dialog.input.setEditable(true);
dialog.show();
dialog.input.requestFocus();
请选择聊天对象!
对所有人聊天"
//如果“对所有人聊天”按钮被按下
//选择所有成员
for(inti=0;
i<
selList.countItems();
i++){
selList.select(i);
踢走"
//处理踢人操作
String[]selItems=selList.getSelectedItems();
if(selItems.length==0){
请选择踢走对象!
//构造kick消息,格式为kick:
room:
StringBuffersbf=newStringBuffer("
kick:
+room+"
selItems.length;
Stringkickname=selItems[i];
if(!
kickname.equals(name)){
sbf.append(kickname+"
"
sbf.append("
+name);
sendMessage(sbf.toString());
在聊天室界面初始化的时候会产生一个客户端socket,用来与服务器端进行连接。
同时会新建一个监听进程listen来接收服务器端的消息。
在聊天室界面代码中覆盖了processWindowEvent函数,用来处理用户关闭窗口操作。
2.5.2聊天室对话框(ChatDialog.java)
聊天室对话框是用户输入聊天信息的地方。
当用户进入聊天室后,系统会产生一个对话框对象。
用户单击“聊天”或者“对所有人聊天”按钮后,对话框将变成可见。
用户输入完聊天信息单击“发送”按钮或者按下回车键后,对话框程序将把聊天消息封装成“Talk:
”的形式,调用聊天室界面的sendTalkMsg函数将聊天消息发送。
publicvoidsendTalkMsg(){
String[]selItems=ChatFrame.selList.getSelectedItems();
if(selItems==null||selItems.length==0)
return;
StringBuffersbf=newStringBuffer("
talk:
+ChatFr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 聊天 程序 JAVA 课程设计 报告书