您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 仿QQ聊天系统实验报告
软件工程项目实践大作业仿QQ软件的设计与实现软件工程项目实践大作业仿QQ软件的设计与实现班级:20090615学号:2009061503姓名:教师:于金峰平时成绩30分:+大作业成绩:70分:=总分:__成绩:_教师评语:小计F1F2F3F4F53622252846532555F6F7F8F9F102544315224324教师签名:2012年6月一、项目可行研究新近一两年Android手机如雨后春笋般涨势迅猛,由此基于Android系统的应用开发也变得更加普遍,结合本次课程的学习,也为了更好的培养我们的自主开发能力,我们小组开发了这个模仿QQ的聊天系统。二、需求阶段1.系统功能需求(1)登录功能。(2)客户可以通过服务器转发,实现一对一和多对多聊天。(3)实现呼叫功能。(4)客户端程序应该可以实时显示目前其它用户的状态。(5)应该具有易用、美观的图形界面。2.系统性能需求实用性:为信息交流提供方便,有效进行作业管理。操作简单:本系统应该适用于不同水平的使用者,包括事业单位和企业单位,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。技术先进:产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可以直接注册登陆聊天。适应性:应该能广泛应用于不同类型的企事业单位。系统采用模块化设计,用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。代码可读性好:文中的代码将尽可能简洁,易懂。3.系统运行需求1、移动客户端需500MHz及以上的处理器2、移动客户端需256MB及以上的ROM空间3、移动客户端需256MB及以上的RAM空间4、移动客户端需具有WiFi/GRPS网络接收模块,能正常连接到网络5、服务端需具有P41.6GHz及以上的处理器6、服务端需具有80GB及以上的硬板空间7、服务端需具有1GB及以上的内存空间三、设计过程1.业务流程图业务流程图2.功能结构图3.数据流图(4.ER图用户聊天记录登陆信息用户名密码验证信息登陆MN用户名密码登陆信息输入NM聊天时间聊天对象聊天内容图6ER图5.后台数据库设计基于服务器跨平台运行的架构,服务器的后台数据库使用了SQLServer2005。6数据库设计表主键表:四、概要设计1.系统实现原理即时通讯的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而即时通讯只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。图9系统实现原理图2.系统实现层次图:注册/登陆好友管理添加好友删除好友好友分组聊天模块发送/接受消息查看聊天记录聊天系统注册帐号登录系统图10系统实现层次图3.各模块详细功能服务器端结构Program.cs:服务器启动操作。DBHelper.cs:服务器端连接数据库,负责服务器端与数据库连接读取数据操作。SocketHost.cs:服务器端监听客户端连接,并处理各种请求。SocketRequest.cs:服务器端接受客户端消息链转化为json格式的数据定义。SocketResponse.cs:服务器端发送客户端消息链转化为json格式的数据定义。IResponseManager.cs:服务器接受消息处理的抽象类。LogonResponseManager.cs:服务器接受客户端登录请求操作。SocketFindUser.cs:服务器接收客户端查找好友消息转化为json格式的数据定义UpdateUserList.cs:服务器更新在线用户链表的json格式的数据定义SendResponseManager.cs:服务器端接受客户端聊天信息和请求并进行转发。五、详细设计.1.系统总体流程图开始启动服务器判断启动信息启动客户端判断登录信息登录聊天室退出聊天室是是注册用户退出服务器是否退出否图11系统总体流程图六、代码开发服务器端代码开发:1.用户注册1).下面是注册验证账户代码:2.用户登陆(1)去数据库读用户数据打开用户数据库文件“User.txt”,将用户数据对象集载入内存,以供下面的程序使用。//读文件FileInputStreamfile3=newFileInputStream(user.txt);ObjectInputStreamobjInput1=newObjectInputStream(file3);vList=(Vector)objInput1.readObject();(2)验证用户代码实现用户登陆程序模块如下3.消息管理客户端:CLoginDlg---登陆到服务器COptionsDlg----设置要连接的服务器的地址及端口号CReplyDlg----显示好友发送的信息CSendMsgDlg----给好友发送信息CApplyDlg-----申请新的用户CServerInfo----显示服务器消息CLogDlg-----显示聊天纪录服务器端:用户及发送信息结构体类型:structUserInfo//---用户信息结构体{char_QQnum[9];//号码char_QQname[10];//昵称int_nSex;//性别,char_Ip[20];//ipint_Port;//端口号bool_bState;//当前状态char_nFace[5];//头像}structMsgInfo//消息结构体{UserInfo_pSender;//发消息人char_cRecieverNum[9];//接收人char_msg[255];//消息内容long_nTime;//发送时间char_cPasswd[11];//登陆密码int_nType;//消息类型}统屏蔽。4.用户退出(1)接收退出信息当用户退出时,客户端将会用基于Socket的对象输出流发送给服务器退出对象。(2)在线列表中删除用户用户退出后应该把用户从在线列表中删除,否则用户退出用户还在在线列表中,那么该用户下次将会无法登录。(3)更新在线列表用户退出后将服务器端监控界面的用户列表更新。否则用户数据将会不同步。用户退出模块程序:publicvoidserverExit(){Exitexit=newExit();exit=(Exit)obj;removeUser(exit);//chenminif(sFrame.ti.equals(exit.exitname)){sFrame.ti=;}Datet=newDate();log(用户+exit.exitname+已经退出,+退出时间:+t.toLocaleString());freshServerUserList();}(4)返回给客户端当以上信息都封装成功后,打开与客户端连接的Socket的输出流,然后再用ObjectOutputStream对象输出流包装后输出给客户端。publicvoidserverChat(){//将接收到的对象值赋给聊天信息的序列化对象ChatcObj=newChat();cObj=(Chat)obj;//chenmincObj.chatMessage=WordFilter.filter(cObj.chatMessage);chatLog(cObj);//将聊天信息的序列化对象填加到保存聊天信息的矢量中userChat.addElement((Chat)cObj);return;}。七、项目管理由组长宁海名分配八、测试服务器端运行图:聊天测试图:九、总结通过这次实验我进一步熟悉了程序开发的过程,从里边也发现了自己还存在很多问题,学习不够踏实,因此做项目的时候也遇到不少困难,还好经过我们小组讨论最终解决了问题,最好我们完成了试验项目,心里很欣慰,同时也有点失望,发现了自己的缺点就要改正,以后的学习生活中要加倍努力,更好的完成老师留下的任务。
本文标题:仿QQ聊天系统实验报告
链接地址:https://www.777doc.com/doc-3200990 .html