簡單的雙人聊天軟件_第1頁
簡單的雙人聊天軟件_第2頁
簡單的雙人聊天軟件_第3頁
簡單的雙人聊天軟件_第4頁
簡單的雙人聊天軟件_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 專業(yè)文獻綜述詳細設計說明書 題 目: 簡單的雙人聊天軟件學 院: 南京農業(yè)大學工學院專 業(yè):班 級:指導教師:職稱:2011年05月09日 南京農業(yè)大學教務處制目 錄一. 引言 (31.1編寫目的 (31.2項目背景 (31.3參考資料 (3二. 總體設計 (32.1軟件描述 (32.2系統(tǒng)框圖 (3三.功能介紹 (4四. 界面設計 (4五.程序設計 (75.1登錄框代碼 (75.2輸入聊天消息后點發(fā)送所執(zhí)行的代碼 (95.3用戶接受對方發(fā)來的聊天消息時所執(zhí)行的代碼105.4CChatSocket類的幾個虛函數(shù)重載代碼 (115.5CEx_ChatDlg類的其余函數(shù)代碼 (11六.特色說明

2、(14七.困難及解決辦法 (16八.組長及各組員任務分配與表現(xiàn) (17一.引言:1、編寫目的編寫詳細設計說明書是軟件開發(fā)過程必不可少的部分,其目的是為了使開發(fā)人員在完成概要設計說明書的基礎上完成概要設計規(guī)定的各項模塊的具體實現(xiàn)的設計工作。該說明書的編制是為了使用戶和軟件開發(fā)者雙方對該軟件的初始規(guī)定有一個共同的理解, 使之成為整個開發(fā)工作的基礎。本文檔為該系統(tǒng)的軟件詳細設計說明書,較詳細闡述了系統(tǒng)的各項功能需求、技術需求、實現(xiàn)環(huán)境及所使用的實現(xiàn)技術。同時,對軟件應具有的功能和性能及其他有效性需求也進行了定義。2、項目背景(1軟件名稱簡單的雙人聊天軟件(2相關單位承辦單位:南京農業(yè)大學工學院電氣工

3、程系VC+工作小組主管部門:南京農業(yè)大學工學院計算機科學教研室3.參考資料Visual C+教程 鄭阿奇 丁有和 編著 2005年7月,清華大學出版社Visual C+實訓 鄭阿奇 丁有和 編著 2005年7月,清華大學出版社Visual C+程序設計例學與實踐 魏 亮 李春葆 編著 2007年3月,清華大學出版社二.總體設計:1.軟件描述本軟件利用MFC的CSocket類實現(xiàn)網(wǎng)絡通信,主要用于兩個人之間進行簡單的聊天。只要兩人在各自的電腦上裝上此軟件,并且保證能連接到Internet,就可以進行聊天了。2.系統(tǒng)框圖 三.功能介紹:分為服務器登錄和客戶機登錄兩大功能,兩者功能簡述如下:1、服務

4、器登錄:當客戶以服務器登錄時,向對方發(fā)送消息時顯示如下圖所示: ,此消息同步了系統(tǒng)時間,并且當客戶機接受到服務器發(fā)送的消息時有音樂提示客戶已接受到了對方的信息。2、客戶機登錄:當客戶以客戶機登錄時,向對方發(fā)送消息時顯示如下圖所示: ,此消息同步了系統(tǒng)時間,并且當服務器接受到客戶機發(fā)送的消息時有音樂提示客戶已接受到了對方的信息。四、界面設計:1、登錄界面:登錄類型分為:服務器和客戶機。以服務器登錄的界面: 以客戶機登錄的界面; 當客戶以服務器登錄時,只需要在“套接字類型”選擇服務器后點右側的運行即可;當客戶以客戶機登錄時,只需要在“套接字類型”處選擇“客戶機”并在IP地址欄輸入服務器的IP地址,

5、點擊右側的連接即可,這樣就可以實現(xiàn)2臺PC機的網(wǎng)絡連接了。若客戶機登錄時,沒有填IP地址而直接點連接,就會填出如下窗口:,提示用戶輸入IP地址。2、登錄后的界面(1服務器運行后,顯示的窗口如下:此時“IP”地址欄、“運行”按鈕和“套接字類型”都被置灰了,此時服務器只能發(fā)送和接受信息。 (2客戶機連接成功后,顯示的窗口如下:此時“套接字類型”、“連接”按鈕被置灰。用客戶機登錄的客戶可以選擇與服務器斷開,點擊“斷開”按鈕即可實現(xiàn)。 當什么都沒輸入就直接點發(fā)送的話會出現(xiàn)以下對話框:,提示用戶輸入消息后發(fā)送。五.程序設計1.登錄框代碼登錄框上插入背景圖片的代碼:void CEx_ChatDlg:OnP

6、aint( if (IsIconic(。(此處省略若干字elseCPaintDC dc(this;CRect rect;GetClientRect(▭CDC dcMem;dcMem.CreateCompatibleDC(&dc;CBitmap bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP;BITMAP bitmap;bmpBackground.GetBitmap(&bitmap;CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground;dc.Stretch

7、Blt(0,0,rect.Width(,rect.Height(,&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY; /CDialog:OnPaint(;登錄類型選擇void CEx_ChatDlg:OnSelchangeComboType(int nIndex=m_comboType.GetCurSel(;if(nIndex=CB_ERR return;CString str;m_comboType.GetLBText(nIndex,str;if(str="服務器"m_bServer=TRUE;GetDlgItem

8、(IDC_BUTTON_RUN>SetWindowText("運行"elsem_bServer=FALSE;GetDlgItem(IDC_BUTTON_RUN>SetWindowText("連接"GetDlgItem(IDCANCEL>EnableWindow(FALSE;GetDlgItem(IDC_EDIT_MSG>EnableWindow(FALSE;GetDlgItem(IDC_BUTTON_SEND>EnableWindow(FALSE;以服務器或客戶機登錄時,點運行或連接按鈕時所執(zhí)行的代碼:void CEx_Ch

9、atDlg:OnButtonRun(GetDlgItem(IDC_COMBO_TYPE>EnableWindow(FALSE;GetDlgItem(IDC_BUTTON_RUN>EnableWindow(FALSE;if(m_bServerGetDlgItem(IDC_EDIT_IP>EnableWindow(FALSE;m_asServer.Create(1000;m_asServer.Listen(;elseGetDlgItem(IDC_EDIT_IP>EnableWindow(true;m_asClient.Create(;UpdateData(TRUE;if(m

10、_strIP.IsEmpty(MessageBox("請輸入IP地址","警告!"GetDlgItem(IDC_BUTTON_RUN>EnableWindow(true; elsem_asClient.Connect(m_strIP,1000;2.輸入聊天消息后點發(fā)送所執(zhí)行的代碼:void CEx_ChatDlg:OnButtonSend(UpdateData(;if(m_strMsg.IsEmpty(MessageBox("不能發(fā)送空消息!","警告!" return;char *pBuf=new char

11、1025;int nBufSize=1024;int count = 0;CTime tm=CTime:GetCurrentTime(;CString time1=tm.Format("服務器消息: %X"CString time2=tm.Format("客戶機消息: %X"int nLen=m_strMsg.GetLength(;int nRes=m_asClient.Send(LPCTSTR(m_strMsg,nLen;if(nRes=SOCKET_ERRORAfxMessageBox("消息發(fā)送失敗!" return;if(m_

12、bServerm_listMsg.AddString(time1;m_listMsg.AddString(m_strMsg;count = m_listMsg.GetCount(;m_listMsg.SetCurSel (count1;elsem_listMsg.AddString(time2;m_listMsg.AddString(m_strMsg;count = m_listMsg.GetCount(;m_listMsg.SetCurSel (count1;m_strMsg.Empty(;UpdateData(FALSE;3.用戶接受對方發(fā)來的聊天消息時所執(zhí)行的代碼是:CEx_ChatDl

13、g:OnReceive(char *pBuf = new char1025;int nBufSize = 1024;CString strReceived;int count=0;CTime tm=CTime:GetCurrentTime(;CString time1=tm.Format("服務器消息: %X"CString time2=tm.Format("客戶機消息: %X"int nRes = m_asClient.Receive(pBuf,nBufSize;if (nRes = SOCKET_ERRORAfxMessageBox("無法

14、接收消息!"return FALSE;pBufnRes = NULL;strReceived = pBuf;if (m_bServerm_listMsg.AddString(time2;m_listMsg.AddString( strReceived ;count=m_listMsg.GetCount(;m_listMsg.SetCurSel(count1;PlaySound(MAKEINTRESOURCE(IDR_MUSIC,NULL, SND_RESOURCE | SND_ASYNC;elsem_listMsg.AddString(time1;m_listMsg.AddStrin

15、g(strReceived;count=m_listMsg.GetCount(;m_listMsg.SetCurSel(count1;PlaySound(MAKEINTRESOURCE(IDR_MUSIC,NULL, SND_RESOURCE | SND_ASYNC; 4.CChatSocket類的幾個虛函數(shù)重載代碼:void CChatSocket:OnAccept(int nErrorCodeif(nErrorCode=0 m_pDlg>OnAccept(;/ CAsyncSocket:OnAccept(nErrorCode;void CChatSocket:OnClose(int

16、nErrorCodeif(nErrorCode=0 m_pDlg>DoClose(;/ CAsyncSocket:OnClose(nErrorCode;void CChatSocket:OnConnect(int nErrorCodeif(nErrorCode=0 m_pDlg>OnConnect(;/ CAsyncSocket:OnConnect(nErrorCode;void CChatSocket:OnReceive(int nErrorCodeif(nErrorCode=0 m_pDlg>OnReceive(;/ CAsyncSocket:OnReceive(nErr

17、orCode;5.CEx_ChatDlg類的其余函數(shù)代碼是:CEx_ChatDlg:CEx_ChatDlg(CWnd* pParent /*=NULL*/: CDialog(CEx_ChatDlg:IDD, pParent/AFX_DATA_INIT(CEx_ChatDlgm_strMsg = _T(""m_strIP = _T(""/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp(>Loa

18、dIcon(IDR_MAINFRAME;void CEx_ChatDlg:DoDataExchange(CDataExchange* pDXCDialog:DoDataExchange(pDX;/AFX_DATA_MAP(CEx_ChatDlgDDX_Control(pDX, IDC_LIST_MSG, m_listMsg;DDX_Control(pDX, IDC_COMBO_TYPE, m_comboType;DDX_Text(pDX, IDC_EDIT_MSG, m_strMsg;DDX_Text(pDX, IDC_EDIT_IP, m_strIP;/AFX_DATA_MAPBOOL CE

19、x_ChatDlg:OnInitDialog(CDialog:OnInitDialog(;/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0 = IDM_ABOUTBOX;CMenu* pSysMenu = GetSystemMenu(FALSE;if (pSysMenu != NULLCString strAboutMenu;strAboutMenu.LoadString(IDS

20、_ABOUTBOX;if (!strAboutMenu.IsEmpty(pSysMenu>AppendMenu(MF_SEPARATOR;pSysMenu>AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu; / Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE; / Set big iconSetI

21、con(m_hIcon, FALSE; / Set small iconm_comboType.AddString("服務器"m_comboType.AddString("客戶機"m_comboType.SetCurSel(0;OnSelchangeComboType(;m_asServer.m_pDlg=this;m_asClient.m_pDlg=this;return TRUE; / return TRUE unless you set the focus to a control void CEx_ChatDlg:OnSysCommand(UIN

22、T nID, LPARAM lParamif (nID & 0xFFF0 = IDM_ABOUTBOXCAboutDlg dlgAbout;dlgAbout.DoModal(;elseCDialog:OnSysCommand(nID, lParam;/ If you add a minimize button to your dialog, you will need the code below / to draw the icon. For MFC applications using the document/view model, / this is automatically

23、 done for you by the framework./ The system calls this to obtain the cursor to display while the user drags/ the minimized window.HCURSOR CEx_ChatDlg:OnQueryDragIcon(return (HCURSOR m_hIcon;void CEx_ChatDlg:OnClose(if(m_bServer m_asServer.Close(;else m_asClient.Close(;OnCancel(;CDialog:OnClose(;void

24、 CEx_ChatDlg:OnCancelMode(CDialog:OnCancelMode(;/ TODO: Add your message handler code hereCEx_ChatDlg:OnAccept(m_asServer.Accept(m_asClient;GetDlgItem(IDC_EDIT_MSG>EnableWindow(TRUE;GetDlgItem(IDC_BUTTON_SEND>EnableWindow(TRUE;CEx_ChatDlg:OnConnect(GetDlgItem(IDC_EDIT_MSG>EnableWindow(TRUE;

25、GetDlgItem(IDC_BUTTON_SEND>EnableWindow(TRUE;GetDlgItem(IDCANCEL>EnableWindow(TRUE;CEx_ChatDlg:DoClose(OnClose(;void CEx_ChatDlg:OnCancel(    OnClose(;  void CEx_ChatDlg:OnOK(            OnButtonSend(   /CDialog:OnOK(;  六特色說明 1實現(xiàn)

26、異地通訊 若客戶機 IP 地址欄填入“l(fā)ocalhost”,則可以實現(xiàn)本機調試通訊。若 IP 地址欄填入服 務器 IP 地址,則可以實現(xiàn)異地通訊。 2彈出對話框向用戶提示錯誤 本系統(tǒng)在當用戶在進行異地通訊時且作為客戶機登錄時,若沒輸入 IP 地址就會彈出 , 提示用戶輸入 IP 地址; 若在聊天過程中沒有輸入任何消息, 則會彈出 ,提示用戶輸入聊天信息。 3.系統(tǒng)的美化 本系統(tǒng)又一大亮點,就是在系統(tǒng)的登陸框插入了背景圖片,使界面人性化。   15 4.增加信息提示音 使用本系統(tǒng)聊天的人在接受到對方聊天信息時同時會聽到一段優(yōu)美的音樂, 提示用戶有 新的消息,具體方法請參照第七部分。 5

27、.重載了 ENTER 鍵 MFC 對話框中,ENTER 鍵與 ESC 鍵都表示退出,若在聊天時只能用鼠標點擊“發(fā)送”按 鈕才能發(fā)送信息,顯然將大大降低效率。在現(xiàn)代這個要求高效率的社會,怎么會允許此類事 情的發(fā)生呢?因此我們把 ENTER 鍵進行了重載, 用戶聊天時可以直接按鍵盤的 ENTER 鍵, 同 樣可以發(fā)送消息,讓聊天更加的便捷。 6.聊天時自動顯示最新消息即 listbox 自動顯示最后一 行 本軟件自動顯示列表框最后一行的消息,當用戶之間聊天時,能時時顯示最新的消息, 著實很方便。   16 7.同步系統(tǒng)時間 本軟件將系統(tǒng)時間巧妙地加在了聊天信息中,使用戶在聊天中不至于會忘記時間。 8.能夠自由輸入服務器的 IP 地址 添加 IP 地址編輯框,客戶機在 IP 地址欄能夠自由輸入服務器的 IP 地址欄,這使得兩 個人任何一方都可以成為服務器。 七困難及解決方法 1. 關于回車鍵的重載 解決方法為: 通過上網(wǎng)查資料得知在 MFC 對話框中回車鍵為退出, 所以我們重載了回車 鍵,具體代碼為(不要看只是單單的一句話,其實是在充分理解的基礎上完成的): void CEx_ChatDlg:OnOK( OnButtonSend( ; /CDialog:OnOK(; 2關于系統(tǒng)時間的添加 解決方法為:通過上網(wǎng),得

溫馨提示

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

最新文檔

評論

0/150

提交評論