局域網(wǎng)qq課程設(shè)計_第1頁
已閱讀1頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計 報 告</p><p>  二○一三 年 七 月</p><p> 課 程 名 稱:《面向?qū)ο蟪绦蛟O(shè)計》</p><p> 課程設(shè)計題目:貴師院局域網(wǎng)聊天軟件</p><p> 姓 名:</p><p> 學(xué) 號:</p><p&g

2、t; 組 員:</p><p> 學(xué) 院:數(shù)學(xué)與計算機科學(xué)</p><p> 專 業(yè):計算機科學(xué)與技術(shù)</p><p> 年 級:</p><p> 指 導(dǎo) 教 師:</p><p><b>  目錄</b></p><p>

3、<b>  1.設(shè)計的目的1</b></p><p><b>  2.設(shè)計的內(nèi)容1</b></p><p><b>  3.概要設(shè)計3</b></p><p>  3.1局域網(wǎng)聊天QQ的功能3</p><p>  3.2局域網(wǎng)聊天QQ的能模塊如下:3</p>

4、;<p><b>  4.詳細設(shè)計5</b></p><p>  4.1編寫服務(wù)器端程序5</p><p>  4.1.1問題陳述5</p><p>  4.1.2解決方案6</p><p>  4.2客戶端程序編寫7</p><p><b>  5.總結(jié)8&l

5、t;/b></p><p><b>  6.參考資料 8</b></p><p><b>  7.附錄8</b></p><p><b>  摘 要</b></p><p>  隨著互聯(lián)網(wǎng)的發(fā)展,人們對網(wǎng)絡(luò)的依賴越來越多,越來越離不開網(wǎng)絡(luò),由此而產(chǎn)生的聊天

6、工具越來越多。本次實驗將依照騰訊公司聊天工具QQ的設(shè)計,實現(xiàn)局域網(wǎng)網(wǎng)絡(luò)通信的基本功能,以便在用戶在不聯(lián)網(wǎng)的情況下也可以進行通信。 本文所寫的“貴師院局域網(wǎng)聊天軟件”是為了解決師院為了解決廣大師院同學(xué)們上網(wǎng)困難,網(wǎng)費透支,網(wǎng)速慢等困難。該軟件主要包括:服務(wù)器響應(yīng),登錄系統(tǒng),注冊,好友界面,聊天界面等。在這次的課程設(shè)計中,我們應(yīng)用了MyEclipse 6.0開發(fā)工具在WINDOWS平臺上開發(fā)了一個基于WINDOWS平臺的局域網(wǎng)通信工具

7、,我們充分學(xué)習(xí)了JAVA Swing和awt界面開發(fā)技術(shù),使自己在界面應(yīng)用和界面布局方面得到更多的實踐,應(yīng)用Socket技術(shù)實現(xiàn)網(wǎng)絡(luò)的連接功能,對網(wǎng)絡(luò)的實現(xiàn)和通信方面有了進一步的理解,多線程方面的應(yīng)用,使得客戶端和服務(wù)端可以實現(xiàn)多任務(wù)功能。</p><p>  關(guān)鍵詞:Java, MyEclipse, 通訊, 局域網(wǎng),聊天 </p><p><b>  Abstract<

8、/b></p><p>  With the development of the Internet, people rely on network more and more, more and more inseparable from the network, the resulting chat tools, more and more. This experiment will be in acc

9、ordance with the design of tencent chat tool QQ, realize the basic function of the LAN network communication, so that the users in the case of not connected to the Internet can also communicate.</p><p>  Thi

10、s article written by the "your LAN chat software college" is to solve in order to solve the general teachers college students surfing the Internet is difficult, net charge overdraft, network speed is slow and d

11、ifficult. The software mainly includes: the server response, login system, registration, friend interface, chat interface, etc. In the curriculum design, we applied the MyEclipse 6.0 development tools in WINDOWS platform

12、 based on WINDOWS platform to develop a local area network (LAN) co</p><p>  Keywords : Java, MyEclipse,  communication, Local area network, chat </p><p><b>  1 引言</b></p>

13、;<p>  隨著Internet的發(fā)展,Internet將提供越來越多的服務(wù)。就目前而言,網(wǎng)民使用較多的主要有以下服務(wù):電子郵件(E-mail),文件傳輸(網(wǎng)絡(luò)通訊),遠程登錄(Telnet),萬維網(wǎng)(world wide web),新聞組和電子公告牌(BBS),聊天系統(tǒng)(Chat)等。Internet如此流行,其中網(wǎng)絡(luò)通訊功不可沒。成錢上網(wǎng)的數(shù)據(jù),軟件分布在世界各地,有了網(wǎng)絡(luò)通訊,足不出戶,只要敲幾個字,就能輕而易舉地

14、得到想要的。目前世界已有1000多個網(wǎng)絡(luò)通訊文件服務(wù)器對所有的Internet用戶開放,用戶可以通過與Internet相連的計算機,把自己需要的文件傳輸過來?,F(xiàn)在,許多互聯(lián)網(wǎng)站點都建立了可供大眾訪問的資料庫,這些資料都可以通過網(wǎng)絡(luò)通訊獲取。</p><p>  即時通訊的發(fā)展初期以其娛樂性引起了人們的廣泛關(guān)注,但是現(xiàn)在在其快速增長的切用戶表明這一技術(shù)已經(jīng)開始融入現(xiàn)在商務(wù)活動中。為適應(yīng)新的經(jīng)濟競爭環(huán)境,現(xiàn)在企業(yè)的溝

