軟件開發(fā)集成環(huán)境課程設(shè)計(jì)--小qq聊天工具_(dá)第1頁
已閱讀1頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  《軟件開發(fā)集成環(huán)境》課程設(shè)計(jì)</p><p>  題目:小QQ聊天工具</p><p><b>  系 院: </b></p><p><b>  專 業(yè):</b></p><p><b>  年 級: </b></p>

2、<p><b>  組 別: </b></p><p><b>  成 員: </b></p><p><b>  完成日期: </b></p><p><b>  指導(dǎo)教師:</b></p><p><b> ?。?lt;

3、/b></p><p><b>  目 錄</b></p><p>  目的和意義 *****************************************</p><p>  項(xiàng)目背景 *******************************************</p><p>  設(shè)計(jì)要求

4、*******************************************</p><p>  項(xiàng)目說明 *******************************************</p><p>  需求分析 **************************************************</p><p>  性能分析

5、**************************************************</p><p>  可行性分析 ************************************************</p><p>  主要數(shù)據(jù) *******************************************</p><p> 

6、 程序運(yùn)行的條件 ************************************</p><p>  源代碼 ************************************************</p><p>  服務(wù)器編碼 ***********************************************</p><p>  執(zhí)

7、行編碼 **************************************************</p><p>  執(zhí)行結(jié)果與分析 *******************************************</p><p>  設(shè)計(jì)總結(jié) **************************************************</p>&l

8、t;p>  參考文獻(xiàn) **************************************************</p><p><b>  一:目的和意義</b></p><p>  21世紀(jì)是一個(gè)以網(wǎng)絡(luò)核心的信息化時(shí)代,要實(shí)現(xiàn)信息化,增強(qiáng)人們之間的交流很大部分是依靠在QQ上聊,但前提是必須有完善的QQ聊天室,通過本課程設(shè)計(jì)使學(xué)生對QQ聊天室的功能和

9、運(yùn)行的具體過程有所了解,同時(shí)也對掌握的只是有了更深的運(yùn)用,將所學(xué)知識用于實(shí)踐之中,增強(qiáng)了學(xué)生的動手能力。</p><p><b>  二:項(xiàng)目背景</b></p><p>  當(dāng)今是一個(gè)以網(wǎng)絡(luò)為核心的信息化時(shí)代,是一個(gè)蓬勃發(fā)展的時(shí)代,因此,僅僅依靠電話進(jìn)行交流已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足人們的需求。小QQ聊天工具則應(yīng)運(yùn)而生,它的方便靈活為人們解決了這個(gè)難題。為了體現(xiàn)我們所學(xué)的知識

10、以及提高我們的操作實(shí)踐能力,經(jīng)過討論后本小組決定設(shè)計(jì)一個(gè)簡單的QQ聊天室。</p><p><b>  三:設(shè)計(jì)要求</b></p><p>  根據(jù)要求對QQ聊天室進(jìn)行需求分析,提交需求作品;</p><p>  在需求分析的基礎(chǔ)上進(jìn)行系統(tǒng)設(shè)計(jì);</p><p>  便于客戶端進(jìn)行操作;</p><

11、p>  聊天室操作程序源代碼易懂;</p><p>  要求界面設(shè)計(jì)簡潔、使用方便,能夠完成基本的聊天室功能。</p><p><b>  四:項(xiàng)目說明</b></p><p>  聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽客戶端發(fā)來的消息,客戶端需要登錄到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。</p><

12、p>  1、服務(wù)器端的主要功能如下:</p><p>  在特定端口上進(jìn)行偵聽,等待客戶端連接。</p><p>  用戶可以配置服務(wù)器端的偵聽接口,默認(rèn)端口為 1080。</p><p>  向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。</p><p><b>  統(tǒng)計(jì)在線人數(shù)。</b></p><

13、;p>  當(dāng)停止服務(wù)器時(shí),斷開所有的用戶連接。</p><p>  2、客戶端的重要功能如下:</p><p>  連接到已經(jīng)開啟聊天服務(wù)的服務(wù)器端。</p><p>  用戶可以配置要連接的服務(wù)器端的 IP 地址和端口號。</p><p>  用戶可以配置連接后顯示的用戶名。</p><p>  當(dāng)服務(wù)器端開啟

