2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  湖北大學知行學院</b></p><p>  本科畢業(yè)論文(設(shè)計)</p><p>  題 目 基于JAVA的聊天室設(shè)計與實現(xiàn) </p><p>  計算機與信息工程 系 計算機科學與技術(shù) 專業(yè)</p><p>  學 號 0811050

2、002 </p><p>  學生姓名 萬小龍 </p><p>  指導教師 尤新華 </p><p>  起訖日期 2011. 10 ~ 2012. 4 </p><p>  

3、工作地點 湖北大學知行學院 </p><p><b>  目 錄</b></p><p><b>  緒論1</b></p><p>  1課題總體介紹2</p><p>  1.1項目開發(fā)的目的2</p><p>  1.2項

4、目開發(fā)的意義2</p><p><b>  2總體設(shè)計3</b></p><p>  2.1應用需求分析3</p><p>  2.2模塊具體分析4</p><p>  2.2.1 服務器端模塊分析4</p><p>  2.2.2 客戶端模塊分析4</p><

5、;p>  2.2.3 數(shù)據(jù)庫模塊分析4</p><p>  2.3聊天室的具體實現(xiàn)5</p><p>  2.3.1 登錄界面的實現(xiàn)5</p><p>  2.3.2注冊界面的實現(xiàn)5</p><p>  2.3.3 聊天界面的實現(xiàn)5</p><p>  2.3.4服務器界面的實現(xiàn)6</p>

6、;<p>  2.3.5 服務器驗證登錄的實現(xiàn)6</p><p>  2.3.6 聊天功能的實現(xiàn)6</p><p>  3聊天室的詳細設(shè)計7</p><p>  3.1開發(fā)環(huán)境的配置7</p><p>  3.2開發(fā)的過程7</p><p>  3.3聊天室功能的測試8</p&g

7、t;<p><b>  結(jié) 論10</b></p><p><b>  參考文獻11</b></p><p><b>  致 謝12</b></p><p><b>  附 錄13</b></p><p>  基于JAVA的聊天室設(shè)計

8、與實現(xiàn)</p><p><b>  摘 要</b></p><p>  隨著網(wǎng)絡(luò)的快速發(fā)展,網(wǎng)絡(luò)儼然已經(jīng)成為了我們了解世界和關(guān)注世界各地新動態(tài)的一個主要途徑了。因此伴隨著網(wǎng)絡(luò)而必然產(chǎn)生的一些軟件也越來越多,而能夠?qū)崿F(xiàn)即時通信的聊天軟件也是隨之誕生,且深受用戶們喜愛。而MSN,ICQ,還有國內(nèi)的QQ等大型聊天軟件也成為了人們網(wǎng)絡(luò)生活中的一部分。</p>

9、<p>  本文中主要闡述的是java聊天室的設(shè)計過程,以及聊天功能的實現(xiàn)。前臺采用的java語言采用C/S架構(gòu)來設(shè)計聊天室,而后臺則采用SQL Server2005 創(chuàng)建的數(shù)據(jù)庫和表格來管理用戶的信息。然后利用這2種工具的結(jié)合來完成聊天室的設(shè)計。</p><p>  【關(guān)鍵詞】網(wǎng)絡(luò) 聊天室 即時通信 JAVA</p><p>  Chat room Design with

10、 realization based on JAVA</p><p><b>  Abstract</b></p><p>  With the rapid development of network, the network has become in a major way for us to understand the world . So with the

11、 network and inevitable has some software is also more and more, and can realize instant communication chat software is also comes and loved by uses. So MSN, ICQ, QQ and other large chat software has become a part of the

12、 people’s life for network.</p><p>  This article mainly elaborated in the chat room of the design process is Java, and the realization of the function of chat. The front desk of the Java language using C/S

13、architecture to design a chat room, and the back desk, using the database and SQL Server2005 create form to manage customer information. Finally, using the combination of these two tools to complete the design of the cha

14、t room.</p><p>  【Key words】network Chat room Instant communication JAVA</p><p><b>  緒論</b></p><p>  隨著互聯(lián)網(wǎng)逐步普及,人們的生活和工作也越來越離不開信息網(wǎng)絡(luò)的支持,而聊天室是人們最常見,最直接的網(wǎng)上交流的方式。</p>

15、;<p>  本系統(tǒng)利用Java實現(xiàn)基于C/S模式的聊天程序。聊天室共分為服務器端和客戶端兩部分,服務器端程序主要負責偵聽客戶端發(fā)來的消息,客戶端需登錄到服務端才可以實現(xiàn)正常的聊天功能。服務器端的主要實現(xiàn)在特定端口上進行偵聽,等待客戶端連接;用戶可以配置服務端的偵聽端口,默認端口為9999;向已經(jīng)連接到服務端的用戶發(fā)送系統(tǒng)消息。客戶端的主要功能為:連接到已經(jīng)開啟服務的服務端;用戶可以配置要連接的端口號;用戶可以配置連接后顯