15、通越來越快,對效率的要求也越來越高,特別是企業(yè)內(nèi)部團隊工作中的協(xié)調(diào)溝通必須即刻達成,否則將影響項目的整體推進,也難以迅速應(yīng)對瞬息變化的市場需求。目前,越來越多的國內(nèi)外企業(yè)開始關(guān)注企業(yè)即時通信產(chǎn)品,他們看中的是其降低交流成本、提高溝通效率的優(yōu)勢??缭轿锢砜臻g距離、實現(xiàn)即時交流通信系統(tǒng)最吸引企業(yè)之處。據(jù)美國著名公司Garnter調(diào)查顯示,在2008年以后,企業(yè)即時通信產(chǎn)品將以350%的速度飛速增長,可以說,企業(yè)即時通信具有廣泛的發(fā)展前景。&

16、lt;/p><p>  為了保障通信安全,建設(shè)內(nèi)網(wǎng)、專網(wǎng)是一個解決這一問題的方法,凡是隨著企業(yè)業(yè)務(wù)范圍的不斷擴大,網(wǎng)絡(luò)規(guī)模也在擴大,采用該方案飛話,成本的代價必然非常高。由于公眾信息網(wǎng)是對整個社會開放飛公眾基礎(chǔ)網(wǎng)絡(luò),具有覆蓋性范圍廣、速度快、費用低、使用方便等特點,但同時也存在著安全性差的問題。用戶通過公眾信息網(wǎng)傳輸?shù)男畔ⅲ趥鬏數(shù)倪^程中可能被竊取、篡改和偽造,信息的安全性和可靠性因此大大的降低了。</p>

17、;<p>  習(xí)慣了通過類似于QQ,MSN之類的程序和天南地北的朋友聊天、發(fā)信息,不過所有聊天程序都需要Internet的支持,而無法在局域網(wǎng)內(nèi)部大顯身手,那么是否想到過要讓單位內(nèi)部的員工,寢室周圍的同學(xué),不用和上Internet就可以輕松體驗到內(nèi)網(wǎng)聊天的樂趣呢?有了這種想法,開發(fā)局域網(wǎng)聊天程序就有了必要性,讓單位員工或者寢室同學(xué)不出內(nèi)網(wǎng)就能自由聊天。</p><p>  隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和國際互

18、聯(lián)網(wǎng)在全球的開通,計算機在教學(xué)領(lǐng)域中的應(yīng)用得到了迅速地發(fā)展,多種類型的網(wǎng)校、教育網(wǎng)站、網(wǎng)絡(luò)遠程教育學(xué)院如雨后春筍般蓬勃興起,使得網(wǎng)上教育成為當(dāng)今教育的熱點。人們禁不住向往著一個全新的教育體制—基于Internet/Intranet教育網(wǎng)的教育體制,在這種體制下,不受時間、空間和地域的限制,不受應(yīng)用軟件的限制,通過計算機網(wǎng)絡(luò)可擴展至全社會的每一個角落,甚至是全世界,這是真正意義上的開放大學(xué)。在基于Internet的教育網(wǎng)絡(luò)環(huán)境下,方便教師

19、對學(xué)生作業(yè)的管理,同時可以最大限度地發(fā)揮學(xué)習(xí)者的主動性、積極性、探索精神,既可以進行個性化教學(xué),又可以進行協(xié)作型教學(xué)。</p><p>  局域網(wǎng)QQ軟件是一個即時通信工具。通過該網(wǎng)絡(luò)程序的編制和實踐,對自己所學(xué)習(xí)的知識進行了一次綜合和提高,有更深層次的理解和掌握,在這個過程中,激發(fā)自己的學(xué)習(xí)潛力,提高軟件開發(fā)的能力,加深對網(wǎng)絡(luò)協(xié)議和Windows環(huán)境下網(wǎng)絡(luò)編程的理解和掌握。</p><p&g

20、t;  通過自己完成的需求分析,小組內(nèi)經(jīng)過討論和商定,最終確定了我們小組開發(fā)的局域網(wǎng)QQ有以下幾大功能:文字聊天主要功能。作為計算機網(wǎng)絡(luò)的應(yīng)用之一聊天工具,受到了用戶的普遍愛好,它把人們帶進了一個虛擬的網(wǎng)絡(luò)世界,大大的加深了人們之間的聯(lián)系。從單一的文本聊天,到語音聊天以及到現(xiàn)在的圖像、視頻聊天、及時短信的發(fā)送和在線游戲等功能的開發(fā),已經(jīng)大大的拓展了聊天工具的概念,它將會作為未來人們通過因特網(wǎng)相互聯(lián)系和娛樂的主要平臺。</p>