14、的話,用戶可以隨時(shí)登陸和注銷。</p><p>  用戶可以向所有人或某一個(gè)人發(fā)送消息。</p><p><b>  (一)需求分析:</b></p><p><b>  注冊:</b></p><p>  服務(wù)器收到用戶的注冊請求,便開始接受客戶傳遞的信息,諸如客戶的昵稱,姓名,籍貫,個(gè)人資料等,

15、接受完畢后,便通過 Jdbc-Odbc 與后臺數(shù)據(jù)庫連接,然后向數(shù)據(jù)庫添加記錄,如果成功,便向客戶返回其號碼??蛻羰盏椒?wù)器返回的信息后,便打開主登陸窗口。</p><p><b>  登陸:</b></p><p>  在客戶端用戶輸入其號碼和密碼,然后建立與服務(wù)器的連接,告訴服務(wù)器我要登陸,開始通過Jdbc-Odbc 讀取數(shù)據(jù)庫,然后與用戶輸入的信息比較如果成功便

16、打開主窗口,然后客戶向服務(wù)器請求讀取好友名單,服務(wù)器收到該請求,開始讀取數(shù)據(jù)庫的表,得到好友的號碼后再在icp 表中讀取好友資料,然后向客戶端發(fā)送這些信息,客戶收到后就在主創(chuàng)口顯示好友。,并且建立幾個(gè)矢量,用、用以存儲好友的昵稱號碼。</p><p><b> ?。ǘ┬阅芊治觯?lt;/b></p><p>  本系統(tǒng)由于采用免費(fèi)的 oracle 數(shù)據(jù)庫軟件,連接數(shù)最多不

17、能超過200,所以并發(fā)訪問數(shù)據(jù)庫的人數(shù)不能超過200。</p><p><b>  (三)可行性分析:</b></p><p>  經(jīng)濟(jì)可行性:本系統(tǒng)需要一個(gè) oracle 數(shù)據(jù)庫服務(wù)器,由于使用人數(shù)比較少,安裝一個(gè)免費(fèi)的 oracle 數(shù)據(jù)庫完全可以應(yīng)付需要。</p><p>  操作可行性:只要一臺以上計(jì)算機(jī)連接在同一局域網(wǎng)內(nèi),本系統(tǒng)可以安

18、裝使用。所以操作上完全不存在問題。</p><p><b>  五:主要數(shù)據(jù)</b></p><p>  // MyQQServer.cpp : Defines the class behaviors for the application.</p><p><b>  //</b></p><p>

19、;  #include "stdafx.h"</p><p>  #include "MyQQServer.h"</p><p>  #include "MyQQServerDlg.h"</p><p>  #include "ClientSocket.h"</p><

20、;p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p>

21、<p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CMyQQServerApp</p><p>  BEGIN_MESSAGE_MAP(CMyQQServerApp, CWinApp)</p><p>  //

