基于p2p網(wǎng)絡(luò)模型的即時(shí)通信軟件的研制-本科畢業(yè)論文_第1頁(yè)
已閱讀1頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  本科畢業(yè)論文</b></p><p>  題 目 基于P2P網(wǎng)絡(luò)模型的即時(shí)通信軟件的研制</p><p><b>  學(xué) 生 </b></p><p><b>  指導(dǎo)教師 </b></p><p><b>  年

2、 級(jí) </b></p><p>  專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)</p><p>  系 別 計(jì)算機(jī)科學(xué)系</p><p><b>  計(jì)算機(jī)科學(xué)系</b></p><p><b>  2016年5月</b></p><p><b>  鄭

3、重聲明</b></p><p>  本人的畢業(yè)論文(設(shè)計(jì))是在指導(dǎo)教師老師的指導(dǎo)下獨(dú)立撰寫(xiě)完成的。如有剽竊、抄襲、造假等違反學(xué)術(shù)道德、學(xué)術(shù)規(guī)范和侵權(quán)的行為,本人愿意承擔(dān)由此產(chǎn)生的各種后果,直至法律責(zé)任,并愿意通過(guò)網(wǎng)絡(luò)進(jìn)行公眾的監(jiān)督。特此鄭重聲明。</p><p>  畢業(yè)論文(設(shè)計(jì))作者簽名:</p><p>  年 月 日</p>

4、;<p><b>  目 錄</b></p><p><b>  標(biāo)題1</b></p><p><b>  摘要1</b></p><p><b>  1引言1</b></p><p>  1.1 開(kāi)發(fā)背景及意義1</p

5、><p>  1.1.1 背景及意義1</p><p>  1.1.2 國(guó)內(nèi)外企業(yè)級(jí)通信系統(tǒng)的發(fā)展現(xiàn)狀1</p><p><b>  2可行性分析2</b></p><p>  2.1 技術(shù)可行性分析2</p><p>  2.2 經(jīng)濟(jì)可行性分析2</p><p&

6、gt;  2.3 操作可行性2</p><p>  2.4 實(shí)現(xiàn)技術(shù)分析2</p><p><b>  3需求分析3</b></p><p>  3.1 軟件功能需求3</p><p>  3.2 系統(tǒng)開(kāi)發(fā)環(huán)境配置需求4</p><p><b>  4數(shù)據(jù)庫(kù)設(shè)計(jì)4<

7、/b></p><p>  4.1 數(shù)據(jù)庫(kù)分析4</p><p>  4.1.1 數(shù)據(jù)庫(kù)概述4</p><p>  4.1.2 軟件實(shí)現(xiàn)的E-R圖5</p><p>  4.2 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)6</p><p><b>  5軟件功能設(shè)計(jì)7</b></p>&

8、lt;p>  5.1 登錄注冊(cè)設(shè)計(jì)7</p><p>  5.2 軟件首頁(yè)界面設(shè)計(jì)10</p><p>  5.3 好友查找及添加設(shè)計(jì)10</p><p>  5.4 好友聊天設(shè)計(jì)11</p><p>  5.5 刪除好友設(shè)計(jì)24</p><p>  5.6 群聊設(shè)計(jì)24</p><

9、;p><b>  6 結(jié) 論25</b></p><p><b>  參考文獻(xiàn)26</b></p><p><b>  致 謝27</b></p><p><b>  外文頁(yè)28</b></p><p>  基于P2P網(wǎng)絡(luò)模型的即時(shí)通信軟

10、件的研制</p><p><b>  王莉鑫</b></p><p>  摘 要 隨著現(xiàn)代通信技術(shù)的日益成熟,越來(lái)越多的企業(yè)由于溝通需求,紛紛考慮搭建局域網(wǎng)下的通信系統(tǒng),來(lái)解決平時(shí)工作交流和溝通的問(wèn)題。企業(yè)級(jí)通信軟件成本低,使用方便,信息傳輸速度快,同時(shí)因?yàn)榛诰钟蚓W(wǎng)下的通信交互,可以做到資源的共享和公告信息的下達(dá)。即時(shí)通信軟件的研究解決了信息通信與用戶(hù)管理的

11、有機(jī)統(tǒng)一,從而提高了企業(yè)管理的智能化與管理效率。</p><p>  此軟件采用c#作為設(shè)計(jì)語(yǔ)言,使用VS2010作為開(kāi)發(fā)和運(yùn)行工具。研究的是一個(gè)小型的P2P即時(shí)通信軟件,通過(guò)局域網(wǎng)內(nèi)IP地址建立通信連接,實(shí)現(xiàn)用戶(hù)的登錄,注冊(cè)及驗(yàn)證,添加、查找、刪除好友,與好友語(yǔ)音、視頻,群的創(chuàng)建,查找,添加等功能,可以很好的解決公司內(nèi)部通信的問(wèn)題,它將局域網(wǎng)資源有效的利用起來(lái),完成公司整體通訊平臺(tái)的架構(gòu)。</p>

12、<p>  關(guān)鍵詞 內(nèi)部通信 c# 用戶(hù) 局域網(wǎng)</p><p><b>  1引言</b></p><p>  1.1 開(kāi)發(fā)背景及意義</p><p>  1.1.1 背景及意義</p><p>  隨著信息技術(shù)在中國(guó)的發(fā)展,越來(lái)越多的人了解到信息傳播的重要性。從最初的口頭相傳到如今的一個(gè)手

13、機(jī)行天下,人們已經(jīng)逐漸熟悉和依賴(lài)上便捷高效的通信軟件,通信互聯(lián)網(wǎng)產(chǎn)業(yè)日漸崛起正逐漸成為中國(guó)信息產(chǎn)業(yè)的領(lǐng)頭羊,一大批基于信息產(chǎn)業(yè)開(kāi)發(fā)的公司相繼上市。與此同時(shí),信息技術(shù)的發(fā)展更是呈現(xiàn)出新特點(diǎn),對(duì)信息安全和信息的傳輸速率的要求也不斷上升,這使得企業(yè)級(jí)即時(shí)通信軟件應(yīng)運(yùn)而生,讓企業(yè)在安全、易于管理、協(xié)調(diào)嚴(yán)謹(jǐn)?shù)墓芾砟J较掠行У貍鬟_(dá)和交流信息。</p><p>  企業(yè)級(jí)即時(shí)通信軟件是目前公司內(nèi)部員工上網(wǎng)交流使用率最高的軟件之