16、示的用戶的賬號;當服務器端開啟的話,用戶可以隨時登錄,用戶可以向所有人或某一個人發(fā)送消息。從而客戶與客戶之間以及客戶與服務器之間可以簡單方便地進行通信。</p><p>  主要使用Sun公司提供Java語言、jdk開發(fā)環(huán)境及套接字通信socket技術(shù),并利用MyEclipse來進行開發(fā),來是實現(xiàn)對服務器端和客戶端之間相互交流的功能。</p><p><b>  課題總體介紹&l

17、t;/b></p><p><b>  項目開發(fā)的目的</b></p><p>  本課題的研究主要目的是可以加深我們對java編程思想的理解,讓我們養(yǎng)成一個良好的項目開發(fā)的編程習慣,同時也是對我們所學的java編程的一個綜合提高。而對聊天室的開發(fā)也可以更好的理解C/S架構(gòu)開發(fā)的原理,能夠更加熟練的使用多線程、異常處理、Socket編程、輸入輸出流的使用。<

18、;/p><p><b>  項目開發(fā)的意義 </b></p><p>  根據(jù)當前網(wǎng)絡(luò)的需求,網(wǎng)絡(luò)聊天越來越受各種網(wǎng)民所青睞。因此開發(fā)網(wǎng)絡(luò)聊天是相當有必要,而且在網(wǎng)站內(nèi)增加聊天功能,它不僅可以提高網(wǎng)站的訪問量,同時可以留著訪客,更重要的是讓訪客透過聊天室實時的互相交流。而本人也學習過JAVA語言,對網(wǎng)絡(luò)編程也較有興趣,為了更好的考驗自己對JAVA語言的掌握程度,本人就決定

19、以《Java聊天室》為畢業(yè)設(shè)計,希望通過這一次能進一步提高本人的網(wǎng)絡(luò)開發(fā)編程的能力。</p><p><b>  總體設(shè)計</b></p><p><b>  應用需求分析</b></p><p>  利用Java實現(xiàn)基于C/S模式的聊天程序,聊天系統(tǒng)不外乎兩個方面,服務器端和客戶端。服務器端程序主要負責偵聽客戶端發(fā)來的消

20、息,客戶端需登錄到服務端才可以實現(xiàn)正常的聊天功能。簡單分析一下兩個方面所要完成的任務,對設(shè)計這個程序來說,等于完成了一半。首先來看一下服務器端的任務:</p><p>  服務器端的主要功能如下:</p><p> ?。?)在特定端口上進行偵聽,等待客戶端連接。</p><p> ?。?)用戶可以配置服務端的偵聽端口,默認端口為9999。</p>&l

21、t;p> ?。?)向已經(jīng)連接到服務端的用戶發(fā)送系統(tǒng)消息。</p><p>  (4)可以啟動和關(guān)閉服務器。</p><p>  以上就是服務器端最主要任務。不難看出,服務器端的任務并不復雜。</p><p>  客戶端的主要功能如下:</p><p>  (1)連接到已經(jīng)開啟服務的服務端。</p><p> ?。?/p>

22、2)用戶可以注冊賬號。</p><p>  (3)用戶可以通過注冊好的賬號登陸聊天室。</p><p> ?。?)用戶可以向所有人或某一個人發(fā)送消息。</p><p>  相對服務器而言,客戶端的任務也不很復雜,有了以上的簡單分析,可以知道,解決上述問題,即完成了該聊天系統(tǒng)的核心。</p><p>  聊天室設(shè)計好了,同時還需要數(shù)據(jù)庫的支持,

23、數(shù)據(jù)庫的功能就是對用戶注冊的賬號和密碼進行管理,當用戶登錄時可以進行驗證。</p><p><b>  模塊具體分析</b></p><p>  模塊分析示意圖如圖2.1所示:</p><p><b>  圖2.1模塊分析</b></p><p>  2.2.1 服務器端模塊分析</p>

24、;<p>  服務器與客戶間通過套接口Socket(TCP)連接。在java中使用套接口相當簡單,Java API為處理套接口的通信提供了一個類java.net.Socket,使得編寫網(wǎng)絡(luò)應用程序相對容易。服務器采用多線程以滿足多用戶的請求,并通過創(chuàng)建一個ServerSocket對象來監(jiān)聽來自客戶的連接請求,默認端口為8888,然后無限循環(huán)調(diào)用accept()方法接受客戶程序的連接。</p><p>

25、;  2.2.2 客戶端模塊分析</p><p>  客戶通過Socket(InetAddress,port)建立與服務器的連接。服務器與客戶都通過構(gòu)造對象流來建立輸入輸出流,然后雙方通過該輸入輸出流來相互傳遞信息,一旦收到客戶方的連接請求,服務器accept()方法返回一個新建的Socket對象??蛻舳巳缓笙蚍掌靼l(fā)送消息,服務器收到來自客戶的請求后,針對不同的消息處理請求。</p><p&

26、gt;  2.2.3 數(shù)據(jù)庫模塊分析</p><p>  數(shù)據(jù)庫用于管理用戶的信息,當用戶在注冊界面成功注冊了賬號,就存在數(shù)據(jù)庫的用戶表里面,當新用戶注冊時,將新賬號與數(shù)據(jù)庫中的賬號比較來驗證賬號是否純在,也可以驗證賬號密碼是否正確。</p><p><b>  聊天室的具體實現(xiàn)</b></p><p>  2.3.1 登錄界面的實現(xiàn)</

