网络聊天室系统设计与实现.docx
- 文档编号:16778829
- 上传时间:2023-07-17
- 格式:DOCX
- 页数:23
- 大小:233.98KB
网络聊天室系统设计与实现.docx
《网络聊天室系统设计与实现.docx》由会员分享,可在线阅读,更多相关《网络聊天室系统设计与实现.docx(23页珍藏版)》请在冰点文库上搜索。
网络聊天室系统设计与实现
IMBstandardizationoffice【IMB5AB-IMBK08-IMB2C】
网络聊天室系统设计与实现
科研训练
网络聊天室系统设计与实现
Designandimplementationofnetworkchatroomsystem
学生姓名
XXX
专业
软件工程
学号
1305XXXXX
指导教师
李XX祝XX
学院
计算机科学技术学院
二〇一六年六月
起止周
17~19
周数
3
实习地点
计算机学院专业实验室南区研1213
选题
自选
实习目的:
培养学生未来进入职场的素质,以及企业级行业解决方案系统的分析、设计、实现等企业级综合应用能力。
主要任务通过项目开发培养学生的职业素质,按照软件工程的思想,训练学生掌握面向对象分析/设计(UML建模)、编码规范、概要设计方法、详细设计方法、模块划分方法等技能;培养学生的编程思想和基本工作技能,培养学生的编程能力。
实习要求:
要求学生能掌握软件开发的基本能力,具有项目开发的实际经验,按照专业方向或本人就业方向选择一个项目进行实际开发,能熟练运用常用的程序设计语言和开发工具,完成整个开发过程。
实习内容及进度安排:
每个同学的课题的主要研究内容,完成的主要功能、按周完成的工作(总计3周,每周具体完成的内容要写清楚)
指导教师评语:
成绩:
指导教师/带队教师(签字)
2016年6月日
一、引言
随着网络的大幅度普及,以及网络技术快速发展,人们通过网络进行交流的方式发生着巨大的变化,人们不再拘泥于移动电话的通话模式,越来越多的人通过网络聊天工具进行交流,网络聊天室便是非常典型的聊天工具之一。
聊天室系统的即时交流方式满足了网络中人们同时与多人进行聊天交流的需要,使得较多的人在同一个聊天页面进行交流变得方便,简单。
本设计所完成的网络聊天室具有常用聊天室的所有功能,包括使用账号登录聊天室、注册账号、显示在线用户列表、显示系统消息、两人之间进行私密聊天、消息提醒、发送表情、修改发送文字颜色;同时,为了管理聊天室中的用户使用语言的文明,赋予管理员踢出使用不文明语言的用户功能,显示全部聊天信息。
该系统采用B/S(浏览器/服务器)结构进行开发,参考网络中正在使用的大型聊天室的架构、分析聊天室可实现功能,结合本次设计的相关要求,进行开发设计并写出需求分析说明书。
该系统具体开发环境:
使用专业版作为服务器运行平台,服务器开发语言使用Java语言,前台使用Jsp技术、JavaScript、Jquery语言,系统框架使用Struts2+Hibernate+Spring框架,后台数据库使用MySql数据库。
二、需求分析
该系统采用B/S模式设计,开发目的主要是提供一个基于网络的安全文明的供多人聊天社交平台。
系统运行环境需求
该系统是在windows专业版操作系统下,搭建的运行平台,使用myEclipse作为开发工具,mySql作为数据库,Java语言作为系统后台开发语言。
JSP技术作为前台开发语言,其中使用JavaScript以及Jquery作为脚本语言。
工程框架使用Struts+Spring+Hibernate框架。
(1)服务器配置:
(2)客户端要求配置:
谷歌浏览器、狐火浏览器以及IE浏览器以上版本。
模块功能分析
(一)用户注册登录模块
新用户在使用该聊天室系统时,必须先进行注册新用户操作,后台将注册信息添加到数据库中,用于胡勇登录验证;在注册成功之后再进行登录;当用户名与密码匹配成功,即可进入聊天室系统。
(二)在线用户显示模块
当用户登录进入系统后,该页面实现在线用户的统计,并将在线用户依次显示出来。
如果当前用户属于管理员角色,则在普通用户角色的右边显示“踢下线”链接,如果当前用户属于普通用户角色,则正常显示在线用户名。
(三)用户交流聊天模块
该模块主要负责发送信息内容,选择聊天对象;除此之外,可以修改聊天内容的字体颜色以及发送的表情。
发言的颜色和发言的表情通过下拉式组合框实现。
发言内容书写完毕后。
通过点击“发送”按钮,发送聊天内容。
(四)聊天信息显示模块
当用户选择聊天对象并发送聊天内容后,显示出当前发送的内容以及之前的历史聊天内容,聊天的内容只有对话的两人可见,其他人不可见。
当用户退出系统后,再次登录进入聊天室时,两人的对话记录依然存在。
(五)系统消息显示模块
系统消息提示所有用户,聊天室的文明守则,以及当其他用户进入、离开或被管理员踢出聊天室的情况。
(六)管理员管理用户模块
管理员用户可以与其他用户聊天,并且随时监督其他用户的言行,一旦
出现不文明用语,即将改用户踢出聊天室。
(七)辅助功能
辅助功能包括:
显示全部聊天信息、退出聊天室、检测用户是否有新消息。
显示全部信息是指当用户之间的聊天信息占满全屏的时候,点击显示全部信息,即可看到全部的聊天内容。
退出聊天室是指用户离开聊天室。
检测用户是否有新信息,当用户收到其他用户发来的消息时,提示用户。
系统功能结构
图2-1功能结构图
系统数据流图
图2-2顶层数据流图
图2-3一层数据流图
图2-4二层数据流图
数据字典
数据项名称:
用户名
数据项别名:
username
说明:
用户唯一标识
类型:
varchar
长度:
20
取值范围及含义:
用户登录聊天室的用户名长度在1~20之内不论数字、字符还是符号。
表2-1用户名数据字典
数据项名称:
密码
数据项别名:
password
说明:
用户登陆密码
类型:
varchar
长度:
20
取值范围及含义:
用户登录聊天室的密码长度在1~20之内不论数字、字母还是符号。
表2-2密码数据字典
数据项名称:
级别
数据项别名:
type
说明:
用户身份级别
类型:
varchar
长度:
20
取值范围及含义:
用户登录聊天室的角色,管理员(admin)或者普通用户(user)。
表2-3级别数据字典
三、概要设计
系统总体结构设计
结构设计系统
图3-1总体结构图
系统功能模块结构
(1)用户注册登录模块
用户注册是添加用户到数据中,只能注册普通用户,当注册验证信息合格,即可登录进入聊天室。
图3-2用户注册登录H图
(2)在线用户显示模块
当用户登录进入系统后,该页面实现在线用户的统计,并将在线用户依次显示出来。
如果当前用户属于管理员角色,则在普通用户角色的右边显示“踢下线”链接,如果当前用户属于普通用户角色,则正常显示在线用户名。
(3)用户交流聊天模块
交流包括选择聊天对象,选择发送表情,字体颜色。
图3-3用户聊天H图
(4)聊天信息显示模块
聊天信息的显示,首先系统必须获得与当前用户正在进行聊天的对象,根据聊天对象的用户名,获得存储在系统中的聊天记录,传送到浏览器客户端,浏览器客户端进行1s刷新界面,从而获取两人之间的私密聊天记录并显示在界面上。
图3-4聊天信息显示H图
(5)系统消息显示模块
系统信息包括:
聊天室守则、系统公告。
图3-5系统信息显示H图
(6)管理员管理用户模块
管理员用户可以与其他用户聊天,并且随时监督其他用户的言行,一旦出现不文明用语,即将改用户踢出聊天室。
(7)辅助功能
辅助功能包括:
显示全部聊天信息、退出聊天室。
显示全部信息是指当用户之间的聊天信息占满全屏的时候,点击显示全部信息,即可看到全部的聊天内容。
退出聊天室是指用户离开聊天室。
数据库设计
概念设计
E-R图:
该系统只存在用户一个实体,用户的属性包括:
id、用户名、密码、级别。
图3-6E-R图
逻辑设计
用户表
字段名
数据类型
长度
说明
描述
id
int
4
不空
用户id
userName
varchar
20
不空
用户名
password
varchar
20
不空
登录密码
type
varchar
20
不空
用户级别
表3-1用户表
物理设计
数据库类型使用mySql数据库,用户表的主键为id。
四、详细设计
流程图
用户注册的时候,操作人员输入想取的用户民,输入自创密码与确认密码,点击注册;此时,系统会首先检测两次密码是有一致,若不一致,提示用户密码不一致,请重新输入。
若一致,检测用户名是否已经被注册过,若已经被注册,提示是用户,已被注册。
若为被注册,系统添加用户注册信息到数据库user表中。
界面提示用户注册成功,并跳转到登录界面。
注册的用户默认type是普通用户,即user。
图4-1注册流程图
用户登录的时候,用户输入用户名,密码,点击进入按钮,系统获取用户所填写的用户名与密码,首先判断该用户名是否存在于数据库,若不存在,提示用户不存在该用户,请重新填写或注册,若该用户名存在,则判断密码与用户名是否匹配,若不匹配,提示用户密码错误,请重新填写,若匹配,进入聊天室界面。
图4-2登录流程图
当用户登录进入聊天室时,系统会将用户的信息存入application属性的userMap中,进入系统后,在jsp中获取userMap,将所有的用户信息中的用户名显示出来。
图4-3显示在线人数流程图
用户实现找人聊天,点击聊天对象的用户名,获取聊天对象,填写发送内容,选择表情、与发送字体的颜色,点击发送即可进行聊天。
在未选择聊天对象时,点击发送,提示用户选择聊天对象;在未填写发送的内容点击发送时,提示用户未填写发送内容。
发送的表情默认为[微笑着],字体颜色默认为黑色。
图4-4发送信息流程图
聊天信息显示,首先必须保证聊天对象的用户名不为空,当不为空时,系统将获取用户名,在application作用域中获得,相应的聊天记录属性,返回到jsp中,并显示在界面中。
图4-5显示聊天记录流程图
在用户登录聊天室时,系统存储聊天室的聊天守则,并获取登录的用户名,存储系统公告(XXX进入聊天室!
);当用户离开聊天室时,修改系统公告(XXX离开聊天室!
);当用户被管理员踢出聊天室时,修改系统公告(XXX,被管理员踢出聊天室!
)。
图4-6显示系统信息流程图
当用户使用了不文明的语言,管理员有权利该用户踢出聊天室。
获取用户名,在application中的userMap中获得相应的用户session,清除该session即可将用户踢下线。
图4-7管理员管理用户流程图
显示与某人的全部聊天信息,当聊天的内容占满全屏,点击显示全部消息,即可显示全部信息。
当用户离开聊天室时,系统获取当前用户名,并释放user的session。
检测用户是否有新消息:
图4-8检测信息流程图
算法
首先获取进行对话双方的用户名以及id,再比较两者的id若id1 图4-9用户对话存储算法 当用户登录进入聊天室时,向application中存储一个isKickedMap属性,将用户名添加到isKickedMap中并赋值为1(1表示在线,-1表示被踢)。 当管理员将某个用户踢下线时,将isKickedMap属性中的改用户名修改成“*”符号,并赋值为-1。 Jsp页面每秒刷新一次,当检测到isKickedMap属性中getAttribute(“*”)==-1时,则该用户被踢下线,此时要在jsp页面中提示用户已被踢下线,并返回登陆界面。 图4-10检测用户是否被踢算法 检测当前用户是否有新消息算法 Jsp每隔1s就检测一次当前session中的call属性中是否有值,如果有值,返回到jsp中,在jsp中遍历出有个值,并且让id为该值的 图4-11检测当前用户是否有新消息算法 界面设计 登陆首页是写在中的,前台主要运用jsp动态网页技术。 并使用JavaScript语言判断用户是否正确输入用户名以及密码。 在登录界面可以点击注册用户进入用户注册界面。 图4-12登录界面 图4-13注册界面 聊天室界面: 左侧是在线人员列表显示,和在线人数的统计;右侧是专门显示系统公告的地方;中间属于聊天内容的显示;下方是用户发送消息的模块,在该模块中,当用户点击聊天对象的用户名,下方的第一个input框将获取到聊天对象的用户名,还可以选择聊天的表情与字体的颜色,在最下角的input框可以编辑所要说的话,点击发送,即可发送聊天内容。 图4-14聊天室主界面 工程结构设计 该系统采用SSH(struts2+spring+hibernate)框架搭建工程。 系统的基本是: 在中,首先通过JSP页面实现,负责接收请求(Request)和传送响应(Response),然后Struts根据文件将ActionServlet接收到的Request委派给相应的Action处理。 在业务层中,管理服务组件的SpringIOC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。 而在中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。 采用上述开发模型,不仅实现了视图、控制器与模型的彻底分离,而且还实现了与持久层的分离。 这样无论前端如何变化,模型层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性。 而且由于不同层之间小,有利于团队成员并行工作,大大提高了开发。 工程结构中其中: 文件是关于配置spring的配置文件,主要是将各种POJO,JAVA,action配置到XML转交给beanfactory管理,降低耦合度。 文件配置struts的属性值,程序员可以通过它来管理Struts2框架中定义的大量常量。 文件是一个标准的properties文件。 为Struts2的核心配置文件。 文件主要负责管理应用中的Action映射,以及该Action包含的Result定义。 图4-15工程结构 各类功能设计 图4-16工程类图 ,属性包括: privateintid;etAttribute(messageName,sourceMessage); 到此为止,聊天内容就已经发送,等发言对象端接收并显示消息内容。 在面管理员aaa将发送一段文字给用户zhuwei: 图5-12aaa向zhuwei发送一条对话 聊天信息显示模块 当聊天对象没有选择聊天对象时,例如用户“zhuwei”开始并没有选择聊天对象“aaa”,但是“aaa”向“zhuwei”发送了消息,此时,系统检测到“zhuwei”有新消息,所有在jsp页面中将把“aaa”的背景色变成红色以提醒“zhuwei”有新消息来自“aaa”,如下图所示。 这个功能在辅助功能中介绍: 图5-13zhuwei检索到aaa有新消息提醒 当选择聊天对象aaa后,jsp开始刷洗界面,并调用JavaScript的方法showSendMessage(),在该方法中还是已post的异步刷新方式,调用后台的。 在该action中同样将获取application的消息名称,并根据此消息名称获得相应的对话: Stringmessage=(String)().getAttribute(messageName); 如果message不等于null,则向jsp中输出message: ().println(message); 在jsp中的回调函数中获得data,并在id为content的div中显示data: $("#content").html(sysBBS+data+""); Jsp界面每隔1s就刷新界面,调用后台的action获取最新的消息。 例如用户“zhuwei”收到来自“aaa”的消息,如下图所示: 图5-14zhuwei收到aaa的对话并显示在聊天内容中 用户“zhuwei”回复用户“aaa”: 图5-15zhuwei向aaa回复一条对话 在用户“aaa”的界面中收到来自“zhuwei”的回话: 图5-16aaa收到zhuwei的回复 至此,聊天信息的显示完毕。 系统消息显示模块 系统消息包括聊天室守则“欢迎来到聊天室,请遵守聊天室规则,不要使用不文明用语。 ”的显示;还有就是系统公告的显示。 首先聊天室准则的显示,一旦用户登录进入聊天室守则就被显示在聊天内容的下方,它的实现主要是在jsp中,一旦加载了聊天室主页就执行: varsysBBS=" 14px;color: red;line-height: 30px;'>欢迎来到聊天室,请遵守聊天室规则,不要使用不文明用语。 22px;'>"; $("#content").html(sysBBS); 这两句js代码。 而当用户开始选择聊天对象进行聊天时,调用的显示聊天信息的action返回到jsp的data时,sysBBS与data一同显示在聊天内容上: $("#content").html(sysBBS+data+""); 对于系统公告,首先创建了一个实体类Message,其中它的属性包括了所有系统公告的内容;当用户调用登录action时,并且验证成功,登录成功时,向application中添加属性sysMessageMap (),()); ().setAttribute("sysMessageMap",sysMessageMap); 当用户离开聊天室时,向application中得到sysMessageMap属性,并根据用户名得到对应的值,将其修改为(),再次存入application当中。 当用户被管理员踢出聊天时,同样获取sysMessageMap,根据用户名得到相应的值,将其修改成(),再次存入application当中。 下面将用户“zhuwei”退出聊天室,或是将其踢出聊天室,效果如下图: 图5-17aaa将zhuwei踢出聊天室图5-18zhuwei主动离开聊天室 管理员管理用户模块 当普通用户使用了不文明的语言,管理员有权将其踢出聊天室。 当管理员点击“踢下线”操作时,调用后台的,并将踢出用户的id与用户名传参到后台,在action中,获取application中的userMap,根据id得到相应的session,清除该session即可踢出用户。 但是存在一个BUG,当用户自己退出聊天室时,其session也将被清除,由此导致,jsp在调用js方法check()检测是否被踢出去的时候,出现用户自己退出聊天室时也被当成被踢提示用户“由于您使用不文明语言,被踢下线了! ”。 解决办法是: 在application中再存入一个属性isKickedMap 当用户被踢时,将其用户名改为“*”,并将值改为-1。 这样在调用check()方法时,先判断是否存在“*”,并且其值是否为-1,才进行被踢提示,否则不提示: if("*")! =null){ if((Integer)("*")==-1){etAttribute("isKicked",isKickedMap); if(user==null){ ().println("1"); }else{ ().println("2"); } } }else{ ().println("3"); } 辅助功能 显示全部聊天信息: 直接调用js方法checkScrollScreen() if(! $("#scrollScreen").attr("checked")){ $("#content").css("overflow","scroll"); }else{ $("#content").css("overflow","hidden"); crollTop($("#content").height()*2); } setTimeout('checkScrollScreen()',500); 退出聊天室: 释放当前用户的session即可。 提醒用户是否有新信息: 每个用户的session当中存入一个call属性,该属性属于List List (from); ("call",call); 在当前用户的jsp当中每隔1s就调用一次gainCall()方法,其中调用,在这个action中获取该用户的session的call属性,遍历出所有用户名,将用户名返回到jsp中: if(data! =null){ data=(); varstrs=newArray();ss("background-color","red"); } } 将id为该用户名的 List if(call! =null&&! ()){ for(inti=0;i<();i++){ if(i).equals(to)){ (i); i--; } } } 这样在读取完信息之后,就不会让用户名的背景色一直为红色,将恢复原色表示没有最新消息。 图5-19zhuwei接到aaa的消息提醒 图5-20zhuwei读取aaa的消息 五、总结与体会 开发中遇到的问题 我在聊天室系统程序设计过程中,遇到的问题大体可分为两类: A.知道但不会。 这类问题往往是我知道应该怎么去设计,但却就是动不了手,要不就错误百出。 B.完全不会。 这类问题摆在面前,我只能束手无策,苦恼而又无奈。 问题分析与解决方法 对于第一类问题,其实本质上不存在什么大的问题,都是因为自己平时学习功底不够,还有编程时不够谨慎, 才造成的。 人非完人,学过了,有点不懂或迷惑的地方也是很正常的,再说竟然知道怎么做,有希望,那就有信心去解决。 我在精神上坚定了,就能耐下性子征服它。 通过查阅书本,仔佃分析、思考,请教同学、老师,这类问题还是得到了很好的解决。 对于第二类问题。 造成的原因可分两种: 一是明显的超过了我的能力范围;二是因为我对问题的认识、分析不够深入造成的假复杂现象。 此类问题非要对症下药,效果方最好。 如果没有找出原因而盲目努力,是不会有太大效果的。 在这类问题出现后,人常常会感到烦躁、泄气,这时便不可能出现解决问题的可能。 怎么 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。标签的背景色为红色。 设置为红色;当用户已经读取这些信息之后,依次将call中的值删除:
冰点文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。