14、一,公司內(nèi)部通信系統(tǒng)可以使公司內(nèi)部員工識(shí)別其他用戶(hù)并與之交流。大多數(shù)企業(yè)通常都具備一個(gè)獨(dú)立的局域網(wǎng)硬件環(huán)境,并在此基礎(chǔ)上連入萬(wàn)維網(wǎng)。然而公司每年在接入互聯(lián)網(wǎng)時(shí)需要承擔(dān)很巨大的網(wǎng)絡(luò)費(fèi)用,因此,可以設(shè)計(jì)一款在局域網(wǎng)環(huán)境下運(yùn)行的通信軟件,在保證通信和信息管理功能實(shí)現(xiàn)的同時(shí)減少支出,適應(yīng)公司的本身辦公環(huán)境。除此之外,由于局域網(wǎng)具備與外界網(wǎng)絡(luò)物理隔絕的特點(diǎn),因此可以有效地降低被外界網(wǎng)絡(luò)和商業(yè)黑客攻擊的危險(xiǎn),保證了通信環(huán)境下的安全性。</p&

15、gt;<p>  1.1.2 國(guó)內(nèi)外企業(yè)級(jí)通信系統(tǒng)的發(fā)展現(xiàn)狀</p><p>  企業(yè)級(jí)的即時(shí)通信系統(tǒng),采用了UDP協(xié)議和數(shù)據(jù)報(bào)來(lái)實(shí)現(xiàn)。廣域網(wǎng)下的即時(shí)通信系統(tǒng),一般分為T(mén)CP通信和UDP通信兩種,TCP通信的優(yōu)勢(shì)在于能夠保證消息的準(zhǔn)確收發(fā),UDP通信的優(yōu)勢(shì)在于具有群發(fā)和廣播的功能。相關(guān)的開(kāi)發(fā)技術(shù)和相對(duì)應(yīng)的產(chǎn)品已經(jīng)得到人們的肯定,人們?cè)贗CQ和MSN軟件上進(jìn)行注冊(cè)和登陸,就可以享受這些由國(guó)外大互聯(lián)網(wǎng)

16、公司開(kāi)發(fā)的優(yōu)秀的即時(shí)聊天軟件。國(guó)產(chǎn)的即時(shí)通信軟件起步較晚,但在非常短的時(shí)間內(nèi)崛起,如即時(shí)通信軟件的巨頭QQ騰訊公司,同時(shí)推出同類(lèi)型軟件的還有新浪公司的UC,上述軟件已經(jīng)占據(jù)了中國(guó)即時(shí)聊天市場(chǎng)的大部分份額 。這些軟件在使用方面和用戶(hù)體驗(yàn)上都各有千秋,但遺憾的是,在企業(yè)級(jí)即時(shí)通信領(lǐng)域還不是很廣泛,仍具有很大的開(kāi)發(fā)空間。</p><p>  目前,越來(lái)越多的軟件公司開(kāi)始著力開(kāi)發(fā)具有企業(yè)特色的辦公類(lèi)型通信軟件,主要包括:

17、Imo云辦公室、騰訊公司的針對(duì)公司開(kāi)發(fā)的RTX軟件,免費(fèi)版且應(yīng)用比較普遍的有飛秋等。通過(guò)一系列的市場(chǎng)調(diào)研可以清楚地看到,中國(guó)在企業(yè)級(jí)通信系統(tǒng)設(shè)計(jì)方面仍存在很大的不足,比如對(duì)于公司信息安全性的問(wèn)題導(dǎo)致很多公司寧愿花大價(jià)錢(qián)從國(guó)外訂購(gòu)昂貴的通信軟件,也不愿使用這些公司開(kāi)發(fā)的軟件。免費(fèi)版的飛秋在市場(chǎng)上已經(jīng)樹(shù)立起一個(gè)很好的口碑,但相對(duì)應(yīng)的是后續(xù)開(kāi)發(fā)的不足和系統(tǒng)方面的BUG,整體界面不夠美觀(guān),操作繁瑣,使操作者感覺(jué)不舒適。任何一款面向用戶(hù)開(kāi)發(fā)的軟件

18、都應(yīng)該考慮到用戶(hù)的使用感受,而且,企業(yè)級(jí)即使通信軟件除了需要完成基本的即時(shí)通信功能外,還可以實(shí)現(xiàn)通訊人員列表的維護(hù)、實(shí)時(shí)搜索IP段內(nèi)的所有用戶(hù)、訪(fǎng)問(wèn)公共資源、群發(fā)消息和信史發(fā)送等功能。功能的強(qiáng)大和使用的方便相結(jié)合,必定會(huì)帶來(lái)相當(dāng)可觀(guān)的用戶(hù)群體。綜合這些方面的考慮,其實(shí)國(guó)內(nèi)的企業(yè)即時(shí)通信仍是占了一份很大的市場(chǎng),只是由于一部分廠(chǎng)商的粗制濫造和開(kāi)發(fā)系統(tǒng)的不認(rèn)真仔細(xì),導(dǎo)致了這其中很大部分市場(chǎng)份額被國(guó)外搶走。因此,開(kāi)發(fā)出一種符合市場(chǎng)要求,更加貼切

19、企業(yè)需要的內(nèi)部通信軟件勢(shì)在必行。</p><p><b>  2 可行性分析</b></p><p>  2.1 技術(shù)可行性分析</p><p>  技術(shù)可行性是最重要的部分也是最難的部分,用SQL Server來(lái)后臺(tái)數(shù)據(jù)庫(kù)的管理體系,這是發(fā)揮支柱作用,解決數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)庫(kù)程序等,這些應(yīng)用程序可以提供對(duì)數(shù)據(jù)管理的有力支持和數(shù)據(jù)庫(kù)中的數(shù)據(jù)提供有

