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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  課 程 設 計 報 告</p><p>  二○一三 年 七 月</p><p> 課 程 名 稱:《面向對象程序設計》</p><p> 課程設計題目:貴師院局域網(wǎng)聊天軟件</p><p> 姓 名:</p><p> 學 號:</p><p&g

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

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

4、;<p><b>  4.詳細設計5</b></p><p>  4.1編寫服務器端程序5</p><p>  4.1.1問題陳述5</p><p>  4.1.2解決方案6</p><p>  4.2客戶端程序編寫7</p><p><b>  5.總結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)絡的依賴越來越多,越來越離不開網(wǎng)絡,由此而產生的聊天

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

7、,我們充分學習了JAVA Swing和awt界面開發(fā)技術,使自己在界面應用和界面布局方面得到更多的實踐,應用Socket技術實現(xiàn)網(wǎng)絡的連接功能,對網(wǎng)絡的實現(xiàn)和通信方面有了進一步的理解,多線程方面的應用,使得客戶端和服務端可以實現(xiàn)多任務功能。</p><p>  關鍵詞: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ǎng)民使用較多的主要有以下服務:電子郵件(E-mail),文件傳輸(網(wǎng)絡通訊),遠程登錄(Telnet),萬維網(wǎng)(world wide web),新聞組和電子公告牌(BBS),聊天系統(tǒng)(Chat)等。Internet如此流行,其中網(wǎng)絡通訊功不可沒。成錢上網(wǎng)的數(shù)據(jù),軟件分布在世界各地,有了網(wǎng)絡通訊,足不出戶,只要敲幾個字,就能輕而易舉地

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

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

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

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

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

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

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

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

22、上。</p><p>  由于系統(tǒng)采用C/S結構,客戶端與客戶端以及客戶端與服務器端需要傳送一些控制消息。</p><p><b>  2.設計的目的</b></p><p>  為了熟練掌握面向對象編程的技巧和計本知識,掌握面向對象編程的基本思路和方法,深刻感受編程的樂趣,以及解決廣大師院同學上網(wǎng)困難,網(wǎng)費透支,網(wǎng)速慢等困難,本小組采用了ja

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

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

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

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

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

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

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

30、合規(guī)范,要進行失敗測試的話,就要破壞帳號的規(guī)范。好,這樣的話,QQ帳號的測試我們就可以進行了。把QQ帳號進行分類:有效的和無效的。</p><p><b>  有效的:</b></p><p>  (1)長度在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>  (3)負數(shù)</b></p><p><b> ?。?)小數(shù)</b></p><p

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

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

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

35、p> ?。?)服務器界面:如圖2</p><p><b>  圖2 服務器界面</b></p><p>  Fig2 The server interface</p><p> ?。?)登錄界面:如圖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>  (6)聊天界面設計:如圖7</p><p><b>  圖7 聊天界面設計</b></p><p>  Fig7 The chat interface design</p><p>  5.詳細設計 </p><p>  5.1編寫服務器端程序</p>

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

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

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

42、送給服務器端。</p><p> ?。?)服務器端響應:</p><p>  服務器端得到注冊請求會將對象輸入流轉化為文件輸出流,并反饋給客戶端??蛻舳说玫阶孕畔⒑髸谇芭_填寫注冊信息,然后創(chuàng)建文件輸出流,再用對象輸出流包裝后寫入本地文件將其持久化。最后關閉對象輸出流和文件輸入流。</p><p> ?。?)給客戶端返回信息:</p><p&g

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

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

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

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

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

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

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

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

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

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

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

54、.</p><p><b>  8.附錄</b></p><p> ?。?)啟動服務器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("啟動服務器");</p><p>  jb1.addActionListener(

57、this);</p><p>  jb2=new JButton("關閉服務器");</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>  //把控件按順序加入到jp2</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>  //響應用戶點擊登錄</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>  //關閉掉登錄界面</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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論