21、<p>  聊天工具的開發(fā)主要用到了網(wǎng)絡(luò)通信技術(shù)、語音的采集、壓縮、傳輸、解壓縮以及回放等技術(shù)、文件傳輸技術(shù)、windows的多線程技術(shù)以及視頻的采集、壓縮解壓縮技術(shù)等。</p><p>  該聊天軟件基于WINSOCK通信,在此基礎(chǔ)上,實現(xiàn)點對點聊天、廣播聊天、一對多聊天以及文件的傳輸。</p><p>  該聊天工具可以運行于任何支持tcp/ip,upd,ftp協(xié)議的機器

22、上。</p><p>  由于系統(tǒng)采用C/S結(jié)構(gòu),客戶端與客戶端以及客戶端與服務(wù)器端需要傳送一些控制消息。</p><p><b>  2.設(shè)計的目的</b></p><p>  為了熟練掌握面向?qū)ο缶幊痰募记珊陀嫳局R,掌握面向?qū)ο缶幊痰幕舅悸泛头椒?,深刻感受編程的樂趣,以及解決廣大師院同學(xué)上網(wǎng)困難,網(wǎng)費透支,網(wǎng)速慢等困難,本小組采用了ja

23、va語言程序設(shè)計,編寫了一個“貴師院局域網(wǎng)聊天軟件”。</p><p>  局域網(wǎng)QQ軟件是一個即時通信工具。通過該網(wǎng)絡(luò)程序的編制和實踐,對自己所學(xué)習(xí)的知識進行了一次綜合和提高,有更深層次的理解和掌握,在這個過程中,激發(fā)自己的學(xué)習(xí)潛力,提高軟件開發(fā)的能力,加深對網(wǎng)絡(luò)協(xié)議和Windows環(huán)境下網(wǎng)絡(luò)編程的理解和掌握。</p><p>  網(wǎng)絡(luò)聊天成為現(xiàn)代人們生活必不可缺的一部分,它增強了人與人

24、之間的溝通,當(dāng)下的騰訊QQ為我國的大眾平臺,本次實驗將依照騰訊公司聊天工具QQ的設(shè)計,實現(xiàn)局域網(wǎng)網(wǎng)絡(luò)通信的基本功能,以便在不聯(lián)網(wǎng)的情況下用戶也可以進行通信。</p><p>  局域網(wǎng)聊天程序的實現(xiàn),主要為需要局域網(wǎng)內(nèi)聊天的用戶設(shè)計一個聊天平臺;本系統(tǒng)的目的是為了讓局域網(wǎng)內(nèi)的計算機用戶如寢室、辦公室能隨時隨地通過網(wǎng)絡(luò)進行交流。局域網(wǎng)聊天程序的設(shè)計目標(biāo)為一個高性能的,易于使用的,面向局域網(wǎng)的即時信息軟件。</

25、p><p><b>  3.設(shè)計的內(nèi)容</b></p><p>  局域網(wǎng)QQ軟件是一個即時通信工具。主要有以下幾個功能:</p><p><b>  (1)連接服務(wù)器;</b></p><p><b>  (2)用戶注冊;</b></p><p><

26、b> ?。?)用戶登錄;</b></p><p><b> ?。?)多帳號登錄;</b></p><p><b> ?。?)用戶聊天。</b></p><p>  本小組設(shè)計的聊天軟件的開發(fā)主要是用MyEclipse開發(fā)工具,在WINDOWS平臺上進行開發(fā),我們充分學(xué)習(xí)了JAVA Swing和awt界面

27、開發(fā)技術(shù),應(yīng)用Socket技術(shù)實現(xiàn)網(wǎng)絡(luò)的連接功能。軟件還涉及數(shù)據(jù)庫的設(shè)計,用于存放注冊用戶信息。C/S結(jié)構(gòu)是本軟件系統(tǒng)的體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和Server端來實現(xiàn),降低了系統(tǒng)的通訊開銷。</p><p>  在設(shè)計時,QQ用戶登錄框,我們要從兩個方面去考慮:一是QQ帳號,二是QQ密碼。就拿QQ帳號這一個輸入框,你怎么去考慮進行測試用例的設(shè)計?</p&

28、gt;<p>  目前,一個QQ服務(wù)器就允許有10萬以上個用戶同時登錄進行即時聊天,有多少個QQ帳號?。楷F(xiàn)在一個人還不只一個QQ號呢。 如果有很多QQ帳號的話,怎么進行測試呢?如果只測試幾個,覆蓋率不足;全部都測試一遍,不可能有那么長時間,而且太多了也不好實施。</p><p>  所以,QQ帳號的測試就陷入了僵局?我們先分析一下QQ帳號:由6-10位自然數(shù)構(gòu)成。一是位數(shù)長度有一定的限制,二是

29、類型是固定的,由0-9自然 數(shù)構(gòu)成。要想測試覆蓋全面,又要節(jié)省時間,最好的辦法是盡量簡化測試用例的設(shè)計。通過對以上QQ帳號的分析,可以看到有效的帳號有它自己的特點:長度與類 型要符合要求,這樣只要在騰訊公司的服務(wù)器上申請了帳號,就可以進行即時通信了。</p><p>  那么,這樣就有一個解決問題的方法了:進行類別的劃分。我們知道軟件的功能測試要進行兩個方面的測試:通過測試和失敗測試。要進行通過測試的話,帳號要符