20、效的管理,使用有效的措施來(lái)達(dá)到數(shù)據(jù)完整、數(shù)據(jù)安全和數(shù)據(jù)可靠易用的目的。編程平臺(tái)采用Visual Studio 2010它已被證明是一個(gè)極其強(qiáng)大和成功的開(kāi)發(fā)平臺(tái),其成熟穩(wěn)定能夠充分保證軟件設(shè)計(jì)的順利進(jìn)行。</p><p>  2.2 經(jīng)濟(jì)可行性分析</p><p>  經(jīng)濟(jì)可行性的分析主要針對(duì)的是軟件項(xiàng)目開(kāi)發(fā)時(shí)所有的預(yù)算和軟件實(shí)施后帶來(lái)的經(jīng)濟(jì)效益進(jìn)行分析。本軟件功能強(qiáng)大,操作簡(jiǎn)單,成本低廉

21、,無(wú)需過(guò)高配置的運(yùn)行環(huán)境,因此開(kāi)發(fā)成本和預(yù)算都可以接受。本軟件可以有效地提高學(xué)校內(nèi)部的工作效率,節(jié)省寶貴的時(shí)間,不占用過(guò)多的資源,無(wú)需對(duì)使用者進(jìn)行功能上的講解,有助于學(xué)校有效地管理日常事務(wù)和下達(dá)公告。因此,在經(jīng)濟(jì)上這款軟件也是可適用的和可行的。本軟件是畢業(yè)設(shè)計(jì)沒(méi)有商業(yè)因素,學(xué)校為我們提供了良好的基礎(chǔ)設(shè)施,如:機(jī)房,電腦,軟件開(kāi)發(fā)環(huán)境等等,如果遇到了技術(shù)難題也可以請(qǐng)老師指導(dǎo)。因此開(kāi)發(fā)設(shè)計(jì)學(xué)校通信系統(tǒng)并不需要開(kāi)發(fā)經(jīng)費(fèi),在經(jīng)濟(jì)上完全可實(shí)行。&

22、lt;/p><p><b>  2.3 操作可行性</b></p><p>  該即時(shí)通信軟件界面簡(jiǎn)潔,操作簡(jiǎn)單明了,類(lèi)似于大家熟悉使用的QQ,公司員工經(jīng)過(guò)簡(jiǎn)單的培訓(xùn)就可以熟練的操作。并且該軟件可以實(shí)現(xiàn)公司的內(nèi)部交流,保密性良好,接收效率高,具有即時(shí)行。該軟件成本低,操作靈活簡(jiǎn)單,本軟件在操作可行上完全沒(méi)有問(wèn)題。綜上所述此軟件的開(kāi)發(fā)完全是可行的。</p>&

23、lt;p>  2.4 實(shí)現(xiàn)技術(shù)分析</p><p>  2.4.1 運(yùn)用P2P技術(shù)實(shí)現(xiàn)過(guò)程分析</p><p>  在P2P技術(shù)尚未風(fēng)行之前,很多企業(yè)級(jí)應(yīng)用采用C/S或者B/S架構(gòu),在傳統(tǒng)的C/S架構(gòu)應(yīng)用程序中,客戶(hù)端(或者叫客戶(hù)機(jī))與服務(wù)器有明確的分界??蛻?hù)端軟件向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器存放共享資源并對(duì)客戶(hù)端請(qǐng)求作出響應(yīng)。顯然,在這種架構(gòu)下,客戶(hù)機(jī)越多,服務(wù)器的壓力越大。C/S架構(gòu)

24、如圖2-1所示:</p><p>  圖2-1 C/S架構(gòu)</p><p>  P2P技術(shù)與傳統(tǒng)的C/S架構(gòu)不同,使用P2P技術(shù)實(shí)現(xiàn)的每個(gè)計(jì)算機(jī)節(jié)點(diǎn)既是客戶(hù)端,也是服務(wù)器,其功能的提供是對(duì)等的,每個(gè)計(jì)算機(jī)節(jié)點(diǎn)根據(jù)自己的計(jì)算能力,同時(shí)承擔(dān)了一部分服務(wù)器的功能。安裝了相同P2P軟件的計(jì)算機(jī)之間可以直接進(jìn)行數(shù)據(jù)通信,而不需要依賴(lài)于專(zhuān)門(mén)的服務(wù)器。P2P架構(gòu)如圖2-2所示:</p>&

25、lt;p>  圖2-2 P2P架構(gòu)</p><p>  即時(shí)通信軟件具體的實(shí)現(xiàn)步驟:</p><p>  用戶(hù)A通過(guò)客戶(hù)端輸入自己的賬號(hào)和密碼登錄到服務(wù)器,服務(wù)器通過(guò)用戶(hù)A注冊(cè)的數(shù)據(jù)庫(kù)驗(yàn)證身份,如果驗(yàn)證成功,則同意登錄。</p><p>  通過(guò)用戶(hù)A的好友列表信息,服務(wù)器將用戶(hù)A在線(xiàn)信息發(fā)送到好友列表中在線(xiàn)的好友。</p><p>

26、  服務(wù)器將在線(xiàn)好友的信息發(fā)送給用戶(hù)A,使用戶(hù)A可以看到好友的狀態(tài)。</p><p>  如果用戶(hù)A想要跟好友聊天,直接在聊天界面上發(fā)送消息即可。用戶(hù)B看見(jiàn)信息后可以恢復(fù)用戶(hù)A并予以顯示。</p><p><b>  3 需求分析</b></p><p>  3.1 軟件功能需求</p><p>  軟件功能需求就是