27、p><p>  登陸界面如圖2.2所示:</p><p>  圖2.2聊天室的登陸界面</p><p>  該界面用到了3個Jlabel,分別是“聊天室登錄器”、“賬號”、“密碼”。用到了1個JTextFilet,1個JpasswordField,和2個Jbuttton(登錄和注冊)。然后用網(wǎng)格包布局來管理這些控件。當填寫了正確的賬號和密碼后點擊登錄按鈕可以進入聊天界

28、面,錯誤則提示“用戶名或密碼錯誤”:點擊注冊按鈕則可以進入注冊賬號的界面。</p><p>  2.3.2注冊界面的實現(xiàn)</p><p>  注冊界面的實現(xiàn)如圖2.3所示:</p><p><b>  圖2.3注冊界面</b></p><p>  該界面主要用的了4個Jlabel分別是4個填寫文字的部分,然后一個Jte

29、xtField和2個JpasswordField,用來填寫要注冊的賬號和密碼。這些控件被放入第一個Jpanel中,然后放于Jframe的居中部分。然后2個按鈕放在了第二個jpanel中,放于jframe的南邊。</p><p>  2.3.3 聊天界面的實現(xiàn)</p><p>  聊天界面的實現(xiàn)如圖2.4所示:</p><p><b>  圖2.4聊天界面

30、</b></p><p>  該界面的控件很少,用一個JtextArea來顯示用戶們的聊天內(nèi)容,該空間放在了居中部分。然后是在南邊有一個JtextField用來填寫用戶想說的話,然后點擊唯一的Jbutton(發(fā)送),就可以發(fā)送自己說的話了。</p><p>  2.3.4服務器界面的實現(xiàn)</p><p>  服務器界面的實現(xiàn)如圖2.5所示:</p&

31、gt;<p>  圖2.5服務器界面</p><p>  該界面只用到了2個Jbutton,用來啟動和關(guān)閉服務器。</p><p>  2.3.5 服務器驗證登錄的實現(xiàn)</p><p>  當用戶點擊了登錄界面的登錄按鈕之后,用戶填寫的賬號和密碼會發(fā)送到服務器進行驗證,如果賬號密碼正確,則向客戶端發(fā)送登錄成功的信息;如果賬號密碼不正確,則向客戶端發(fā)送

32、信息并以客戶端為父窗口彈出子窗口提示說:“賬號或密碼錯誤!”。</p><p>  2.3.6 聊天功能的實現(xiàn)</p><p>  用戶在聊天界面點擊發(fā)送按鈕后,消息發(fā)送到服務器,服務器的消息進行分析,如果是私聊,分析出發(fā)送這和接收者后,將消息轉(zhuǎn)發(fā)給接收者。如果是發(fā)送給所有人,就遍歷管理服務器連接所有人線程的hashmap,得到連接所有人的線程,將消息發(fā)送給所有人,而客戶端則遍歷管理所有人

33、的聊天界面的hashmap,得到所有人的聊天界面,將消息發(fā)送到所有人的界面上。</p><p><b>  聊天室的詳細設(shè)計</b></p><p><b>  開發(fā)環(huán)境的配置</b></p><p>  JDK(Java Development kit)是 SUN公司提供的一套Java開發(fā)環(huán)境,通常稱之為它主要包括了一些

34、常用的JDK工具、執(zhí)行時需要的函數(shù)庫、與C連接時所需的文件及一些Java應用程序范例等。</p><p>  JDK可以從SUN公司的網(wǎng)站http://java.sun.com或國內(nèi)一些常用的資料下載網(wǎng)站免費下載而得。下載完畢便可安裝JDK。</p><p>  在安裝完JDK之后,必須配置環(huán)境變量classpath和path,JDK才能夠正常運行。</p><p>

35、;  ①.在環(huán)境變量中新建名為classpath的環(huán)境變量(如已經(jīng)存在則只要修改),值為:E:\Program Files\Java\jdk1.6.0_10\lib</p><p> ?、?classpath指明Java虛擬機要裝載類的路徑,“.” 表示當前目錄 </p><p>  ③.在環(huán)境變量中新建名為path的環(huán)境變量(如已經(jīng)存在則只要修改),值為:E:\Program Files

36、\Java\jdk1.6.0_10\jre\bin</p><p> ?、?path指明了操作系統(tǒng)查找JDK工具如javac、java等文件的路徑</p><p>  Sun公司為程序開發(fā)者提供了編譯、測試、執(zhí)行程序等一套完備的工具體系,它們被集中存放在主目錄的bin目錄下。</p><p><b>  開發(fā)的過程</b></p>

37、<p>  開發(fā)的過程不是盲目的,要有清晰的思路。分好工作區(qū),建好要用到的包,如:界面就寫在名為view的包里面,后臺運行的類就寫在model包里面等。</p><p>  類視圖1如圖3.1所示:</p><p><b>  圖3.1類視圖1</b></p><p>  這是服務器端的開發(fā),model層中的類是在后臺運行的程序,

