Welcome

首页 / 软件开发 / C++ / 典型网络数据库系统软件设计

典型网络数据库系统软件设计2010-02-19阿强一、概述

本系统为内部系统,帐户由管理员添加、管理;

分为两个组,User组和Boss组。Boss组的帐户可以发广播通知;

任意两个用户间可以互相通信;

数据库接口用DAO,网络通信用 CSocket+CSocketFile;

二、详细设计

1、数据库设计

本系统只是一个消息通信模型,这里的数据库设计比较简单。

ER图:

把ER模型转为关系模型,共两个表:

User (No , Name ,Password ,G#) 候选键:No 外键:G#
Group (G# , GroupName ,Demo ) 主键 :G#

2、消息格式设计

<1>、传送的消息共有5类------登录消息,验证返回消息,普通消息,用户列表消息,通知消息。定义一个枚举类型:

enum MSGTYPE {LOGIN , LOGINResponse , CHATTING , USERList , NOTICE};

<2>、定义消息类

class CMsg : public CObject
{
public:
int m_eType; //枚举类型,记录消息类型
CString m_strMsg; //消息
CMsg();
virtual ~CMsg();
void Serialize(CArchive &ar); //消息类系列化函数,发送和接受消息时用。
};

<3>、m_strMsg 为消息类中存放消息的成员,它的具体格式随着消息类型m_eType不同而不同。

m_eTypem_strMsg
LOGIN呢称|密码
LOGINResponseGOOD|欢迎!(BOSS) 或 FAILED|验证失败!
CHATTING发给(来自)的用户名|消息内容
USERList呢称1|呢称2|…|呢称n|END
NOTICEALL|消息内容 或 来自的用户|消息内容

m_strMsg中个内容用“|”隔开,用函数Decode(int n,CString strMsg) 获的相应的内容。

CString Decode(int n,CString strMsg)
{
int pos;
CString str;
for(int i=1;i<=n;i++)
{
pos=strMsg.Find ("|",0);
if(pos<0)
str=strMsg;
else
str=strMsg.Left (pos);
strMsg=strMsg.Right(strMsg.GetLength ()-pos-1);
}
return str;
}

<4>、消息发送接收的序列化函数

void CMsg::Serialize (CArchive &ar)
{
if(ar.IsStoring())
{
ar<<m_strMsg<<m_eType;
}
else
{
ar>>m_strMsg>>m_eType;
}
}