




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、i java程序課程設(shè)計(jì)任務(wù)書(shū)程序課程設(shè)計(jì)任務(wù)書(shū)javajava聊天室的系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)聊天室的系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)1 主要內(nèi)容:主要內(nèi)容:用java實(shí)現(xiàn)基于c/s模式的聊天室系統(tǒng)。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶端發(fā)來(lái)的信息,客戶端需要登陸到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。2.具體要求(包括技術(shù)要求等):具體要求(包括技術(shù)要求等):系統(tǒng)的功能要求:a.服務(wù)器端主要功能如下:1.在特定端口上進(jìn)行偵聽(tīng),等待客戶端連接。2.用戶可以配置服務(wù)器端的偵聽(tīng)端口,默認(rèn)端口為8888。3.向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。4.統(tǒng)計(jì)在線人數(shù)。5.當(dāng)停止服務(wù)時(shí),斷開(kāi)所有的用戶連
2、接。b.客戶端的主要功能如下:1.連接到已經(jīng)開(kāi)啟聊天服務(wù)的服務(wù)器端。2.用戶可以配置要連接的服務(wù)器端的ip地址和端口號(hào)。3.用戶可以配置連接后顯示的用戶名。4.當(dāng)服務(wù)器端開(kāi)啟的話,用戶可以隨時(shí)登錄和注銷。5.用戶可以向所有人或某一個(gè)人發(fā)送消息。學(xué)習(xí)并掌握一下技術(shù):學(xué)習(xí)并掌握一下技術(shù):java javabean 等等熟練使用一下開(kāi)發(fā)工具:熟練使用一下開(kāi)發(fā)工具:eclipse, jcreator 等等實(shí)現(xiàn)系統(tǒng)上訴的功能。實(shí)現(xiàn)系統(tǒng)上訴的功能。3.進(jìn)度安排:進(jìn)度安排:12月28日 12月29日:課程設(shè)計(jì)選題,查找參考資料 12月30日 1月1日: 完成系統(tǒng)設(shè)計(jì)1月2日 1月5日: 完成程序代碼的編寫(xiě)1
3、月6日:系統(tǒng)測(cè)試與完善1月7日:完成課程設(shè)計(jì)報(bào)告,準(zhǔn)備答辯4.4.主要參考文獻(xiàn):主要參考文獻(xiàn):1.張廣彬 孟紅蕊 張永寶.java課程設(shè)計(jì)(案例精編)m.清華大學(xué)出版社.2007年版ii摘要摘要在網(wǎng)絡(luò)越來(lái)越發(fā)達(dá)的今天,人們對(duì)網(wǎng)絡(luò)的依賴越來(lái)越多,越來(lái)越離不開(kāi)網(wǎng)絡(luò),由此而產(chǎn)生的聊天工具越來(lái)越多,例如,國(guó)外的icq、國(guó)內(nèi)騰訊公司開(kāi)發(fā)的oicq?;趈ava網(wǎng)絡(luò)編程的強(qiáng)大功能,本次畢業(yè)設(shè)計(jì)使用java編寫(xiě)一個(gè)聊天系統(tǒng)。 一般來(lái)說(shuō),聊天工具大多數(shù)由客戶端程序和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫(kù)組成,本系統(tǒng)采用客戶機(jī)/服務(wù)器架構(gòu)模式通過(guò)java提供的soket類來(lái)連接客戶機(jī)和服務(wù)器并使客戶機(jī)和
4、服務(wù)器之間相互通信,由于聊天是多點(diǎn)對(duì)多點(diǎn)的而java提供的多線程功能用多線程可完成多點(diǎn)對(duì)多點(diǎn)的聊天,數(shù)據(jù)庫(kù)管理系統(tǒng)用sql server2000完成并通過(guò)jdbc-odbc橋訪問(wèn)數(shù)據(jù)庫(kù)。本系統(tǒng)建立在java平臺(tái)上,系統(tǒng)的設(shè)計(jì)使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計(jì)原則。系統(tǒng)采用c/s結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端之間通過(guò)socket傳送消息。使用java語(yǔ)言編寫(xiě),開(kāi)發(fā)工具采用eclipse。服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn)過(guò)程中,采用了多線程技術(shù),可以在單個(gè)程序當(dāng)中同時(shí)運(yùn)行多個(gè)不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用。聊天系統(tǒng)完成后將可進(jìn)行多人對(duì)多人的聊天,對(duì)好友進(jìn)行添加、刪除,對(duì)新
5、用戶的注冊(cè),發(fā)送消息、接受消息等等功能。關(guān)鍵詞關(guān)鍵詞:多線程 ;客戶機(jī)/服務(wù)器 ;java ; socket ; eclipse ; tcp/ipiii目目 錄錄java程序課程設(shè)計(jì)任務(wù)書(shū)程序課程設(shè)計(jì)任務(wù)書(shū).ii摘要摘要 .iii目目 錄錄.iv第第1章章 引言引言.11.1 背景.11.2 課程設(shè)計(jì)內(nèi)容.11.3 任務(wù)分工.2第第2章章 聊天室系統(tǒng)聊天室系統(tǒng).32.1 聊天室系統(tǒng)概述.32.1.1 聊天室系統(tǒng)的定義.32.1.2 聊天室系統(tǒng)的任務(wù)及目的.32.2 主要聊天室系統(tǒng)介紹.42.3 本章小結(jié).5第第3章章 聊天室系統(tǒng)的設(shè)計(jì)聊天室系統(tǒng)的設(shè)計(jì).63.1 系統(tǒng)需求分析.63.2 系統(tǒng)開(kāi)發(fā)
6、及運(yùn)行環(huán)境.63.3 系統(tǒng)主要功能要求.63.4 系統(tǒng)模塊化分析.73.4.1 聊天室系統(tǒng)總體結(jié)構(gòu).73.4.2 聊天室系統(tǒng)各模塊介紹.83.5 系統(tǒng)數(shù)據(jù)流圖.103.6 本章小結(jié).10第第4章章 系統(tǒng)的具體實(shí)現(xiàn)系統(tǒng)的具體實(shí)現(xiàn).114.1界面設(shè)計(jì).114.1.1服務(wù)器啟動(dòng)界面圖.114.1.2服務(wù)器啟動(dòng)成功界面圖.12iv4.1.3客戶端界面圖.124.1.4用戶設(shè)置界面圖.134.1.5用戶成功登錄界面圖.134.1.6兩人私聊界面圖.144.1.7多人群聊界面圖.144.2程序設(shè)計(jì)及調(diào)試運(yùn)行.144.2.1 程序調(diào)試(以服務(wù)器為例).154.2.2 jcreator.204.3 本章小結(jié).
7、21第第5章章 結(jié)束語(yǔ)結(jié)束語(yǔ).22致謝致謝.23附錄附錄 源代碼源代碼.241第第1章章 引言引言1.11.1 背景背景當(dāng)今主流的聊天工具有qq,icq,msn messenger,yahoo messenger等,國(guó)內(nèi)最熱門(mén)的當(dāng)屬qq,騰訊qq(oicq)是由深圳市騰訊計(jì)算機(jī)系統(tǒng)公司開(kāi)發(fā)的,基于internet的即時(shí)尋呼軟件。您可以使用qq和好友用戶進(jìn)行交流,信息即時(shí)發(fā)送,即時(shí)回復(fù),收發(fā)及時(shí)、功能全面。此外qq還具有bp機(jī)網(wǎng)上尋呼、聊天室、傳輸文件、語(yǔ)音郵件、手機(jī)短訊服務(wù)等功能,qq不僅僅是虛擬的網(wǎng)絡(luò)尋呼機(jī),更可與傳統(tǒng)的無(wú)線尋呼網(wǎng)、gsm移動(dòng)電話的短消息系統(tǒng)互聯(lián),目前qq和全國(guó)多家尋呼臺(tái)、移
8、動(dòng)通信公司有業(yè)務(wù)合作。是國(guó)內(nèi)不可多得的中文網(wǎng)絡(luò)尋呼機(jī)。qq支持顯示朋友在線信息、即時(shí)傳送信息、即時(shí)交談、即時(shí)發(fā)送文件和網(wǎng)址。qq可以在win95/98/nt/2000操作系統(tǒng)下運(yùn)行,是十分靈活的網(wǎng)絡(luò)尋呼工具。它會(huì)自動(dòng)檢查您是否已聯(lián)網(wǎng),如果您的電腦已連入internet,可以搜索網(wǎng)友、顯示在線網(wǎng)友,可以根據(jù)qq號(hào)、昵稱、姓名、email地址等關(guān)鍵詞來(lái)查找,找到后可加入到通訊錄中。當(dāng)您的通訊錄中的網(wǎng)友在線時(shí),qq中朋友的頭像就會(huì)顯示在線,根據(jù)提示就可以發(fā)送信息,如果對(duì)方登記了尋呼機(jī)或開(kāi)通了gsm手機(jī)短消息,即使離線了,您也可及時(shí)將信息傳遞給您的好友。雖然以上這些軟件是免費(fèi)的,并且功能越來(lái)越強(qiáng)大。但
9、是它們的唯一的不足就是必須要聯(lián)網(wǎng)或者下載到它們的服務(wù)端,要不然是沒(méi)法脫離intenet使用的。為了能在一個(gè)沒(méi)有連接到intenet的局域網(wǎng)使用聊天工具,那就必須要有服務(wù)器端。本系統(tǒng)就是包括服務(wù)器端與客戶端,可以在局域網(wǎng)聊天的一個(gè)工具。1.21.2 課程設(shè)計(jì)內(nèi)容課程設(shè)計(jì)內(nèi)容實(shí)現(xiàn)的是局域網(wǎng)中的聊天功能,運(yùn)行服務(wù)程序后,服務(wù)器創(chuàng)建成功,然后使服務(wù)器對(duì)某一個(gè)設(shè)定的端口處于監(jiān)聽(tīng)狀態(tài),當(dāng)有客戶端請(qǐng)求建立連接時(shí),服務(wù)器就可接受請(qǐng)求,建立連接!這樣服務(wù)器和客戶端就可相互發(fā)送消2息,實(shí)現(xiàn)聊天功能!系統(tǒng)的功能要求:a.服務(wù)器端主要功能如下:1.在特定端口上進(jìn)行偵聽(tīng),等待客戶端連接。2.用戶可以配置服務(wù)器端的偵聽(tīng)端
10、口,默認(rèn)端口為8888。3.向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。4.統(tǒng)計(jì)在線人數(shù)。5.當(dāng)停止服務(wù)時(shí),斷開(kāi)所有的用戶連接。b.客戶端的主要功能如下:1.連接到已經(jīng)開(kāi)啟聊天服務(wù)的服務(wù)器端。2.用戶可以配置要連接的服務(wù)器端的ip地址和端口號(hào)。3.用戶可以配置連接后顯示的用戶名。4.當(dāng)服務(wù)器端開(kāi)啟的話,用戶可以隨時(shí)登錄和注銷。5.用戶可以向所有人或某一個(gè)人發(fā)送消息1.31.3 任務(wù)分工任務(wù)分工3第第2章章 聊天室系統(tǒng)聊天室系統(tǒng)2.12.1 聊天室系統(tǒng)聊天室系統(tǒng)概述概述聊天室是一種基于互聯(lián)網(wǎng)的即時(shí)交流系統(tǒng),最初是icq,也稱網(wǎng)絡(luò)尋呼機(jī)。此類軟件使得人們可以運(yùn)用連上internet網(wǎng)的電腦用戶可以隨時(shí)
11、跟另外一個(gè)在線網(wǎng)民交談,甚至可以通過(guò)視頻看到對(duì)方的適時(shí)圖像。使人們不必?fù)?dān)心昂貴的話費(fèi)而暢快交流,并工作、交流兩不誤。2.1.1 聊天室系統(tǒng)的定義聊天室系統(tǒng)的定義聊天時(shí)系統(tǒng)是通過(guò)即時(shí)通訊技術(shù)來(lái)實(shí)現(xiàn)在線聊天、交流的軟件。目前有2種架構(gòu)形式,1、一種是c/s架構(gòu),采用客戶端/服務(wù)器形式,用戶使用過(guò)程中需要下載安裝客戶端軟件,典型的代表有:qq、百度hi 、skype qq vs gu、gtalk、新浪uc、msn等;2、采用b/s架構(gòu),即瀏覽器/服務(wù)端形式,這種形式的即時(shí)通訊軟件,直接借助互聯(lián)網(wǎng)為媒介、客戶端無(wú)需安裝任何軟件,既可以體驗(yàn)服務(wù)器端進(jìn)行溝通對(duì)話,一般運(yùn)用在電子商務(wù)網(wǎng)站的服務(wù)商,典型的代表
12、有websitelive 、53kf、live800等。2.1.2 聊天室系統(tǒng)的任務(wù)及目的聊天室系統(tǒng)的任務(wù)及目的本系統(tǒng)主要通過(guò)客戶端,服務(wù)器端來(lái)體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務(wù)器端1.處理用戶注冊(cè)2.處理用戶登錄3.處理用戶發(fā)送信息,服務(wù)器監(jiān)控聊天內(nèi)容,服務(wù)器過(guò)濾非法內(nèi)容4.處理用戶得到信息5.處理用戶退出8. 服務(wù)器踢人。9. 保存服務(wù)器日志。 10.保存用戶聊天信息。(2)客戶端 1.用戶注冊(cè)界面及結(jié)果42.用戶登錄界面及結(jié)果3.用戶發(fā)送信息界面及結(jié)果4.用戶得到信息界面及結(jié)果5.用戶退出界面及結(jié)果2.22.2 主要聊天室系統(tǒng)介紹主要聊天室系統(tǒng)介紹目前國(guó)內(nèi)外做聊天系統(tǒng)的公司很多,產(chǎn)品也琳
13、瑯滿目,國(guó)內(nèi)有諸如騰訊qq、新浪uc、網(wǎng)易泡泡等,國(guó)外有著名的msn(新版改名為live messenger)以及跨平臺(tái)gaim等。本人取最具代表性的qq和msn進(jìn)行了一些研究,作為我開(kāi)發(fā)聊天系統(tǒng)的準(zhǔn)備。騰訊無(wú)疑是國(guó)內(nèi)即時(shí)通訊市場(chǎng)的霸主,自從99年進(jìn)入即時(shí)通訊領(lǐng)域并迅速占市場(chǎng)之后,其在國(guó)內(nèi)用戶數(shù)量始終高居榜首,即使近幾年面對(duì)微軟msn的強(qiáng)大攻勢(shì),騰訊qq的時(shí)常占有率依然穩(wěn)步增長(zhǎng)。騰訊的成功與其對(duì)qq的不斷創(chuàng)新和完善是分不開(kāi)的。參考了許多網(wǎng)絡(luò)上的資料,以及自己通過(guò)觀察騰訊qq運(yùn)行時(shí)的各種細(xì)節(jié)??梢源_定騰訊qq是以多服務(wù)器提供服務(wù)、服務(wù)器總控客戶端、客戶端之間udp直連通信的。并且在兩個(gè)客戶端之間
14、不能建立直連的情況下,才由服務(wù)器進(jìn)行中轉(zhuǎn)通信。其模型如圖1-1圖1-1 騰訊qq服務(wù)器-客戶端模型1與騰訊qq不同,微軟的msn messenger只使用了tcp作為傳輸層通信協(xié)議,所有客戶端與服務(wù)器進(jìn)行連接,然后通過(guò)與服務(wù)器的tcp連接進(jìn)行中轉(zhuǎn)通信。5其模型如圖1-2圖1-2 msn服務(wù)器-客戶端模型2騰訊使用的模型中,服務(wù)器主要處理客戶端各種狀態(tài)的控制,可以極大減輕服務(wù)器的處理壓力,但其內(nèi)部協(xié)議和實(shí)現(xiàn)復(fù)雜度都較高。而msn messenger所有數(shù)據(jù)都要經(jīng)過(guò)服務(wù)器,服務(wù)器壓力可想而知(難怪平時(shí)很少見(jiàn)到使用msn進(jìn)行語(yǔ)音視頻聊天的)。2.32.3 本章小結(jié)本章小結(jié)這一章介紹了當(dāng)前聊天室系統(tǒng)應(yīng)
15、該具備的功能模塊,并提供了市面上比較流行的聊天室系統(tǒng)作為參考。在這一章中,我們可以了解什么是聊天室系統(tǒng),當(dāng)前聊天室系統(tǒng)的市場(chǎng)需求,還有一個(gè)聊天室系統(tǒng)應(yīng)該的開(kāi)發(fā)目標(biāo)。6第第3章章 聊天室系統(tǒng)的設(shè)計(jì)聊天室系統(tǒng)的設(shè)計(jì)這一章是聊天室系統(tǒng)的設(shè)計(jì),從系統(tǒng)需求分析開(kāi)始,介紹開(kāi)發(fā)環(huán)境和用到的開(kāi)發(fā)工具,系統(tǒng)主要的功能設(shè)計(jì),系統(tǒng)的數(shù)據(jù)流程圖。3.13.1 系統(tǒng)需求分析系統(tǒng)需求分析聊天室的設(shè)計(jì)目標(biāo):通過(guò)做鞏固所學(xué)java語(yǔ)言基本知識(shí),增進(jìn)java語(yǔ)言編輯基本功,掌握jdk、jcreator等開(kāi)發(fā)工具的運(yùn)用,拓寬常用類庫(kù)的應(yīng)用,用java實(shí)現(xiàn)基于c/s模式的聊天室系統(tǒng)。3.23.2 系統(tǒng)開(kāi)發(fā)及運(yùn)行環(huán)境系統(tǒng)開(kāi)發(fā)及運(yùn)行環(huán)
16、境硬件平臺(tái):cpu:pentium 2.8ghz以上。內(nèi)存:256mb以上。軟件平臺(tái):操作系統(tǒng):windows xp。運(yùn)行環(huán)境:jdk version1.6 jcreator。 3.33.3 系統(tǒng)主要功能要求系統(tǒng)主要功能要求本系統(tǒng)針對(duì)局域網(wǎng)進(jìn)行聯(lián)機(jī)聊天。聊天室分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶端發(fā)來(lái)的信息,客戶端需要登陸到服務(wù)器端才可以實(shí)現(xiàn)正常的聊天功能。本系統(tǒng)主要實(shí)現(xiàn)如下功能:服務(wù)器:在特定端口上進(jìn)行偵聽(tīng),等待客戶端連接。用戶可以配置服務(wù)器端的偵聽(tīng)端口,默認(rèn)端口為8888。向已經(jīng)連接到服務(wù)器端的用戶發(fā)送系統(tǒng)消息。統(tǒng)計(jì)在線人數(shù)。當(dāng)停止服務(wù)時(shí),斷開(kāi)所有的用戶連接。系統(tǒng)運(yùn)行穩(wěn)
17、定、安全可靠。7一臺(tái)主機(jī)只能啟動(dòng)一個(gè)服務(wù)器??蛻舳耍哼B接到已經(jīng)開(kāi)啟聊天服務(wù)的服務(wù)器端。用戶可以配置要連接的服務(wù)器端的ip地址和端口號(hào)。用戶可以配置連接后顯示的用戶名。用戶可以更改聊天時(shí)的表情。當(dāng)服務(wù)器端開(kāi)啟后,用戶可以隨時(shí)登錄和注銷。用戶可以向所有人或某一個(gè)人發(fā)送消息。系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。可以默認(rèn)連接到自己主機(jī)啟動(dòng)的服務(wù)器。3.43.4 系統(tǒng)模塊化分析系統(tǒng)模塊化分析3.4.1 聊天室系統(tǒng)總體結(jié)構(gòu)聊天室系統(tǒng)總體結(jié)構(gòu)主要功能框架如下圖所示:服務(wù)器服務(wù)器端端口口設(shè)設(shè)置置啟啟動(dòng)動(dòng)服服務(wù)務(wù)系系統(tǒng)統(tǒng)消消息息停停止止服服務(wù)務(wù)退退出出客戶端客戶端用用戶戶設(shè)設(shè)置置注注銷銷登登錄錄發(fā)發(fā)送送消消息息連連接接設(shè)設(shè)
18、置置退退出出8各功能模塊實(shí)現(xiàn)的功能為:服務(wù)器:端口設(shè)置:設(shè)置傾聽(tīng)的端口號(hào),默認(rèn)為8888。啟動(dòng)服務(wù):開(kāi)啟傾聽(tīng)端口,允許客戶端連接。系統(tǒng)消息:服務(wù)器啟動(dòng)后可以在聊天室內(nèi)發(fā)送消息。停止服務(wù):關(guān)閉傾聽(tīng)端口,中斷所有客戶端的連接。退出:關(guān)閉服務(wù)器。客戶端:用戶設(shè)置:設(shè)置聊天時(shí)顯示的名稱,默認(rèn)為匆匆過(guò)客。連接設(shè)置:設(shè)置要連接的服務(wù)器所在主機(jī)的ip地址和傾聽(tīng)端口。登錄:連接服務(wù)器。發(fā)送消息:進(jìn)行聊天,可單獨(dú)發(fā)送消息給聊天室中的一個(gè)人。注銷:與服務(wù)器斷開(kāi)連接。退出:關(guān)閉客戶端。3.4.2 聊天室系統(tǒng)各模塊介紹聊天室系統(tǒng)各模塊介紹服務(wù)器包含服務(wù)、幫助、聊天三大模塊,其服務(wù)器包含服務(wù)、幫助、聊天三大模塊,其中服
19、務(wù)模塊包含端口設(shè)置、啟動(dòng)服務(wù)、停止中服務(wù)模塊包含端口設(shè)置、啟動(dòng)服務(wù)、停止服務(wù)和退出四個(gè)小模塊服務(wù)和退出四個(gè)小模塊聊天模塊可以向聊天室內(nèi)聊天模塊可以向聊天室內(nèi)所有人或個(gè)人發(fā)送系統(tǒng)消所有人或個(gè)人發(fā)送系統(tǒng)消息或以管理員身份與其他息或以管理員身份與其他人聊天人聊天表表3-1 服務(wù)器各模塊名稱功能匯總表服務(wù)器各模塊名稱功能匯總表序號(hào)模塊名基本功能1端口設(shè)置設(shè)置傾聽(tīng)的端口號(hào),默認(rèn)為8888。2啟動(dòng)服務(wù)開(kāi)啟傾聽(tīng)端口,允許客戶端連接。93停止服務(wù)關(guān)閉傾聽(tīng)端口,中斷所有客戶端的連接。4退出關(guān)閉服務(wù)器。5幫助顯示各個(gè)模塊的功能及操作方法。6發(fā)送向聊天室內(nèi)發(fā)送系統(tǒng)消息??蛻舳税僮?、設(shè)置、幫助、聊天四大客戶端包含
20、操作、設(shè)置、幫助、聊天四大模塊,其中操作包含用戶登錄、用戶注銷模塊,其中操作包含用戶登錄、用戶注銷和退出三個(gè)小模塊,設(shè)置包含用戶設(shè)置和和退出三個(gè)小模塊,設(shè)置包含用戶設(shè)置和連接設(shè)置兩個(gè)小模塊聊天模塊除連接設(shè)置兩個(gè)小模塊聊天模塊除 具備普通聊天功能外,還能進(jìn)行聊天時(shí)的表情選擇具備普通聊天功能外,還能進(jìn)行聊天時(shí)的表情選擇表表3-2 客戶端各模塊名稱功能匯總表客戶端各模塊名稱功能匯總表序號(hào)模塊名基本功能1用戶設(shè)置設(shè)置聊天時(shí)顯示的名稱,默認(rèn)為匆匆過(guò)客。2連接設(shè)置設(shè)置要連接的服務(wù)器所在主機(jī)的ip地址和傾聽(tīng)端口。3用戶登錄連接到服務(wù)器端。4用戶注銷與服務(wù)器斷開(kāi)連接。5退出關(guān)閉客戶端。6發(fā)送發(fā)送聊天內(nèi)容7悄悄
21、話聊天內(nèi)容不會(huì)被服務(wù)器和說(shuō)話對(duì)象以外的人看到103.53.5 系統(tǒng)數(shù)據(jù)流圖系統(tǒng)數(shù)據(jù)流圖系統(tǒng)數(shù)據(jù)流圖系統(tǒng)數(shù)據(jù)流圖3.63.6 本章小結(jié)本章小結(jié)本章是聊天室系統(tǒng)的具體設(shè)計(jì)過(guò)程,有具體的需求分析、系統(tǒng)功能模塊、系統(tǒng)數(shù)據(jù)流圖。這里我們開(kāi)始接觸聊天室系統(tǒng)開(kāi)發(fā)的最初步驟,也是很重要的一步。服務(wù)器服務(wù)器客戶端客戶端a客戶端客戶端e客戶端客戶端d客戶端客戶端c客戶端客戶端b悄悄話11第第4章章 系統(tǒng)的具體實(shí)現(xiàn)系統(tǒng)的具體實(shí)現(xiàn)界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設(shè)計(jì)的質(zhì)量, 并在很大程度上決定了軟件是否成功。4.14.1界面設(shè)計(jì)界面設(shè)計(jì)4.1.1服務(wù)器啟動(dòng)界面圖服務(wù)器啟動(dòng)界面圖124.1.2服務(wù)
22、器啟動(dòng)成功界面圖服務(wù)器啟動(dòng)成功界面圖4.1.3客戶端界面圖客戶端界面圖134.1.4用戶設(shè)置界面圖用戶設(shè)置界面圖4.1.5用戶成功登錄界面圖用戶成功登錄界面圖144.1.6兩人私聊界面圖兩人私聊界面圖4.1.7多人群聊界面圖多人群聊界面圖4.24.2程序設(shè)計(jì)及調(diào)試運(yùn)行程序設(shè)計(jì)及調(diào)試運(yùn)行利用jcreator“一次編寫(xiě),各處運(yùn)行”的編程優(yōu)點(diǎn),按功能模塊結(jié)構(gòu)設(shè)計(jì)菜單,布置各明細(xì)模塊工作界面,編寫(xiě)各個(gè)模塊的程序代碼,進(jìn)行編譯連接運(yùn)行,經(jīng)過(guò)反復(fù)調(diào)試修改,以達(dá)到系統(tǒng)功能要求。這個(gè)過(guò)程具有大量的工作量,應(yīng)仔細(xì)對(duì)每個(gè)程序細(xì)節(jié)進(jìn)行分析思考、編寫(xiě)程序并調(diào)試,做到程序簡(jiǎn)潔清楚,盡量避免可能潛在的程序錯(cuò)誤,并在必要的
23、地方加以注釋,以便于程序閱讀和修改。154.2.1 程序調(diào)試(以服務(wù)器為例)程序調(diào)試(以服務(wù)器為例) import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import .*;import java.io.*;/* * 聊天服務(wù)端的主框架類 */public class chatserver extends jframe implements actionlistenerpublic static int port = 8888;/服務(wù)端的偵聽(tīng)端口serversocke
24、t serversocket;/服務(wù)端socketimage icon;/程序圖標(biāo)jcombobox combobox;/選擇發(fā)送消息的接受者jtextarea messageshow;/服務(wù)端的信息顯示jscrollpane messagescrollpane;/信息顯示的滾動(dòng)條jtextfield showstatus;/顯示用戶連接狀態(tài)jlabel sendtolabel,messagelabel;jtextfield sysmessage;/服務(wù)端消息的發(fā)送jbutton sysmessagebutton;/服務(wù)端消息的發(fā)送按鈕userlinklist userlinklist;/用戶
25、鏈表/建立菜單欄jmenubar jmenubar = new jmenubar(); /建立菜單組jmenu servicemenu = new jmenu (服務(wù)(v); /建立菜單項(xiàng)jmenuitem portitem = new jmenuitem (端口設(shè)置(p);jmenuitem startitem = new jmenuitem (啟動(dòng)服務(wù)(s);jmenuitem stopitem=new jmenuitem (停止服務(wù)(t);jmenuitem exititem=new jmenuitem (退出(x);jmenu helpmenu=new jmenu (幫助(h);jme
26、nuitem helpitem=new jmenuitem (幫助(h);/建立工具欄jtoolbar toolbar = new jtoolbar();/建立工具欄中的按鈕組件jbutton portset;/啟動(dòng)服務(wù)端偵聽(tīng)jbutton startserver;/啟動(dòng)服務(wù)端偵聽(tīng)jbutton stopserver;/關(guān)閉服務(wù)端偵聽(tīng)jbutton exitbutton;/退出按鈕/框架的大小dimension facesize = new dimension(400, 600);serverlisten listenthread;jpanel downpanel ;gridbaglayout
27、 girdbag;16gridbagconstraints girdbagcon;/* * 服務(wù)端構(gòu)造函數(shù) */public chatserver()init();/初始化程序/添加框架的關(guān)閉事件處理this.setdefaultcloseoperation(jframe.exit_on_close);this.pack();/設(shè)置框架的大小this.setsize(facesize);/設(shè)置運(yùn)行時(shí)窗口的位置dimension screensize = toolkit.getdefaulttoolkit().getscreensize();this.setlocation( (int) (sc
28、reensize.width - facesize.getwidth() / 2, (int) (screensize.height - facesize.getheight() / 2);this.setresizable(false);this.settitle(聊天室服務(wù)端); /設(shè)置標(biāo)題/程序圖標(biāo)icon = getimage(icon.gif);this.seticonimage(icon); /設(shè)置程序圖標(biāo)show();/為服務(wù)菜單欄設(shè)置熱鍵vservicemenu.setmnemonic(v);/為端口設(shè)置快捷鍵為ctrl+pportitem.setmnemonic (p); p
29、ortitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_p,inputevent.ctrl_mask);/為啟動(dòng)服務(wù)快捷鍵為ctrl+sstartitem.setmnemonic (s); startitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_s,inputevent.ctrl_mask);/為端口設(shè)置快捷鍵為ctrl+tstopitem.setmnemonic (t); stopitem.setaccelerator (keystroke.getkeystro
30、ke (keyevent.vk_t,inputevent.ctrl_mask);/為退出設(shè)置快捷鍵為ctrl+xexititem.setmnemonic (x); exititem.setaccelerator (keystroke.getkeystroke (keyevent.vk_x,inputevent.ctrl_mask);/為幫助菜單欄設(shè)置熱鍵hhelpmenu.setmnemonic(h);/為幫助設(shè)置快捷鍵為ctrl+phelpitem.setmnemonic (h); helpitem.setaccelerator (keystroke.getkeystroke (keyeve
31、nt.vk_h,inputevent.ctrl_mask);/* * 程序初始化函數(shù) */17public void init()container contentpane = getcontentpane();contentpane.setlayout(new borderlayout();/添加菜單欄servicemenu.add (portitem);servicemenu.add (startitem);servicemenu.add (stopitem);servicemenu.add (exititem);jmenubar.add (servicemenu); helpmenu.a
32、dd (helpitem);jmenubar.add (helpmenu); setjmenubar (jmenubar);/初始化按鈕portset = new jbutton(端口設(shè)置);startserver = new jbutton(啟動(dòng)服務(wù));stopserver = new jbutton(停止服務(wù) );exitbutton = new jbutton(退出 );/將按鈕添加到工具欄toolbar.add(portset);toolbar.addseparator();/添加分隔欄toolbar.add(startserver);toolbar.add(stopserver);t
33、oolbar.addseparator();/添加分隔欄toolbar.add(exitbutton);contentpane.add(toolbar,borderlayout.north);/初始時(shí),令停止服務(wù)按鈕不可用stopserver.setenabled(false);stopitem .setenabled(false);/為菜單欄添加事件監(jiān)聽(tīng)portitem.addactionlistener(this);startitem.addactionlistener(this);stopitem.addactionlistener(this);exititem.addactionlis
34、tener(this);helpitem.addactionlistener(this);/添加按鈕的事件偵聽(tīng)portset.addactionlistener(this);startserver.addactionlistener(this);stopserver.addactionlistener(this);exitbutton.addactionlistener(this); combobox = new jcombobox();combobox.insertitemat(所有人,0);combobox.setselectedindex(0);messageshow = new jte
35、xtarea();messageshow.seteditable(false);/添加滾動(dòng)條messagescrollpane = new jscrollpane(messageshow,jscrollpane.vertical_scrollbar_as_needed,jscrollpane.horizontal_scrollbar_as_needed);messagescrollpane.setpreferredsize(new dimension(400,400);messagescrollpane.revalidate();18showstatus = new jtextfield(35
36、);showstatus.seteditable(false);sysmessage = new jtextfield(24);sysmessage.setenabled(false);sysmessagebutton = new jbutton();sysmessagebutton.settext(發(fā)送);/添加系統(tǒng)消息的事件偵聽(tīng)sysmessage.addactionlistener(this);sysmessagebutton.addactionlistener(this);sendtolabel = new jlabel(發(fā)送至:);messagelabel = new jlabel(
37、發(fā)送消息:);downpanel = new jpanel();girdbag = new gridbaglayout();downpanel.setlayout(girdbag);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 0;girdbagcon.gridy = 0;girdbagcon.gridwidth = 3;girdbagcon.gridheight = 2;girdbagcon.ipadx = 5;girdbagcon.ipady = 5;jlabel none = new jlabel( );girdbag.
38、setconstraints(none,girdbagcon);downpanel.add(none);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 0;girdbagcon.gridy = 2;girdbagcon.insets = new insets(1,0,0,0);girdbagcon.ipadx = 5;girdbagcon.ipady = 5;girdbag.setconstraints(sendtolabel,girdbagcon);downpanel.add(sendtolabel);girdbagcon =
39、 new gridbagconstraints();girdbagcon.gridx =1;girdbagcon.gridy = 2;girdbagcon.anchor = gridbagconstraints.line_start;girdbag.setconstraints(combobox,girdbagcon);downpanel.add(combobox);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 0;girdbagcon.gridy = 3;girdbag.setconstraints(messagelabel
40、,girdbagcon);downpanel.add(messagelabel);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 1;girdbagcon.gridy = 3;girdbag.setconstraints(sysmessage,girdbagcon);downpanel.add(sysmessage);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 2;19girdbagcon.gridy = 3;girdbag.setconstraints(sy
41、smessagebutton,girdbagcon);downpanel.add(sysmessagebutton);girdbagcon = new gridbagconstraints();girdbagcon.gridx = 0;girdbagcon.gridy = 4;girdbagcon.gridwidth = 3;girdbag.setconstraints(showstatus,girdbagcon);downpanel.add(showstatus);contentpane.add(messagescrollpane,borderlayout.center);contentpa
42、ne.add(downpanel,borderlayout.south);/關(guān)閉程序時(shí)的操作this.addwindowlistener(new windowadapter()public void windowclosing(windowevent e)stopservice();system.exit(0););/* * 事件處理 */public void actionperformed(actionevent e) object obj = e.getsource();if (obj = startserver | obj = startitem) /啟動(dòng)服務(wù)端startservice
43、();else if (obj = stopserver | obj = stopitem) /停止服務(wù)端int j=joptionpane.showconfirmdialog(this,真的停止服務(wù)嗎?,停止服務(wù),joptionpane.yes_option,joptionpane.question_message);if (j = joptionpane.yes_option)stopservice();else if (obj = portset | obj = portitem) /端口設(shè)置/調(diào)出端口設(shè)置的對(duì)話框portconf portconf = new portconf(this
44、);portconf.show();else if (obj = exitbutton | obj = exititem) /退出程序int j=joptionpane.showconfirmdialog(this,真的要退出嗎?,退出,joptionpane.yes_option,joptionpane.question_message);if (j = joptionpane.yes_option)stopservice();system.exit(0);20else if (obj = helpitem) /菜單欄中的幫助/調(diào)出幫助對(duì)話框help helpdialog = new hel
45、p(this);helpdialog.show();else if (obj = sysmessage | obj = sysmessagebutton) /發(fā)送系統(tǒng)消息sendsystemmessage();/* * 啟動(dòng)服務(wù)端 */public void startservice()tryserversocket = new serversocket(port,10);messageshow.append(服務(wù)端已經(jīng)啟動(dòng),在+port+端口偵聽(tīng).n);startserver.setenabled(false);startitem.setenabled(false);portset.sete
46、nabled(false);portitem.setenabled(false);stopserver .setenabled(true);stopitem .setenabled(true);sysmessage.setenabled(true);catch (exception e)/system.out.println(e);userlinklist = new userlinklist();listenthread = new serverlisten(serversocket,combobox,messageshow,showstatus,userlinklist);listenth
47、read.start();/* * 關(guān)閉服務(wù)端 */4.2.2 jcreatorjcreator是一個(gè)用于java程序設(shè)計(jì)的集成開(kāi)發(fā)環(huán)境,具有編輯、調(diào)試、運(yùn)行java程序的功能。當(dāng)前最新版本是jcreator3.10,它又分為le和pro版本。le版本功能上受到一些限制,是免費(fèi)版本。pro版本功能最全,但這個(gè)版本是一個(gè)共享軟件。這個(gè)軟件比較小巧,對(duì)硬件要求不是很高,完全用c+寫(xiě)的,速度快、效率高。具有語(yǔ)法著色、代碼自動(dòng)完成、代碼參數(shù)提示、工程向?qū)А㈩愊驅(qū)У裙δ?。第一次啟?dòng)時(shí)提示設(shè)置javajdk主目錄及jdkjavadoc目錄,軟件自動(dòng)設(shè)置好類路徑、編譯器及解釋器路徑,還可以在幫助菜單中使用j
48、dkhelp。214.34.3 本章小結(jié)本章小結(jié)本章介紹了系統(tǒng)的具體實(shí)現(xiàn)和部分關(guān)鍵代碼,其中包括用戶登錄所要用到的函數(shù)和主界面的框架設(shè)計(jì)。22第第5章章 結(jié)束語(yǔ)結(jié)束語(yǔ)本文討論了如何利用java技術(shù)開(kāi)發(fā)聊天室系統(tǒng),基本滿足了結(jié)構(gòu)化、界面友好、速度快、安全性以及穩(wěn)定性等特點(diǎn)。系統(tǒng)著重研究并實(shí)現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實(shí)現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。生成的聊天室可以達(dá)到基本的聊天要求,具有較高的研究?jī)r(jià)值。系統(tǒng)具有目前聊天室的基本功能:包括支持語(yǔ)氣選擇,支持私聊,可以給所有聊友發(fā)公共信息,具有速度快,高穩(wěn)定性,占用系統(tǒng)資源少,用戶界面友好等特點(diǎn)。通過(guò)畢業(yè)設(shè)計(jì),發(fā)現(xiàn)自己
49、在理論研究和實(shí)際工作能力等方面都得到了提高,受益匪淺,同時(shí)在老師的指導(dǎo)和課題組同學(xué)的共同幫助下,及時(shí)總結(jié)研究成果,這些無(wú)疑會(huì)對(duì)我今后的工作和學(xué)習(xí)帶來(lái)很大的幫助。23致謝致謝24附錄附錄 源代碼源代碼import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import .*;import java.io.*;/* * 聊天服務(wù)端的主框架類 */public class chatserver extends jframe implements actionlistenerpu
50、blic static int port = 8888;/服務(wù)端的偵聽(tīng)端口serversocket serversocket;/服務(wù)端socketimage icon;/程序圖標(biāo)jcombobox combobox;/選擇發(fā)送消息的接受者jtextarea messageshow;/服務(wù)端的信息顯示jscrollpane messagescrollpane;/信息顯示的滾動(dòng)條jtextfield showstatus;/顯示用戶連接狀態(tài)jlabel sendtolabel,messagelabel;jtextfield sysmessage;/服務(wù)端消息的發(fā)送jbutton sysmessag
51、ebutton;/服務(wù)端消息的發(fā)送按鈕userlinklist userlinklist;/用戶鏈表/建立菜單欄jmenubar jmenubar = new jmenubar(); /建立菜單組jmenu servicemenu = new jmenu (服務(wù)(v); /建立菜單項(xiàng)jmenuitem portitem = new jmenuitem (端口設(shè)置(p);jmenuitem startitem = new jmenuitem (啟動(dòng)服務(wù)(s);jmenuitem stopitem=new jmenuitem (停止服務(wù)(t);jmenuitem exititem=new jmen
52、uitem (退出(x);jmenu helpmenu=new jmenu (幫助(h);jmenuitem helpitem=new jmenuitem (幫助(h);/建立工具欄jtoolbar toolbar = new jtoolbar();/建立工具欄中的按鈕組件jbutton portset;/啟動(dòng)服務(wù)端偵聽(tīng)jbutton startserver;/啟動(dòng)服務(wù)端偵聽(tīng)jbutton stopserver;/關(guān)閉服務(wù)端偵聽(tīng)25jbutton exitbutton;/退出按鈕/框架的大小dimension facesize = new dimension(400, 600);serverl
53、isten listenthread;jpanel downpanel ;gridbaglayout girdbag;gridbagconstraints girdbagcon;/* * 服務(wù)端構(gòu)造函數(shù) */public chatserver()init();/初始化程序/添加框架的關(guān)閉事件處理this.setdefaultcloseoperation(jframe.exit_on_close);this.pack();/設(shè)置框架的大小this.setsize(facesize);/設(shè)置運(yùn)行時(shí)窗口的位置dimension screensize = toolkit.getdefaulttoolk
54、it().getscreensize();this.setlocation( (int) (screensize.width - facesize.getwidth() / 2, (int) (screensize.height - facesize.getheight() / 2);this.setresizable(false);this.settitle(聊天室服務(wù)端); /設(shè)置標(biāo)題/程序圖標(biāo)icon = getimage(icon.gif);this.seticonimage(icon); /設(shè)置程序圖標(biāo)show();/為服務(wù)菜單欄設(shè)置熱鍵vservicemenu.setmnemoni
55、c(v);/為端口設(shè)置快捷鍵為ctrl+pportitem.setmnemonic (p); portitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_p,inputevent.ctrl_mask);/為啟動(dòng)服務(wù)快捷鍵為ctrl+sstartitem.setmnemonic (s); startitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_s,inputevent.ctrl_mask);/為端口設(shè)置快捷鍵為ctrl+tstopitem.setmnemonic (t
56、); stopitem.setaccelerator (keystroke.getkeystroke (keyevent.vk_t,inputevent.ctrl_mask);/為退出設(shè)置快捷鍵為ctrl+xexititem.setmnemonic (x); exititem.setaccelerator (keystroke.getkeystroke (keyevent.vk_x,inputevent.ctrl_mask);/為幫助菜單欄設(shè)置熱鍵hhelpmenu.setmnemonic(h);/為幫助設(shè)置快捷鍵為ctrl+p26helpitem.setmnemonic (h); helpi
57、tem.setaccelerator (keystroke.getkeystroke (keyevent.vk_h,inputevent.ctrl_mask);/* * 程序初始化函數(shù) */public void init()container contentpane = getcontentpane();contentpane.setlayout(new borderlayout();/添加菜單欄servicemenu.add (portitem);servicemenu.add (startitem);servicemenu.add (stopitem);servicemenu.add (
58、exititem);jmenubar.add (servicemenu); helpmenu.add (helpitem);jmenubar.add (helpmenu); setjmenubar (jmenubar);/初始化按鈕portset = new jbutton(端口設(shè)置);startserver = new jbutton(啟動(dòng)服務(wù));stopserver = new jbutton(停止服務(wù) );exitbutton = new jbutton(退出 );/將按鈕添加到工具欄toolbar.add(portset);toolbar.addseparator();/添加分隔欄to
59、olbar.add(startserver);toolbar.add(stopserver);toolbar.addseparator();/添加分隔欄toolbar.add(exitbutton);contentpane.add(toolbar,borderlayout.north);/初始時(shí),令停止服務(wù)按鈕不可用stopserver.setenabled(false);stopitem .setenabled(false);/為菜單欄添加事件監(jiān)聽(tīng)portitem.addactionlistener(this);startitem.addactionlistener(this);stopit
60、em.addactionlistener(this);exititem.addactionlistener(this);helpitem.addactionlistener(this);/添加按鈕的事件偵聽(tīng)portset.addactionlistener(this);27startserver.addactionlistener(this);stopserver.addactionlistener(this);exitbutton.addactionlistener(this);combobox = new jcombobox();combobox.insertitemat(所有人,0);c
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全試題分類標(biāo)準(zhǔn)及答案
- 安全生產(chǎn)模擬試題及答案
- 安全考核試題及答案
- 2025年工業(yè)領(lǐng)域CCS技術(shù)應(yīng)用案例深度解讀報(bào)告
- 《編制說(shuō)明-公安交通集成指揮平臺(tái)數(shù)據(jù)共享技術(shù)規(guī)范》
- 中國(guó)動(dòng)畫(huà)課件下載網(wǎng)
- 淤血肝超聲診斷
- 肝硬化患者的飲食護(hù)理
- 春節(jié)學(xué)生安全教育
- 紅色教育基地分享
- GB∕T 31062-2014 聚合物多元醇
- 氧、氬、二氧化碳?xì)怏w充裝企業(yè)風(fēng)險(xiǎn)點(diǎn)分級(jí)管控資料
- 醫(yī)學(xué)專題杏林中人乳腺穴位敷貼
- 公路水運(yùn)工程施工安全標(biāo)準(zhǔn)化指南(42頁(yè))
- 人教版 2021-2022學(xué)年 五年級(jí)下冊(cè)數(shù)學(xué)期末測(cè)試試卷(一)含答案
- 錫槽缺陷手冊(cè)(上
- (完整版)全國(guó)校園籃球特色學(xué)校申報(bào)材料
- 西門(mén)子SAMA圖DEH邏輯講解
- 施工現(xiàn)場(chǎng)安全、文明施工檢查評(píng)分表
- 管道支架重量計(jì)算表常用圖文精
- 國(guó)家開(kāi)放大學(xué)《數(shù)據(jù)結(jié)構(gòu)(本)》單元測(cè)試參考答案
評(píng)論
0/150
提交評(píng)論