38、view層中的類是服務器界面,啟動服務器其實是調(diào)用的Server類,這個類才是真正的服務器。而SerConClientThread類是服務器連接客戶端的線程類,它的作用是接收客戶端發(fā)來的消息并且轉(zhuǎn)發(fā)出去。ManageClientThread類是管理服務器連接客戶端線程的類,這個類用HashMap將服務器連接客戶端的所有線程管理了起來,方便調(diào)用。</p><p>  同樣在客戶端的開發(fā)也是有良好的分層結(jié)構(gòu),如圖3.

39、2所示:</p><p><b>  圖3.2類視圖2</b></p><p>  其中view層是3個界面類,Chat是聊天界面類,ClientLogin是登陸界面類,Register是登陸界面類。在這里我給大家介紹一下這些類得功能,在model層中的ClientConServer類是客戶端第一次連接服務器要調(diào)用的類,也就是登陸時要調(diào)用的類,將登陸的信息發(fā)給服務器

40、驗證,同時創(chuàng)建一個連接服務器的線程。而ClientUser類是客戶端用戶類,當用戶點擊登錄是會調(diào)用這個類,然后由這個類調(diào)用ClientConServer類。 </p><p>  在tools層中,這里和之前服務器端的model基本上是一個原理,服務器端管理了服務器連接客戶端的線程,這里也是用ManageClientConServerThread類來管理客戶端連接服務器端的線程的類ClientConServerT

41、hread。這里的客戶端連接服務器的線程類ClientConServerThread是用來讀取從服務器發(fā)來的消息,并顯示數(shù)來的。ManageChat則是將所有用戶的聊天界面放在一個hashmap里管理起來,當遍歷這個hashmap時,就可以將消息顯示在所有用戶的聊天界面了。然后可以看見在服務器端和客戶端都有一個common包,這個是公共包,里面放的是一些javaBean,里面有一些無參數(shù)的構(gòu)造器。它的存在使得客戶端與服務器端的信息交互成

42、為了可能。其中Message類里是發(fā)送信息時用到的構(gòu)造器,MessageType類里面是服務器驗證登錄后返回的信息,User類里面則是用戶賬號和密碼的構(gòu)造器。</p><p>  而完成上面的所有類中的代碼,也是有一定的開發(fā)順序的,首先是完成4個界面的開發(fā)。 </p><p>  然后是實現(xiàn)各個界面上的控件的功能和客戶端與服務器的鏈接功能,先完成服務器,設(shè)置端口號,完成啟動服務器的功能;接

43、著就是客戶端連接服務器的功能,再完成服務器對消息的驗證和對線程的創(chuàng)建和管理。</p><p>  最后就是客戶端對消息的發(fā)送和接收以及服務器端對消息的接收驗證和轉(zhuǎn)發(fā)。</p><p><b>  聊天室功能的測試</b></p><p><b> ?。?)工作過程</b></p><p>  首先啟

44、動服務器,如果啟動成功,會再控制臺打印出“在9999端口監(jiān)聽”,然后再運行用戶登錄的類點擊注冊賬號,賬號注冊成功后再回到登錄界面進行登錄,點擊登錄按鈕就可以進入聊天室了。</p><p><b> ?。?)測試方法</b></p><p>  根據(jù)工作過程,來啟動程序,如果在啟動某一程序時出現(xiàn)了錯誤,先查看錯誤信息,然后再啟動的程序的類里面尋找問題,并多使用Syste

45、m.out.printl方法來打印一些提示的話語,方便自己知道程序運行到了哪一步,是從哪里開始程序沒再運行了,通過這樣的測試方法就可以慢慢的找到錯誤的根源,從而不斷完善聊天室的功能。</p><p> ?。?)聊天功能的測試</p><p>  在測試聊天的功能時,主要是站在用戶的角度,看看聊天的功能是否真的實現(xiàn),因此,當程序全部都成功啟動后,就可以注冊幾個賬號,同時登陸2到3個進入聊天室

46、,讓他們相互聊天,在私聊和群聊里面都發(fā)送一些消息,看看是否達到了預期的效果。</p><p><b>  結(jié) 論</b></p><p> ?。ㄒ唬┊厴I(yè)設(shè)計的總結(jié)和展望</p><p>  本聊天室實現(xiàn)了簡單的實時聊天功能,經(jīng)過細心的調(diào)試和排錯解決了絕大部分的問題。但幾乎每一個計算機程序都會有這樣那樣的不足,尤其是未經(jīng)過精心維護的非商業(yè)軟件。即

47、使是作為操作系統(tǒng)的各種版本的Windows也時常會發(fā)生許多類型的錯誤和漏洞。本聊天系統(tǒng)程序?qū)τ诔跎娲祟I(lǐng)域的畢業(yè)設(shè)計課題來說,尤其在開始初期,感覺邏輯復雜,難以控制,因此至今還有許多未能解決的缺陷。</p><p>  目前本聊天系統(tǒng)還有待完善的功能列表如下:</p><p> ?。?)因為設(shè)想中是在顯示聊天信息的地方點擊說話人的賬號就可以直接與其私聊,但是也實現(xiàn)不了這個功能,所以私聊功能也

