




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、c/s架構(gòu)的即時(shí)聊天系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)摘要:隨著信息時(shí)代的飛速發(fā)展,尤其是互聯(lián)網(wǎng)技術(shù)的興起,使人們愈來(lái)愈傾向于通過(guò)網(wǎng)絡(luò)來(lái)交流、傳遞消息。網(wǎng)絡(luò)即時(shí)聊天系統(tǒng)正是這樣一個(gè)被廣泛應(yīng)用的媒介。借助它,人們可以方便地進(jìn)行實(shí)時(shí)對(duì)話,文件傳送等。本文以一個(gè)“即時(shí)通訊系統(tǒng)”的設(shè)計(jì)和開(kāi)發(fā)為背景,詳細(xì)介紹了以java語(yǔ)言和mysql數(shù)據(jù)庫(kù)為平臺(tái)開(kāi)發(fā)軟件系統(tǒng)的過(guò)程。系統(tǒng)的實(shí)現(xiàn)是基于tcp/ip通信協(xié)議,使用的是客戶端/服務(wù)器模式,用到了java里面的swing、多線程、jdbc、socket等高級(jí)編程技術(shù)。通過(guò)直接使用java提供的serversocket和objectinputstream等類將客戶端和服務(wù)器端發(fā)送的
2、各類消息封裝成統(tǒng)一的數(shù)據(jù)流以實(shí)現(xiàn)消息的交換。本系統(tǒng)的開(kāi)發(fā)過(guò)程遵循了基本的軟件工程學(xué)的方法,實(shí)現(xiàn)了即時(shí)通訊、群組聊天、文件傳送等功能。 關(guān)鍵詞:java;數(shù)據(jù)庫(kù);socket編程;即時(shí)通訊系統(tǒng);tcp/ip協(xié)議the instant messaging system based on c/s structureabstract: with the rapid development of the information age, especially the rise of internet technology, more and more people tend to communicate
3、 and deliver the messages through the internet.instant messaging system is such a widely used medium. with it,the real-time dialogue and file transfer can be easily carried out. taking the design and development of the instant messaging system as the background , this article describes in detail the
4、 process of developing software systems with java and mysql. the realization of the system is based on the tcp / ip communication protocol, and uses a client / server mode .many advanced java technologies such as swing ,java multi-threading, jdbc, socket programming and so on are used. by directly u
5、sing the serversocket ,objectinputstream and other classes supported in java api, messages sented by the client and server side are packaged into a uified data stream in order to achieve the exchange of messages. the whole development process of this system follows software engineering methods,and i
6、nstant messaging, group chatting, file transferring and other functions are realized.keywords: java; database; socket programming; instant messaging system; tcp/ip protocol目 錄第一章 引言11.1選題背景和意義11.2本文的主要工作2第二章 基于c/s架構(gòu)的即時(shí)通訊系統(tǒng)概述32.1系統(tǒng)的可行性分析32.2系統(tǒng)的實(shí)現(xiàn)目標(biāo)和基本功能42.3系統(tǒng)開(kāi)發(fā)環(huán)境和關(guān)鍵技術(shù)介紹4第三章 基于c/s架構(gòu)的即時(shí)通訊系統(tǒng)設(shè)計(jì)931系統(tǒng)詳細(xì)設(shè)計(jì)9
7、311 系統(tǒng)總體流程圖9312 系統(tǒng)總體功能模塊劃分10313 系統(tǒng)用例圖11314 系統(tǒng)數(shù)據(jù)流圖133.2 數(shù)據(jù)庫(kù)設(shè)計(jì)143.3 系統(tǒng)關(guān)鍵類結(jié)構(gòu)設(shè)計(jì)19第四章 基于c/s架構(gòu)的即時(shí)通訊系功能實(shí)現(xiàn)244.1注冊(cè)模塊功能實(shí)現(xiàn)244.2登錄模塊功能實(shí)現(xiàn)264.3聊天模塊功能實(shí)現(xiàn)284.4文件傳送模塊功能實(shí)現(xiàn)324.5后臺(tái)管理模塊功能實(shí)現(xiàn)36第五章 總結(jié)40致謝43參考文獻(xiàn)44第一章 引言1.1選題背景和意義隨著經(jīng)濟(jì)全球化的發(fā)展,世界各地的不同人、組織、機(jī)構(gòu)之間的聯(lián)系越來(lái)越密切。同時(shí)伴隨著互聯(lián)網(wǎng)技術(shù)的普及和發(fā)展,網(wǎng)絡(luò)即時(shí)通信工具已經(jīng)作為一種廉價(jià)、方便的信息交流工具越來(lái)越受到人們的青睞。在21世紀(jì)初的
8、短短十幾年間,即時(shí)通信系統(tǒng)(im)的發(fā)展不斷地取得了驚人的成就。從早期只能互相發(fā)送字符并顯示在雙方的屏幕上的實(shí)時(shí)通信程序到現(xiàn)在的圖形化、面向互聯(lián)網(wǎng)、多功能的即時(shí)通信系統(tǒng),科學(xué)技術(shù)的進(jìn)步和整合不斷地促使著即時(shí)通信系統(tǒng)功能越來(lái)越豐富,用處越來(lái)越廣泛。從最早的即時(shí)通訊軟件icq誕生至今,市場(chǎng)上不斷涌現(xiàn)出類似的產(chǎn)品。不少?gòu)S商分別推出了自己的im,如騰訊qq、阿里旺旺、新浪uc、移動(dòng)飛信等,這些都是我們所熟悉的pc端的即時(shí)通訊軟件。隨著智能手機(jī)、平板電腦的普及,一些移動(dòng)端的即時(shí)通信系統(tǒng)也如雨后春筍般涌現(xiàn)出來(lái),如小米公司的米聊,騰訊公司的微信,還有年輕人之間很流行的陌陌、游戲玩家常用的yy語(yǔ)音等。這些軟件
9、本身功能也越來(lái)越豐富,遠(yuǎn)遠(yuǎn)超出了單純的即時(shí)聊天系統(tǒng)的范疇?,F(xiàn)在的即時(shí)通信系統(tǒng)不僅僅是人們的溝通工具,還成為了人們利用其進(jìn)行電子商務(wù)、工作、學(xué)習(xí)等交流的平臺(tái)1516。在當(dāng)今社會(huì),不管是個(gè)人用戶還是企業(yè)用戶,對(duì)溝通的需求總是在不斷地發(fā)展。傳統(tǒng)的溝通交流方式如電話、傳真、郵件等已經(jīng)不能完全滿足人們學(xué)習(xí)、工作、生活的需要。隨著計(jì)算機(jī)軟件、計(jì)算機(jī)網(wǎng)絡(luò)和移動(dòng)通信技術(shù)的發(fā)展融合,集方便、廉價(jià)、快捷、實(shí)時(shí)等優(yōu)點(diǎn)于一身的即時(shí)通訊系統(tǒng)可以說(shuō)是繼電子郵件、萬(wàn)維網(wǎng)之后,互聯(lián)網(wǎng)上最具有殺傷力的應(yīng)用。很難想象一臺(tái)個(gè)人電腦沒(méi)有安裝像qq這樣的即時(shí)通訊軟件。雖然即時(shí)聊天系統(tǒng)設(shè)計(jì)的初衷是聊天,但正如前面所說(shuō),其功能已經(jīng)超出了聊
10、天的范疇,隨著企業(yè)即時(shí)通訊工具(eim)的出現(xiàn),im系統(tǒng)更是成了企業(yè)信息發(fā)布、資源共享、問(wèn)題探討和網(wǎng)絡(luò)營(yíng)銷的一把利器。通過(guò)現(xiàn)有的技術(shù),企業(yè)完全可以摒棄通用的免費(fèi)的即時(shí)通訊系統(tǒng),轉(zhuǎn)而根據(jù)自己企業(yè)的需求定制開(kāi)發(fā)自己專屬的內(nèi)部即時(shí)通訊系統(tǒng),以實(shí)現(xiàn)更好的管理,提高員工的工作效率。我們的生活中溝通無(wú)處不在,即時(shí)聊天系統(tǒng)這類廣泛使用的基礎(chǔ)軟件的研究開(kāi)發(fā)意義深遠(yuǎn)15。1.2本文的主要工作本文圍繞一個(gè)簡(jiǎn)單實(shí)用的即時(shí)聊天系統(tǒng)的開(kāi)發(fā),詳細(xì)介紹了使用java編程語(yǔ)言、java api和mysql數(shù)據(jù)庫(kù)構(gòu)建一個(gè)軟件系統(tǒng)的過(guò)程。整個(gè)系統(tǒng)的分析、設(shè)計(jì)、開(kāi)發(fā)、測(cè)試等過(guò)程遵循了軟件工程學(xué)的方法。論文分為如下幾個(gè)部分:第一部分
11、,闡述了對(duì)即時(shí)聊天系統(tǒng)的分析。包括系統(tǒng)的可行性分析、系統(tǒng)實(shí)現(xiàn)的目標(biāo)和基本功能分析以及使用的一些關(guān)鍵技術(shù)分析。第二部分,闡述了整個(gè)系統(tǒng)的設(shè)計(jì)過(guò)程。包括系統(tǒng)總體設(shè)計(jì)、功能模塊劃分、數(shù)據(jù)庫(kù)設(shè)計(jì)和關(guān)鍵類的設(shè)計(jì)。第三部分,詳細(xì)介紹了整個(gè)系統(tǒng)的實(shí)現(xiàn)。針對(duì)每一個(gè)功能的具體實(shí)現(xiàn)展開(kāi)介紹,包括使用到的開(kāi)發(fā)技術(shù)、類庫(kù),第三方j(luò)ar包等等。第四部分,總結(jié)與展望。針對(duì)系統(tǒng)的優(yōu)點(diǎn)和不足對(duì)系統(tǒng)進(jìn)行了總結(jié)與展望。第二章 基于c/s架構(gòu)的即時(shí)通訊系統(tǒng)概述2.1系統(tǒng)的可行性分析進(jìn)行可行性研究就是在行動(dòng)以前,對(duì)要辦的事進(jìn)行調(diào)查,確認(rèn)其可行與不可行,即:可行則行,不可行則止??尚行匝芯康哪康牟皇墙鉀Q問(wèn)題,而是研究在當(dāng)前的具體條件下
12、,開(kāi)發(fā)新系統(tǒng)是否具備必要的資源和其它條件。為了達(dá)到這個(gè)目的,必須認(rèn)真了解用戶的要求及現(xiàn)實(shí)環(huán)境,探索若干種可供選擇的解絕方案,并對(duì)每種解決方案的可行性進(jìn)行仔細(xì)論證。一般來(lái)說(shuō)應(yīng)從以下幾個(gè)方面進(jìn)行論證12:技術(shù)可行性:使用現(xiàn)有的技術(shù)能是否實(shí)現(xiàn)這個(gè)系統(tǒng)經(jīng)濟(jì)可行性:這個(gè)系統(tǒng)的經(jīng)濟(jì)效益是否超過(guò)它的開(kāi)發(fā)成本操作可行性:系統(tǒng)的操作方式在這個(gè)用戶組織內(nèi)是否行得通 在對(duì)本系統(tǒng)的分析中,同樣是從上面三個(gè)方面入手。本系統(tǒng)的可行性分析包括以下幾個(gè)方面的內(nèi)容:(1)技術(shù)可行性:基于網(wǎng)絡(luò)通信原理,利用java提供的swing、socket等api和多線程編程、jdbc等技術(shù)可以開(kāi)發(fā)出簡(jiǎn)單實(shí)用美觀的即時(shí)聊天系統(tǒng),因此技術(shù)上是
13、可行的。(2)經(jīng)濟(jì)可行性:個(gè)人電腦和網(wǎng)絡(luò)的普及使得我們不需要太多的經(jīng)濟(jì)投入。在軟件方面,可以采用免費(fèi)的ide如eclipse和輕量級(jí)數(shù)據(jù)庫(kù)mysql。無(wú)需太多的經(jīng)濟(jì)投入即可為局域網(wǎng)內(nèi)的即時(shí)通訊系統(tǒng)的實(shí)現(xiàn)提供支持。(3)操作可行性:一方面可以讓本地機(jī)同時(shí)作為客戶端和服務(wù)器實(shí)現(xiàn)一臺(tái)機(jī)器上的即時(shí)通訊。另一方面,只要一臺(tái)以上計(jì)算機(jī)連接在同一個(gè)局域網(wǎng)內(nèi),并且在作為客戶端機(jī)器的本系統(tǒng)中設(shè)置需要連接的作為服務(wù)器端機(jī)器的ip地址,本系統(tǒng)就可以實(shí)現(xiàn)局域網(wǎng)通訊,所以操作上完全不存在問(wèn)題。如果要實(shí)現(xiàn)internet上通訊,理論上只需要將服務(wù)器端運(yùn)行在一個(gè)有固定ip的公網(wǎng)上就可以。綜上所述,這種c/s架構(gòu)的即時(shí)通訊系
14、統(tǒng)的開(kāi)發(fā)是可行的。2.2系統(tǒng)的實(shí)現(xiàn)目標(biāo)和基本功能對(duì)于個(gè)人用戶而言,能夠?qū)崿F(xiàn)好友即時(shí)通訊,傳遞實(shí)時(shí)信息,讓用戶隨時(shí)隨地都可與好友保持暢快有效的溝通。對(duì)于企業(yè)用戶而言,能夠?qū)崿F(xiàn)建立員工交流平臺(tái),統(tǒng)一信息發(fā)布平臺(tái),減少運(yùn)營(yíng)成本,促進(jìn)企業(yè)辦公效率。商業(yè)即時(shí)通訊系統(tǒng)的功能越來(lái)越多樣化,一些功能也很新穎,如現(xiàn)在流行的語(yǔ)音對(duì)講功能。本系統(tǒng)不比商業(yè)系統(tǒng),沒(méi)有考慮過(guò)多的復(fù)雜性,主要實(shí)現(xiàn)了基本的通訊功能,以滿足學(xué)習(xí)研究之用。其基本功能有用戶注冊(cè)、客戶端登錄、一對(duì)一實(shí)時(shí)聊天、群組聊天、傳送文件、服務(wù)器后臺(tái)管理。2.3系統(tǒng)開(kāi)發(fā)環(huán)境和關(guān)鍵技術(shù)介紹(1)java語(yǔ)言簡(jiǎn)介java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦?/p>
15、設(shè)計(jì)語(yǔ)言,是由sun microsystems公司于1995年5月推出的java程序設(shè)計(jì)語(yǔ)言和java平臺(tái)(即javase, javaee, javame)的總稱。java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人pc、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi)發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,java更具備了顯著優(yōu)勢(shì)和廣闊前景18。java之所以被開(kāi)發(fā),是要達(dá)到以下五個(gè)目的2: 應(yīng)當(dāng)使用面向?qū)ο蟪绦蛟O(shè)計(jì)方法學(xué) 應(yīng)當(dāng)允許同一程序在不同的計(jì)算機(jī)平臺(tái)執(zhí)行 應(yīng)當(dāng)包括內(nèi)建的對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的支持 應(yīng)當(dāng)被設(shè)計(jì)成安全地執(zhí)行遠(yuǎn)端代碼 應(yīng)
16、當(dāng)易于使用,并借鑒以前那些面向?qū)ο笳Z(yǔ)言(如c+)的長(zhǎng)處。java語(yǔ)言有著簡(jiǎn)單、面向?qū)ο?、分布式、健壯、安全、可移植等特性,因此受到了眾多程序開(kāi)發(fā)人員的青睞。(2)eclipse簡(jiǎn)介eclipse是著名的跨平臺(tái)開(kāi)源集成開(kāi)發(fā)環(huán)境(ide)。它是一個(gè)開(kāi)放源代碼的、基于java的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。人們最初主要用它來(lái)做java語(yǔ)言開(kāi)發(fā),目前亦有人通過(guò)插件使其作為c+、python、php等其他語(yǔ)言的開(kāi)發(fā)工具。eclipse本身就是用java語(yǔ)言開(kāi)發(fā)的,它的設(shè)計(jì)思想是:一切皆是插件。eclipse核心很小,其它所有功能都以插件的形式附加于
17、eclipse核心之上。eclipse基本內(nèi)核包括:圖形api (swt/jface), java開(kāi)發(fā)環(huán)境插件(jdt ),插件開(kāi)發(fā)環(huán)境(pde)等。這些特性使得eclipse擁有較佳的靈活性,許多軟件開(kāi)發(fā)商以eclipse為框架開(kāi)發(fā)自己的ide13。(3)mysql簡(jiǎn)介 mysql是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典mysql ab公司開(kāi)發(fā),目前屬于oracle公司。mysql是一種關(guān)聯(lián)數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性。與其他的大型數(shù)據(jù)庫(kù)例如oracle、db2、sql server等相比,mysql自有它的不足
18、之處,如規(guī)模小、功能有限等,但是這絲毫也沒(méi)有減少它受歡迎的程度。對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),mysql提供的功能已經(jīng)綽綽有余,而且由于mysql是開(kāi)放源碼軟件,因此可以大大降低總體擁有成本。mysql軟件采用了雙授權(quán)政策,它分為社區(qū)版和商業(yè)版,由于其體積小、速度快、成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)都選擇mysql作為網(wǎng)站數(shù)據(jù)庫(kù)。本系統(tǒng)采用的后臺(tái)數(shù)據(jù)庫(kù)即為社區(qū)版7。(4)網(wǎng)絡(luò)通信協(xié)議簡(jiǎn)介網(wǎng)絡(luò)通信協(xié)議為連接不同操作系統(tǒng)和不同硬件體系結(jié)構(gòu)的互聯(lián)網(wǎng)絡(luò)提供通信支持,是一種網(wǎng)絡(luò)通用語(yǔ)言。網(wǎng)絡(luò)通信的層次結(jié)構(gòu)和網(wǎng)絡(luò)通信的協(xié)議,是開(kāi)發(fā)網(wǎng)絡(luò)程序的基礎(chǔ)。目前在網(wǎng)絡(luò)編程方面最常用的是tc
19、p/ip和udp通信協(xié)議。通過(guò)這些協(xié)議,網(wǎng)絡(luò)通信的各主機(jī)可以用一種統(tǒng)一而非雜亂的規(guī)范,高效便捷地相互發(fā)送和接收消息。本系統(tǒng)在通訊功能實(shí)現(xiàn)中采用了tcp傳輸協(xié)議,直接使用的java api提供的類socket和serversocket等來(lái)實(shí)現(xiàn)69。tcp傳輸協(xié)議說(shuō)明tcp協(xié)議是面向連接的協(xié)議,比如說(shuō)在客戶端a和b進(jìn)行連接之前必須首先建立數(shù)據(jù)通路,就向打電話一樣,在通話之前必須先撥號(hào),等待對(duì)方的接聽(tīng)以后才能進(jìn)行通話。tcp協(xié)議中數(shù)據(jù)傳輸采取的是同步方式,當(dāng)數(shù)據(jù)發(fā)送到對(duì)方時(shí),必須等待接收方的應(yīng)答信號(hào)后才能繼續(xù)下一次的發(fā)送工作,即通常所講的三次握手。由于tcp協(xié)議采用的是這種連接方式,因此由它建立的連
20、接是可靠的。在網(wǎng)絡(luò)不是十分理想的情況下,速度犧牲很大,但是卻能夠保證所傳輸?shù)臄?shù)據(jù)的正確性。 udp傳輸協(xié)議說(shuō)明udp協(xié)議采用的是面向無(wú)連接的通信方式,它在通信前不需要提前建立通信鏈路,它是異步的,數(shù)據(jù)的發(fā)送比較迅速,不需要等待應(yīng)答信號(hào)。優(yōu)點(diǎn)是發(fā)送速度較快,但是在數(shù)據(jù)的一致性方面不好,在網(wǎng)絡(luò)差的情況下,容易丟失數(shù)據(jù)包。另外,使用udp傳輸數(shù)據(jù)時(shí)對(duì)數(shù)據(jù)是有大小限制的,每個(gè)被傳輸?shù)陌仨毾薅ㄔ?4kb之內(nèi)6。java socket(套接字)說(shuō)明在java語(yǔ)言里,使用socket(套接字)模型來(lái)封裝網(wǎng)絡(luò)傳輸?shù)木唧w動(dòng)作。java提供了socket的相關(guān)包,java中socket的設(shè)計(jì)采用了面向?qū)ο蟮乃悸?/p>
21、,模擬了tcp協(xié)議里客戶端和服務(wù)器端的通信流程,并封裝了創(chuàng)建連接、發(fā)送接收數(shù)據(jù)流、斷開(kāi)連接等方法。所以,使用socket包,程序員不僅可以創(chuàng)建客戶端和服務(wù)器之間的通信信道,還能實(shí)現(xiàn)發(fā)送和接收數(shù)據(jù)流等的網(wǎng)絡(luò)通信功能。針對(duì)一個(gè)特定的連接和通信過(guò)程,服務(wù)器和客戶端程序里都有一個(gè)socket對(duì)象,我們可以想象一下其場(chǎng)景,在通信過(guò)程中,有一條虛擬的“光纜”構(gòu)架在服務(wù)器和客戶端之間,光纜的兩頭都插在了socket這“插座”里。事實(shí)上,java采用socket包是對(duì)tcp協(xié)議的進(jìn)一步抽象,更向程序員屏蔽了tcp通信的細(xì)節(jié),具體表現(xiàn)在以下兩方面 9。 在使用socket類里的方法建立信道的時(shí)候,socket類
22、屏蔽了通過(guò)三次握手建立信道的全部流程,直接向程序員返回信道類的句柄(socket類的實(shí)例)或是出錯(cuò)信息。 socket類向程序員屏蔽了服務(wù)器和客戶端之間的物理硬件指標(biāo)和底層的連接方式,所以我們?cè)谑褂胹ocket類開(kāi)發(fā)網(wǎng)絡(luò)程序時(shí),可以簡(jiǎn)單地調(diào)用其提供的方法來(lái)傳輸數(shù)據(jù),而不必關(guān)心數(shù)據(jù)流的傳輸和接收方式6。java中的socket通信流程如圖2-1所示。構(gòu)造server端數(shù)據(jù)輸入流對(duì)象構(gòu)造server端數(shù)據(jù)輸出流對(duì)象在數(shù)據(jù)流中發(fā)送、接收客戶消息建立客戶端socket連接socket client=new socket(“serverhost”,8888);構(gòu)造client端數(shù)據(jù)輸入流對(duì)象構(gòu)造clie
23、nt端數(shù)據(jù)輸出流對(duì)象在數(shù)據(jù)流中發(fā)送、接收客戶消息建立服務(wù)器端套接字對(duì)象監(jiān)視端口serversocket server=new serversocket(8888);關(guān)閉server端的輸入流輸出流socket連接關(guān)閉client端的輸入流輸出流socket連接接收連接返回新socket對(duì)象socket socket=server.accept();主動(dòng)連接新建一個(gè)socket連接監(jiān)聽(tīng)圖 2-1 socket客戶-服務(wù)器的通信流程圖第三章 基于c/s架構(gòu)的即時(shí)通訊系統(tǒng)設(shè)計(jì)31系統(tǒng)詳細(xì)設(shè)計(jì) 3.1.1 系統(tǒng)總體流程圖在系統(tǒng)開(kāi)發(fā)之前,先對(duì)系統(tǒng)進(jìn)行了整體設(shè)計(jì),系統(tǒng)流程圖如圖3-1。開(kāi)始啟動(dòng)服務(wù)器否判斷
24、啟動(dòng)信息是啟動(dòng)客戶端否注冊(cè)用戶判斷登錄信息是登錄成功即時(shí)聊天退出客戶端關(guān)閉服務(wù)器結(jié)束圖3-1系統(tǒng)總體流程圖 3.1.2 系統(tǒng)總體功能模塊劃分本系統(tǒng)主要分為注冊(cè)、登錄、聊天、文件傳送、后臺(tái)管理五大模塊。整個(gè)系統(tǒng)的詳細(xì)結(jié)構(gòu)如圖3-2所示。圖 3-2 系統(tǒng)總體功能模塊劃分注冊(cè)模塊基于c/s架構(gòu)的即時(shí)聊天系統(tǒng)文件模塊登錄模塊聊天模塊后臺(tái)管理模塊發(fā)送文字發(fā)送表情發(fā)送文件接收文件服務(wù)管理用戶管理消息管理群組聊天各個(gè)功能模塊設(shè)計(jì)如下:1、注冊(cè)模塊在登錄界面上有注冊(cè)按鈕,用戶可以點(diǎn)擊注冊(cè),填入個(gè)人相關(guān)資料,提交給服務(wù)器。服務(wù)器接收到信息后通過(guò)純jdbc方式或者jdbcodbc橋接的方式連接數(shù)據(jù)庫(kù)并添加記錄。2
25、、登錄模塊用戶在客戶端輸入賬號(hào)和密碼,然后建立與服務(wù)器端的連接,告訴服務(wù)器執(zhí)行登錄操作。服務(wù)器收到后,開(kāi)始通過(guò)jdbc讀取數(shù)據(jù)庫(kù),然后與用戶輸入的信息進(jìn)行比對(duì),如果成功,便打開(kāi)主程序窗口。然后客戶端向服務(wù)器請(qǐng)求讀取好友列表,服務(wù)器收到該請(qǐng)求后從數(shù)據(jù)庫(kù)中取出該用戶的好友列表,然后向客戶端發(fā)送這些信息,客戶收到后就在主窗口顯示好友。3、實(shí)時(shí)聊天模塊客戶端首先發(fā)送消息到服務(wù)器端,服務(wù)器端程序判斷客戶端發(fā)來(lái)的信息類型,如果是普通的聊天消息就根據(jù)發(fā)送者信息和接受者信息進(jìn)行消息轉(zhuǎn)發(fā)。例如客戶端a向客戶端b發(fā)送消息的處理過(guò)程如下:首先a向服務(wù)器發(fā)送消息,服務(wù)器程序判斷消息類型,如果是普通的聊天消息,則解析該
26、消息,得到該消息的發(fā)送者a,接受者b。接著判斷b是否在線,如果在線就將消息發(fā)送過(guò)去,否則將消息存入數(shù)據(jù)庫(kù)。b接收到a發(fā)來(lái)的信息,如果是未建立對(duì)話窗口,則在屏幕右下角出現(xiàn)彈窗提示。此外還有群組聊天功能,可以在“官方聊天室”功能中實(shí)現(xiàn)一對(duì)多的聊天,即在聊天室發(fā)送的消息是面向所有在線用戶的。4、傳送文件模塊 在聊天主界面上有文件傳送功能,可以選擇任意的本地文件進(jìn)行雙向傳送。不管是何種格式的文件,在底層全部通過(guò)objectoutputsteam/objectinputsteam等java提供的不同形式的流處理對(duì)象轉(zhuǎn)化為二進(jìn)制的字節(jié)流傳送。在接收端再?gòu)倪@些i/o流中讀取還原原始數(shù)據(jù)。5、系統(tǒng)后臺(tái)管理模塊
27、(1)服務(wù)管理:服務(wù)器端的管理員可以在這里啟動(dòng)后臺(tái)的服務(wù)器,發(fā)布聊天室公告或者彈窗公告給所有在線用戶。如果未開(kāi)啟服務(wù)器,則在客戶端無(wú)法登錄,并會(huì)返回相應(yīng)的消息提示。(2)用戶管理:可以根據(jù)用戶名或者用戶id查詢已注冊(cè)的用戶詳細(xì)信息,并且可以修改、保存相關(guān)信息。這是一個(gè)對(duì)數(shù)據(jù)庫(kù)的簡(jiǎn)單的增刪改查的操作。(3)消息管理:當(dāng)一個(gè)用戶給其不在線的用戶發(fā)送消息時(shí),系統(tǒng)會(huì)理解為發(fā)送的是離線消息。此消息將會(huì)存入數(shù)據(jù)庫(kù),等目標(biāo)用戶上線后再將消息推送過(guò)去。 3.1.3 系統(tǒng)用例圖用例( use case)是軟件工程或系統(tǒng)工程中對(duì)系統(tǒng)如何反應(yīng)外界請(qǐng)求的描述,是一種通過(guò)用戶的使用場(chǎng)景來(lái)獲取需求的技術(shù)。用例圖是由主角、
28、用例以及它們之間的關(guān)系構(gòu)成的圖,該圖說(shuō)明了用例模型中的關(guān)系12。本系統(tǒng)的用例圖如圖3-3、3-4所示。普通用戶用例圖:用戶注冊(cè)文字登錄聊天文件接收文件發(fā)送文件表情圖 3-3普通用戶用例圖后臺(tái)管理員用例圖:服務(wù)器管理員查找用戶查看在線用戶刪除用戶查看聊天記錄關(guān)閉服務(wù)器圖 3-4后臺(tái)管理員用例圖啟動(dòng)服務(wù)器3.1.4 系統(tǒng)數(shù)據(jù)流圖數(shù)據(jù)流圖(dfd),是從數(shù)據(jù)傳遞和加工角度,以圖形方式來(lái)表達(dá)系統(tǒng)的邏輯功能、數(shù)據(jù)在系統(tǒng)內(nèi)部的邏輯流向和邏輯變換過(guò)程。是結(jié)構(gòu)化系統(tǒng)分析方法的主要表達(dá)工具及用于表示軟件模型的一種圖示方法 12。本系統(tǒng)的數(shù)據(jù)流圖如圖3-5至圖3-7所示。(1)頂層數(shù)據(jù)流圖聊天用戶聊天用戶局域網(wǎng)即
29、時(shí)聊天系統(tǒng)圖3-5頂層數(shù)據(jù)流圖(2)客戶端數(shù)據(jù)流圖登錄界面好友列表界面好友聊天界面查看用戶信息聊天室界面連接到服務(wù)器線程socket連接圖 3-6 客戶端數(shù)據(jù)流圖socket連接服務(wù)器端控制臺(tái)數(shù)據(jù)庫(kù)操作驗(yàn)證用戶密碼連接到客戶端線程圖 3-7 服務(wù)器端數(shù)據(jù)流圖(3)服務(wù)器端數(shù)據(jù)流圖3.2 數(shù)據(jù)庫(kù)設(shè)計(jì)1、數(shù)據(jù)庫(kù)需求分析根據(jù)即時(shí)聊天系統(tǒng)的功能模塊分析可知,一個(gè)最最簡(jiǎn)單的聊天系統(tǒng)至少應(yīng)該包括一張用戶基本檔案的數(shù)據(jù)表。由于本系統(tǒng)功能設(shè)計(jì)理念較為簡(jiǎn)單,因此只包含了兩張數(shù)據(jù)表:用戶表(users)和消息表(msg)。用戶表用于存儲(chǔ)用戶信息,消息表用于存儲(chǔ)用戶的離線聊天消息,因此本系統(tǒng)需要的數(shù)據(jù)源包括用戶信息
30、、離線聊天消息。2、概要設(shè)計(jì)根據(jù)數(shù)據(jù)庫(kù)的需求分析設(shè)計(jì)規(guī)劃出的數(shù)據(jù)實(shí)體有:賬戶實(shí)體、用戶信息實(shí)體、離線消息實(shí)體。每一個(gè)實(shí)體都是現(xiàn)實(shí)中實(shí)際存在的對(duì)象的抽象,并存在一定的數(shù)據(jù)關(guān)系。圖3-8至3-10給出本系統(tǒng)的總體e-r圖和數(shù)據(jù)庫(kù)中各信息實(shí)體的e-r圖45。系統(tǒng)總體e-r模型:圖3-8系統(tǒng)總體e-r圖賬 戶賬戶名賬戶密碼賬戶id擁 有用戶信息上次登錄日期用戶性別用戶狀態(tài)用戶ip上次退出日期用戶頭像用戶生日用戶郵箱擁 有離線消息消息id消息發(fā)送時(shí)間消息類型消息發(fā)送者消息內(nèi)容消息接受者111n用戶的基本信息e-r模型:用戶(用戶id,用戶名,用戶密碼,用戶ip地址,用戶狀態(tài),用戶性別,用戶郵箱,用戶最近
31、一次登錄日期,用戶上一次退出日期,用戶簽名,用戶頭像,用戶生日)用戶信息用戶id上次登錄日期用戶性別用戶狀態(tài)用戶ip用戶密碼用戶名上次退出日期用戶頭像用戶生日用戶郵箱圖 3-9用戶信息e-r圖離線消息的e-r模型:消息(消息id,消息內(nèi)容,消息發(fā)送者,消息接收者,消息發(fā)送時(shí)間)消息信息圖 3-10聊天消息e-r圖消息id消息發(fā)送時(shí)間消息類型消息發(fā)送者消息內(nèi)容消息接受者3、邏輯設(shè)計(jì)本系統(tǒng)的數(shù)據(jù)庫(kù)名稱是myim,該數(shù)據(jù)庫(kù)中包含了兩張表,分別為用戶信息表、聊天消息表。下面簡(jiǎn)要介紹這兩個(gè)表的設(shè)計(jì)。(1)用戶信息表: 該表中記錄了本系統(tǒng)所有注冊(cè)用戶的用戶名及其密碼,以及其它一些個(gè)人信息。用戶可以在客戶端
32、登錄窗口通過(guò)輸入用戶名和匹配的密碼登錄,用戶信息中只要有兩者之一與該表內(nèi)容不符便無(wú)法登錄,系統(tǒng)會(huì)給出出錯(cuò)提示。該表的設(shè)計(jì)如下:表1 用戶信息表字段名數(shù)據(jù)類型是否是主鍵u_idint是u_namevarchar(50)否u_pwdvarchar(50)否u_ipvarchar(50)否u_statevarchar(10)否u_gendervarchar(50)否u_emailvarchar(50)否u_last_logindate否u_last_exitdate否u_head_imgvarchar(50)否u_birthdaydate否(2)離線消息表:記錄了用戶發(fā)送給離線好友的消息,管理員可以
33、查看。包括發(fā)送者、接受者和消息產(chǎn)生的時(shí)間等。表2 聊天消息表字段名數(shù)據(jù)類型是否是主鍵msg_idint是msg_contentvarchar(2000)否msg_sendfromint否msg_sendtoint否msg_typevarchar(2)否msg_sendtimedate否4、物理設(shè)計(jì)數(shù)據(jù)庫(kù)最終要存儲(chǔ)于存儲(chǔ)設(shè)備上,將一個(gè)給定邏輯結(jié)構(gòu)實(shí)施到具體的環(huán)境中時(shí),邏輯數(shù)據(jù)模型要選取一個(gè)具體的工作環(huán)境,這個(gè)工作環(huán)境提供了數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)與存取方法。圖3-11、圖3-12是在mysql中本系統(tǒng)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)的具體實(shí)現(xiàn)4。(1) users.dbf表圖 3-11 users表/*創(chuàng)建msg.dbf表
34、格*/create table users ( u_id int(11) not null auto_increment comment 用戶id, u_name varchar(50) not null comment 用戶名, u_pwd varchar(50) not null comment 密碼, u_ip varchar(50) default null comment ip地址, u_state varchar(50) default null comment 用戶狀態(tài), u_gender varchar(50) default null comment 性別, u_email
35、varchar(50) default null comment 電子郵件, u_last_login date default null comment 最后一次登錄, u_last_exit date default null comment 最后一次退出, u_signature varchar(100) default null comment 個(gè)性簽名, u_head_img varchar(100) default null comment 頭像, u_type varchar(50) default null comment 類型, u_birthday date default
36、 null comment 生日, primary key (u_id) engine=innodb auto_increment=7 default charset=utf8;(2) msg.dbf表圖 3-12 msg表/*創(chuàng)建msg.dbf表格*/create table msg ( msg_id int(11) not null auto_increment comment 消息id, msg_content varchar(2000) not null comment 消息內(nèi)容, msg_sendfrom int(11) not null comment 消息發(fā)送者, msg_sen
37、dto int(11) default null comment 消息接收者, msg_sendtime date not null comment 消息發(fā)送時(shí)間, msg_remark varchar(3000) default null comment 備用, msg_type varchar(2) default null comment 消息類型,如是群聊消息還是私聊消息, primary key (msg_id) engine=innodb default charset=utf8;3.3 系統(tǒng)關(guān)鍵類結(jié)構(gòu)設(shè)計(jì)本系統(tǒng)采用簡(jiǎn)單的mvc設(shè)計(jì)模式,具體架構(gòu)如圖3-13所示。圖3-13 程序架
38、構(gòu)所謂mvc模式,即模型(model)-視圖(view)-控制器(controller)的縮寫,它是一種軟件設(shè)計(jì)規(guī)范,是一種使業(yè)務(wù)邏輯和數(shù)據(jù)顯示分離的代碼組織方法。它強(qiáng)制性地使應(yīng)用程序的輸入、處理和輸出分開(kāi)。mvc模式里包含三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。采用mvc模式組織系統(tǒng)有如下好處3:(1)耦合性低視圖層和業(yè)務(wù)層分離,這樣就允許更改視圖層代碼,而不用重新編譯模型和控制器代碼。運(yùn)用了mvc的應(yīng)用程序三個(gè)部件相互獨(dú)立,改變其中一個(gè)不會(huì)影響其他兩個(gè)。例如在本系統(tǒng)中,筆者采用的是mysql數(shù)據(jù)庫(kù),如果把數(shù)據(jù)庫(kù)從mysql移植到oracle,只需改變模型即可,因?yàn)槟P秃涂?/p>
39、制器、視圖向分離,所以很容易改變應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。(2)重用性高mvc模式允許使用各種不同樣式的視圖來(lái)訪問(wèn)同一個(gè)服務(wù)器端的代碼,因?yàn)槎鄠€(gè)視圖可以共享一個(gè)模型。例如在本系統(tǒng)中存在存在兩個(gè)不同的聊天窗口:一對(duì)一聊天、聊天室聊天,其實(shí)不管是哪種方式的聊天在后臺(tái)控制層都可以采用同一個(gè)控制器,不需要因?yàn)榻缑娴牟煌髣?dòng)后臺(tái)的控制代碼,充分利用這一點(diǎn)以提高代碼重用性。(3)可維護(hù)性高mvc模式層次分明,結(jié)構(gòu)清晰,分離視圖層和業(yè)務(wù)邏輯層使得應(yīng)用程序更容易維護(hù)和修改。(4)有利于軟件工程化管理由于不同的層各司其職每一層不同的應(yīng)用具有某些相同的特征,有利于通過(guò)工程化、工具化的方式管理程序代碼。在本系統(tǒng)
40、中,很明顯的可以看出,模型層即為model包,視圖層即為view包,控制層即為tools包和db包,包的名稱取法因人而異,其本質(zhì)都是反映了mvc的思想。關(guān)鍵java類設(shè)計(jì)(1)msg類客戶端和服務(wù)器端通信時(shí),不管是純粹的聊天內(nèi)容,還是一個(gè)返回好友列表的請(qǐng)求,亦或是客戶端登錄驗(yàn)證的消息,其實(shí)發(fā)送的都是msg類的對(duì)象。msg類封裝了消息類型、發(fā)送雙方、發(fā)送時(shí)間等屬性,它是本系統(tǒng)中雙方通信的載體。表3 msg類屬性名作用private int msgid消息的id號(hào),唯一識(shí)別該消息private string msgcontent消息的內(nèi)容private int sendfrom消息的發(fā)送者priv
41、ate int sendto消息的接收者private string sendtime消息發(fā)送時(shí)間private string msgtye消息類型(私聊、群消息)(2)users類用戶表的實(shí)體即轉(zhuǎn)化成java程序中的users類,該類封裝了用戶的各項(xiàng)信息,是實(shí)現(xiàn)不同用戶相互聊天的基本對(duì)象,也是建立通訊連接的主體。表4 users類屬性名作用private int id用戶id,唯一識(shí)別該用戶private string name用戶名private string pwd用戶密碼private string ip用戶登錄機(jī)器ipprivate string state用戶在線狀態(tài)private
42、 string gender用戶性別private string email用戶電子郵箱private string lastlogin用戶上一次登錄時(shí)間private string lastexit用戶上一次退出系統(tǒng)時(shí)間private string headimg用戶頭像(3) myserver和myclient類本系統(tǒng)設(shè)計(jì)的目的便是即時(shí)聊天,myserver類和myclient類便是實(shí)現(xiàn)通信功能的主干類,它是一個(gè)功能類,不是一個(gè)實(shí)體類,因此沒(méi)有封裝太多的屬性。此類的主要代碼如下:myserver類:public class myserver public myserver() try sy
43、stem.out.println(服務(wù)器在8888端口監(jiān)聽(tīng));serversocket ss = new serversocket(9988);while (true) socket s = ss.accept(); objectinputstream ois=new objectinputstream(s.getinputstream();user u=(user)ois.readobject();system.out.println(服務(wù)器接收到用戶id:+u.getuserid()+密碼:+u.getpasswd();message m=new message();objectoutpu
44、tstream oos=new objectoutputstream(s.getoutputstream();if (u.getpasswd().equals(123456) / 返回成功登錄的消息m.setmestype(1);oos.writeobject(m);/這里就單開(kāi)一個(gè)線程,讓該線程與該客戶端保持通訊serconclientthread scct=new serconclientthread(s); /加入服務(wù)器端的hashmap便于統(tǒng)一管理manageclientthread.addclientthread(u.getuserid(), scct);thread t=new t
45、hread(scct);t.start();/通知在線的其他人我上線了scct.notifyother(u.getuserid(); else m.setmestype(2);oos.writeobject(m);s.close(); catch (exception e) e.printstacktrace();myclient類:public class clientconserver public socket s;/ 客戶端請(qǐng)求(參數(shù)聲明成object類型,客戶端只有第一次請(qǐng)求發(fā)送的是user對(duì)象)public boolean sendlogininfotoserver(object
46、o) boolean b = false;try system.out.println(正在向服務(wù)器發(fā)送請(qǐng)求.);s = new socket(, 9988); objectoutputstream oos = new objectoutputstream(s.getoutputstream();oos.writeobject(o);/讀取從服務(wù)器發(fā)來(lái)的信息,成功返回前一直阻塞objectinputstream ois = new objectinputstream(s.getinputstream();/ 根據(jù)服務(wù)器返回的message的類型判斷是否成功登錄message
47、ms = (message) ois.readobject();if (ms.getmestype().equals(1) clientconserverthread ccst=new clientconserverthread(s);/啟動(dòng)該通訊線程ccst.start();manageclientconserverthread.addclientconserverthread(user)o).getuserid(), ccst);b = true; else s.close(); catch (exception e) e.printstacktrace(); finally return
48、 b;第四章 基于c/s架構(gòu)的即時(shí)通訊系功能實(shí)現(xiàn)4.1注冊(cè)模塊功能實(shí)現(xiàn)注冊(cè)模塊分析正如我們使用的qq一樣,使用之前我們要申請(qǐng)一個(gè)qq號(hào)。本系統(tǒng)雖然沒(méi)有設(shè)計(jì)這么復(fù)雜的流程,但是也必須在登錄前注冊(cè)賬號(hào)。只有后臺(tái)數(shù)據(jù)庫(kù)里存在的用戶才能使用本系統(tǒng)。注冊(cè)界面如圖4-1所示,填完消息點(diǎn)擊注冊(cè)即可。這個(gè)界面運(yùn)用了emptyborder、jcombobox等java組件,將各個(gè)組件完美的組合在一個(gè)jpanel上,設(shè)置jframe對(duì)象的背景圖片,即可構(gòu)造出美觀的界面。為了使系統(tǒng)的界面更加美觀且易于構(gòu)建,本系統(tǒng)使用了兩個(gè)第三方包:absolutelayout.jar,swing-layout-1.0.3.jar。
49、圖 4-1注冊(cè)界面此外,信息填寫不完整或填寫有誤將有錯(cuò)誤提示,如圖4-2。此處調(diào)用了joptionpane對(duì)象的showmessagedialog方法,通過(guò)設(shè)置該方法的參數(shù)顯示不同類型的提示框。郵箱地址的檢測(cè)用到了java里面的正則表達(dá)式相關(guān)知識(shí),使用pattern對(duì)象對(duì)郵箱地址格式的正則式進(jìn)行編譯,再調(diào)用matcher對(duì)象的matches方法判斷用戶輸入的郵箱是否與該格式匹配。圖4-2錯(cuò)誤提示界面注冊(cè)完成后,通過(guò)jdbc技術(shù)連接mysql數(shù)據(jù)庫(kù)將記錄插入數(shù)據(jù)庫(kù)表中。注冊(cè)功能關(guān)鍵代碼如下:public void addevent() btnregister.addactionlistener(
50、new actionlistener() public void actionperformed(actionevent e) if (txtname.gettext().equals()joptionpane.showmessagedialog(null, 用戶名不能為空!, 錯(cuò)誤,joptionpane.error_message);else if (new string(pwd.getpassword().equals()joptionpane.showmessagedialog(null, 密碼不能為空!, 錯(cuò)誤,joptionpane.error_message);else if(!
51、newstring(pwd.getpassword().equals(new string(pwdre.getpassword()joptionpane.showmessagedialog(null, 兩次輸入的密碼不一致,請(qǐng)重新輸,錯(cuò)誤, joptionpane.error_message);else try if (cs_tcp = null)cs_tcp=new cs_tcp(mytools.qqserverip,mytools.qqserverport);string sex = 男;if (comgender.getselectedindex() = 1)sex = 女;cs_tcp
52、.sendmessage(flag.register+ mytools.flagend/ 注冊(cè)標(biāo)志+ txtname.gettext()+ mytools.split1/ 用戶名+ new string(pwd.getpassword()+ mytools.split1/ 密碼+ sex + mytools.split1/ 性別+ txtemail.gettext() + mytools.split1/ 電子郵件+ txtbirthday.gettext() + mytools.split1/ 生日+ txtsignat.gettext() + mytools.split1/ 個(gè)性簽名+ comboboxheadimage.getselectedindex();/ 頭像索引 catch (exception ee) ee.printstacktrace();joptionpane.showmessagedialog(null,連接服務(wù)器失??!請(qǐng)檢查您的網(wǎng)絡(luò)連接或確保服務(wù)器已啟動(dòng)!, 錯(cuò)誤,joptionpane.error_message););4.2登錄模塊功能實(shí)現(xiàn)登錄模塊分析登錄模塊用于驗(yàn)證客戶端用戶的合法性,用戶輸入用戶名和密碼后通過(guò)msg對(duì)象將其封裝成客戶端消息,通過(guò)objectinputs
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 客服話務(wù)知識(shí)培訓(xùn)課件
- 供貨合同補(bǔ)充協(xié)議
- 交通運(yùn)輸行業(yè)智能化交通規(guī)劃與建設(shè)方案
- 湖北省武漢市2024-2025學(xué)年高一上學(xué)期1月期末地理試題 含解析
- 云南省昭通市昭通一中教研聯(lián)盟2024-2025學(xué)年高一上學(xué)期期中質(zhì)量檢測(cè)生物學(xué)B試題(含答案)
- 吉林省長(zhǎng)春市榆樹(shù)市2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 小學(xué)低年級(jí)數(shù)學(xué)故事讀后感
- 會(huì)議記錄表格:會(huì)議記錄臺(tái)賬分類
- 季度采購(gòu)管理計(jì)劃與工作推進(jìn)安排
- 辦公用品采購(gòu)與供應(yīng)鏈管理協(xié)議
- 新能源概論新能源及其材料課件
- 化學(xué)化工專業(yè)英語(yǔ)1課件
- 裝配式建筑裝配率計(jì)算評(píng)分表
- 1.1北京市基本概況與主要文旅資源《地方導(dǎo)游基礎(chǔ)知識(shí)》(第四版)PPT
- 綜述的寫作方法與技巧課件
- 零售藥店實(shí)施GSP情況的內(nèi)審報(bào)告
- 機(jī)械設(shè)計(jì)基礎(chǔ)網(wǎng)考題庫(kù)答案 吉林大學(xué)
- 新蘇教版科學(xué)六年級(jí)下冊(cè)全冊(cè)教案(含反思)
- 觸電事故應(yīng)急處置卡
- 國(guó)際貿(mào)易運(yùn)輸方式課件
- 南陽(yáng)理工學(xué)院畢業(yè)論文格式規(guī)范
評(píng)論
0/150
提交評(píng)論