27、該軟件是否存在可以滿(mǎn)足用戶(hù)需求的功能。為了更大程度的滿(mǎn)足用戶(hù),必須設(shè)計(jì)出組成這個(gè)系統(tǒng)的所有程序和文件(包括數(shù)據(jù)庫(kù))?;谄髽I(yè)通信這一前提,功能的實(shí)現(xiàn)應(yīng)該與企業(yè)辦公模式掛鉤,避免過(guò)多的無(wú)關(guān)信息,比如:娛樂(lè)信息等。信息傳達(dá)明確快速,界面友好簡(jiǎn)單,容易操作。根據(jù)企業(yè)內(nèi)部通信的實(shí)際需求,軟件需要開(kāi)發(fā)以下功能。</p><p>  (1)軟件界面友好簡(jiǎn)單、整潔美觀(guān)。</p><p>  (2)具有完

28、善的消息顯示、消息提示和用戶(hù)信息顯示。</p><p>  (3)支持局域網(wǎng)下通信,支持UDP和數(shù)據(jù)報(bào)不同方式下的消息傳輸。</p><p>  (4)支持發(fā)送消息功能,保證消息傳輸?shù)臏?zhǔn)確性和安全性。</p><p>  (5)支持窗體最小化,支持托盤(pán)操作,保證電腦界面干凈整潔。</p><p>  (6)使用獨(dú)立的本地?cái)?shù)據(jù)庫(kù),保證軟件的可移

29、植性和拓展性。</p><p>  (7)支持自動(dòng)搜索和手動(dòng)添加IP或IP段內(nèi)的所有通信用戶(hù)。</p><p>  (8)提供用戶(hù)信息的增刪改查。</p><p>  除了滿(mǎn)足以上的功能實(shí)現(xiàn)之外,還要考慮到商業(yè)文件和機(jī)密的安全性。如通訊之所以不會(huì)選擇使用QQ和MSN的原因,不僅是因?yàn)閵蕵?lè)軟件會(huì)大量增加私人時(shí)間,降低辦公效率,更重要的一點(diǎn)是病毒和木馬的猖獗會(huì)嚴(yán)重威脅到

30、公司的信息安全。即便是在局域網(wǎng)下的通信軟件,相對(duì)于廣域網(wǎng)來(lái)說(shuō),被入侵和盜竊的風(fēng)險(xiǎn)更小,但誰(shuí)又能說(shuō)那一定是不存在的呢?因此,可以考慮在系統(tǒng)功能和模塊的設(shè)計(jì)上采用信息攔截,攔截垃圾消息和病毒木馬,為信息通信和機(jī)密文件披上保護(hù)衣。其次,通信信息能否一定送達(dá)至接收方,發(fā)送方如何知道信息已送達(dá),也是一項(xiàng)需要完善的功能。信息交互必須保證百分之百的傳送成功,否則信息通信便喪失了實(shí)用性。</p><p>  3.2 系統(tǒng)開(kāi)發(fā)環(huán)

31、境配置需求</p><p>  使用語(yǔ)言及環(huán)境:c#,vs2010;</p><p>  數(shù)據(jù)庫(kù):sql server;</p><p>  操作系統(tǒng):Windows 7 ;</p><p><b>  運(yùn)行平臺(tái):vs。</b></p><p>  3.3 軟件功能設(shè)計(jì)</p>&

32、lt;p>  根據(jù)大多數(shù)企業(yè)對(duì)通信系統(tǒng)的要求,綜合考慮可行性和必要性的分析,本軟件可以實(shí)現(xiàn)以下功能。</p><p>  (1)操作簡(jiǎn)單方便、界面美觀(guān)整潔。</p><p>  (2)完成基本的通信功能,同時(shí)開(kāi)發(fā)出更實(shí)際的群發(fā)和離線(xiàn)下的信史功能。</p><p>  (3)通信窗口顯示對(duì)方IP信息和用戶(hù)名。</p><p>  (4)局

33、域網(wǎng)下的IP和IP段內(nèi)的用戶(hù)搜索和自動(dòng)搜索。</p><p>  (5)設(shè)計(jì)軟件托盤(pán)功能,具有訪(fǎng)問(wèn)服務(wù)器,打開(kāi)界面和退出三大功能。</p><p>  (6)客戶(hù)端和服務(wù)器一體化,節(jié)省資源,同時(shí)方便后續(xù)的功能拓展。</p><p>  (7)更方便訪(fǎng)問(wèn)公共資源和公共程序,保證了資料和文件的保密性。</p><p>  (8)軟件運(yùn)行穩(wěn)定、安全

34、可靠。</p><p><b>  4 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p><b>  4.1 數(shù)據(jù)庫(kù)分析</b></p><p>  4.1.1 數(shù)據(jù)庫(kù)概述</p><p>  SQLSever具有很大的靈活性,改變了以往傳統(tǒng)的數(shù)據(jù)放置方式,將相關(guān)數(shù)據(jù)保存在不同的表中,通過(guò)表之間的關(guān)聯(lián)性,實(shí)現(xiàn)數(shù)

35、據(jù)的管理。由于SQLSever具有小體積,高速度,低成本以及源代碼開(kāi)放等優(yōu)點(diǎn),SQLSever成為大多數(shù)中小型網(wǎng)站的首選。</p><p>  雖然SQLSever存在著安全系統(tǒng)以及缺乏標(biāo)準(zhǔn)的RI機(jī)制等缺點(diǎn)并且與其他大型數(shù)據(jù)庫(kù)相比,仍存在著規(guī)模比較小,功能實(shí)現(xiàn)存在著限制以及效率較低等不足之處但是這都不影響其歡迎程度,SQLSever具有以下特性:</p><p>  多處理器:SQLSev

36、er采用多種數(shù)據(jù)類(lèi)型,支持多個(gè)處理器共同處理,具有較快的處理速度;</p><p>  可移植性:在不同的操作系統(tǒng)下均可以正確運(yùn)行,比如Window,也可以在不同的運(yùn)行環(huán)境下正確的運(yùn)行;</p><p>  多線(xiàn)程:SQLSever為用戶(hù)提供便利的服務(wù),使進(jìn)程切換迅速,CPU的利用率高,系統(tǒng)資源的利用率高,充分利用CPU資源;</p><p>  安全性:在客戶(hù)端與