48、暫時擱淺,只完成了群聊的功能。</p><p> ?。?)聊天系統(tǒng)缺乏各種屏蔽發(fā)言、發(fā)送表情、踢人等功能;</p><p> ?。?)因為電腦無法連接數(shù)據(jù)源,導致數(shù)據(jù)庫不能被程序使用,所以注冊功能最終也沒有實現(xiàn)。</p><p> ?。?)也沒有詳細考慮到服務器端對的聊天室管理功能。</p><p>  盡管畢業(yè)設(shè)計到現(xiàn)在已接近尾聲,但是對于

49、上述的缺陷,本人還會不斷對聊天系統(tǒng)進一步的完善它,期望在今后的日子里憑借自身的技術(shù)把系統(tǒng)做成一套深受歡迎的聊天系統(tǒng)。</p><p><b> ?。ǘ┙?jīng)驗和感想</b></p><p> ?。?)通過這次畢業(yè)設(shè)計獲得的寶貴經(jīng)驗</p><p>  經(jīng)驗一:通過本次課題,我對C/S架構(gòu)的設(shè)計流程有了一個更深刻的認識,清晰的感覺到了服務器端與客戶

50、端之間的交互過程,</p><p>  經(jīng)驗二:這次的課題讓我對以前掌握的不太好的Socket編程,輸入輸出流的使用和多線程的使用有了更好的了解。</p><p>  經(jīng)驗三:這次的課題讓我掌握了一些以前不知道的知識,比如hashmap是不能直接遍歷的,需要用到迭代器Iterator來實現(xiàn)。</p><p>  經(jīng)驗四:通過這次的課題,我對以前擱置很久的數(shù)據(jù)庫知識又

51、進行了一遍新的回顧,雖然大多只是回顧了添刪改查和幾個約束的知識。</p><p> ?。?)完成畢業(yè)設(shè)計的感想</p><p>  Java聊天室作為畢業(yè)設(shè)計,是本人目前做過的最大的程序。雖然大學期間在設(shè)計過一個簡單的ASP聊天室設(shè)計,并且經(jīng)過反復的調(diào)試修改也達到了一定的精確性,但接手這個題目時仍感覺十分棘手,但最終還是堅持完成了這個任務。</p><p>  平時

52、自己也常到其它聊天室進行聊天,因此,自己也曾想過以后學會了電腦就一定親自設(shè)計一款聊天系統(tǒng),如今,總算實現(xiàn)了自己的夢想。</p><p>  在學習期間,本人還通過網(wǎng)上的各種JAVA源碼進行學習與研究,我原以為這樣的設(shè)計水平將無法完成畢業(yè)設(shè)計,但當掌握了大部分應用技巧時,剩下的聊天系統(tǒng)思路的設(shè)計就顯得不是最大的障礙了。</p><p>  我在三個月內(nèi)寫完這個程序,經(jīng)過了很多次的調(diào)試,終于完

53、成了現(xiàn)在的程序。原先認為不可能的事,我發(fā)現(xiàn),如果有不畏困難的信心和肯鉆研的勇氣,就一定會完成,甚至達到意想不到的效果。</p><p><b>  參考文獻</b></p><p>  [1]王養(yǎng)廷.JAVA.SE應用程序設(shè)計[M] .機械工業(yè)出版社,2007. 1~3</p><p>  [2]張利國.JAVA軟件開發(fā)大師[M].科學出版

54、社,2008.3~4</p><p>  [3]李剛.瘋狂JAVA[M].人民郵電出版社,2010.4~6</p><p>  [4]孫衛(wèi)琴.JAVA面向?qū)ο缶幊蘙M].電子工業(yè)出版社,2006.4~6</p><p>  [5]Katthy Sierra.深入淺出JAVA程序設(shè)計[M].機械工業(yè)出版社,2006.4~6</p><p>

55、;  [6]Bruce Eckel. Think in java 4[M]. 機械工業(yè)出版社,2008.5~8</p><p>  [7] 沃爾斯. Spring in action[M].人民郵電出版社,2005.5~7</p><p>  [8]楊繼平. SQL Server2000自學教程[M].清華大學出版社,2000.7~35</p><p>  [

56、9]陳曼紅. 數(shù)據(jù)庫系統(tǒng)原理與自學應用技術(shù)[M].機械工業(yè)出版社,2010.28~33</p><p>  [10]王強. SQL Server數(shù)據(jù)庫原理及應用[M]. 清華大學出版社,2003.28~33</p><p><b>  致 謝</b></p><p>  緊張而忙碌的畢業(yè)設(shè)計就要結(jié)束了,在完成了系統(tǒng)的功能設(shè)計后,我感到由衷的

