




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
11aa宜賓職業技術學院畢業設計企業QQ通信系統設計與實現TOC\o"1-5"\h\z系 部 _專業名稱^ ^班 級 姓 名 學號. —指導教師 2013年09月28日企業QQ通信系統設計與實現摘要企業QQ通信系統可作為企業內部的交流工具使用,雖然通信的安全性不是很高,但是要求信息的響應速度要較快,能讓企業內部員工充分享受到網絡即時消息的方便和快捷,從而提高工作質量和效率。本設計采用VisualC++6.0程序,使用C++編程語言進行軟件的開發。主要實現了用戶注冊、用戶登錄、用戶之間文字聊天、文件傳輸、語音聊天、視頻聊天功能,構成一個實用的、功能完善的聊天軟件,達到預期目標;通過運行、測試與分析說明,該多功能聊天軟件運行穩定、可靠,具有一定的實用價值。關鍵詞:QQ系統;企業通信;VisualC++6.0;C++;數據庫目錄TOC\o"1-5"\h\z\o"CurrentDocument"引言 1課題背景 1國內外主要聊天工具的發展狀況 1本課題研究的意義 3\o"CurrentDocument"系統需求分析 4系統的功能需求分析 4系統的可行性分析 4可行性要求、目標 4技術可行性分析 5經濟可行性分析 5\o"CurrentDocument"系統設計 6系統拓撲結構圖 6系統功能結構圖 6網絡通信原理分析 7開發環境 8數據庫設計 9\o"CurrentDocument"服務器端設計 10服務器端主窗體模塊 10服務器端主窗體概述 10窗口設計 10關鍵代碼分析 11服務器端賬戶管理模塊 15服務器端賬戶管理概述 15窗口設計 15關鍵代碼分析 16服務器端系統組織結構管理模塊 19服務器端系統組織結構概述 19窗口設計 19關鍵代碼 20\o"CurrentDocument"客戶端關鍵技術 21客戶端概述 21客戶端的關鍵技術 21\o"CurrentDocument"系統測試 24軟件測試基礎理論 24系統測試 24測試結果 26\o"CurrentDocument"結束語 27\o"CurrentDocument"致謝 28\o"CurrentDocument"參考文獻 29企業QQ通信系統設計與實現引言課題背景21世紀將是網絡化、信息化的世紀,信息的融合已經成為社會發展的主流方向。簡易版企業QQ聊天系統將不斷與信息交流領域的系統相互集成和滲透,擴展其自己的功能和應用范圍,滿足未來話音,數據和視頻的多媒體應用需要,使即時消息以更豐富的接入方法,更高的服務質量,更友好的面貌呈現在世人的面前。從功能角度來看,簡易版企業QQ聊天系統向支持全媒體方向發展,隨著多媒體技術在網絡應用中的發展,簡易版企業QQ聊天系統承載的媒體,不再局限于原來的文字、語音和文件的信息交換,信息載體擴展到圖形、圖像和流媒體等多媒體業務上。目前ICQ和QQ預設了部分簡單的表情圖像,通過傳輸圖像代碼來傳遞表情圖像,可以被視為即時消息開發商開發支持圖形、圖像為載體的即時消息軟件的開端。從應用范圍角度來看,簡易版企業QQ聊天系統集中在Internet個人用戶之間的信息交流應用,隨著網絡技術應用的發展,簡易版企業QQ聊天系統應用范圍向園區化、集團化拓展,應用領域突破個人,而用于遠程教學、遠程醫療、遠程演示、網絡會議等領域。國內外主要聊天工具的發展狀況中國的大部分網絡用戶都擁有自己的QQ號碼。騰訊計算機系統有限公司成立于1998年11月。1999年2月,騰訊自主開發了基于Internet的即時通信網絡工具騰訊即時通信TencentInstantMessenger,簡稱TIM或騰訊QQ。騰訊QQ經過三年時間的發展,到2002年,其用戶群成為中國最大的互聯網注冊用戶群,注冊用戶達到1億6000萬,其中活躍用戶總數超過5000萬。自此騰訊QQ成為中國最大的即時通信服務提供商。騰訊公司是中國最早也是目前中國市場上最大的本土互聯網即時通信軟件開發商。公司成立10多年以來,一直以追求卓越的技術為導向,始終處于穩健、高速發展的狀態。騰訊QQ超過6億的注冊用戶群體現了網絡用戶對騰訊QQ這一聊天工具的廣泛應用。在當今市場經濟高速發展的前提下,騰訊QQ也在不斷自我完善,漸漸地演變為一個人性化、市場化的多功能的聊天工具軟件,它可以給網絡聊天用戶帶來越來越多的人性化服務:從原來單一的文字聊天過渡到集語音、視頻、文件傳輸等多功能于一身的聊天軟件。ICQ和MSN是在國外比較盛行的即時聊天工具,騰訊QQ的開發對MSN和ICQ都進行了借鑒。ICQ是ISeekYou(我找你)的縮寫,最初是一家以色列公司開發出來的免費軟件,中文名稱目前可以稱之為“網絡呼叫器”,它在全球擁有超過4000萬的用戶。事實上這種軟件最主要的功能就是讓用戶知道網絡上的朋友現在有沒有上線(前提是對方也有安裝ICQ),然后可以互送Messages(消息)交談或是交換檔案等等,比電子郵件更具即時性。正如一位ICQ軟件的最初程序設計員所說:“當你登錄因特網之后,你周圍都是些自己熟悉的人,而且,你還可以和他們分享這種體驗,這的確是一件令人激動的事情。”MSN是微軟推出的聊天軟件,是一套類似ICQ的網上即時通訊軟件,它以最簡單的方式為用戶提供強有力的即時消息支持,同時能使MicrosoftOutlookExpress(R)ffMSNHotmail(R)變得更簡單易用。MSNMessengerService還可使用戶間的聯機交談變得更加輕松愉快,了解誰在聯機以及查看用戶何時聯機并與其交換即時消息。用戶間可以進行單獨的聊天,或者在同一個對話窗口中與多達四個的聯系人進行聊天。自動的輸入指示器可讓用戶知道何時聯系人正在輸入答復,還可以進行全球電話呼叫——以非常低的費用呼叫世界的任何地方。用戶可以選擇所要使用的電話服務提供商,從服務提供商的列表中選擇最適合的提供商。用交談取代鍵盤輸入,使用計算機上的話筒和揚聲器就可以和位于世界各地的朋友進行交談,甚至可以呼叫聯系人將文本消息發送到聯系人的移動電話和傳呼機上(注:此特性僅適用于美國和加拿大),而進入“聊天室”結識新朋友,或加入與名人聊天,此特性在所有地區都適用。用戶可以使用MSNMessenger與朋友交換照片、喜愛的音樂或任何其他文件,也可以監視新的電子郵件并查看用戶有多少新的電子郵件。MSNMessenger能在收到新的Hotmail郵件時通知用戶,還能邀請聯系人進行聯機DirectPlay兼容游戲。本課題研究的意義此次開發的企業QQ通信系統可作為個人的交流工具使用,通信的安全性不是很高,但要求信息的響應速度要較快,讓用戶充分享受到網絡即時消息的方便和快捷。本聊天工具由服務器端程序和客戶端程序兩部分組成,整體采用VisualC++6.0平臺開發,并使用Access2003管理數據庫數據。服務器是可以監聽和查看用戶的基本操作;客戶端程序面向實際用戶,它有必要的界面的按鈕,向用戶提供網絡即時消息的功能。系統需求分析系統的功能需求分析本系統的設計目標是實現一個企業內部局域網通信系統,企業內部職工可以方便的進行交流,可以大大的提高職工的工作效率。根據企業對局域網通信的需求,本系統主要包括信息通信、系統設置、搜索用戶、訪問公共資源、訪問對方主機五大功能。各功能概述:信息通信:信息通信是企業內部通信系統的核心功能,它用于不同職工之間的通信,這種通信方式能夠實現多個職工之間的通信,而不存在類似電話占線的問題,增加了任務分配的新方式,從而提高企業的工作效率。系統設置:系統設置用于設置用戶界面、公共路徑、公告欄等的功能。用戶搜索:用戶搜索用于搜索企業局域網內的其他用戶,系統會根據用戶所設置的IP搜索范圍搜索所有計算機上的用戶。訪問公共資源:本功能用于實現企業內部公共服務器上資源訪問的功能。訪問對方主機:本功能用于兩人聊天情況下對對方主機的訪問和控制的功能。第一次使用系統的用戶通過填寫個人信息來注冊,服務器返回一個注冊ID號給注冊用戶,用來登錄。已經注冊的用戶在登錄界面填寫完相關登錄信息,通過服務器的驗證后就可以進入客戶端界面。在線用戶在添加好友時可以查看所要添加用戶的列表信息。當對要添加的好友發送請求添加的信息后,由該好友驗證是否通過請求,同意后會向請求方發送同意添加的消息。當請求方添加完成后,服務器端會把相關信息存入到好友表的數據庫中。完成以上操作以后,兩人即可進行在線聊天。系統的可行性分析可行性要求、目標企業內部通信系統必須提供網絡通信功能,在通信過程中禁止使用聊天表情、文件傳送等功能,避免資料外泄,或因發送錯誤而導致上機資料的丟失以及其他損失。最重要的是必須適應任何操作系統,也就是實現跨平臺技術,因為企業內部的工作需要,工作環境中使用了多個操作系統來完成不同的工作。另外,系統不需要使用服務器中轉和記錄通信內容,可以獨立完成通信任務,排除職工對領導監視工作進度等行為的逆反心理。企業內部通信系統的目標是實現企業的信息化通信,提高企業通信能力,提高任務理解和執行能力,減少沒有必要的人員流動和資金損耗,以最快的速度提升企業的市場競爭力。技術可行性分析局域網通信系統的技術已經非常成熟,首先,從硬件上講,計算機硬件速度現在已經不是問題,高速便捷的網絡已經十分普遍,這些為本系統的運行打下堅實的基礎。從軟件的角度上講,數據庫技術已經相當成熟(目前用得比較多的有SQLServer,VisualC++6.0等),并且處理能力也非常強,這為海量數據的存儲和處理打下了堅實的基礎,同時,使用VisualC++6.0開發程序也相當普遍。有了這些技術的支持,我們成功開發一個局域網通信系統沒有任何技術風險。經濟可行性分析經濟可行性主要是對項目的經濟效益進行評價。本系統開發完成后可縮減工作時間,提高工作效率,而且簡單易操作,不需對使用人員進行培訓,不管是在資金上還是效率上都能達到預期的效果。本系統開發經費對于企業在經濟上是可以接受的,并且本系統實施后可以顯著提高工作效率,有助于企業的信息化管理,所以該企業內部通信系統在經濟上是可行的。系統設計系統拓撲結構圖企業QQ通信系統分為客戶端和服務器端,并且多個客戶端可以連接同一個服務器端,通信系統的拓撲結構如圖3.1所示。圖3.1企業QQ通信系統拓撲結構圖系統功能結構圖企業QQ通信系統分為客戶端和服務器端兩個項目。其中服務器端不但提供接收客戶端的鏈接,還能夠對賬戶進行管理。服務器端的主要模塊如圖3.2所示。客戶端只要實現相互之間的消息和文件傳遞,客戶端的主要模塊如圖3.3所示。服務器端帳戶管理組織管理主界面帳戶管理組織管理主界面圖3.2服務器端客戶端系統設置添加聯系人主界面登錄界面系統設置添加聯系人主界面登錄界面圖3.3客戶端網絡通信原理分析企業QQ通信系統使用TCP和UDP兩種連接方式進行連接。客戶端使用TCP連接服務器,服務器端是使用UDP進行通信,系統連接模式如圖3.4所示。圖3.4連接模式服務器端和客戶端使用Socket建立通信連接的過程如下:(1)服務器端建立m_SvrSock和m_OrgSock兩個套接字句柄。m_OrgSock和OnOrgMsg函數建立異步通信,端口1201,接收客戶端發送的連接請求(FD_ACCEPT)。在OnOrgMsg函數內將org.xml文件發送到客戶端。m_SvrSock和OnNetEvent函數建立異步通信,端口1200,接收客戶端發送的連接請求,接收到客戶端的心跳測試和登錄請求(登錄后將端口1201的信息發送過去,并判斷是否已經登錄),定時向客戶端發送心跳包,每隔10s發送一次,如果5次沒有心跳回復,則認為掉線。(2)客戶端建立m_ClientSock和m_UdpSock兩個套接句柄,m_ClientSock連接方式為TCP,m_UdpSock連接方式為UDP,端口都是隨機獲取的。m_ClientSock和OnNetEvent函數建立異步通信。m_UdpSock和OnOrgMsg函數建立異步通信。客戶端首先使用m_ClientSock建立連接,連接服務器的IP地址和端口。首先發送PT_LOGINREQUEST和本機UDP端口(m_nUdpPort)到服務器,如果用戶名和密碼正確,則得到PT_LOGINACCEPT和1201端口,此時服務器會向每個客戶端發送剛登錄客戶端的IP地址和UDP端口(PT_USERINF)O。客戶端接收到PT_LOGINACCEPT后,創建m_OrgSock套接字,本地端口隨機,連接到服務器端的1201端口,準備獲取org.xml文件。客戶端發送消息首先會創建taskSock套接字(客戶端為A),因為用戶在雙擊要發送消息的用戶時(OnDblclkOrgtree),會獲得它的UDP端口和IP地址,然后發送PT_REQUESTUDPPORT到客戶端B,B新生成的UDP連接端口號后,返回PT_RETURNUDPPORT消息給A。每次創建taskSock套接字都會啟動一個接收數據的線程(SendTaskProc),此時客戶端A和B都啟動了接收數據的線程。A接收到PT_RETURNUDPPORT后,返回PT_STREAM及相應的數據。發送文件和發送消息流程相同,創建taskSock套接字后啟動的是SendFile進程,A接收到PT_RETURNUDPPORT后,返回PT_FILE。開發環境企業QQ通信系統的開發環境如下:系統開發平臺:VisualC++6.0。系統開發語言:C++。數據庫管理系統軟件:Access2003。運行平臺:WindowsXP(SP2)/Windows2000(SP4)/WindowsServer2003(SP1)。分辨率:最佳效果1024X768像素。數據庫設計服務器端使用Access2003作為后臺數據庫,用來儲存組織結構及賬戶信息,數據庫命名為SvrInfo,其中包含2張數據表。tb_Account表:tb_Account表儲存的是賬戶信息。賬戶信息如表3.1所示。表3.1賬戶信息表字段名數據類型長度描述字段名數據類型長度描述AccountID數字4賬戶HeaderShip文本20職務Username文本12姓名OfficePhone文本22辦公電話Password文本18密碼Handset文本22手機Sex文本2性別E-mail文本32電子郵件Age數字4年齡Address文本50聯系地址OrgID數字4部門Picture文本20圖片,以賬戶命名OrgName文本50部門名稱tb_OrgInfo表:tb_OrgInfo表用于儲存組織信息。組織信息如表3.2所示。表3.2組織信息表字段名數據類型長度描述OrgID數字4組織編號OrgName文本20組織姓名ParentID數字4上一級編號4服務器端設計服務器端主窗體模塊服務器端主窗體概述服務器端可以對組織結構及賬戶進行管理,并且提供通信服務,負責將組織結構信息和賬戶信息發送給各個客戶端、提供通信服務,負責將組織結構信息和賬戶信息發送給各個客戶端、驗證賬戶的登錄權限、檢查客戶端是否保持在線。客戶端主窗體模塊主要負責通信服務,并且可以調用組織信息管理模塊和賬戶信息管理模塊。服務器端主界面效果如圖4.1所示。圖4.1服務器端主界面窗口設計創建一個對話框,向對話框中添加兩個按鈕控件。設置控件屬性如表4.1所示。表4.1控件屬性控件類型資源值對應類成員名稱屬性設置ButtonIDC_ORGMANAGEOnOrgmanage組織信息管理默認ButtonIDC_ACCOUNTMANAGEOnAccountManage賬戶信息管理默認關鍵代碼分析在對話框初始化函數中,對數據庫進行初始化,創建套接字并綁定本機IP地址和一個端口,然后開始監聽,并將網絡設置為異步通信。為什么要使用異步通信?異步通信有什么好處?可以通過OnInitDialog()函數的應用來了解。部分代碼如下:BOOLCQQServerDlg::OnInitDialog(){CDialog::OnInitDialog();//Add"About..."menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){//監聽套接字listen(m_SvrSock,5);listen(m_OrgSock,5);WSAAsyncSelect(m_SvrSock,m_hWnd,WM_NETMSG,FD_READ|FD_WRITE|FD_CLOSE|FD_ACCEPT);WSAAsyncSelect(m_OrgSock,m_hWnd,WM_ORGMSG,FD_READ|FD_WRITE|FD_CLOSE|FD_ACCEPT);〃設置異步IO模式unsignedlongulValue=0;ioctlsocket(m_OrgSock,FIONBIO,&ulValue);SetTimer(1,10000,NULL); 〃開始一個計時器,每隔10s向客戶端發送心跳包SetTimer(2,10000,NULL); //判斷客戶端是否掉線returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}OnNetEvent()函數對應一個消息,當應用程序接收到消息后調用該函數執行。使用WSAAsyncSelect函數可以設置事件類型。例如,FD_ACCEPT類型是當客戶端發送連接請求時服務器端如何進行應答的類型,FD_READ是讀取客戶端發送過來的數據事件,FD_CLOSE關閉連接事件。LRESULTCQQServerDlg::OnNetEvent(WPARAMwParam,LPARAMlParam){WORDnEvent=WSAGETSELECTEVENT(lParam);//獲取網絡事件WORDnError=WSAGETSELECTERROR(lParam);//獲取錯誤代碼switch(nEvent){caseFD_ACCEPT: //有客戶端發出連接請求,接受連接{sockaddr_inAddr;Addr.sin_family=AF_INET;intnAddrSize=sizeof(sockaddr_in);//接受客戶端連接CClient*client=newCClient();client->m_Sock=accept(m_SvrSock,(sockaddr*)&Addr,&nAddrSize);if(client->m_Sock==INVALID_SOCKET)//接受連接失敗{catch(...)//修改密碼失敗{CPackagePackage;Package.m_Type=PT_PT_UPDATEPASSFAILD;send(wParam,(char*)&Package,sizeof(CPackage),0);}}delete[]pBuffer;break;}returnS_OK;}服務器端創建兩個端口,并使用TCP進行數據傳輸,TCP是傳輸控制協議,是一種提供可靠數據傳輸的通信協議。它在網際協議模塊和TCP模塊之間的傳輸,該協議允許兩個應用程序建立一個連接,并在全雙工方向上發送數據,然后終止連接,每一個TCP連接可靠地建立并完善地終止,在終止發生前,所有數據都會被可靠地傳輸。TCP通過3次握手建立可靠的連接,所謂3次握手指通信雙方彼此交換3次信息。3次握手是在存在數據報丟失、重復和延遲的情況下,確保通信雙方信息交換確定性的充分必要條件。使用TCP協議建立通信的步驟如圖4.2所示。服務器端 客戶端圖4.2TCP通信連接過程在應用程序是指定時器用來做什么,從OnTimer的實現代碼中可以看出。判斷用戶是否在線需要使用定時器,每隔一段時間就向客戶端發送一個消息,如果客戶端能夠回復消息,說明客戶端在線,否則認為客戶端已經掉線。將服務器端發送給客戶端的這條信息稱為心跳包,消息類型PT_TEST就代表該包是心跳包。服務器端保存有在線客戶的列表,如果客戶端掉線了,就在列表中將客戶端刪除。voidCQQServerDlg::OnTimer(UINTnIDEvent){switch(nIDEvent){case1: //向客戶端發送心跳包{POSITIONpos=m_ClientSockList.GetHeadPosition();m_ClientSockList.GetNext(pos);}break;}}CDialog::OnTimer(nIDEvent);驗證用戶名和密碼,通過SQL語句檢查數據庫中是否有相應的用戶名和密碼。BOOLCQQServerDlg::VerifyUser(intnID,char*szPassword){CStringszSQL;szSQL.Format("selectAccountIDfromtb_AccountwhereAccountID=%dandPassword='%s'",nID,szPassword);_RecordsetPtrpRecord=m_DataManage.m_pConnect->Execute((_bstr_t)szSQL,0,adCmdText);if(!pRecord->ADOEOF)//判斷用戶是否存在{returnTRUE;}returnFALSE;}OnOrgMsg函數同OnNetEvent函數一樣,都是消息的處理函數,同樣可以處理FD_ACCEPT事件。在OnOrgMsg函數中當有客戶端發送請求時,服務器端會將org.xml文件發送到客戶端,org.xml文件中存放的是組織結構信息,也就是含有在線用戶列表,每個客戶端都會在登錄時獲得該列表。如果組織結構和用戶比較多時,文件會比較大,所以如果文件超出一定范圍后,就將文件分成多份進行發送。LRESULTCQQServerDlg::OnOrgMsg(WPARAMwParam,LPARAMlParam){WORDnEvent=WSAGETSELECTEVENT(lParam);//獲取網絡事件WORDnError=WSAGETSELECTERROR(lParam);//獲取錯誤代碼DWORDdwRead=file.ReadHuge(pTmp,dwMsg-sizeof(CPackage));intnlen=send(sock,pData,dwMsg,0);closesocket(sock);// delete[]pBuffer;}break;} }returnS_OK;}UserIsLogined()函數主要用來判斷客戶端是否已經在線了,和FindClient函數類似,同樣需要遍歷整個列表,同樣如果列表中有相同的IP和ID,說明客戶端存在,否則客戶端不存在。BOOLCQQServerDlg::UserIsLogined(intnID,SOCKETsock){//獲取套接字IPsockaddr_inAddr;Addr.sin_family=AF_INET;intnAddrlen=sizeof(sockaddr_in);intnRet=getsockname(sock,(sockaddr*)&Addr,&nAddrlen);if(nRet==0)&&strcmp(pClient->m_szClientIP,szIP)!=0){returnTRUE;}}m_ClientSockList.GetNext(pos);} }returnFALSE;}服務器端賬戶管理模塊服務器端賬戶管理概述賬戶管理模塊主要完成向已建好的部門中添加部門成員,“賬戶管理”模塊如圖4.3所示。「組縱結構{me來周本勤先哲秋杰+小鄭向胡壬張嚴任添加刪除I「組縱結構{me來周本勤先哲秋杰+小鄭向胡壬張嚴任添加刪除I圖4.3“賬戶管理”模塊窗口設計創建一個對話框,向對話框中添加樹控件、按鈕、編輯框、組合框等控件。設置窗體中的各種控件屬性,如表4.2所示表4.2控件屬性控件類型資源值對應類成員名稱或含義屬性設置ButtonIDC_BTADDOnBtadd添加默認ButtonIDC_BT_DELETEOnBtDelete刪除默認TreeControlIDC_ORGLISTm_Orglist組織結構HasbuttonHaslineComboBoxIDC_SEXm_Sex性別DroplistData
EditBoxIDC_ACCOUNTIDm_AccoutID賬戶IDnumberEditBoxIDC_ACNAMEm_AccountName姓名默認EditBoxIDC_ACPASSWORDm_Password密碼passwordEditBoxIDC_DEPARTm_OrgName部門ReadOnlyEditBoxIDC_DEPAPTIDm_OrgID部門IDReadOnlyNumberEditBoxIDC_HANDERSHIPm_HanderShip職務默認EditBoxIDC_USERIDm_UserID用戶IDReadOnlyEditBoxIDC_CURUSERm_User賬戶姓名ReadOnly4.2.3關鍵代碼分析LoadOrgInfo()函數從數據庫中讀取信息,將數據添加到屬性結構中,并生成xml文件,將數據庫中的內容生成XML文件。voidCAccountManage::LoadOrgInfo(){if(m_InitSucess)//已連接數據庫{m_OrgList.DeleteAllItems();//刪除所有節點CStringsql="select*fromtb_OrgInfowhereParentID=0";CStringszOrgName;HTREEITEMhRoot,hParent;m_DataManage.m_pRecord=m_DataManage.m_pConnect->Execute("select*fromtb_OrgInfowhereParentID=0",0,adCmdText);hRoot=m_OrgList.InsertItem("部門組織,0,0);//添加根節點m_pXMLDoc->save((unsignedshort*)(_bstr_t)szFileName);m_OrgList.Expand(hRoot,TVE_EXPAND);m_pXMLDoc.Release();}}在程序讀寫XML文件需要借助微軟提供的接口,如果使用Windows2000操作系統,還需要到微軟的官方網站下載關于XML解析的動態鏈接庫。使用微軟提供的XML接口步驟。打開數據可讀取數據,將讀取的子節點數據顯示到樹形結構中,并將數據寫入XML文件,代碼如下:voidCAccountManage::LoadAccountInfo(){CStringszSQL,szName,szOrgName,szSex;intnOrgID,nAccountID;szSQL.Format("select*fromtb_Account");_RecordsetPtrpRecord=m_DataManage.m_pConnect->Execute((_bstr_t)szSQL,0,adCmdText);if(hInsert!=NULL){DWORDdwData=MAKELRESULT(0,nAccountID);m_OrgList.SetItemData(hInsert,dwData);}m_pXMLDoc->save((unsignedshort*)(_bstr_t)szFileName);pRecord->MoveNext();}m_pXMLDoc.Release();}FindNode()是遞歸調用函數,從數據庫讀取子節點數據并保存到XML文件中。while(!pRecord->ADOEOF){OrgName=(TCHAR*)(_bstr_t)pRecord->GetFields()->GetItem("OrgName")->Value;intnID=pRecord->GetFields()->GetItem("OrgID")->Value.iVal;hTemp=m_OrgList.InsertItem(OrgName,0,0,hParent);FindNode(hTemp,nID,pTmp);pRecord->MoveNext();}}查找樹形結構中節點是否存在,并遞歸調用返回子節點,代碼如下:HTREEITEMCAccountManage::GetOrgItem(intnOrgID,HTREEITEMhCurrent){HTREEITEMhRet=NULL;if(hCurrent!=NULL){DWORDdwData=m_OrgList.GetItemData(hCurrent);intnID=LOWORD(dwData);if(nID!=0&&nID==nOrgID)while(hFind!=NULL){hFind=m_OrgList.GetNextItem(hFind,TVGN_NEXT);hRet=GetOrgItem(nOrgID,hFind);if(hRet!=NULL)returnhRet;}returnhRet;}進行添加操作,首先獲取用戶的輸入信息,對輸入信息進行判斷,然后將合法的用戶的賬戶數據保存到數據庫,代碼如下:if(szAcID.IsEmpty()||szAcName.IsEmpty()||szSex.IsEmpty()||szOrgName.IsEmpty()||szOrgID.IsEmpty()||szPassword.IsEmpty()||szHanderShip.IsEmpty()){MessageBox(“帳戶信息不能為空!”,”提示)return;}if(atoi(szAcID)>300000){catch(_com_error&e){MessageBox("操作失敗!","提示");}}服務器端系統組織結構管理模塊服務器端系統組織結構概述系統組織結構管理模塊主要完成組織結構的建立,程序運行結果如圖4.4所示。圖4.4 ”系統組織結構管理”模塊窗口設計創建一個對話框,向對話框中添加樹控件、文本框控件、靜態文本控件和按鈕控件,設置窗口中的各種控件屬性如表4.3所示。表4.3控件屬性控件類型資源值對應類成員名稱默認屬性ButtonIDC_BT_ADDOnBtAdd添加默認ButtonIDC_BT_DELOnBtDel刪除默認TreeControlIDC_ORGLISTm_OrgList組織結構HasbuttonHaslineEdieBoxIDC_CURRENTNODEm_CurNode當前節點ReadOnlyEdieBoxIDC_ORGNAMEm_OrgName組織名稱默認關鍵代碼LoadOrgInfo()從數據庫的tb_OrgInfo表中讀取組織結構信息,將組織機構信息添加到樹形結構中,通過FindNode函數查詢出子節點數據,代碼如下:if(m_InitSucess)//數據庫已連接{m_OrgList.DeleteAllItems();//刪除所有節點CStringsql="select*fromtb_OrgInfowhereParentID=0";CStringOrgName;FindNode(hParent,nID);m_DataManage.m_pRecord->MoveNext();}m_OrgList.Expand(hRoot,TVE_EXPAND);}}FindNode()函數查詢指定的ID節點的子節點數據,函數使用遞歸算法獲取指定節點的所有子節點,代碼如下:voidCOrgManage::FindNode(HTREEITEMhParent,intParentID){_ConnectionPtrpCon; //定義連接對象_RecordsetPtrpRecord; //定義記錄集對象dwData=MAKELPARAM(nID,ParentID);m_OrgList.SetItemData(hTemp,dwData);FindNode(hTemp,nID);pRecord->MoveNext();}}客戶端關鍵技術客戶端概述用戶使用客戶端登錄服務器,然后可以和其他登錄的用戶進行通信。客戶端主窗體模塊是用戶有登陸權限登錄服務器后的界面,在主窗體界面中,主要有一個樹形列表,樹形列表中顯示了所有的組織結構及結構下的成員。并且在主窗體上可以調用系統設置和修改密碼等其他模塊。客戶端主界面如圖6.1所示。客戶端的關鍵技術ThreadProc是向服務器端發送連接請求的線程,CS_CONNECTING,然后設置超時時間,如果超時需要重新連接,連接時將用戶名和密碼都會發送到服務器端。發送請求時消息包的類型設置為PT_LOGINREQUEST,服務器端會根據這個類型進行相應的處理。在LoginSrv()函數中調用InitSocket初始化網絡套接字,然后啟動ThreadProc線程向服務器發送登錄請求。OnTimer是定時器,其可以判斷CS_CONNECT、CS_UNCONNECT、CS_CONNECTING這3種狀態;通過計數標量m_mCount判斷是否連接中斷,根據連接狀態改變系統托盤圖標的樣式。初始化m_ClientSock和m_UdpSock套接字,將IP地址都綁定為本機IP地址,然后隨機選用端口,隨機選用端口使用goto語句形成了一個循環,直到能正確獲得端口后循環停止,并且將套接字都設置為異步通信。在OnNetEvent中主要處理分包,以及對消息類型為PT_TEST、PT_USERINFO、PT_DISCOUNT、PT_LOGINACCEPT、PT_LOGINDENY、PT_LINEACCEPT、PT_UPDATEPASSSUCCESS、PT_PT_UPDATEPASSFAILD數據包進行處理,主要消息類型如圖5.1所示。如果接收到PT_TEST的數據包,需要向服務器回復心跳測試。如果是PT_USERINFO的消息包,需要播放聲音提示并在主窗體的樹形列表改變新登錄用戶的圖標。PT_TES「N跳測試PT_USERINFO新用戶登錄PT_DISCOUNT客戶端斷開連接分析消息的類型PT_DISCOUNT客戶端斷開連接分析消息的類型PT_DISCOUNT客戶端斷開連接PT_LOGINDENY用戶名或密碼不正確PT_LOGINED用戶在其他地點登錄PT_LOGINACCEPT用戶名和密碼驗證通過PT_LINEACCEPT服務器發送在線用戶信息圖5.1消息類型在OnOrgMsg中主要接收組織結構信息,如果組織機構信息比較大,一次只能接收固定大小的內容,所以設計了分包處理機制,當數據接收完整后,通過HandleOrgData函數進行處理。OnOrgMsg處理分包的流程如圖5.2所示。
繼續接收數據合成數據結構繼續接收數據是繼續接收數據合成數據包是處理接收到
的數據圖5.2處理分包流程繼續接收數據合成數據結構繼續接收數據是繼續接收數據合成數據包是處理接收到
的數據如果是第一次處理讀取的數據,可以分為包結構是否完整兩種情況。將實現對讀取的數據進行分析和處理。讀取部分數據包結構后,需要繼續判斷數據包結構是否完整。其中OnOrgMsg()函數中關于數據包結構是否完整的處理過程。獲取完整的數據結構后,就需要判斷數據包是否已經接收完畢,OnOrgMsg()函數中關于數據包是否完整的處理過程。RecTaskProc是接收消息并處理的線程。處理流程如圖5.3所示。是否有處理分包數據有分包等待數據判斷數據類型aPTFILE判斷數據‘包順序數據小PT_STREAM顯示數據數據處理分包數據有分包等待數據判斷數據類型aPTFILE判斷數據‘包順序數據小PT_STREAM顯示數據圖5.3接收消息并處理的處理流程判斷是否為第一個接收的數據包,如果是第一個接收的數據包,需要播放聲音提示,并找到對話框進行交互。如果不是第一個接收的數據包,那么就進行分包處理。OnUdpMsg用來接收UDP消息并處理。函數中使用recvfrom接收消息,如果接收到PT_REQUESTUDPPORT,就創建新套接字,然后將端口信息發送過去。如果有PT_TEXT類型的數據,就直接進行顯示。系統測試軟件測試基礎理論軟件測試是根據軟件開發各階段的規格說明和程序的內部結構而精心設計的一批測試用例,并利用這些測試用例運行程序以及發現錯誤的過程,即執行測試步驟。軟件測試就是在軟件投入運行前,對軟件需求分析、設計規格說明和編碼實現的最終審查,它是軟件質量保證的關鍵步驟。測試的含義:所謂測試,首先是一項活動,在這項活動中某個系統或組成的部分將在特定的條件下運行,結果將被觀察和記錄,并對系統或組成部分進行評價。測試活動有兩種結果:找出缺陷和故障,或顯示軟件執行正確。測試是一個或多個測試用例的集合。測試的意義:系統測試是管理信息系統的開發周期中的一個十分重要環節。盡管在系統開發周期的各個階段均采取了嚴格的技術審查,但依然難免會留下錯誤,如果沒有在投入運行前的系統測試階段被發現并糾正,問題遲早會在運行中暴露出來,到那時要糾正錯誤將會付出更大的代價。系統測試占用的時間、花費的人力和成本占軟件開發的很大比例。系統測試在設計系統的過程中,難免會存在一些錯誤。在程序編寫過程中,一些程序語句的語法錯誤,在程序運行時自動提示,可以立即糾正,因此,這類錯誤比較容易發現及改正。但另一類錯誤是在程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年體育場館運營社會穩定性評估與風險防范報告
- 2025年商業地產數字化運營與客戶體驗提升解決方案匯編報告
- 藥品研發階段管理制度
- 藥品銷售藥店管理制度
- 藥店投訴舉報管理制度
- 薪酬福利保密管理制度
- 設備制作日常管理制度
- 設備工具安全管理制度
- 設備材料存放管理制度
- 設備網絡維護管理制度
- MOOC 創新管理-浙江大學 中國大學慕課答案
- 梨的貯藏特性及保鮮技術
- 2024年人參相關項目實施方案
- 2024年安徽淮河能源控股集團有限責任公司招聘筆試參考題庫含答案解析
- 混合痔術后護理查房
- 建筑材料采購投標方案(技術標)
- 挪用資金案諒解書
- 機械連接預應力混凝土異型樁L19ZG403
- 港口碼頭考核管理制度
- 飛機儀電與飛控系統原理智慧樹知到課后章節答案2023年下中國人民解放軍海軍航空大學
- 中醫刮痧課件
評論
0/150
提交評論