30、合規(guī)范,要進行失敗測試的話,就要破壞帳號的規(guī)范。好,這樣的話,QQ帳號的測試我們就可以進行了。把QQ帳號進行分類:有效的和無效的。</p><p><b>  有效的:</b></p><p> ?。?)長度在6-10位之間</p><p> ?。?)類型是0-9自然數(shù)</p><p><b>  無效的:&l

31、t;/b></p><p><b> ?。?)長度小于6</b></p><p><b> ?。?)長度大于10</b></p><p><b> ?。?)負數(shù)</b></p><p><b> ?。?)小數(shù)</b></p><p

32、><b> ?。?)英文字母</b></p><p><b> ?。?)字符</b></p><p><b> ?。?)特殊字符</b></p><p><b>  中文</b></p><p> ?。?)編程語言中的轉(zhuǎn)義字符</p>

33、<p>  (2)空 這樣就可以看出來,有效的當(dāng)中只要取1或幾個就可以通過測試了,在無效的當(dāng)中取1或幾個就可以進行失敗測試了,所以這樣的方法很簡單、高效。</p><p><b>  4.概要設(shè)計</b></p><p>  4.1局域網(wǎng)聊天QQ的功能</p><p>  檢查登陸信息是否正確,并向客戶端返回登陸信息,如信息

34、正確。就將在線用戶發(fā)給該用戶,并將該用戶的狀態(tài)發(fā)給各在線用戶。同時在服務(wù)器端顯示出來。建立與服務(wù)器的連接并登陸,能顯示登陸錯誤信息。用戶登陸成功,將保存其號碼,以便下次登陸時,不必再輸入而可以直接選擇,顯示登陸時間。因為每個用戶的QQ號碼和密碼都是不相同的,因此必須要求后臺管理系統(tǒng)能根據(jù)系統(tǒng)需求,動態(tài)的、準(zhǔn)確的更新系統(tǒng)數(shù)據(jù)。</p><p>  4.2局域網(wǎng)聊天QQ的功能模塊如下:</p><

35、p> ?。?)服務(wù)器界面:如圖2</p><p><b>  圖2 服務(wù)器界面</b></p><p>  Fig2 The server interface</p><p>  (2)登錄界面:如圖3</p><p><b>  圖3 登錄界面</b></p><p&g

36、t;  Fig3 Login interface</p><p> ?。?)注冊界面:如圖4</p><p><b>  圖4 注冊界面</b></p><p>  Fig4 Registration interface</p><p> ?。?)找回密碼界面:如圖5</p><p><b&

37、gt;  圖5 找回密碼界面</b></p><p>  Fig5 Password retrieval interface</p><p> ?。?)好友列表界面:如圖6</p><p><b>  圖6 好友列表界面</b></p><p>  Fig6 Buddy list interface</

38、p><p> ?。?)聊天界面設(shè)計:如圖7</p><p><b>  圖7 聊天界面設(shè)計</b></p><p>  Fig7 The chat interface design</p><p>  5.詳細設(shè)計 </p><p>  5.1編寫服務(wù)器端程序</p>

39、<p><b>  5.1.1問題陳述</b></p><p> ?。?)接受用戶注冊信息并保存在數(shù)據(jù)庫里面。</p><p>  (2)能夠允許注冊過的用戶登錄聊天界面并可以聊天。</p><p>  (3)能夠接收私聊信息并發(fā)送給特定的用戶。</p><p> ?。?)服務(wù)器運行在自定義的端口9999上

40、。</p><p><b>  5.1.2解決方案</b></p><p>  5.1.2.1數(shù)據(jù)庫設(shè)計</p><p>  基于服務(wù)跨平臺運行的構(gòu)想,服務(wù)器數(shù)據(jù)庫使用Mysql。</p><p><b>  數(shù)據(jù)庫表:如圖9</b></p><p><b>  圖

41、9數(shù)據(jù)庫設(shè)計</b></p><p>  Fig9 Database design</p><p>  5.1.2.2用戶注冊</p><p>  (1)客戶端請求注冊:</p><p>  客戶端通過Register.java請求注冊,填寫注冊信息,并驗證密碼是否符合規(guī)定,是否兩次入一致,如不一致會提示重新輸入,最后將請求信息發(fā)

42、送給服務(wù)器端。</p><p> ?。?)服務(wù)器端響應(yīng):</p><p>  服務(wù)器端得到注冊請求會將對象輸入流轉(zhuǎn)化為文件輸出流,并反饋給客戶端。客戶端得到注冊信息后會在前臺填寫注冊信息,然后創(chuàng)建文件輸出流,再用對象輸出流包裝后寫入本地文件將其持久化。最后關(guān)閉對象輸出流和文件輸入流。</p><p>  (3)給客戶端返回信息:</p><p&g

43、t;  將用戶注冊成功或失敗的信息用打印流包裝Socket以后,輸出給客戶端注冊結(jié)果的詳細信息。</p><p>  5.1.2.3用戶登錄</p><p> ?。?)去數(shù)據(jù)庫讀數(shù)據(jù)庫數(shù)據(jù)</p><p> ?。?)驗證用戶名是否存在</p><p>  5.1.2.4 接收用戶聊天信息</p><p>  (1)接收