37、服務(wù)器傳輸信息的過(guò)程中,SQLSever通過(guò)口令系統(tǒng)保證彼此間的所有信息的傳送都被嚴(yán)格的加密,通過(guò)加密解密機(jī)制保證系統(tǒng)的安全性;</p><p>  容量大:SQLSever數(shù)據(jù)庫(kù),存儲(chǔ)空間大,不必?fù)?dān)心存放的記錄數(shù)據(jù)空間不夠問(wèn)題;</p><p>  穩(wěn)定性:SQLSever的內(nèi)存分配系統(tǒng)穩(wěn)定性高;</p><p>  管理方式多樣性:SQLSever的管理方式多樣

38、性,擁有不同的管理方式,如圖形管理;</p><p>  方便性:SQLSever具有強(qiáng)大的查詢(xún)功能,支持規(guī)范的查詢(xún)語(yǔ)言,優(yōu)化查詢(xún)算法,對(duì)相關(guān)數(shù)據(jù)查詢(xún)?cè)敿?xì),具有方便性,提高查詢(xún)速度。</p><p>  4.1.2 軟件實(shí)現(xiàn)的E-R圖</p><p>  該系統(tǒng)可分為用戶(hù)、群組、聊天消息記錄三個(gè)實(shí)體,用戶(hù)實(shí)體主要記錄和修改用戶(hù)方面的操作,群組實(shí)體主要記錄和修改群內(nèi)

39、成員方面的操作,聊天消息記錄實(shí)體主要是記錄用戶(hù)之間交流消息方面的操作。</p><p><b> ?。?)用戶(hù)實(shí)體</b></p><p>  用戶(hù)實(shí)體包括通信系統(tǒng)中所有的用戶(hù)群體。在這里,本機(jī)用戶(hù)和好友界面的用戶(hù)是一樣的,同屬于一種用戶(hù)實(shí)體。用戶(hù)信息包括:用戶(hù)賬號(hào),用戶(hù)密碼,用戶(hù)姓名,好友,個(gè)性簽名,頭像,群組信息,創(chuàng)建時(shí)間和默認(rèn)好友分類(lèi)還有相關(guān)的提示信息。如圖4.

40、1所示。</p><p>  圖4-1 用戶(hù)實(shí)體E-R圖</p><p><b> ?。?)群組實(shí)體</b></p><p>  群組實(shí)體是指用戶(hù)創(chuàng)建的群,包括:群賬號(hào)、群名稱(chēng)、群創(chuàng)建者、群公告、群成員和創(chuàng)建時(shí)間。如圖4.2所示。</p><p>  圖4-2 用戶(hù)實(shí)體E-R圖</p><p>&

41、lt;b> ?。?)消息記錄實(shí)體</b></p><p>  消息記錄實(shí)體是指存放聊天記錄的地方,其中包括兩個(gè)用戶(hù)間的聊天記錄和群組成員間的聊天記錄,具體包括:聊天數(shù)目、用戶(hù)賬號(hào)、好友賬號(hào)、產(chǎn)生時(shí)間、聊天內(nèi)容和消息類(lèi)型。具體如下圖4.3所示。</p><p>  圖4-3 消息記錄實(shí)體E-R圖</p><p>  4.2 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)&l

42、t;/p><p>  本軟件中創(chuàng)建了一個(gè)名為IM2016的數(shù)據(jù)庫(kù)。根據(jù)數(shù)據(jù)庫(kù)實(shí)體的分析,應(yīng)該設(shè)計(jì)三個(gè)數(shù)據(jù)表,分別為用戶(hù)信息表dbo.GGUser、群組信息表dbo.GGGroup和消息記錄表dbo.ChatMessageRecord</p><p> ?。?)dbo.GGUser(用戶(hù)信息表)</p><p>  用戶(hù)信息表存儲(chǔ)的是用戶(hù)的所有信息,每個(gè)字段代表用戶(hù)的一個(gè)

43、屬性,共同組成用戶(hù)的實(shí)體。表dbo.GGUser的結(jié)構(gòu)圖如表4-1所示。</p><p>  表4-1 用戶(hù)信息表結(jié)構(gòu)圖</p><p> ?。?)dbo.GGGroup(群組信息表)</p><p>  群組信息表主要用來(lái)保存群組的信息,群組信息表dbo.GGGroup的結(jié)構(gòu)如下表4-2所示。</p><p>  表4-2群組信息表結(jié)構(gòu)圖&

44、lt;/p><p> ?。?)dbo.ChatMessageRecord(消息記錄表)</p><p>  消息記錄表主要是存儲(chǔ)群組成員間的聊天記錄和用戶(hù)之間的消息記錄。消息記錄表dbo.ChatMessageRecord的結(jié)構(gòu)如下表4-3所示。</p><p>  表4-3消息記錄表結(jié)構(gòu)圖</p><p><b>  5軟件功能設(shè)計(jì)&

45、lt;/b></p><p>  軟件的功能設(shè)計(jì)是軟件開(kāi)發(fā)最核心的內(nèi)容,企業(yè)級(jí)的即時(shí)通信軟件需要實(shí)現(xiàn)公司員工的登錄注冊(cè)、傳輸文件、聊天等功能。以下是該軟件的一些具體的功能設(shè)計(jì)。</p><p>  5.1 登錄注冊(cè)設(shè)計(jì)</p><p>  軟件的運(yùn)行和操作離不開(kāi)具體的用戶(hù)名注冊(cè)和登錄,這里的注冊(cè)頁(yè)面可以進(jìn)行頭像選擇,填寫(xiě)相關(guān)的數(shù)據(jù)信息進(jìn)行注冊(cè),如圖5-1所示。

46、</p><p><b>  圖5-1登錄注冊(cè)圖</b></p><p>  注冊(cè)過(guò)程代碼如下所示:</p><p>  #region RegisteredUser</p><p>  private GGUser registeredUser = null;</p><p>  public

47、GGUser RegisteredUser</p><p><b>  { get</b></p><p><b>  {</b></p><p>  return this.registeredUser;</p><p><b>  }</b></p><

48、p><b>  } </b></p><p>  #endregion </p><p>  private void skinButton1_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  this.

