{$cfg_webname}
主页 > 计算机 > C++ >

聊天室的设计与实现

来源:wenku163.com  资料编号:WK1632107 资料等级:★★★★★ %E8%B5%84%E6%96%99%E7%BC%96%E5%8F%B7%EF%BC%9AWK1632107
资料介绍


田鸡聊天器
一、 登陆问题
用户登陆时只用其用户ID(即妮称),QQ号对用户不透明。

二、 数据库设计
1. 用户列表User.db
该数据库主要存储本机上的用户ID和密码
字段设计:
字段名 类型 长度 说明
ID Integer 12 QQ号码
Username String 20 用户名(即妮称)
Password String 16 密码
Memo Memo  备注

2. 好友信息 Friends.db
该数据库主要存储用户好友的相关信息
字段设计:
字段名 类型 长度 说明
ID Integer 12 QQ号码
Username String 20 用户名(即妮称)
FaceID Integer 100 用户头像序列
IsBaddy Boolean  是否被列入黑名单
Memo Memo  备注

3. 聊天记录ChatLog.db
存储与好友之间的聊天记录
字段名 类型 长度 说明
ID Integer 12 QQ号码
Username String 20 用户名(即妮称)
Sender Boolean  消息发送者
Time DataTime  消息发送时间
Msg Memo  消息内容
Memo Memo  备注

4. 系统消息 SystemMsg.db
字段名 类型 长度 说明
ID 自动增值  主关键字
Time DataTime  发送时间
Msg Memo  消息内容
Memo Memo  备注

三、通讯协议
1.统一规定
   所有协议前三位均为固定格式,取值如下:
值 SYS ONL OFF LEA HID MSG IMO FIN YFM
含义 系统信息 上线 下线 离开 隐身 正常信息 我在线 找好友 返回“找到”信息

2. 具体协议内容
① SYS(系统信息)
格式:SYS*XXXX(xxxx为消息的具体内容)*

② ONL(用户上线)
格式:ONL*QQNumber*NickName*001*
(第二位为QQ号,第三位为“妮称”,第四位为“头像”ID)

③ OFF(用户下线)
格式:OFF*QQNumber*

④ LEA(用户离开)
格式:LEA*QQNumber*

⑤ HID(隐身)
格式:HID*QQNumber*

⑥ MSG(正常信息)
格式:MSG*QQNumber*NickName*001*XXXXXXX*

  ⑦ IMO(I am online报告“我在线”)
     格式:IMO*QQNumber*

  ⑧ FIN(Find friends 查找好友)
     格式:FIN*

  ⑨YFM (You find me 你找到我啦) 收到FIN后,返回此信息
    格式: YFM*sQQNumber*sUserName*iFaceID*
四.程序主要模块
 1.主要处理函数、过程
    ① function SysMsg(s:string):Boolean;(系统消息)
A) 显示消息内容
B) 存储消息内容
② function Online(s:string):Boolean;(用户上线)
A) 将消息分离成三份,存储在三组数组Msg中
B) 在数据库中对照QQNumber,是否有此好友,若有则先判断好友是否更改其个人信息,更改则更新数据库后添加好友图标;若无,不作处理。
③ function Offiline(s:string):Boolean;(用户下线)
收到信息下线信息后,判断此用户是否为在线好友,若是,更改其头像颜色。
(若用户隐身,则作同样处理)

④ function Leave(s:string):Boolean;(用户离开)
收到离开信息后,先判断其是否为自身好友,若是,更改其头像。

⑤ function Message(s:string):Boolean;(正常信息)
A) 将信息分离
B) 显示信息
C) 判断好友是否更改其个人信息,若更改,则更新数据库。

⑥ function CreateDB:Boolean;(创建用户数据库)

2.二级函数
   ①function CheckUserInfo(QQNumber,FaceID:integer,NickName,IP:string):Boolean;
  用来检测用户信息是是否更改,若是,更新数据库。

五、程序启动时的处理
1. 加载好友
读取数据库,将其中所有的好友均读出,添加好友图标

2. 向所有好友发出上线通知,若有返回,则说明此发友在线,更改其图标


临时思路:
1.在FrmMsg上设置一数组,存储收到的多条消息,再放置一个BtnNext按钮来陆续显示多条信息

推荐资料