版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGE14目錄1 概述聊天室 22.設(shè)計(jì)依據(jù) 22.1設(shè)計(jì)平臺(tái) 22.2設(shè)計(jì)思想 33.各模塊功能簡(jiǎn)介 34.結(jié)構(gòu)分析 45.界面設(shè)計(jì) 56.附錄源代碼 6概述聊天室系統(tǒng)聊天室系統(tǒng)使用JAVA+SQL完成,ECLIPSE完成代碼編寫,JIGLOO完成界面設(shè)計(jì),SQLSERVER完成數(shù)據(jù)庫(kù)管理。聊天室通過輸入的對(duì)方IP,將JTextField中的內(nèi)容發(fā)送到擁有此IP的主機(jī)(前提是對(duì)方也啟動(dòng)了聊天室程序)。網(wǎng)絡(luò)的通信使用UDP協(xié)議,即時(shí)搜尋網(wǎng)絡(luò)上的短消息,并可恢復(fù)對(duì)方消息。數(shù)據(jù)庫(kù)的表只有一個(gè)User_Info,用戶通過用戶管理模塊登錄,注冊(cè),修改密碼。系統(tǒng)有三個(gè)類,MainWin、ChatRoom、jdbcodbc。MainWin是程序的入口類,界面是登陸,注冊(cè),修改密碼的JFrame窗口。ChatRoom是聊天室的主窗口,負(fù)責(zé)搜發(fā)消息。jdbcodbc負(fù)責(zé)數(shù)據(jù)庫(kù)的連接,有一個(gè)構(gòu)造函數(shù),一個(gè)查詢方法,一個(gè)更新方法,三個(gè)返回方法。三個(gè)類都放在Com包里,Com包在Chat項(xiàng)目里。2.設(shè)計(jì)依據(jù)本系統(tǒng)要求實(shí)現(xiàn)一個(gè)兩人聊天室的Java圖形用戶界面界面程序,主要包括如下功能:1.主人可以根據(jù)輸入的IP尋找要聊天的對(duì)象。2.主人和客人之間可以互相發(fā)送短消息進(jìn)行即時(shí)聊天。2.1設(shè)計(jì)平臺(tái)設(shè)計(jì)平臺(tái)是j2seJ2se是一個(gè)開放源代碼的Java的可擴(kuò)展開發(fā)平臺(tái)。編寫代碼和運(yùn)行軟件都很方便。編寫過程中要是有錯(cuò)誤就有提示,非常方便用戶修改代碼。2.2設(shè)計(jì)思想程序分為三個(gè)部分:數(shù)據(jù)庫(kù)連接,聊天室管理,用戶管理。其中用戶管理分為用戶注冊(cè),用戶登錄,用戶修改密碼。3.各模塊功能簡(jiǎn)介聊天室系統(tǒng)聊天室管理模塊數(shù)據(jù)庫(kù)管理模塊聊天室系統(tǒng)聊天室管理模塊數(shù)據(jù)庫(kù)管理模塊用戶管理模塊用戶管理模塊用戶管理模塊用戶管理模塊4.結(jié)構(gòu)分析主窗口對(duì)象MainWin()方法:構(gòu)造函數(shù),調(diào)用initGUI()方法以及父類JFRAME的構(gòu)造函數(shù)。main()方法:程序的入口。initGUI()方法:加載窗口的各個(gè)組件以及事件處理。數(shù)據(jù)庫(kù)連接對(duì)象jdbcodbc():構(gòu)造函數(shù),加載數(shù)據(jù)庫(kù)驅(qū)動(dòng),建立數(shù)據(jù)庫(kù)連接。CheckInfo():將查詢語(yǔ)句得到的數(shù)據(jù)庫(kù)內(nèi)容賦給數(shù)據(jù)集。UpdateInfo():用插入語(yǔ)句使數(shù)據(jù)庫(kù)更新。聊天室對(duì)象ChatRoom():構(gòu)造函數(shù),調(diào)用initGUI()方法以及父類JFRAME的構(gòu)造函數(shù)。并用循環(huán)實(shí)現(xiàn)實(shí)時(shí)接受數(shù)據(jù)包里的消息。initGUI():加載窗口的各個(gè)組件以及事件處理。5.界面設(shè)計(jì)用戶界面的設(shè)計(jì)是整個(gè)系統(tǒng)設(shè)計(jì)中比較關(guān)鍵的一環(huán)。通過用戶界面能更清晰的顯示出本系統(tǒng)所具有的功能、簡(jiǎn)單的錯(cuò)誤警告及處理能力。用戶界面的友好設(shè)計(jì),可以使操作人員更迅速的掌握其操作步驟,便于操作??蛻舳舜翱诹奶焓医缑嬖O(shè)計(jì)內(nèi)嵌“私聊”窗口實(shí)驗(yàn)總結(jié)由于能力及時(shí)間的關(guān)系,這個(gè)Java聊天室程序沒能達(dá)到其要求,很有點(diǎn)失望,很有點(diǎn)遺憾。在建立通信和連接數(shù)據(jù)庫(kù)時(shí),雖然很認(rèn)真地在做,可總還是失敗,這也導(dǎo)致了整個(gè)聊天室的無法運(yùn)作(只有界面而已)。事實(shí)如此,不再贅言了。這次Java實(shí)習(xí),似乎量上過大,然而堅(jiān)持做下來,還有很有意義和收獲的。也許我的所得,對(duì)他人而言,可謂不值一提,但對(duì)我來說,它們的確讓我在思想和能力上,更上了一層樓。下面我就談?wù)勎业捏w會(huì):Jave與C語(yǔ)言編程相比,有著本質(zhì)的不同.前者面向?qū)ο?即面向問題而設(shè)計(jì)程序,后者則是分析問題后,面向問題解決的過程而設(shè)計(jì)程序.本質(zhì)的不同,導(dǎo)致程序設(shè)計(jì)的明顯差異.Java設(shè)計(jì)的程序,通過劃分類,通常都顯得通俗易懂,條理清晰,而且很簡(jiǎn)捷.這是C語(yǔ)言所無法比擬的,除非它有很好的數(shù)據(jù)結(jié)構(gòu),但必須承認(rèn),就算如此,還是難以與之平行的.用Jave編聊天室,其實(shí)也不是那么復(fù)雜,但要是換用C語(yǔ)言,我真不知道其工作量有多大了。由此,我看到了Java的優(yōu)越性,更堅(jiān)定了我學(xué)好Java的決心.用Java解決實(shí)際問題,分析問題是至關(guān)重要的。分析要合理、全面,只有這樣,劃分的類就不至于過大或過小。一個(gè)復(fù)雜的問題,就象這個(gè)聊天室吧,一開始不是什么都會(huì)做,先就完成簡(jiǎn)單、容易的,然后再帶著小有的成就感,去征服難弄的部分。這種思想是處處適用的。想說的,我已經(jīng)說完了。最后再說一句:雖然目前我的編程能力很差勁,可我心中已有了目標(biāo),也許我走不到終點(diǎn),但我一定會(huì)前進(jìn),絕不輕易放棄!夢(mèng)想來之不易!6.附錄源代碼程序主界面設(shè)計(jì)建立服務(wù)端窗口類:窗口程序如下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("啟動(dòng)服務(wù)"); 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("服務(wù)器地址"); JLabellabel2=newJLabel("服務(wù)器端口"); 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);//設(shè)置窗口大小和位置; f.setResizable(false);//讓窗口大小固定; label1=newJLabel("對(duì)方主機(jī)"); label2=newJLabel("本地端口"); label3=newJLabel("對(duì)方端口"); 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);//關(guān)閉窗口程序同時(shí)關(guān)閉; 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());//服務(wù)器自動(dòng)會(huì)返回 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);//設(shè)置窗口大小和位置; f.setResizable(false);//讓窗口大小固定; label1=newJLabel("對(duì)方主機(jī)"); label2=newJLabel("本地端口"); label3=newJLabel("對(duì)方端口"); 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);//關(guān)閉窗口程序同時(shí)關(guān)閉; myEvent();} publicvoidmyEvent(){ f.addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente){try{DatagramSocketds=newDatagramSocket();byte[]buf="對(duì)方已下線".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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年生態(tài)環(huán)境治理保護(hù)合同
- 2024年版項(xiàng)目監(jiān)工聘用合同
- 特崗英語(yǔ)課程設(shè)計(jì)
- 現(xiàn)代詩(shī)課程設(shè)計(jì)分享
- 電子表課程設(shè)計(jì)c語(yǔ)言
- 測(cè)繪工程課程設(shè)計(jì)選題
- 社交軟件銷售工作總結(jié)
- 航空航天顧問工作總結(jié)
- 保健品行業(yè)營(yíng)銷策略總結(jié)
- 餐飲團(tuán)購(gòu)前臺(tái)工作總結(jié)
- 患者轉(zhuǎn)診記錄單
- 美好生活“油”此而來-暨南大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 買賣合同糾紛案民事判決書
- 神經(jīng)內(nèi)科應(yīng)急預(yù)案完整版
- 2023零售藥店醫(yī)保培訓(xùn)試題及答案篇
- UCC3895芯片內(nèi)部原理解析
- 混凝土設(shè)計(jì)的各種表格
- 保安員培訓(xùn)教學(xué)大綱
- 廣東省高等學(xué)?!扒О偈こ獭钡诹^續(xù)培養(yǎng)對(duì)象和第
- 【企業(yè)杜邦分析國(guó)內(nèi)外文獻(xiàn)綜述6000字】
- taft波完整版可編輯
評(píng)論
0/150
提交評(píng)論