仿QQ聊天系统实验报告.docx
《仿QQ聊天系统实验报告.docx》由会员分享,可在线阅读,更多相关《仿QQ聊天系统实验报告.docx(15页珍藏版)》请在冰点文库上搜索。
仿QQ聊天系统实验报告
软件工程项目实践大作业仿QQ软件的设计与实现
软件工程项目实践大作业
仿QQ软件的设计与实现
班级:
20090615
学号:
2009061503
姓名:
教师:
于金峰
平时成绩30分:
+大作业成绩:
70分:
=总分:
__成绩:
_
教师评语:
小计
F1
F2
F3
F4
F5
3
6
2
2
2
5
2
8
4
6
5
3
2
5
5
5
F6
F7
F8
F9
F10
2
5
4
4
3
15
2
2
4
3
2
4
教师签名:
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图
图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];//ip
int_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);
//chenmin
if(sFrame.ti.equals(exit.exitname)){
sFrame.ti="";
}
Datet=newDate();
log("用户"+exit.exitname+"已经退出,"+"退出时间:
"+t.toLocaleString());
freshServerUserList();
}
(4)返回给客户端
当以上信息都封装成功后,打开与客户端连接的Socket的输出流,然后再用ObjectOutputStream对象输出流包装后输出给客户端。
publicvoidserverChat(){
//将接收到的对象值赋给聊天信息的序列化对象
ChatcObj=newChat();
cObj=(Chat)obj;
//chenmin
cObj.chatMessage=WordFilter.filter(cObj.chatMessage);
chatLog(cObj);
//将聊天信息的序列化对象填加到保存聊天信息的矢量中
userChat.addElement((Chat)cObj);
return;
}
。
七、项目管理
由组长宁海名分配
八、测试
服务器端运行图:
聊天测试图:
九、
总结
通过这次实验我进一步熟悉了程序开发的过程,从里边也发现了自己还存在很多问题,学习不够踏实,因此做项目的时候也遇到不少困难,还好经过我们小组讨论最终解决了问题,最好我们完成了试验项目,心里很欣慰,同时也有点失望,发现了自己的缺点就要改正,以后的学习生活中要加倍努力,更好的完成老师留下的任务。