49、DialogResult = System.Windows.Forms.DialogResult.Cancel; </p><p><b>  }</b></p><p>  private void btnRegister_Click(object sender, EventArgs e)</p><p><b&g

50、t;  {</b></p><p>  string userID = this.skinTextBox_id.SkinTxt.Text.Trim();</p><p>  if (userID.Length == 0)</p><p><b>  {</b></p><p>  this.skinTextB

51、ox_id.SkinTxt.Focus();</p><p>  this.DialogResult = System.Windows.Forms.DialogResult.None;</p><p>  MessageBoxEx.Show("帳號(hào)不能為空!");</p><p><b>  return;</b></

52、p><p><b>  }</b></p><p>  string pwd = this.skinTextBox_pwd.SkinTxt.Text ;</p><p>  if (pwd != this.skinTextBox_pwd2.SkinTxt.Text)</p><p><b>  {</b>

53、;</p><p>  MessageBoxEx.Show("兩次輸入的密碼不一致!");</p><p>  this.skinTextBox_pwd.SkinTxt.SelectAll() ;</p><p>  this.skinTextBox_pwd.SkinTxt.Focus();</p><p>  this.

54、DialogResult = System.Windows.Forms.DialogResult.None;</p><p><b>  return;}</b></p><p><b>  try</b></p><p><b>  {</b></p><p>  GGUse

55、r user = new GGUser(userID, SecurityHelper.MD5String2(pwd), this.skinTextBox_nickName.SkinTxt.Text,"",this.skinTextBox_signature.SkinTxt.Text, this.headImageIndex, "");</p><p>  if (this.

56、selfPhoto)</p><p>  { </p><p>  user.HeadImageData = ESBasic.Helpers.ImageHelper.Convert(this.pnlImgTx.BackgroundImage);</p><p>  user.HeadImageIndex = -1;</p&g

57、t;<p><b>  }</b></p><p>  RegisterResult result = ggService.Register(user);</p><p>  if (result == RegisterResult.Existed)</p><p><b>  {</b></p>

58、<p>  this.skinTextBox_id.SkinTxt.SelectAll();</p><p>  this.skinTextBox_id.SkinTxt.Focus();</p><p>  this.DialogResult = System.Windows.Forms.DialogResult.None;</p><p> 

59、 MessageBoxEx.Show("用戶(hù)帳號(hào)已經(jīng)存在!"); </p><p><b>  return;</b></p><p><b>  }</b></p><p>  if (result == RegisterResult.Error)</p&g

60、t;<p><b>  {</b></p><p>  this.DialogResult = System.Windows.Forms.DialogResult.None;</p><p>  MessageBoxEx.Show("注冊(cè)出現(xiàn)錯(cuò)誤!"); </p><p>

61、<b>  return;</b></p><p><b>  }</b></p><p>  this.registeredUser = user; </p><p>  this.DialogResult = System.Windows.Forms.DialogResult.OK;<

62、;/p><p><b>  }</b></p><p>  catch (Exception ee)</p><p><b>  {</b></p><p>  this.DialogResult = System.Windows.Forms.DialogResult.None;</p>

63、<p>  MessageBoxEx.Show("注冊(cè)失?。?quot; + ee.Message);</p><p><b>  }</b></p><p><b>  }</b></p><p>  private void linkLabel2_LinkClicked(object sender,

64、 LinkLabelLinkClickedEventArgs e)</p><p><b>  {</b></p><p>  this.headImageIndex = (++this.headImageIndex) % GlobalResourceManager.HeadImages.Length;</p><p>  this.pnlIm

65、gTx.BackgroundImage = GlobalResourceManager.HeadImages[this.headImageIndex];</p><p>  this.selfPhoto = false;</p><p><b>  }</b></p><p>  private bool selfPhoto = false;&

66、lt;/p><p>  private void linkLabel1_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)</p><p><b>  {</b></p><p>  PhotoForm form = new PhotoForm();</p>&l

67、t;p>  if (form.ShowDialog() == DialogResult.OK)</p><p>  {this.pnlImgTx.BackgroundImage = form.CurrentImage;</p><p>  this.selfPhoto = true;}</p><p><b>  } </b><

68、;/p><p>  private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)</p><p><b>  {</b></p><p>  HeadImageForm form = new HeadImageForm();</p>

69、<p>  if (form.ShowDialog() == DialogResult.OK)</p><p><b>  {</b></p><p>  this.pnlImgTx.BackgroundImage = form.CurrentImage;</p><p>  this.selfPhoto = true;</

70、p><p><b>  }</b></p><p><b>  }</b></p><p>  5.2 軟件首頁(yè)界面設(shè)計(jì)</p><p>  用戶(hù)通過(guò)自己注冊(cè)的用戶(hù)名和密碼點(diǎn)擊登錄系統(tǒng),進(jìn)行聊天通信操作,可以根據(jù)具體信息進(jìn)行查找操作,具體的頁(yè)面如圖5-2所示。</p><p>&

71、lt;b>  圖5-2首頁(yè)設(shè)計(jì)圖</b></p><p>  5.3 好友查找及添加設(shè)計(jì)</p><p>  用戶(hù)通過(guò)自己注冊(cè)的用戶(hù)名和密碼點(diǎn)擊登錄系統(tǒng),可以對(duì)好友進(jìn)行查找操作,通過(guò)輸入相應(yīng)的用戶(hù)名,找到用戶(hù)進(jìn)行添加,具體的頁(yè)面如圖5-3所示。</p><p><b>  圖5-3好友查找圖</b></p>&l

72、t;p>  查找好友部分代碼如下:</p><p><b>  { </b></p><p>  private void skinButton1_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  this

73、.DialogResult = System.Windows.Forms.DialogResult.Cancel;</p><p>  this.Close();</p><p><b>  }</b></p><p>  private void btnClose_Click(object sender, EventArgs e)</p

