典型网络数据库系统软件设计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_eType | m_strMsg |
LOGIN | 呢称|密码 |
LOGINResponse | GOOD|欢迎!(BOSS) 或 FAILED|验证失败! |
CHATTING | 发给(来自)的用户名|消息内容 |
USERList | 呢称1|呢称2|…|呢称n|END |
NOTICE | ALL|消息内容 或 来自的用户|消息内容 |
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;
}
}