57、喜悅和自豪。在我做畢業(yè)設(shè)計期間,許多老師,同學和朋友給我我無私的關(guān)懷和幫助,尤其是我的導師尤新華老師。在此,我要向他們表示衷心的感謝。</p><p>  首先,我要感謝學校的老師在畢業(yè)設(shè)計期間給了我悉心的關(guān)懷與幫助,并且給了我許多關(guān)鍵的,建設(shè)性的指導。</p><p>  這次的畢業(yè)設(shè)計讓我受益匪淺??梢赃@樣說,用計算機來解決繁重而低效的手工管理工作,計算機發(fā)展史上的必然。在理論課的學習

58、中,我掌握了基礎(chǔ)課和專業(yè)課的理論知識,也曾經(jīng)做過一些小的程序設(shè)計,但真正動手設(shè)計一個這種聊天類的軟件,還是第一次。在這次的畢業(yè)設(shè)計中,我曾遇到了許多困難,而在克服這些困難的過程中,我的各方面的能力又有了很大的提高,使我的理論知識更好的與實踐相結(jié)合,增強了專業(yè)技能的可實踐性。從調(diào)研,需求分析到查找資料,結(jié)構(gòu)設(shè)計,詳細設(shè)計以及調(diào)試程序。我終于設(shè)計出了一個比較完整的,周密的,可使用的聊天系統(tǒng)。通過這次的畢業(yè)設(shè)計,我真正了解了軟件工程設(shè)計的整個

59、過程,既鞏固了以前的理論知識,也為我以后的工作奠定了良好的基礎(chǔ)。</p><p>  當然,由于時間的短促,我所完成的系統(tǒng)并不是盡善盡美的,還有待進一步的修改和完善。最后,請允許我再一次向畢業(yè)期間無私幫助過我的老師,同學和朋友表示最衷心的感謝。</p><p><b>  附錄</b></p><p>  (1)登錄界面源代碼:</p&g

60、t;<p>  package com.client.view;</p><p>  import javax.swing.*;</p><p>  import com.client.model.ClientUser;</p><p>  import com.client.tools.ManageChat;</p><p>

61、  import com.client.common.*;</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  public class ClientLogin extends JFrame implements ActionListener {</p>&

62、lt;p><b>  //定義上面的組件</b></p><p>  JLabel jbl1;</p><p>  JPanel jpl1;</p><p>  JLabel jbl2,jbl3;</p><p>  JTextField jtf;</p><p>  JPasswordFi

63、eld jpf;</p><p><b>  //定義下面的組件</b></p><p>  JPanel jpl2;</p><p>  JButton jb1,jb2;</p><p>  public static void main(String[] args) {</p><p>  /

64、/ TODO Auto-generated method stub</p><p>  ClientLogin cl=new ClientLogin();</p><p><b>  }</b></p><p>  public ClientLogin()</p><p><b>  {</b>&l

65、t;/p><p>  jpl1=new JPanel();</p><p>  jpl2=new JPanel();</p><p>  jbl1=new JLabel("聊天室登陸器",JLabel.CENTER);</p><p>  jbl2=new JLabel("賬號",JLabel.CENTER

66、);</p><p>  jbl3=new JLabel("密碼",JLabel.CENTER);</p><p>  jtf=new JTextField();</p><p>  jpf=new JPasswordField();</p><p>  jb1=new JButton("登錄");&l

67、t;/p><p>  jb1.addActionListener(this);</p><p>  jb2=new JButton("注冊");</p><p>  jb2.addActionListener(this);</p><p>  GridBagLayout gbl=new GridBagLayout();<

68、/p><p>  GridBagConstraints gc1=new GridBagConstraints();//創(chuàng)建約束對象</p><p>  jpl1.setLayout(gbl);</p><p>  gc1.fill=GridBagConstraints.BOTH;//設(shè)置fill約束,當控件的大小小于單元格時,填充單元格</p><p

69、>  gc1.weightx=0;</p><p>  gc1.weighty=1;</p><p>  gc1.insets=new Insets(10,10,10,10);</p><p>  gc1.gridwidth=GridBagConstraints.REMAINDER;//下一個組件將是這行的最后一個組件</p><p>

70、  gbl.setConstraints(jbl1, gc1);//第一行填完,共一個組件</p><p>  GridBagConstraints gc2=new GridBagConstraints();</p><p>  gc2.fill=GridBagConstraints.BOTH;</p><p>  gc2.weightx=1;</p>

71、<p>  gc2.weighty=1;</p><p>  gbl.setConstraints(jbl2, gc2);</p><p>  gc2.weightx=3;</p><p>  gc2.weighty=1;</p><p>  gc2.insets=new Insets(0,0,0,10);</p>

72、<p>  gc2.gridwidth=GridBagConstraints.REMAINDER;</p><p>  gbl.setConstraints(jtf, gc2);</p><p>  GridBagConstraints gc3=new GridBagConstraints();</p><p>  gc3.fill=GridBagCons

73、traints.BOTH;</p><p>  gc3.weightx=1;</p><p>  gc3.weighty=1;</p><p>  gbl.setConstraints(jbl3, gc3);</p><p>  gc3.weightx=3;</p><p>  gc3.weighty=1;</p

74、><p>  gc3.insets=new Insets(0,0,10,10);</p><p>  gc3.gridwidth=GridBagConstraints.REMAINDER;</p><p>  gbl.setConstraints(jpf, gc3);</p><p>  jpl1.add(jbl1);</p>&l

75、t;p>  jpl1.add(jbl2);</p><p>  jpl1.add(jtf);</p><p>  jpl1.add(jbl3);</p><p>  jpl1.add(jpf);</p><p>  jpl2.add(jb1);</p><p>  jpl2.add(jb2);</p>

76、<p>  this.add(jpl1,"Center");</p><p>  this.add(jpl2,"South");</p><p>  this.setSize(300,200);</p><p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS

77、E);</p><p>  this.setVisible(true);</p><p><b>  }</b></p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent e) {</p>

78、<p>  // TODO Auto-generated method stub</p><p>  if(e.getSource()==jb1)</p><p><b>  {</b></p><p>  ClientUser clientUser=new ClientUser();</p><p>  U

79、ser u=new User();</p><p>  u.setUserId(jtf.getText().trim());</p><p>  u.setPasswd(new String(jpf.getPassword()));</p><p>  if(clientUser.checkUser(u))</p><p><b>

80、  {</b></p><p>  Chat chat=new Chat(u.getUserId());</p><p>  //把聊天界面加入到管理類</p><p>  ManageChat.addChat(u.getUserId(),chat);</p><p>  this.dispose();</p>&l

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

82、t;b>  }</b></p><p><b>  }</b></p><p>  else if(e.getSource()==jb2)</p><p><b>  {</b></p><p>  new Register();</p><p>  thi

83、s.dispose();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)注冊界面的源代碼:</p><p>  package com.client.vi