74、><p><b>  {</b></p><p>  this.friendID = this.skinTextBox_id.SkinTxt.Text.Trim();</p><p>  if (this.friendID.Length == 0)</p><p><b>  { </b></

75、p><p>  MessageBoxEx.Show("帳號(hào)不能為空!");</p><p>  this.DialogResult = System.Windows.Forms.DialogResult.None;</p><p><b>  return;</b></p><p>  }

76、 </p><p><b>  try</b></p><p><b>  {</b></p><p>  if (this.ggSupporter.IsFriend(this.friendID))</p><p><b>  {</b></p><p&

77、gt;  MessageBoxEx.Show("該用戶(hù)已經(jīng)是好友!");</p><p>  this.DialogResult = System.Windows.Forms.DialogResult.None;</p><p><b>  return;</b></p><p><b>  }</b&g

78、t;</p><p>  this.catalogName = this.skinComboBox1.SelectedItem.ToString();</p><p>  AddFriendContract contract = new AddFriendContract(this.friendID,this.catalogName);</p><p>  byte

79、[] info =</p><p>  ESPlus.Serialization.CompactPropertySerializer.Default.Serialize(contract);</p><p>  byte[] bRes = this.rapidPassiveEngine.CustomizeOutter.Query(InformationTypes.AddFriend, in

80、fo);</p><p>  AddFriendResult res = (AddFriendResult)BitConverter.ToInt32(bRes,0);</p><p>  if (res == AddFriendResult.FriendNotExist)</p><p><b>  {</b></p><p

81、>  MessageBoxEx.Show("帳號(hào)不存在!");</p><p>  this.DialogResult = System.Windows.Forms.DialogResult.None;</p><p><b>  return;</b></p><p><b>  }</b>&l

82、t;/p><p>  this.DialogResult = System.Windows.Forms.DialogResult.OK;</p><p><b>  }</b></p><p>  catch (Exception ee)</p><p><b>  {</b></p>&

83、lt;p>  MessageBoxEx.Show("添加好友失敗!" + ee.Message);</p><p>  this.DialogResult = System.Windows.Forms.DialogResult.None;</p><p><b>  }</b></p><p><b>  }

84、 </b></p><p>  5.4 好友聊天設(shè)計(jì)</p><p>  在進(jìn)行聊天操作的時(shí)候,可以同時(shí)登陸兩個(gè)用戶(hù),用戶(hù)添加好友之后可以進(jìn)聊天。</p><p>  兩個(gè)好友聊天時(shí)可以實(shí)現(xiàn)視頻及語(yǔ)音聊天、遠(yuǎn)程控制及文件傳輸?shù)裙δ?,如圖5-4、5-5、5-6所示是一些相關(guān)的頁(yè)面設(shè)計(jì)。</p><p> ?。?)在兩個(gè)用戶(hù)

85、進(jìn)行視頻聊天操作的時(shí)候,會(huì)有如圖5-4所示的界面,被邀請(qǐng)的用戶(hù)可以選擇接受或者拒絕按鈕。</p><p><b>  圖5-4視頻聊天圖</b></p><p>  視頻聊天實(shí)現(xiàn)的相關(guān)代碼如下:</p><p>  #region 視頻聊天</p><p>  private void 視頻聊天ToolStripMenu

86、Item_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  this.toolStripSplitButton1_ButtonClick(sender, e);</p><p><b>  }</b></p><p>  

87、private void toolStripSplitButton1_ButtonClick(object sender, EventArgs e)</p><p><b>  {</b></p><p>  if (this.mine.UserStatus == UserStatus.OffLine)</p><p><b>  {

88、</b></p><p><b>  return;</b></p><p><b>  }</b></p><p>  if (this.videoForm != null)</p><p><b>  {</b></p><p><

89、b>  return;</b></p><p><b>  }</b></p><p>  this.videoForm = new VideoForm(this.rapidPassiveEngine.CurrentUserID, this.currentFriend.UserID, this.currentFriend.Name, true);&l

90、t;/p><p>  this.videoForm.FormClosed += new FormClosedEventHandler(videoForm_FormClosed);</p><p>  this.videoForm.HungUpVideo += new CbGeneric<HungUpCauseType>(videoForm_ActiveHungUpVideo);

91、 </p><p>  this.videoForm.Show();</p><p>  if (!Program.MultimediaManager.Available)</p><p><b>  {</b></p><p>  MessageBox.Show("多媒體設(shè)備管理器不可用!", G

92、lobalResourceManager.SoftwareName); </p><p>  if (this.videoForm != null)</p><p><b>  {</b></p><p>  this.videoForm.Close();</p><p><b>  

93、}</b></p><p><b>  return;</b></p><p><b>  }</b></p><p>  this.videoForm.Initialize(this.rapidPassiveEngine, Program.MultimediaManager);</p><

94、p>  this.rapidPassiveEngine.CustomizeOutter.Send(this.currentFriend.UserID, InformationTypes.VideoRequest, null); </p><p><b>  }</b></p><p>  private void OnVideoReques

