为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

VC网络数据库开发11页word文档

2022-01-31 7页 doc 406KB 7阅读

用户头像 个人认证

busy

我是中学教学,担任英语教学工作

举报
VC网络数据库开发11页word文档如有侵权,请联系网站删除,仅供学习与交流【精品文档】第PAGE11页VC网络数据库开发VC网络数据库开发(2006-6-3016:10:00)【收藏】【评论】【打印】【关闭】标签:vc 典型网络数据库系统软件设计一、概述本系统为内部系统,帐户由管理员添加、管理;分为两个组,User组和Boss组。Boss组的帐户可以发广播通知;任意两个用户间可以互相通信;数据库接口用DAO,网络通信用CSocket+CSocketFile;二、详细设计1、数据库设计本系统只是一个消息通信模型,这里的数据库设计比较简单。ER图: 把ER模...
VC网络数据库开发11页word文档
如有侵权,请联系网站删除,仅供学习与交流【精品文档】第PAGE11页VC网络数据库开发VC网络数据库开发(2006-6-3016:10:00)【收藏】【评论】【打印】【关闭】标签:vc 典型网络数据库系统软件设计一、概述本系统为内部系统,帐户由管理员添加、管理;分为两个组,User组和Boss组。Boss组的帐户可以发广播通知;任意两个用户间可以互相通信;数据库接口用DAO,网络通信用CSocket+CSocketFile;二、详细设计1、数据库设计本系统只是一个消息通信模型,这里的数据库设计比较简单。ER图: 把ER模型转为关系模型,共两个表:User(No,Name,Password,G#)候选键:No外键:G#Group(G#,GroupName,Demo)主键:G#2、消息格式设计<1>、传送的消息共有5类------登录消息,验证返回消息,普通消息,用户列表消息,通知消息。定义一个枚举类型:enumMSGTYPE{LOGIN,LOGINResponse,CHATTING,USERList,NOTICE};<2>、定义消息类classCMsg:publicCObjectpublic:intm_eType;//枚举类型,记录消息类型CStringm_strMsg;//消息CMsg();virtual~CMsg();voidSerialize(CArchive&ar);//消息类系列化函数,发送和接受消息时用。<3>、m_strMsg为消息类中存放消息的成员,它的具体格式随着消息类型m_eType不同而不同。 m_eTypem_strMsgLOGIN呢称|密码LOGINResponseGOOD|欢迎!(BOSS)或FAILED|验证失败!CHATTING发给(来自)的用户名|消息内容USERList呢称1|呢称2|…|呢称n|ENDNOTICEALL|消息内容或来自的用户|消息内容m_strMsg中个内容用“|”隔开,用函数Decode(intn,CStringstrMsg)获的相应的内容。CStringDecode(intn,CStringstrMsg)intpos;CStringstr;for(inti=1;i<=n;i++)pos=strMsg.Find("|",0);if(pos<0)str=strMsg;elsestr=strMsg.Left(pos);strMsg=strMsg.Right(strMsg.GetLength()-pos-1);returnstr;<4>、消息发送接收的序列化函数voidCMsg::Serialize(CArchive&ar)if(ar.IsStoring())ar<>m_strMsg>>m_eType;3、通信设计验证。客户端发送LOGIN消息,服务器回应LOGINResponse消息;通信。客户端发送CHATTING或NOTICE消息,服务器端根据接收到的消息,发送CHATTING,NOTICE或USERList消息。4、服务器设计<1>、建立工程①、用MFCAppWizard(exe)新建一个“单个文档”的工程;②、在Step2of6中,选“查看数据库不使用文件支持”,点击“DataSource..”按钮,然后在弹出的对话框中选“DAO”类型,再浏览选择数据库文件Data.mdb.按确定,再在弹出的窗口选User表;③、点击Next到Step4of6,选“windowsSockets”。网络功能支持;④、按“NEXT“,最后点击“完成”;<2>、在CSuperServerView中添加下列成员:intm_iPort;//服务器端口CSocketListen*m_pSocket;//监听套接字。CSocketClientm_SocketClient[Max];//跟客户端通信的套接字。CArchive*m_pArOut;//发送消息时的序列化文档对象指针。CArchive*m_pArIn;//接收消息时的序列化化文档对象指针。CSocketFile*m_pSF;//套接字文件对象指针。CMsgmsg;//消息类对象CStringDecode(intn,CStringstrMsg);//消息的解码函数voidSendUserList();boolCheckLogin(CSocketClient*pClient);voidMyReceive(CSocketClient*pClient);voidMyClose(CSocketClient*pClient);voidMyAccept();<3>、CSuperServerView类的关键成员函数:voidCSuperServerView::MyReceive(CSocketClient*pClient)m_pSF=newCSocketFile(pClient);m_pArIn=newCArchive(m_pSF,CArchive::load);msg.Serialize(*m_pArIn);inti;boolbOK=false;switch(msg.m_eType)caseLOGIN://处理用户登录。m_pSF=newCSocketFile(pClient);m_pArOut=newCArchive(m_pSF,CArchive::store);msg.m_eType=LOGINResponse;if(CheckLogin(pClient))if(!pClient->m_bBoss)msg.m_strMsg="GOOD|欢迎!";bOK=true;elsemsg.m_strMsg="GOOD|BOSS";bOK=true;elsemsg.m_strMsg="FAILED|验证失败!";msg.Serialize(*m_pArOut);m_pArOut->Flush();if(bOK)SendUserList();break;caseCHATTING://处理普通消息for(i=0;im_strName+"|"+Decode(2,msg.m_strMsg);msg.Serialize(*m_pArOut);m_pArOut->Flush();break;break;caseNOTICE://处理广播消息。msg.m_strMsg=pClient->m_strName+"|"+Decode(2,msg.m_strMsg);for(i=0;im_strName)m_pSF=newCSocketFile(&m_SocketClient[i]);m_pArOut=newCArchive(m_pSF,CArchive::store);msg.Serialize(*m_pArOut);m_pArOut->Flush();break;voidCSuperServerView::MyAccept()for(inti=0;iAccept(m_SocketClient[i]);m_SocketClient[i].GetView(this);break;voidCSuperServerView::OnStartServer()//开始服务m_pSocket=newCSocketListen(this);m_pSocket->Create(m_iPort,SOCK_STREAM);m_pSocket->Listen();m_staState.SetWindowText("正在监听......");voidCSuperServerView::OnStopServer()//关闭服务if(m_pSocket)m_pSocket->Close();for(inti=0;iAddNew();m_pSet->m_Name=dlg.m_strName;m_pSet->m_Password=dlg.m_strPwd;m_pSet->m_G_=dlg.m_iG;m_pSet->Update();UpdateData(FALSE);voidCSuperServerView::OnButtonDel()//删除帐户m_pSet->Delete();m_pSet->MoveNext();if(m_pSet->IsEOF())m_pSet->MoveFirst();UpdateData(FALSE);voidCSuperServerView::OnButtonModify()//修改帐户信息CAddDlgdlg;dlg.m_strName=m_pSet->m_Name;dlg.m_strPwd=m_pSet->m_Password;dlg.m_iG=m_pSet->m_G_;if(dlg.DoModal()==IDOK)if(dlg.m_strName!="")m_pSet->Edit();m_pSet->m_Name=dlg.m_strName;m_pSet->m_Password=dlg.m_strPwd;m_pSet->m_G_=dlg.m_iG;m_pSet->Update();UpdateData(FALSE);voidCSuperServerView::OnButtonFind()//查找帐户CFindDLGdlg;if(dlg.DoModal()==IDOK)if(dlg.m_strKey!="")CStringm_strName;UpdateData(TRUE);m_strName=dlg.m_strKey;if(m_pSet->IsOpen())m_pSet->Close();m_pSet->Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT*FROMuserwhereName=''"+m_strName+"''");UpdateData(FALSE);CSocketListen类中的接受事件函数OnAccept(intnErrorCode)。voidCSocketListen::OnAccept(intnErrorCode)m_pView->MyAccept();CSocket::OnAccept(nErrorCode);CSocketClient类中的接收消息函数。voidCSocketClient::OnClose(intnErrorCode)//TODO:Addyourspecializedcodehereand/orcallthebaseclassm_pView->MyClose(this);CSocket::OnClose(nErrorCode);CSocketClient类传递主窗口指针函数:voidCSocketClient::GetView(CSuperServerView*pView)m_pView=pView;<4>、程序界面5、客户端设计。<1>、建立一个名为Client,基与对话框的应用程序,在Step2of6中选WindowsSockts支持,<2>、在CClientDlg中添加成员。CStringDecode(intn,CStringstrMsg);CMsgmsg;CMySocket*m_pSocket;CArchive*m_pArOut;CArchive*m_pArIn;CSocketFile*m_pSF;voidMyReceive();在CMySocket类中添加成员。CClientDlg*m_pDlg;CMySocket(CClientDlg*pDlg);构造函数实现,获得指向主对话框的指针CMySocket::CMySocket(CClientDlg*pDlg)m_pDlg=pDlg;<3>、关键函数BOOLCClientDlg::OnInitDialog()m_strHost="192.168.1.126";m_iPort=1234;UpdateData(FALSE);GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(false);Expand(0);returnTRUE;//returnTRUEunlessyousetthefocustoacontrolvoidCClientDlg::OnLogin()//登录函数UpdateData(TRUE);GetDlgItem(IDC_BUTTON1)->SetWindowText("Wait");m_pSocket=newCMySocket(this);m_pSocket->Create();intnTry=3,n;do{n=m_pSocket->Connect(m_strHost,m_iPort);}while(n!=1&&nTry--);if(n==1)Sleep(2000);m_pSF=newCSocketFile(m_pSocket);m_pArOut=newCArchive(m_pSF,CArchive::store);m_pArIn=newCArchive(m_pSF,CArchive::load);msg.m_eType=LOGIN;msg.m_strMsg=m_strName+"|"+m_strPwd;msg.Serialize(*m_pArOut);m_pArOut->Flush();elseGetDlgItem(IDC_BUTTON1)->SetWindowText("Login");GetDlgItem(IDC_BUTTON1)->EnableWindow(true);AfxMessageBox("网络原因,没连上服务器!");voidCClientDlg::MyReceive()//接收消息函数msg.Serialize(*m_pArIn);inti=0;CStringstr;switch(msg.m_eType)caseLOGINResponse:str=Decode(1,msg.m_strMsg);if(str=="FAILED")str=Decode(2,msg.m_strMsg);m_pSocket->Close();AfxMessageBox(str);elseExpand(true);GetDlgItem(IDC_BUTTON1)->SetWindowText("Login");GetDlgItem(IDC_BUTTON1)->EnableWindow(false);GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(true);break;caseUSERList:str=Decode(++i,msg.m_strMsg);m_ctrList.ResetContent();while(str!="END")if(str!=m_strName)m_ctrList.AddString(str);str=Decode(++i,msg.m_strMsg);UpdateData(FALSE);break;caseCHATTING:MessageBox(Decode(2,msg.m_strMsg),"来自"+Decode(1,msg.m_strMsg)+"的消息:");break;caseNOTICE:MessageBox(Decode(2,msg.m_strMsg),"来自"+Decode(1,msg.m_strMsg)+"的通知:");break;CMySocket类中的事件函数OnReceive(intnErrorCode)。voidCMySocket::OnReceive(intnErrorCode)m_pDlg->MyReceive();//调用主窗口的接收函数CSocket::OnReceive(nErrorCode);<4>、程序界面①、登录界面②、登录成功(左为User组用户登录后界面,右为Boss组的)③、发送消息④、接收消息三、结束语  这是一个基于网络和数据库的系统模型,有点学习的价值。程序还有一些功能没完善的地方,并且存在一些Bug。
/
本文档为【VC网络数据库开发11页word文档】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索