44、用戶聊天信息</p><p>  當(dāng)用戶發(fā)送聊天信息時,服務(wù)端將會收到客戶端用Socket傳輸過來的聊天信息對象,然后將其強制轉(zhuǎn)換為Chat對象。</p><p> ?。?)過濾用戶聊天內(nèi)容的非法信息</p><p>  分析聊天信息對象的聊天內(nèi)容,用語言過濾類將非法字符過濾掉。語言過濾的時候?qū)蜷_“badword.txt”文件,不允許出現(xiàn)的關(guān)鍵詞將會存儲在文件中

45、,關(guān)鍵字之間以逗號分割。當(dāng)聊天內(nèi)容中出現(xiàn)要過渡的關(guān)鍵字是將會被系統(tǒng)屏蔽,而聊天內(nèi)容正常發(fā)送給接收端。</p><p> ?。?)接收服務(wù)器端的系統(tǒng)消息</p><p>  當(dāng)有其他用戶登陸時,系統(tǒng)會給在線的所有用戶發(fā)送用戶登陸信息,并且通過服務(wù)器可以給各用戶發(fā)送系統(tǒng)消息。系統(tǒng)消息發(fā)出后,如再有登錄者也可以接收到系統(tǒng)消息。</p><p><b> ?。?)

46、返回給客戶端</b></p><p>  當(dāng)以上信息都封裝成功后,打開與客戶端連接的Socket的輸出流,然后再用ObjectOutputStream對象輸出流包裝后輸出給客戶端。</p><p>  5.2客戶端程序編寫</p><p>  程序?qū)⑼ㄟ^QQregister.java用戶注冊界面收集用戶的昵稱、姓名、性別、年齡、所在地。</p>

47、;<p><b>  (1)用戶登錄</b></p><p>  程序?qū)⑼ㄟ^QqClientLogin.java用戶登錄界面收集用戶userId。</p><p><b>  (2)好友列表</b></p><p>  當(dāng)用戶登錄成功后,用戶的登錄界面將會隱藏,然后創(chuàng)建用戶好友列表窗口,當(dāng)界面的標(biāo)題欄將會顯示

48、當(dāng)前用戶的userId,以防止機器上的用戶開多個賬號后分不清是哪個用戶登錄。第一行顯示好友的列表,第二行是陌生人列表,第三行是黑名單列白。好友列表里面顯示的是好友的userId。</p><p><b> ?。?)聊天室</b></p><p>  當(dāng)在好友界面里面點擊一個在線的好友時會彈出一個用戶與好友聊天的窗口。在界面上標(biāo)題欄上顯示好友userId的界面。用戶需要

49、發(fā)送信息時,在聊天內(nèi)容里寫下要發(fā)送的內(nèi)容,然后點擊發(fā)送就可一發(fā)送到好友的客戶端。</p><p><b>  6.總結(jié)</b></p><p>  Java向?qū)ο蟪绦蛟O(shè)計是一門應(yīng)用廣泛面實用性極強的程序設(shè)計語言。通過本次課程設(shè)計,我對項目的各個階段的任務(wù)有一定的了解。設(shè)計開始階段必須明確設(shè)計的目的與需求分析,總體設(shè)計要全面分析聊天室的系統(tǒng)構(gòu)建。</p>

50、<p>  客戶端發(fā)送信息時,將要發(fā)送的內(nèi)容(包括聊天信息標(biāo)識。聊天對象,聊天對象,狀態(tài)、表情、內(nèi)容)以及用戶列表通過消息框進行發(fā)送,發(fā)給某個用戶則是通過消息框發(fā)送信息。服務(wù)器端和客戶端接受消息時,先讀取聊天信息標(biāo)識,做出判斷,依次讀取、處理信息,并在界面上顯示。服務(wù)器端還要將準(zhǔn)備好的信息發(fā)送給指定的用戶。</p><p>  服務(wù)器端幀聽到有用戶下線后,講刪出用戶結(jié)點,并在界面顯示用戶下線,發(fā)送新用戶

51、列表。服務(wù)端停止服務(wù),也會向客服端發(fā)送服務(wù)器已關(guān)閉,客戶講不再可以聊天。</p><p>  在這過程中哪怕只是一點點的錯誤,卻要花出號幾個此傲視甚至幾天的時間才把它找出來。所以在這過程中我們不能急于求成,要很有耐心的反復(fù)調(diào)試程序,查資料,找出錯誤。</p><p><b>  7.參考資料 </b></p><p>  [1]胡伏湘

52、,雷軍環(huán).Java程序設(shè)計實用教程.清華大學(xué)出版社.2005年. </p><p>  [2]LemayLaura.21天學(xué)通Java.人民郵電出版社.2001年. </p><p>  [3]cays.horstmann.JAVA核心技術(shù)(第二版).電子工業(yè)出版社.2005年.  </p><p>  [4]陸光義.Jav

53、a游戲編程導(dǎo)學(xué).清華大學(xué)出版社.2004年. </p><p>  [5]郭謙.Java程序性能優(yōu)化.鐵路計算機應(yīng)用.2003年. </p><p>  [6]Y.DanielLiang.Java語言程序設(shè)計 基礎(chǔ)篇.機械工業(yè)出版社.2011年.</p><p>  [7]Y.DanielLiang.Java語言程序設(shè)計 進階篇.機械工業(yè)出版社.2011年

