版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
PAGE14目錄1 概述聊天室 22.設計依據(jù) 22.1設計平臺 22.2設計思想 33.各模塊功能簡介 34.結構分析 45.界面設計 56.附錄源代碼 6概述聊天室系統(tǒng)聊天室系統(tǒng)使用JAVA+SQL完成,ECLIPSE完成代碼編寫,JIGLOO完成界面設計,SQLSERVER完成數(shù)據(jù)庫管理。聊天室通過輸入的對方IP,將JTextField中的內(nèi)容發(fā)送到擁有此IP的主機(前提是對方也啟動了聊天室程序)。網(wǎng)絡的通信使用UDP協(xié)議,即時搜尋網(wǎng)絡上的短消息,并可恢復對方消息。數(shù)據(jù)庫的表只有一個User_Info,用戶通過用戶管理模塊登錄,注冊,修改密碼。系統(tǒng)有三個類,MainWin、ChatRoom、jdbcodbc。MainWin是程序的入口類,界面是登陸,注冊,修改密碼的JFrame窗口。ChatRoom是聊天室的主窗口,負責搜發(fā)消息。jdbcodbc負責數(shù)據(jù)庫的連接,有一個構造函數(shù),一個查詢方法,一個更新方法,三個返回方法。三個類都放在Com包里,Com包在Chat項目里。2.設計依據(jù)本系統(tǒng)要求實現(xiàn)一個兩人聊天室的Java圖形用戶界面界面程序,主要包括如下功能:1.主人可以根據(jù)輸入的IP尋找要聊天的對象。2.主人和客人之間可以互相發(fā)送短消息進行即時聊天。2.1設計平臺設計平臺是j2seJ2se是一個開放源代碼的Java的可擴展開發(fā)平臺。編寫代碼和運行軟件都很方便。編寫過程中要是有錯誤就有提示,非常方便用戶修改代碼。2.2設計思想程序分為三個部分:數(shù)據(jù)庫連接,聊天室管理,用戶管理。其中用戶管理分為用戶注冊,用戶登錄,用戶修改密碼。3.各模塊功能簡介聊天室系統(tǒng)聊天室管理模塊數(shù)據(jù)庫管理模塊聊天室系統(tǒng)聊天室管理模塊數(shù)據(jù)庫管理模塊用戶管理模塊用戶管理模塊用戶管理模塊用戶管理模塊4.結構分析主窗口對象MainWin()方法:構造函數(shù),調(diào)用initGUI()方法以及父類JFRAME的構造函數(shù)。main()方法:程序的入口。initGUI()方法:加載窗口的各個組件以及事件處理。數(shù)據(jù)庫連接對象jdbcodbc():構造函數(shù),加載數(shù)據(jù)庫驅動,建立數(shù)據(jù)庫連接。CheckInfo():將查詢語句得到的數(shù)據(jù)庫內(nèi)容賦給數(shù)據(jù)集。UpdateInfo():用插入語句使數(shù)據(jù)庫更新。聊天室對象ChatRoom():構造函數(shù),調(diào)用initGUI()方法以及父類JFRAME的構造函數(shù)。并用循環(huán)實現(xiàn)實時接受數(shù)據(jù)包里的消息。initGUI():加載窗口的各個組件以及事件處理。5.界面設計用戶界面的設計是整個系統(tǒng)設計中比較關鍵的一環(huán)。通過用戶界面能更清晰的顯示出本系統(tǒng)所具有的功能、簡單的錯誤警告及處理能力。用戶界面的友好設計,可以使操作人員更迅速的掌握其操作步驟,便于操作。客戶端窗口聊天室界面設計內(nèi)嵌“私聊”窗口實驗總結由于能力及時間的關系,這個Java聊天室程序沒能達到其要求,很有點失望,很有點遺憾。在建立通信和連接數(shù)據(jù)庫時,雖然很認真地在做,可總還是失敗,這也導致了整個聊天室的無法運作(只有界面而已)。事實如此,不再贅言了。這次Java實習,似乎量上過大,然而堅持做下來,還有很有意義和收獲的。也許我的所得,對他人而言,可謂不值一提,但對我來說,它們的確讓我在思想和能力上,更上了一層樓。下面我就談談我的體會:Jave與C語言編程相比,有著本質的不同.前者面向對象,即面向問題而設計程序,后者則是分析問題后,面向問題解決的過程而設計程序.本質的不同,導致程序設計的明顯差異.Java設計的程序,通過劃分類,通常都顯得通俗易懂,條理清晰,而且很簡捷.這是C語言所無法比擬的,除非它有很好的數(shù)據(jù)結構,但必須承認,就算如此,還是難以與之平行的.用Jave編聊天室,其實也不是那么復雜,但要是換用C語言,我真不知道其工作量有多大了。由此,我看到了Java的優(yōu)越性,更堅定了我學好Java的決心.用Java解決實際問題,分析問題是至關重要的。分析要合理、全面,只有這樣,劃分的類就不至于過大或過小。一個復雜的問題,就象這個聊天室吧,一開始不是什么都會做,先就完成簡單、容易的,然后再帶著小有的成就感,去征服難弄的部分。這種思想是處處適用的。想說的,我已經(jīng)說完了。最后再說一句:雖然目前我的編程能力很差勁,可我心中已有了目標,也許我走不到終點,但我一定會前進,絕不輕易放棄!夢想來之不易!6.附錄源代碼程序主界面設計建立服務端窗口類:窗口程序如下importjava.awt.Button;importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.List; importjava.awt.TextArea;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JScrollPane;importjavax.swing.JTextField;publicclasschatroomW{ JFramef=newJFrame("局域網(wǎng)聊天室"); JLabellabel1=newJLabel("端口"); JLabellabel2=newJLabel("發(fā)送"); Buttonbutton1=newButton("啟動服務"); Buttonbutton2=newButton("發(fā)送"); Buttonbutton3=newButton("刷新用戶列表"); JTextFieldtext1=newJTextField(5); JTextFieldtext2=newJTextField(25); TextAreaarea1=newTextArea(26,84); ListuserList=newList(27); JScrollPanescro1,scro2; publicchatroomW(){ chat(); } publicvoidchat(){ area1.setBackground(newColor(204,255,255)); area1.setForeground(Color.black); userList.setBackground(Color.gray); userList.setForeground(Color.white); f.setLayout(newFlowLayout());f.add(area1);f.add(userList);f.add(label1);f.add(text1);f.add(button1);f.add(text2);f.add(button2);f.add(button3); f.setBounds(300,200,750,485); f.setResizable(false); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); area1.setEditable(false);text1.setText("10000"); myEvent(); } publicstaticvoidmain(Stringargs[]){ newchatroomW(); } publicvoidmyEvent(){}}建立客戶端窗口importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.TextArea;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JScrollPane;importjavax.swing.JTextField;publicclassClientW{ JFramef=newJFrame("聊天室"); JScrollPanejs; TextAreaarea=newTextArea(19,67); JTextFieldtext1=newJTextField(12); JTextFieldtext2=newJTextField(5); JTextFieldtext3=newJTextField(5); JTextFieldtext4=newJTextField(20); JButtonbutton1=newJButton("連接"); JButtonbutton2=newJButton("發(fā)送"); JButtonbutton3=newJButton("私聊"); JLabellabel1=newJLabel("服務器地址"); JLabellabel2=newJLabel("服務器端口"); JLabellabel3=newJLabel("昵稱"); publicClientW(){ chat(); } publicvoidchat(){ area.setBackground(newColor(204,255,255));// area.setForeground(Color.black); f.setLayout(newFlowLayout()); f.setBounds(300,200,500,410); f.add(label1); f.add(text1); f.add(label2); f.add(text2); f.add(button1); f.add(area); f.add(label3); f.add(text3); f.add(text4); f.add(button2); f.add(button3); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setResizable(false); area.setEditable(false); text2.setText("10000"); text4.setText(null); myEvent(); } publicvoidmyEvent(){} publicstaticvoidmain(Stringargs[]){ newClientW(); }}classnetchat{JFramef=newJFrame("私聊"); JLabellabel1,label2,label3; Buttonbutton1,button2; JTextFieldtext1,text2,text3,text4; TextAreatextarea; publicnetchat(){ f.setLayout(newFlowLayout()); f.setBounds(300,200,400,310);//設置窗口大小和位置; f.setResizable(false);//讓窗口大小固定; label1=newJLabel("對方主機"); label2=newJLabel("本地端口"); label3=newJLabel("對方端口"); button1=newButton("連接"); button2=newButton("發(fā)送"); text1=newJTextField(7); text2=newJTextField(3); text3=newJTextField(3); text4=newJTextField(20); textarea=newTextArea(13,53); textarea.setEditable(false); textarea.setBackground(newColor(204,250,255)); f.add(label1); f.add(text1); f.add(label2); f.add(text2); f.add(label3); f.add(text3); f.add(button1); f.add(textarea); f.add(text4); f.add(button2); f.setVisible(true);// f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);//關閉窗口程序同時關閉; myEvent();}客服端類繼承客戶端窗口類,并內(nèi)嵌私聊程序importjava.awt.Button;importjava.awt.Color;importjava.awt.FlowLayout;importjava.awt.TextArea;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintStream;import.DatagramPacket;import.DatagramSocket;import.InetAddress;import.Socket;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;publicclassClientextendsClientW{ Sockets=null; publicClient(){} publicvoidmyEvent(){ button1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ try{ s=newSocket(text1.getText().toString(),Integer.parseInt(text2.getText())); newThread(newLinkC()).start(); area.append("[系統(tǒng)消息]:連接成功\n"); }catch(Exceptionex){area.append("[系統(tǒng)消息]:連接失敗\n");} } }); button2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ newSentC(); } }); button3.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ newnetchat(); } }); } publicstaticvoidmain(Stringargs[]){ newClient(); } classLinkCimplementsRunnable{ publicvoidrun(){ try{ BufferedReaderbufIn= newBufferedReader(newInputStreamReader(s.getInputStream())); Stringmsg=null; PrintStreamps=newPrintStream(s.getOutputStream()); ps.println(text3.getText());while(true){ try{ while((msg=bufIn.readLine())!=null){ area.append(msg+"\n"); } }catch(Exceptionex){break;}} }catch(Exceptione){} }}classSentC{ publicSentC(){ try{PrintStreamps=newPrintStream(s.getOutputStream());if(!text4.getText().equals("")){ ps.println(text4.getText());//area.append(text4.getText());//服務器自動會返回 text4.setText("");} }catch(Exceptione){} }}//私聊類classnetchat{JFramef=newJFrame("私聊"); JLabellabel1,label2,label3; Buttonbutton1,button2; JTextFieldtext1,text2,text3,text4; TextAreatextarea; publicnetchat(){ f.setLayout(newFlowLayout()); f.setBounds(300,200,400,310);//設置窗口大小和位置; f.setResizable(false);//讓窗口大小固定; label1=newJLabel("對方主機"); label2=newJLabel("本地端口"); label3=newJLabel("對方端口"); button1=newButton("連接"); button2=newButton("發(fā)送"); text1=newJTextField(7); text2=newJTextField(3); text3=newJTextField(3); text4=newJTextField(20); textarea=newTextArea(13,53); textarea.setEditable(false); textarea.setBackground(newColor(204,250,255));text2.setText("10000"); text3.setText("10000"); f.add(label1); f.add(text1); f.add(label2); f.add(text2); f.add(label3); f.add(text3); f.add(button1); f.add(textarea); f.add(text4); f.add(button2); f.setVisible(true);// f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);//關閉窗口程序同時關閉; myEvent();} publicvoidmyEvent(){ f.addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente){try{DatagramSocketds=newDatagramSocket();byte[]buf="對方已下線".getBytes(); DatagramPacketdp= newDatagramPacket(buf,buf.length,InetAddress.getByName(text1.getText()),Integer.parseInt(text3.getText())); ds.send(dp); ds.close();}catch(Exceptionex){} } }); button2.addActionListener(newActionListener()//事件源是button2 { publicvoidactionPerformed(ActionEvente) {if(!text4.getText().equals("")) newThread(newSend()).start(); } }); button1.addActionListener(newActionListener()//事件源是button1 { publicvoidactionPerformed(ActionEvente) { newThread(newRece()).start(); } }); }classSendimplementsRunnable{ publicvoidrun(){try{UdpSend();}catch(Exceptione){textarea.append("[系統(tǒng)消息]:發(fā)送失敗\n");}}publicvoidUdpSend()throws
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年航空輪胎項目資金申請報告
- 銀行合規(guī)管理制度實施效果
- 酒店餐飲服務安全與風險防范制度
- 《餐飲服務人員培訓》課件
- 【大學課件】煤礦機電設備安全管理 緒論
- 幼兒園小班班級年度總結(22篇)
- 幾種常見的酸堿鹽的特性及應用課件
- 幼兒園玩教具配備-托小班
- 《高績效執(zhí)行力培訓》課件
- 海南省五指山中學2025屆高考英語二模試卷含解析
- 3、2024廣西專業(yè)技術人員繼續(xù)教育公需科目參考答案(99分)
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標準內(nèi)容解讀
- 創(chuàng)新創(chuàng)業(yè)實戰(zhàn)學習通超星期末考試答案章節(jié)答案2024年
- 期末 (試題) -2024-2025學年人教PEP版(2024)英語三年級上冊
- 完整2024年國有企業(yè)管理人員處分條例專題課件
- 體育導論(大學體育1)(山東聯(lián)盟)智慧樹知到期末考試答案章節(jié)答案2024年青島科技大學
- 馬克思主義基本原理考試題庫附答案【典型題】
- 生態(tài)文明通識智慧樹知到期末考試答案2024年
- 繪畫心理分析與治療 課件
- 0-15V直流穩(wěn)壓電源設計
- 某高速公路路面改建工程施工監(jiān)理投標文件報價表
評論
0/150
提交評論