95、tReceived()</p><p><b>  {</b></p><p>  if (!this.TabControlContains(this.Title_Video))</p><p><b>  {</b></p><p>  TabPage page = new TabPage(thi

96、s.Title_Video);</p><p>  page.BackColor = System.Drawing.Color.White;</p><p>  Panel pannel = new Panel();</p><p>  page.Controls.Add(pannel);</p><p>  pannel.BackColor

97、 = Color.Transparent;</p><p>  pannel.Dock = DockStyle.Fill;</p><p>  pannel.Controls.Add(this.videoRequestPanel);</p><p>  this.fileTransferingViewer.Dock = System.Windows.Forms.Do

98、ckStyle.Fill;</p><p>  this.skinTabControl1.TabPages.Add(page);</p><p>  this.skinTabControl1.SelectedIndex = this.GetSelectIndex(this.Title_Video);</p><p>  this.ResetTabControVisi

99、ble();</p><p>  } </p><p>  } </p><p>  private void OnVideoAnswerReceived(bool agree)</p><p><b>  {</b></p><p>  if (

100、this.videoForm == null)</p><p><b>  {</b></p><p><b>  return;</b></p><p><b>  }</b></p><p>  if (agree)</p><p><b>

101、;  {</b></p><p>  System.Threading.Thread.Sleep(1000);</p><p>  this.videoForm.OnAgree();</p><p><b>  }</b></p><p><b>  else</b></p>

102、<p><b>  {</b></p><p>  this.videoForm.Close();</p><p>  this.videoForm = null;</p><p>  this.AppendSysMessage("對(duì)方拒絕了您的視頻邀請(qǐng)。");</p><p><

103、b>  }</b></p><p><b>  } </b></p><p>  private void OnVideoHungUpReceived()</p><p><b>  {</b></p><p>  if (this.videoForm != null)&

104、lt;/p><p><b>  {</b></p><p>  this.AppendSysMessage("對(duì)方中止了視頻通話(huà)。");</p><p>  this.videoForm.OnHungUpVideo();</p><p><b>  return;</b></p

105、><p><b>  }</b></p><p>  int tabIndex = this.GetSelectIndex(this.Title_Video);</p><p>  if (tabIndex >= 0)</p><p><b>  {</b></p><p>

106、;  this.skinTabControl1.TabPages.RemoveAt(tabIndex);</p><p>  this.skinTabControl1.SelectedIndex = </p><p>  this.skinTabControl1.TabPages.Count - 1;</p><p>  this.ResetTabControVis

107、ible();</p><p>  this.AppendSysMessage("對(duì)方結(jié)束了視頻會(huì)話(huà)邀請(qǐng)。");</p><p><b>  }</b></p><p><b>  } </b></p><p>  private void videoRequestPan

108、el_VideoRequestAnswerd(bool agree)</p><p><b>  {</b></p><p>  this.skinTabControl1.TabPages.RemoveAt(this.GetSelectIndex(this.Title_Video));</p><p>  this.skinTabControl

109、1.SelectedIndex = this.skinTabControl1.TabPages.Count - 1;</p><p>  this.ResetTabControVisible();</p><p>  if (agree)</p><p><b>  {</b></p><p>  this.videoF

110、orm = new VideoForm(this.rapidPassiveEngine.CurrentUserID, this.currentFriend.UserID, </p><p>  this.currentFriend.Name, false);</p><p>  this.videoForm.FormClosed += new FormClosedEventHandler(

111、videoForm_FormClosed);</p><p>  this.videoForm.HungUpVideo += new CbGeneric<HungUpCauseType>(videoForm_ActiveHungUpVideo);</p><p>  this.videoForm.Show();</p><p>  this.Append

112、SysMessage("您同意了對(duì)方的視頻會(huì)話(huà)請(qǐng)求,正在啟動(dòng)多媒體設(shè)備...");</p><p>  if (!Program.MultimediaManager.Available)</p><p>  {this.rapidPassiveEngine.CustomizeOutter.Send(this.currentFriend.UserID, </p>

113、;<p>  InformationTypes.RejectVideo, null);</p><p>  this.AppendSysMessage("多媒體設(shè)備管理器不可用!");</p><p>  MessageBox.Show("多媒體設(shè)備管理器不可用!", GlobalResourceManager.SoftwareName

114、);</p><p>  if (this.videoForm != null)</p><p><b>  {</b></p><p>  this.videoForm.Close();</p><p><b>  }</b></p><p><b>  retu

115、rn;</b></p><p><b>  }</b></p><p>  this.rapidPassiveEngine.CustomizeOutter.Send(this.currentFriend.UserID, InformationTypes.AgreeVideo, null);</p><p>  this.videoF

116、orm.Initialize(this.rapidPassiveEngine, Program.MultimediaManager);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>

117、  this.rapidPassiveEngine.CustomizeOutter.Send(this.currentFriend.UserID, InformationTypes.RejectVideo, null);</p><p>  this.AppendSysMessage("您拒絕了對(duì)方的視頻會(huì)話(huà)請(qǐng)求。");</p><p><b>  }<

118、/b></p><p><b>  }</b></p><p>  private void videoForm_ActiveHungUpVideo(HungUpCauseType cause)</p><p><b>  {</b></p><p>  this.rapidPassiveEn

119、gine.CustomizeOutter.Send(this.currentFriend.UserID, InformationTypes.HungUpVideo, null);</p><p>  if (cause == HungUpCauseType.ActiveHungUp)</p><p><b>  {</b></p><p>  

120、this.AppendSysMessage("您中止了視頻通話(huà)。");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  this.AppendSysMessag

121、e("與對(duì)方的網(wǎng)絡(luò)連接中斷,視頻通話(huà)結(jié)束。");</p><p><b>  }</b></p><p><b>  }</b></p><p>  private void videoForm_FormClosed(object sender, FormClosedEventArgs e)</p

122、><p><b>  {</b></p><p>  this.videoForm = null;</p><p><b>  }</b></p><p>  #endregion </p><p> ?。?)當(dāng)用戶(hù)進(jìn)行交流的時(shí)候,使用最多的就是語(yǔ)音聊天功能。用戶(hù)A

123、邀請(qǐng)用戶(hù)B進(jìn)行語(yǔ)音聊天,在用戶(hù)B還未選擇接受或者拒絕操作之前還可以進(jìn)行掛斷操作。</p><p>  圖5-5 語(yǔ)音聊天圖</p><p>  語(yǔ)音功能實(shí)現(xiàn)代碼如下:</p><p>  #region 語(yǔ)音聊天</p><p>  private void 語(yǔ)音聊天ToolStripMenuItem_Click(object sender,

124、 EventArgs e)</p><p><b>  {</b></p><p>  this.toolStripSplitButton3_ButtonClick(sender, e);</p><p><b>  }</b></p><p>  private void toolStripSpl

125、itButton3_ButtonClick(object sender, EventArgs e)</p><p><b>  {</b></p><p>  if (this.mine.UserStatus == UserStatus.OffLine)</p><p><b>  {</b></p><

126、;p><b>  return;</b></p><p><b>  }</b></p><p>  if (this.videoForm != null)</p><p><b>  {</b></p><p><b>  return;</b>&

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論