54、.</p><p><b>  8.附錄</b></p><p> ?。?)啟動服務(wù)器MyServerFrame.java代碼:</p><p>  public class MyServerFrame extends JFrame implements ActionListener{ </p><p>  JPanel

55、 jp1;</p><p>  JButton jb1,jb2;</p><p>  public static void main(String[] args) {</p><p>  MyServerFrame f=new MyServerFrame();</p><p><b>  }</b></p>

56、<p>  public MyServerFrame()</p><p><b>  {</b></p><p>  jp1=new JPanel();</p><p>  jb1=new JButton("啟動服務(wù)器");</p><p>  jb1.addActionListener(

57、this);</p><p>  jb2=new JButton("關(guān)閉服務(wù)器");</p><p>  jp1.add(jb1);</p><p>  jp1.add(jb2);</p><p>  this.add(jp1);</p><p>  this.setSize(500,400);&l

58、t;/p><p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  this.setVisible(true);</p><p><b>  }</b></p><p>  public void actionPerformed(ActionEv

59、ent e) {</p><p>  // TODO Auto-generated method stub</p><p>  if(e.getSource()==jb1)</p><p>  {new MyQqServer();}}}</p><p> ?。?)QQ注冊界面QQregister.java代碼:</p><

60、p>  public class QQregister extends JFrame implements ActionListener{</p><p><b>  static {</b></p><p><b>  try{</b></p><p>  Class.forName("com.mysql

61、.jdbc.Driver");</p><p>  System.out.println("Success loading Driver!");</p><p><b>  }</b></p><p>  catch(Exception e){</p><p>  e.printStackT

62、race();</p><p><b>  }}</b></p><p>  String url = "jdbc:mysql://localhost:3306/qqdb";</p><p>  String userName = "root";</p><p>  String

63、password = "111111";</p><p>  Connection conn=null;</p><p>  Statement sql;</p><p>  String userId = null;</p><p>  JLael jbl1,jp2_jl1,jp2_jl2,jp2_jl3,jp2_jl4

64、,jp2_jl5,jp2_jl6,jp2_jl7;</p><p>  JPanel jp1,jp2;</p><p>  JTextField jp2_jtf11,jp2_jtf12,jp2_jtf3,jp2_jtf4;</p><p>  JPasswordField jp2_jpf1,jp2_jpf2;</p><p>  JButto

65、n jb1;</p><p>  JRadioButton jb2,jb3;</p><p><b>  Box b1;</b></p><p>  ButtonGroup btg;</p><p><b>  char b;</b></p><p>  public sta

66、tic void main(String[] args) {</p><p>  QQregister f=new QQregister();</p><p><b>  }</b></p><p>  public QQregister()</p><p>  {setLayout(new BorderLayout()

67、);</p><p><b>  //處理北部</b></p><p>  jbl1=new JLabel(new ImageIcon("image/6.png"));</p><p><b>  //處理中部</b></p><p>  jp2=new JPanel(new G

68、ridLayout(7,2));</p><p>  jp2_jl1=new JLabel("昵稱:",JLabel.CENTER);</p><p>  jp2_jl2=new JLabel("姓名:",JLabel.CENTER);</p><p>  jp2_jl3=new JLabel("密碼:",

69、JLabel.CENTER);</p><p>  jp2_jl4=new JLabel("確認密碼:",JLabel.CENTER);</p><p>  jp2_jl5=new JLabel("性別:",JLabel.CENTER);</p><p>  b1=Box.createHorizontalBox();</

70、p><p>  jb2=new JRadioButton("男");</p><p>  jb3=new JRadioButton("女");</p><p>  b1.add(jb2);</p><p>  b1.add(jb3);</p><p>  btg=new Button

71、Group();</p><p>  btg.add(jb2);</p><p>  btg.add(jb3);</p><p>  jp2_jl6=new JLabel("年齡:",JLabel.CENTER);</p><p>  jp2_jl7=new JLabel("所在地:",JLabel.C

72、ENTER);</p><p>  jp2_jtf3=new JTextField(15);</p><p>  jp2_jtf11=new JTextField(15);</p><p>  jp2_jtf12=new JTextField(15);</p><p>  jp2_jtf4=new JTextField(15);</p&

73、gt;<p>  jp2_jpf1=new JPasswordField();</p><p>  jp2_jpf2=new JPasswordField();</p><p>  jp2.add(jp2_jl1);</p><p>  jp2.add(jp2_jtf11);</p><p>  jp2.add(jp2_jl2)

74、;</p><p>  jp2.add(jp2_jtf12);</p><p>  jp2.add(jp2_jl3);</p><p>  jp2.add(jp2_jpf1);</p><p>  jp2.add(jp2_jl4);</p><p>  jp2.add(jp2_jpf2);</p><

75、;p>  jp2.add(jp2_jl5);</p><p>  jp2.add(b1);</p><p>  jp2.add(jp2_jl6);</p><p>  jp2.add(jp2_jtf4);</p><p>  jp2.add(jp2_jl7);</p><p>  jp2.add(jp2_jtf3

76、);</p><p><b>  //處理南部</b></p><p>  jp1=new JPanel();</p><p>  jb1=new JButton("立即注冊");</p><p>  jb1.setForeground(Color.white);</p><p&g

77、t;  jb1.setBackground(Color.green);</p><p>  jb1.addActionListener(this);</p><p>  jp1.add(jb1);</p><p>  this.add(jbl1,BorderLayout.NORTH);</p><p>  this.add(jp2,Borde

78、rLayout.CENTER);</p><p>  this.add(jp1,BorderLayout.SOUTH);</p><p>  this.setSize(346,365);</p><p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  this.

79、setVisible(true);</p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e) {</p><p>  if(e.getSource()==jb2)</p><p><b>  {</b></

80、p><p><b>  b='男';</b></p><p><b>  }</b></p><p>  if(e.getSource()==jb3)</p><p><b>  {</b></p><p><b>  b='

81、;女';</b></p><p><b>  }</b></p><p>  if(e.getSource()==jb1){ </p><p><b>  try{</b></p><p>  Class.forName("com.mysql.jdbc.Driver&q

82、uot;);</p><p>  Conn=DriverManager.getConnection(url,userName, password);</p><p>  sql=conn.createStatement();</p><p>  String id="select max(userId)+1 from users";</p&

83、gt;<p>  java.sql.ResultSet rs=sql.executeQuery(id);</p><p>  while(rs.next())</p><p><b>  {</b></p><p>  userId=rs.getString(1); System.out.println(userId+&

84、quot;\t");</p><p><b>  }</b></p><p>  String s1="'"+userId+"'";</p><p>  String s2="'"+new String(jp2_jpf1.getPassword())+

85、"'"; </p><p>  String s3="'"+jp2_jtf11.getText().trim()+"'"; </p><p>  String s4="'"+jp2_jtf3.getText().trim()+"'";</p>

86、;<p>  String s6="'"+jp2_jtf12.getText().trim()+"'"; </p><p>  String s5="'"+b+"'";</p><p>  String s7="'"+jp2_jtf4.g

87、etText().trim()+"'";</p><p>  String temp="INSERT INTO users VALUES ("+s1+","+s2+","+s3+","+s4+","+s5+","+s6+","+s7+")

88、"; </p><p>  int count=sql.executeUpdate(temp);</p><p>  conn=DriverManager.getConnection(url, userName, password); </p><p>  conn.close();</p><p>  }catch(SQLExce

89、ption e1){</p><p>  System.out.println("fails");</p><p>  e1.printStackTrace();</p><p>  } catch (ClassNotFoundException e1) {</p><p>  e1.printStackTrace();&

90、lt;/p><p><b>  }</b></p><p>  JOptionPane.showMessageDialog(this,"你已成功注冊!"+"你的QQ號為"+userId,"提示對話框",JOptionPane.INFORMATION_MESSAGE); </p><p>&

91、lt;b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)QQ登陸界面QqClientLogin.java代碼:</p><p>  public class QqClientLogin extends J

92、Frame implements ActionListener,MouseListener{</p><p>  JLabel jbl1;</p><p>  JPanel jp1;</p><p>  JButton jp1_jb1,jp1_jb2,jp1_jb3;</p><p>  JPanel jp2;</p><

93、p>  JLabel jp2_jbl1,jp2_jbl2,jp2_jbl3,jp2_jbl4,jp2_jb1;</p><p>  JTextField jp2_jtf;</p><p>  JPasswordField jp2_jpf;</p><p>  JCheckBox jp2_jcb1,jp2_jcb2;</p><p>  

94、public static void main(String[] args) {</p><p>  QqClientLogin j=new QqClientLogin();</p><p><b>  }</b></p><p>  public QqClientLogin()</p><p><b>  {

95、</b></p><p>  setLayout(new BorderLayout());</p><p><b>  //處理北部</b></p><p>  jbl1=new JLabel(new ImageIcon("image/1.png"));</p><p><b>

96、  //處理中部</b></p><p>  jp2=new JPanel(new GridLayout(3,3));</p><p>  jp2_jbl1=new JLabel("QQ號碼",JLabel.CENTER);</p><p>  jp2_jbl2=new JLabel("QQ密碼",JLabel.C

97、ENTER);</p><p>  jp2_jbl3=new JLabel("忘記密碼",JLabel.CENTER);</p><p>  jp2_jbl3.addMouseListener(this);</p><p>  jp2_jbl3.setForeground(Color.BLUE);</p><p>  jp

98、2_jb1=new JLabel("注冊賬號",JLabel.CENTER);</p><p>  jp2_jb1.setForeground(Color.BLUE);</p><p>  jp2_jb1.addMouseListener(this);</p><p>  jp2_jtf=new JTextField();</p>

99、<p>  jp2_jpf=new JPasswordField();</p><p>  jp2_jcb1=new JCheckBox("隱身登陸");</p><p>  jp2_jcb2=new JCheckBox("記住密碼");</p><p>  //把控件按順序加入到j(luò)p2</p><

100、;p>  jp2.add(jp2_jbl1);</p><p>  jp2.add(jp2_jtf);</p><p>  jp2.add(jp2_jb1);</p><p>  jp2.add(jp2_jbl2);</p><p>  jp2.add(jp2_jpf);</p><p>  jp2.add(jp

101、2_jbl3);</p><p>  jp2.add(jp2_jcb1);</p><p>  jp2.add(jp2_jcb2);</p><p><b>  //創(chuàng)建選項卡窗口</b></p><p><b>  //處理南部</b></p><p>  jp1=new

102、JPanel();</p><p>  jp1_jb1=new JButton("登錄");</p><p>  //響應(yīng)用戶點擊登錄</p><p>  jp1_jb1.addActionListener(this);</p><p>  jp1_jb2=new JButton("取消");</

103、p><p>  jp1.add(jp1_jb1);</p><p>  jp1.add(jp1_jb2);</p><p>  this.add(jp1,BorderLayout.SOUTH);</p><p>  this.add(jp2,BorderLayout.CENTER);</p><p>  this.add(

104、jbl1,BorderLayout.NORTH);</p><p>  this.setSize(332,265);</p><p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  this.setVisible(true);</p><p><b>

105、  }</b></p><p>  public void actionPerformed(ActionEvent e) {</p><p>  // TODO Auto-generated method stub</p><p>  //如果用戶點擊登錄</p><p>  if(e.getSource()==jp1_jb1)&

106、lt;/p><p><b>  {</b></p><p>  QqClientUser qqClientUser=new QqClientUser();</p><p>  User u=new User();</p><p>  u.setUserId(jp2_jtf.getText().trim());</p&g

107、t;<p>  u.setPasswd(new String(jp2_jpf.getPassword()));</p><p>  if(qqClientUser.checkUser(u))</p><p><b>  {</b></p><p><b>  try {</b></p><

108、p>  //把創(chuàng)建好友列表的語句提前</p><p>  QQFriendList qqList=new QQFriendList(u.getUserId());</p><p>  ManagerQqFriendList.addQQFriendList(u.getUserId(), qqList);</p><p>  //發(fā)送一個要求返回在線好友的請求包。

109、</p><p>  ObjectOutputStream oos=new ObjectOutputStream(ManageClientConServerThread.getClientConServerThread(u.getUserId()).getS().getOutputStream()) ;</p><p>  //做一個message</p><p>

110、;  Message m=new Message();</p><p>  m.setMesType(MessageType.message_get_onLineFriend);</p><p>  //指明我要的是這個qq好友的情況。</p><p>  m.setSender(u.getUserId());</p><p>  oos.w

111、riteObject(m);</p><p>  } catch (Exception e1) {</p><p>  e1.printStackTrace();</p><p><b>  }</b></p><p><b>  //關(guān)閉掉登錄界面</b></p><p>

112、  this.dispose();</p><p><b>  }else</b></p><p><b>  {</b></p><p>  JOptionPane.showMessageDialog(this,"用戶名密碼錯誤");</p><p><b>  }&

113、lt;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public void mouseClicked(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</

114、p><p>  if(e.getSource()==jp2_jb1)</p><p><b>  {</b></p><p>  new QQregister();</p><p><b>  }</b></p><p>  if(e.getSource()==jp2_jbl3)

115、</p><p><b>  {</b></p><p>  new QQfoundpassword();</p><p><b>  }</b></p><p><b>  }</b></p><p>  public void mouseEntere

116、d(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</p><p>  JLabel j1=(JLabel)e.getSource();</p><p>  j1.setForeground(Color.RED);</p><p><b>  }</b&

117、gt;</p><p>  public void mouseExited(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</p><p>  JLabel j1=(JLabel)e.getSource();</p><p>  j1.setForeground(Col

118、or.BLUE);</p><p><b>  }</b></p><p>  public void mousePressed(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }</b></

119、p><p>  public void mouseReleased(MouseEvent e) {</p><p>  // TODO Auto-generated method stub</p><p><b>  }}</b></p><p> ?。?)好友列表QQFriendList.java代碼:</p>

120、<p>  public class QQFriendList extends JFrame implements ActionListener,MouseListener{</p><p><b>  static {</b></p><p><b>  try{</b></p><p>  Class.

121、forName("com.mysql.jdbc.Driver");</p><p>  System.out.println("Success loading Driver!");</p><p><b>  }</b></p><p>  catch(Exception e){</p>&

122、lt;p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p>  String url = "jdbc:mysql://localhost:3306/qqdb";</p><p>  

123、String userName = "root";</p><p>  String password = "111111";</p><p>  Connection conn=null;</p><p>  Statement sql;</p><p>  String userId = null;

124、</p><p>  JPanel jphy1,jphy2,jphy3;</p><p>  JButton jphy_jb1,jphy_jb2,jphy_jb3;</p><p>  JScrollPane jsp1;</p><p>  private String owner;</p><p>  //處理第二張

125、卡片(陌生人)</p><p>  JPanel jpmsr1,jpmsr2,jpmsr3;</p><p>  JButton jpmsr_jb1,jpmsr_jb2,jpmsr_jb3;</p><p>  JScrollPane jsp2;</p><p>  JLabel []jbls;</p><p>  C

126、ardLayout c1;</p><p>  public static void main(String[] args) {</p><p>  //QQFriendList f=new QQFriendList();</p><p><b>  }</b></p><p>  //更新在線好友的情況</p&g

127、t;<p>  public void updateFriend(Message m)</p><p><b>  {</b></p><p>  String onLineFriend[]=m.getCon().split(" ");</p><p><b>  try{</b><

溫馨提示

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

評論

0/150

提交評論