22、{{AFX_MSG_MAP(CMyQQServerApp)</p><p>  // NOTE - the ClassWizard will add and remove mapping macros here.</p><p>  // DO NOT EDIT what you see in these blocks of generated code!</p>&l

23、t;p>  //}}AFX_MSG</p><p>  ON_COMMAND(ID_HELP, CWinApp::OnHelp)</p><p>  END_MESSAGE_MAP()</p><p>  /////////////////////////////////////////////////////////////////////////////&

24、lt;/p><p>  // CMyQQServerApp construction</p><p>  CMyQQServerApp::CMyQQServerApp()</p><p><b>  {</b></p><p>  // TODO: add construction code here,</p>

25、<p>  // Place all significant initialization in InitInstance</p><p>  m_pClientSocketList = new CPtrList();</p><p><b>  }</b></p><p>  ///////////////////////////

26、//////////////////////////////////////////////////</p><p>  // The one and only CMyQQServerApp object</p><p>  CMyQQServerApp theApp;</p><p>  CCriticalSection g_cs;</p><

27、p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CMyQQServerApp initialization</p><p>  BOOL CMyQQServerApp::InitInstance()</p><p>&l

28、t;b>  {</b></p><p>  if (!AfxSocketInit())</p><p><b>  {</b></p><p>  AfxMessageBox(IDP_SOCKETS_INIT_FAILED);</p><p>  return FALSE;</p><

29、;p><b>  }</b></p><p>  AfxEnableControlContainer();</p><p>  AfxInitRichEdit();</p><p>  m_af.Start("IDR_MATINURF_GTBASE",NULL,GTP_LOAD_RESOURCE,NULL,"

30、MATINURF") ;</p><p>  // Standard initialization</p><p>  // If you are not using these features and wish to reduce the size</p><p>  // of your final executable, you should r

31、emove from the following</p><p>  // the specific initialization routines you do not need.</p><p>  #ifdef _AFXDLL</p><p>  Enable3dControls();// Call this when using MFC in a s

32、hared DLL</p><p><b>  #else</b></p><p>  Enable3dControlsStatic();// Call this when linking to MFC statically</p><p><b>  #endif</b></p><p>  C

33、MyQQServerDlg dlg;</p><p>  m_pMainWnd = &dlg;</p><p>  int nResponse = dlg.DoModal();</p><p>  if (nResponse == IDOK)</p><p><b>  {</b></p><

34、p>  // TODO: Place code here to handle when the dialog is</p><p>  // dismissed with OK</p><p><b>  }</b></p><p>  else if (nResponse == IDCANCEL)</p><p&g

35、t;<b>  {</b></p><p>  // TODO: Place code here to handle when the dialog is</p><p>  // dismissed with Cancel</p><p><b>  }</b></p><p>  // Sin

36、ce the dialog has been closed, return FALSE so that we exit the</p><p>  // application, rather than start the application's message pump.</p><p>  return FALSE;</p><p><b&g

37、t;  }</b></p><p>  int CMyQQServerApp::ExitInstance() </p><p><b>  {</b></p><p>  Message msObj;</p><p>  msObj.iType = SYSERROR;</p><p>

38、  msObj.iSubType = SERVERQUIT;</p><p>  CPtrList * m_pClientList = m_pClientSocketList;</p><p>  POSITION pos = m_pClientList ->GetHeadPosition();</p><p><b>  if(pos)</b

39、></p><p><b>  {</b></p><p>  CClientSocket * m_pClientSocket;</p><p>  for(int i = 0; i < m_pClientList ->GetCount(); i++)</p><p><b>  {<

40、/b></p><p>  m_pClientSocket = static_cast < CClientSocket *>(m_pClientList->GetNext(pos));</p><p>  m_pClientSocket ->Send(&msObj,sizeof(Message));</p><p>  Slee

41、p(100);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //刪除</b></p><p>  DeleteAllList();</p><p>  return CWinApp

42、::ExitInstance();</p><p><b>  }</b></p><p>  void CMyQQServerApp::DeleteAllList()</p><p><b>  {</b></p><p><b>  //刪除</b></p>

43、<p>  POSITION pos = m_pClientSocketList ->GetHeadPosition();</p><p><b>  if(pos)</b></p><p><b>  {</b></p><p>  CClientSocket * m_pClientSocket;<

44、;/p><p>  for(int i = 0; i < m_pClientSocketList ->GetCount(); i++)</p><p><b>  {</b></p><p>  m_pClientSocket = static_cast < CClientSocket *>(m_pClientSocketL

45、ist->GetNext(pos));</p><p>  ASSERT(m_pClientSocket != NULL);</p><p>  ASSERT_VALID(m_pClientSocket);</p><p>  delete m_pClientSocket;</p><p><b>  }</b>

46、</p><p><b>  }</b></p><p>  delete m_pClientSocketList;</p><p><b>  }</b></p><p>  // MyQQClient.cpp : Defines the class behaviors for the appl

47、ication.</p><p><b>  //</b></p><p>  #include "stdafx.h"</p><p>  #include "MyQQClient.h"</p><p>  #include "MyQQClientDlg.h"&

48、lt;/p><p>  #include "MainSocket.h"</p><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[]

49、 = __FILE__;</p><p><b>  #endif</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CMyQQClientApp</p><p>

50、;  BEGIN_MESSAGE_MAP(CMyQQClientApp, CWinApp)</p><p>  //{{AFX_MSG_MAP(CMyQQClientApp)</p><p>  // NOTE - the ClassWizard will add and remove mapping macros here.</p><p>  // DO

51、NOT EDIT what you see in these blocks of generated code!</p><p>  //}}AFX_MSG</p><p>  ON_COMMAND(ID_HELP, CWinApp::OnHelp)</p><p>  END_MESSAGE_MAP()</p><p>  ////////

52、/////////////////////////////////////////////////////////////////////</p><p>  // CMyQQClientApp construction</p><p>  CMyQQClientApp::CMyQQClientApp()</p><p><b>  {</b>

53、</p><p>  // TODO: add construction code here,</p><p>  // Place all significant initialization in InitInstance</p><p><b>  }</b></p><p>  /////////////////

54、////////////////////////////////////////////////////////////</p><p>  // The one and only CMyQQClientApp object</p><p>  CMyQQClientApp theApp;</p><p>  ////////////////////////////

55、/////////////////////////////////////////////////</p><p>  // CMyQQClientApp initialization</p><p>  BOOL CMyQQClientApp::InitInstance()</p><p><b>  {</b></p><

56、;p>  if (!AfxSocketInit())</p><p><b>  {</b></p><p>  AfxMessageBox(IDP_SOCKETS_INIT_FAILED);</p><p>  return FALSE;</p><p><b>  }</b></p&

57、gt;<p>  AfxEnableControlContainer();</p><p>  AfxInitRichEdit();</p><p>  m_af.Start("IDR_MATINURF_GTBASE",NULL,GTP_LOAD_RESOURCE,NULL,"MATINURF") ;</p><p&

58、gt;  // Standard initialization</p><p>  // If you are not using these features and wish to reduce the size</p><p>  // of your final executable, you should remove from the following</p>

59、<p>  // the specific initialization routines you do not need.</p><p>  #ifdef _AFXDLL</p><p>  Enable3dControls();// Call this when using MFC in a shared DLL</p><p><b

60、>  #else</b></p><p>  Enable3dControlsStatic();// Call this when linking to MFC statically</p><p><b>  #endif</b></p><p>  CMyQQClientDlg dlg;</p><p

61、>  m_pMainWnd = &dlg;</p><p>  int nResponse = dlg.DoModal();</p><p>  if (nResponse == IDOK)</p><p><b>  {</b></p><p>  // TODO: Place code here to

62、handle when the dialog is</p><p>  // dismissed with OK</p><p><b>  }</b></p><p>  else if (nResponse == IDCANCEL)</p><p><b>  {</b></p>

63、<p>  // TODO: Place code here to handle when the dialog is</p><p>  // dismissed with Cancel</p><p><b>  }</b></p><p>  // Since the dialog has been closed, retu

64、rn FALSE so that we exit the</p><p>  // application, rather than start the application's message pump.</p><p>  return FALSE;</p><p><b>  }</b></p><p>

65、;  int CMyQQClientApp::ExitInstance() </p><p><b>  {</b></p><p>  return CWinApp::ExitInstance();</p><p><b>  }</b></p><p><b>  六:程序運(yùn)行的條件&

66、lt;/b></p><p><b>  網(wǎng)站打開</b></p><p><b>  服務(wù)器打開</b></p><p><b>  二個(gè)復(fù)制端口相同</b></p><p><b>  多人進(jìn)入聊天室</b></p><p&g

67、t;<b>  七:源代碼</b></p><p><b>  服務(wù)編碼</b></p><p>  // MyQQServer.cpp : Defines the class behaviors for the application.</p><p><b>  //</b></p>

68、<p>  #include "stdafx.h"</p><p>  #include "MyQQServer.h"</p><p>  #include "MyQQServerDlg.h"</p><p>  #include "ClientSocket.h"</p

69、><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b>&

70、lt;/p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CMyQQServerApp</p><p>  BEGIN_MESSAGE_MAP(CMyQQServerApp, CWinApp)</p><

71、p>  //{{AFX_MSG_MAP(CMyQQServerApp)</p><p>  // NOTE - the ClassWizard will add and remove mapping macros here.</p><p>  // DO NOT EDIT what you see in these blocks of generated code!</

72、p><p>  //}}AFX_MSG</p><p>  ON_COMMAND(ID_HELP, CWinApp::OnHelp)</p><p>  END_MESSAGE_MAP()</p><p>  /////////////////////////////////////////////////////////////////////

73、////////</p><p>  // CMyQQServerApp construction</p><p>  CMyQQServerApp::CMyQQServerApp()</p><p><b>  {</b></p><p>  // TODO: add construction code here,&l

74、t;/p><p>  // Place all significant initialization in InitInstance</p><p>  m_pClientSocketList = new CPtrList();</p><p><b>  }</b></p><p>  //////////////////

75、///////////////////////////////////////////////////////////</p><p>  // The one and only CMyQQServerApp object</p><p>  CMyQQServerApp theApp;</p><p>  CCriticalSection g_cs; </p

76、><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CMyQQServerApp initialization</p><p>  BOOL CMyQQServerApp::InitInstance()</p>&

77、lt;p><b>  {</b></p><p>  if (!AfxSocketInit())</p><p><b>  {</b></p><p>  AfxMessageBox(IDP_SOCKETS_INIT_FAILED);</p><p>  return FALSE;</

78、p><p><b>  }</b></p><p>  AfxEnableControlContainer();</p><p>  AfxInitRichEdit();</p><p>  m_af.Start("IDR_MATINURF_GTBASE",NULL,GTP_LOAD_RESOURCE,N

79、ULL,"MATINURF") ;</p><p>  // Standard initialization</p><p>  // If you are not using these features and wish to reduce the size</p><p>  // of your final executable, yo

80、u should remove from the following</p><p>  // the specific initialization routines you do not need.</p><p>  #ifdef _AFXDLL</p><p>  Enable3dControls();// Call this when using

81、MFC in a shared DLL</p><p><b>  #else</b></p><p>  Enable3dControlsStatic();// Call this when linking to MFC statically</p><p><b>  #endif</b></p>&l

82、t;p>  CMyQQServerDlg dlg;</p><p>  m_pMainWnd = &dlg;</p><p>  int nResponse = dlg.DoModal();</p><p>  if (nResponse == IDOK)</p><p><b>  {</b></p

83、><p>  // TODO: Place code here to handle when the dialog is</p><p>  // dismissed with OK</p><p><b>  }</b></p><p>  else if (nResponse == IDCANCEL)</p>

84、;<p><b>  {</b></p><p>  // TODO: Place code here to handle when the dialog is</p><p>  // dismissed with Cancel</p><p><b>  }</b></p><p&g

85、t;  // Since the dialog has been closed, return FALSE so that we exit the</p><p>  // application, rather than start the application's message pump.</p><p>  return FALSE;</p><p&

86、gt;<b>  }</b></p><p>  int CMyQQServerApp::ExitInstance() </p><p><b>  {</b></p><p>  Message msObj;</p><p>  msObj.iType = SYSERROR;</p>

87、<p>  msObj.iSubType = SERVERQUIT;</p><p>  CPtrList * m_pClientList = m_pClientSocketList;</p><p>  POSITION pos = m_pClientList ->GetHeadPosition();</p><p><b>  if(

88、pos)</b></p><p><b>  {</b></p><p>  CClientSocket * m_pClientSocket;</p><p>  for(int i = 0; i < m_pClientList ->GetCount(); i++)</p><p><b&

89、gt;  {</b></p><p>  m_pClientSocket = static_cast < CClientSocket *>(m_pClientList->GetNext(pos));</p><p>  m_pClientSocket ->Send(&msObj,sizeof(Message));</p><p

90、>  Sleep(100);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //刪除</b></p><p>  DeleteAllList();</p><p>  retu

91、rn CWinApp::ExitInstance();</p><p><b>  }</b></p><p>  void CMyQQServerApp::DeleteAllList()</p><p><b>  {</b></p><p><b>  //刪除</b>&l

92、t;/p><p>  POSITION pos = m_pClientSocketList ->GetHeadPosition();</p><p><b>  if(pos)</b></p><p><b>  {</b></p><p>  CClientSocket * m_pClient

93、Socket;</p><p>  for(int i = 0; i < m_pClientSocketList ->GetCount(); i++)</p><p><b>  {</b></p><p>  m_pClientSocket = static_cast < CClientSocket *>(m_pCli

94、entSocketList->GetNext(pos));</p><p>  ASSERT(m_pClientSocket != NULL);</p><p>  ASSERT_VALID(m_pClientSocket);</p><p>  delete m_pClientSocket;</p><p><b>  }&

95、lt;/b></p><p><b>  }</b></p><p>  delete m_pClientSocketList;</p><p><b>  }</b></p><p><b>  執(zhí)行編碼</b></p><p>  // Ch

96、atDialog.cpp : implementation file</p><p><b>  //</b></p><p>  #include "stdafx.h"</p><p>  #include "MyQQClient.h"</p><p>  #include &q

97、uot;ChatDialog.h"</p><p>  #include "MainSocket.h"</p><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  

98、static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CChatDialog

99、 dialog</p><p>  CChatDialog::CChatDialog(CWnd* pParent /*=NULL*/)</p><p>  : CDialog(CChatDialog::IDD, pParent)</p><p><b>  {</b></p><p>  //{{AFX_DATA_INI

100、T(CChatDialog)</p><p>  // NOTE: the ClassWizard will add member initialization here</p><p>  //}}AFX_DATA_INIT</p><p><b>  }</b></p><p>  void CChatDialog:

101、:DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CChatDialog)</p><p>  DDX_Control(pDX

102、, IDC_SENDMESSAGE, m_MessageCtrl);</p><p>  DDX_Control(pDX, IDC_RECEIVE, m_ReceiveCtrl);</p><p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p>  BEGIN_MESSAGE

103、_MAP(CChatDialog, CDialog)</p><p>  //{{AFX_MSG_MAP(CChatDialog)</p><p>  ON_WM_CLOSE()</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  //////

104、///////////////////////////////////////////////////////////////////////</p><p>  // CChatDialog message handlers</p><p>  void CChatDialog::DisplayMessage(CString UserName, CString strChatMessag

105、e)</p><p><b>  {</b></p><p>  CString strChat;</p><p>  int nSLine = m_ReceiveCtrl.GetLineCount();</p><p>  CHARFORMAT2 uFont;</p><p>  uFont.c

106、bSize = sizeof(uFont);</p><p>  uFont.dwMask = CFM_COLOR;</p><p>  uFont.dwEffects = ~CFE_AUTOCOLOR;</p><p>  uFont.crTextColor = RGB(200,90,50);</p><p>  m_ReceiveCtrl

107、.GetWindowText(strChat);</p><p>  int nLength = strChat.GetLength();</p><p>  m_ReceiveCtrl.SetSel(nLength,nLength);</p><p>  m_ReceiveCtrl.SetWordCharFormat(uFont);</p><

108、p>  strChat = UserName + _T(" 說:\r\n");</p><p>  m_ReceiveCtrl.ReplaceSel(strChat);</p><p>  uFont.dwEffects = CFE_AUTOCOLOR;</p><p>  m_ReceiveCtrl.SetWordCharFormat(u

109、Font);</p><p>  strChat = _T(" ") + strChatMessage + _T("\r\n");</p><p>  m_ReceiveCtrl.ReplaceSel(strChat);</p><p>  int nELine = m_ReceiveCtrl.GetLineCount(

110、);</p><p>  m_ReceiveCtrl.LineScroll(nELine - nSLine);</p><p><b>  }</b></p><p>  void CChatDialog::OnOK() </p><p><b>  {</b></p><p&g

111、t;  CString strMessage;</p><p>  m_MessageCtrl.GetWindowText(strMessage);</p><p>  if (strMessage.IsEmpty()) return;</p><p>  ((CMainSocket *)m_pClientSocket)->SendMessage(m_Clie

112、ntName,strMessage);</p><p>  CString strChat;</p><p>  int nSLine = m_ReceiveCtrl.GetLineCount();</p><p>  CHARFORMAT2 uFont;</p><p>  uFont.cbSize = sizeof(uFont);<

113、/p><p>  uFont.dwMask = CFM_COLOR;</p><p>  uFont.dwEffects = ~CFE_AUTOCOLOR;</p><p>  uFont.crTextColor = RGB(0,0,255);</p><p>  m_ReceiveCtrl.GetWindowText(strChat);<

114、/p><p>  int nLength = strChat.GetLength();</p><p>  m_ReceiveCtrl.SetSel(nLength,nLength);</p><p>  m_ReceiveCtrl.SetWordCharFormat(uFont);</p><p>  strChat = ((CMainSock

115、et *)m_pClientSocket)->m_UserName + _T(" 說: \r\n");</p><p>  m_ReceiveCtrl.ReplaceSel(strChat);</p><p>  uFont.dwEffects = CFE_AUTOCOLOR;</p><p>  m_ReceiveCtrl.SetW

116、ordCharFormat(uFont);</p><p>  strChat = _T(" ") + strMessage + _T("\r\n");</p><p>  m_ReceiveCtrl.ReplaceSel(strChat);</p><p>  int nELine = m_ReceiveCtrl.Ge

117、tLineCount();</p><p>  //m_ReceiveCtrl.LineScroll(nELine - nSLine);</p><p>  m_MessageCtrl.SetWindowText("");</p><p>  m_MessageCtrl.SetFocus();</p><p>  //

118、CDialog::OnOK();</p><p><b>  }</b></p><p>  void CChatDialog::OnClose() </p><p><b>  {</b></p><p>  // TODO: Add your message handler code here

119、 and/or call default</p><p>  DestroyWindow();</p><p>  CDialog::OnClose();</p><p><b>  }</b></p><p>  BOOL CChatDialog::OnInitDialog() </p><p>

120、;<b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  // TODO: Add extra initialization here</p><p>  //SetIcon(m_hIcon, TRUE);// Set big icon</p><p> 

121、 //SetIcon(m_hIcon, FALSE);// Set small icon</p><p>  CString strTip;</p><p>  strTip.Format("%s 說話:",m_UserName);</p><p>  SetWindowText(strTip);</p><p> 

122、 return TRUE; // return TRUE unless you set the focus to a control</p><p>  // EXCEPTION: OCX Property Pages should return FALSE</p><p><b>  }</b></p><p>  BOOL CChatDi

123、alog::DestroyWindow() </p><p><b>  {</b></p><p>  for(int i=0;i<m_pClientSocket->m_ChatDlgs.GetSize();i++)</p><p><b>  {</b></p><p>  CCha

124、tDialog * ChatDlg = (CChatDialog *)m_pClientSocket->m_ChatDlgs.GetAt(i);</p><p>  if(ChatDlg->m_UserName == m_UserName)</p><p><b>  {</b></p><p>  m_pClientSocket-

125、>m_ChatDlgs.RemoveAt(i);</p><p>  //delete ChatDlg;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

126、t;  return CDialog::DestroyWindow();</p><p><b>  }</b></p><p><b>  七:執(zhí)行結(jié)果與分析</b></p><p>  輸入端口,單擊“啟動”,如下圖所示:</p><p>  啟動客戶端,輸入IP地址、端口(必須與服務(wù)器端口相同

127、)、昵稱、選擇頭像,單擊“登錄”,如下圖:</p><p><b>  登錄結(jié)果如下圖:</b></p><p>  此時(shí),服務(wù)器接到信號,登錄成功,如下圖:</p><p><b>  八:設(shè)計(jì)總結(jié)</b></p><p>  本小組設(shè)計(jì)的QQ聊天室功能雖然不夠齊全,但是根據(jù)廣大客戶的需求進(jìn)行設(shè)計(jì)

128、,本小組設(shè)計(jì)的聊天室操作簡單,適于廣大的群體,老少皆宜。設(shè)計(jì)QQ聊天室時(shí)不僅運(yùn)用了當(dāng)前所學(xué)知識,也在該課程設(shè)計(jì)中全體成員得到進(jìn)一步的提高,體現(xiàn)了本小組的團(tuán)結(jié)精神,當(dāng)然還離不開老師的指導(dǎo)和同學(xué)們的幫助 。</p><p><b>  九:參考文獻(xiàn)</b></p><p>  《C語言程序設(shè)計(jì)》 何欽銘 顏暉主編</p><p>  《數(shù)據(jù)結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論