84、ew;</p><p>  import javax.swing.*;</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  import java.sql.*;</p><p>  public class Register

85、 extends JFrame implements ActionListener {</p><p>  JPanel jpl1,jpl2;</p><p>  JLabel jbl1,jbl2,jbl3,jbl4;</p><p>  JTextField jtf;</p><p>  JPasswordField jpf1,jpf2;&

86、lt;/p><p>  JButton jb1,jb2;</p><p>  public static void main(String[] args) {</p><p>  // TODO Auto-generated method stub</p><p>  Register rgt=new Register();</p>

87、<p><b>  }</b></p><p>  public Register()</p><p><b>  {</b></p><p>  jpl1=new JPanel();</p><p>  jpl2=new JPanel();</p><p>  

88、jbl1=new JLabel("注冊聊天賬號",JLabel.CENTER);</p><p>  jbl2=new JLabel("輸入賬號",JLabel.CENTER);</p><p>  jbl3=new JLabel("輸入密碼",JLabel.CENTER);</p><p>  jbl4=

89、new JLabel("確認密碼",JLabel.CENTER);</p><p>  jtf=new JTextField();</p><p>  jpf1=new JPasswordField();</p><p>  jpf2=new JPasswordField();</p><p>  jb1=new JBut

90、ton("確定");</p><p>  jb1.addActionListener(this);</p><p>  jb2=new JButton("取消");</p><p>  jb2.addActionListener(this);</p><p>  GridBagLayout gbl=ne

91、w GridBagLayout();</p><p>  GridBagConstraints gc1=new GridBagConstraints();//創(chuàng)建約束對象</p><p>  jpl1.setLayout(gbl);</p><p>  gc1.fill=GridBagConstraints.BOTH;//設(shè)置fill約束,當控件的大小小于單元格時,

92、填充單元格</p><p>  gc1.weightx=0;</p><p>  gc1.weighty=1;</p><p>  gc1.insets=new Insets(10,10,10,10);</p><p>  gc1.gridwidth=GridBagConstraints.REMAINDER;//下一個組件將是這行的最后一個組

93、件</p><p>  gbl.setConstraints(jbl1, gc1);//第一行填完,共一個組件</p><p>  GridBagConstraints gc2=new GridBagConstraints();</p><p>  gc2.fill=GridBagConstraints.BOTH;</p><p>  gc2

94、.weightx=1;</p><p>  gc2.weighty=1;</p><p>  gbl.setConstraints(jbl2, gc2);</p><p>  gc2.weightx=3;</p><p>  gc2.weighty=1;</p><p>  gc2.insets=new Insets(

95、0,0,10,10);</p><p>  gc2.gridwidth=GridBagConstraints.REMAINDER;</p><p>  gbl.setConstraints(jtf, gc2);</p><p>  GridBagConstraints gc3=new GridBagConstraints();</p><p>

96、;  gc3.fill=GridBagConstraints.BOTH;</p><p>  gc3.weightx=1;</p><p>  gc3.weighty=1;</p><p>  gbl.setConstraints(jbl3, gc3);</p><p>  gc3.weightx=3;</p><p>

97、;  gc3.weighty=1;</p><p>  gc3.insets=new Insets(0,0,10,10);</p><p>  gc3.gridwidth=GridBagConstraints.REMAINDER;</p><p>  gbl.setConstraints(jpf1, gc3);</p><p>  GridB

98、agConstraints gc4=new GridBagConstraints();</p><p>  gc4.fill=GridBagConstraints.BOTH;</p><p>  gc4.weightx=1;</p><p>  gc4.weighty=1;</p><p>  gbl.setConstraints(jbl4,

99、 gc4);</p><p>  gc4.weightx=3;</p><p>  gc4.weighty=1;</p><p>  gc4.insets=new Insets(0,0,10,10);</p><p>  gc4.gridwidth=GridBagConstraints.REMAINDER;</p><p&

100、gt;  gbl.setConstraints(jpf2, gc4);</p><p>  jpl1.add(jbl1);</p><p>  jpl1.add(jbl2);</p><p>  jpl1.add(jtf);</p><p>  jpl1.add(jbl3);</p><p>  jpl1.add(jp

101、f1);</p><p>  jpl1.add(jbl4);</p><p>  jpl1.add(jpf2);</p><p>  jpl2.add(jb1);</p><p>  jpl2.add(jb2);</p><p>  this.add(jpl1,"Center");</p>

102、;<p>  this.add(jpl2,"South");</p><p>  this.setSize(300,260);</p><p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p>  this.setVisible(true);</p&g

103、t;<p><b>  }</b></p><p><b>  @Override</b></p><p>  public void actionPerformed(ActionEvent e) {</p><p>  // TODO Auto-generated method stub</p>

104、<p>  Connection ct = null;</p><p>  Statement sm=null;</p><p>  if(e.getSource()==jb1)</p><p><b>  {</b></p><p><b>  try {</b></p>

105、<p><b>  //加載驅(qū)動</b></p><p>  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</p><p><b>  //得到連接數(shù)據(jù)源</b></p><p><b>  try {</b></

106、p><p>  ct=DriverManager.getConnection("jdbc:odbc:mychat");</p><p>  } catch (SQLException e1) {</p><p>  // TODO Auto-generated catch block</p><p>  e1.printSta

107、ckTrace();</p><p><b>  }</b></p><p><b>  try {</b></p><p>  sm=ct.createStatement();</p><p>  } catch (SQLException e1) {</p><p>  

108、// TODO Auto-generated catch block</p><p>  e1.printStackTrace();</p><p><b>  }</b></p><p><b>  try {</b></p><p>  ResultSet rs=sm.executeQuery(

109、"select * from chat1");</p><p>  while(rs.next())</p><p><b>  {</b></p><p>  String userId=rs.getString(1);</p><p>  String passwd=rs.getString(2)

110、;</p><p>  if(userId.equals(this.jtf.getText()))</p><p><b>  {</b></p><p>  JOptionPane.showMessageDialog(this,"用戶名已存在,請重新注冊!");</p><p>  }else if

111、((this.jpf1.getText()).equals(this.jpf2.getText()))</p><p><b>  {</b></p><p>  JOptionPane.showMessageDialog(this,"密碼不一致,請重新注冊!");</p><p><b>  }else</

112、b></p><p><b>  {</b></p><p>  //把填寫的內(nèi)容寫入數(shù)據(jù)庫</p><p><b>  }</b></p><p><b>  }</b></p><p>  } catch (SQLException e1) {

113、</p><p>  // TODO Auto-generated catch block</p><p>  e1.printStackTrace();</p><p><b>  }</b></p><p>  } catch (ClassNotFoundException e1) {</p><

114、p>  // TODO Auto-generated catch block</p><p>  e1.printStackTrace();</p><p><b>  }finally{</b></p><p><b>  //關(guān)閉</b></p><p><b>  try {&

115、lt;/b></p><p>  sm.close();</p><p>  ct.close();</p><p>  } catch (SQLException e1) {</p><p>  // TODO Auto-generated catch block</p><p>  e1.printStack

116、Trace();</p><p><b>  }</b></p><p><b>  }</b></p><p>  }else if(e.getSource()==jb2)</p><p><b>  {</b></p><p>  this.disp

117、ose();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p> ?。?)聊天界面的源代碼:</p><p>  package com.client.view;&l

118、t;/p><p>  import javax.swing.*;</p><p>  import com.client.tools.*;</p><p>  import com.client.common.*;</p><p>  import com.client.model.*;</p><p>  import

119、java.util.*;</p><p>  import java.awt.*;</p><p>  import java.awt.event.*;</p><p>  import java.io.*;</p><p>  public class Chat extends JFrame implements ActionListene

120、r {</p><p>  public static void main(String[] args) {</p><p>  //Chat chat=new Chat();</p><p><b>  }</b></p><p>  JTextArea jta;</p><p>  JText

121、Field jtf;</p><p>  JButton jb;</p><p>  JPanel jpl;</p><p>  String ownerId;</p><p>  public Chat(String ownerId)</p><p><b>  {</b></p>

122、<p>  this.ownerId=ownerId;</p><p>  jta=new JTextArea();</p><p>  jtf=new JTextField(15);</p><p>  jb=new JButton("發(fā)送");</p><p>  jb.addActionListener(

123、this);</p><p>  jpl=new JPanel();</p><p>  jpl.add(jtf);</p><p>  jpl.add(jb);</p><p>  this.add(jta,"Center");</p><p>  this.add(jpl,"South

溫馨提示

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

評論

0/150

提交評論