版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> JAVA程序設(shè)計</b></p><p><b> 課程設(shè)計說明書</b></p><p> ----即時聊天系統(tǒng)</p><p> 院 系: 國際教育學(xué)院 </p><p> 專業(yè)班級: 互聯(lián)網(wǎng)10-02班 <
2、;/p><p> 指導(dǎo)教師: ______</p><p> 姓 名: _____</p><p> 學(xué) 號: </p><p> 成 績: </p><p>
3、2012年 06 月 07 日</p><p><b> 目 錄</b></p><p><b> 1 需求分析1</b></p><p> 1.1 用戶調(diào)查1</p><p> 1.2構(gòu)造系統(tǒng)的邏輯模型1</p><p> 1.3 確定目標(biāo)系統(tǒng)的功能………
4、…………………………………...2</p><p> 1.4數(shù)據(jù)分析——概念模型分析............................3</p><p> 2 總體設(shè)計................................................................................................2</p>
5、<p> 2.1軟件系統(tǒng)結(jié)構(gòu)的設(shè)計2</p><p> 2.1.1得到新的業(yè)務(wù)流程……………………………………………………….2</p><p> 2.1.2系統(tǒng)功能結(jié)構(gòu)圖.............................................2</p><p><b> 3 詳細(xì)設(shè)計3</b><
6、;/p><p><b> 3.1具體描述3</b></p><p> 3.2具體實(shí)現(xiàn)步驟3</p><p> 3.3程序源代碼..........................................7</p><p><b> 4 總結(jié)19</b></p><
7、;p> 4.1設(shè)計體會………………………………………………………..19</p><p><b> 1 需求分析</b></p><p><b> 1.1用戶調(diào)查</b></p><p> 經(jīng)過詳細(xì)的調(diào)研,即時聊天工具現(xiàn)在流行于各種人群中,以青少年為主的學(xué)生群。主要分為用戶注冊、用戶登錄等。即時聊天系統(tǒng)的流程
8、描述如下:</p><p> 注冊,連接服務(wù)器后,新用戶需要注冊,然后才能登錄。 </p><p> 注冊后才能登錄,信息寫進(jìn)數(shù)據(jù)庫。</p><p> 登錄后,可以進(jìn)行添加好友,找好友聊天,對好友進(jìn)行管理等操作。</p><p> 退出,在結(jié)束登錄時需要退去即時聊天系統(tǒng),并回到登錄界面。</p><p>
9、根據(jù)以上總結(jié),得到其現(xiàn)行的業(yè)務(wù)流程如圖1-1所示。</p><p> 圖1-1即時聊天業(yè)務(wù)流程圖</p><p> 1.2 構(gòu)造系統(tǒng)的邏輯模型</p><p> 構(gòu)造系統(tǒng)的邏輯模型的工具是數(shù)據(jù)流圖和數(shù)據(jù)字典。數(shù)據(jù)流圖中沒有任何具體的物理元素,只是用來描繪信息在系統(tǒng)中的流動和處理情況。數(shù)據(jù)流圖共有四種基本符號:矩形表示數(shù)據(jù)的源點(diǎn)和終點(diǎn)(或稱為外部項),圓或橢圓表
10、示變換數(shù)據(jù)的處理,向右開口的矩形表示數(shù)據(jù)存儲,箭頭表示數(shù)據(jù)流,即特定數(shù)據(jù)的流動方向。根據(jù)現(xiàn)行學(xué)生信息管理的業(yè)務(wù)流程,首先確定數(shù)據(jù)流圖中的源點(diǎn)和終點(diǎn)都選定為學(xué)生,如此就得到了學(xué)生檔案管理系統(tǒng)的基本系統(tǒng)模型,如圖1-2所示。</p><p> 圖1-2 即時聊天系統(tǒng)的基本系統(tǒng)模型</p><p> 1.3 確定目標(biāo)系統(tǒng)的功能</p><p> 通過詳細(xì)的用戶調(diào)查,
11、在現(xiàn)行的業(yè)務(wù)處理流程和數(shù)據(jù)流圖的基礎(chǔ)上,就可以基本確定目標(biāo)系統(tǒng)要達(dá)到的目標(biāo)了。需求分析的任務(wù)是確定系統(tǒng)必須完成的工作,也就是對目標(biāo)系統(tǒng)提出完整、標(biāo)準(zhǔn)、清晰、具體的要求。在經(jīng)過多方了解和調(diào)查后,基本清楚了即時聊天系統(tǒng)的功能需求,即時聊天系統(tǒng)必須完成以下功能:</p><p> 注冊功能:對于新用戶,系統(tǒng)必須能對新用戶進(jìn)行注冊,在用戶輸入各項信息后,將信息保存進(jìn)數(shù)據(jù)庫。</p><p>
12、登錄功能:在新用戶注冊完成后,系統(tǒng)能在用戶輸入登錄信息后,連接數(shù)據(jù)庫并匹配用戶登錄信息,使該用戶能登錄服務(wù)器。</p><p> 添加好友功能:用戶能通過添加好友按鈕就行好友添加。</p><p> 即時聊天功能:作為本系統(tǒng)的最主要功能,用戶能即時的和好友聊天,并可以搜索聊天記錄。</p><p> 1.4 數(shù)據(jù)分析——概念模型分析</p>&l
13、t;p> 需求分析階段主要有兩個方面的任務(wù):分析用戶的數(shù)據(jù)要求和分析用戶的處理要求。通過以上分析,我們已經(jīng)基本了解了用戶對處理的要求,接下來需要的工作是分析用戶對數(shù)據(jù)的要求。</p><p> 為了把用戶的數(shù)據(jù)清晰明確地表達(dá)出來,系統(tǒng)分析員通常建立一個概念性的數(shù)學(xué)模型。概念性模型是一種面向問題的數(shù)學(xué)模型,是按用戶的觀點(diǎn)來對數(shù)據(jù)和信息建模。最常用的表示概念性數(shù)據(jù)模型的方法是實(shí)體-聯(lián)系方法(Entity-R
14、elationship Approach)。這種方法用E-R圖描述現(xiàn)實(shí)世界中的實(shí)體,而不涉及這些實(shí)體在系統(tǒng)中的實(shí)現(xiàn)方法,該方法又稱為E-R模型,E-R圖中共用三種符號:實(shí)體、屬性和聯(lián)系。通常實(shí)體用矩形來表示,屬性用橢圓或圓角矩形來表示,聯(lián)系用菱形來表示。聯(lián)系有分為一對一、一對多和多對多三種類型。</p><p><b> 2.總體設(shè)計</b></p><p> 系
15、統(tǒng)設(shè)計一般分為總體設(shè)計和詳細(xì)設(shè)計。經(jīng)過需求分析階段的工作,已經(jīng)清楚系統(tǒng)必須完成的工作,下面的工作就應(yīng)該是決定“如何做”的問題,總體設(shè)計的基本目的的就是“概要地說系統(tǒng)應(yīng)該如何實(shí)現(xiàn)?”。通過該階段的工作將劃分出組成系統(tǒng)的物理元素—程序、文件、數(shù)據(jù)庫、文檔等,另一方面的主要工作是設(shè)計軟件的結(jié)構(gòu),即確定系統(tǒng)都由哪些模塊組成及模塊之間的相互關(guān)系。</p><p> 2.1軟件系統(tǒng)結(jié)構(gòu)的設(shè)計</p><
16、p> 2.1.1 得到新的業(yè)務(wù)流程</p><p> 根據(jù)系統(tǒng)分析得到的現(xiàn)行業(yè)務(wù)處理流程,在與用戶反復(fù)研究協(xié)商后,首先得到目標(biāo)系統(tǒng)即學(xué)生學(xué)籍管理系統(tǒng)的業(yè)務(wù)流程,其處理流程如圖2-1所示。</p><p> 圖2-1 即時聊天系統(tǒng)的業(yè)務(wù)流程</p><p> 針對新的處理流程,現(xiàn)具體描述如下:</p><p> 用戶注冊:對新用
17、戶進(jìn)行信息錄入。</p><p> 登錄:連接數(shù)據(jù)庫,匹配輸入登錄信息和數(shù)據(jù)庫信息,成功則進(jìn)入聊天室。</p><p> 計入聊天室,進(jìn)行聊天以及對好友的一系列操作。</p><p> 2.1.2系統(tǒng)功能結(jié)構(gòu)圖</p><p> 根據(jù)系統(tǒng)分析階段得到的數(shù)據(jù)流圖,采用軟件設(shè)計的概念和原理,我們能測試程序能否正常運(yùn)行。</p>
18、<p><b> 3.詳細(xì)設(shè)計</b></p><p><b> 3.1 具體描述</b></p><p> 圖3-2 軟件系統(tǒng)主程序的程序流程圖</p><p> 3.2 具體實(shí)現(xiàn)步驟:</p><p><b> 注冊界面如下圖:</b></p&
19、gt;<p><b> 圖3-3</b></p><p><b> 登錄界面如圖:</b></p><p><b> 聊天室窗口界面:</b></p><p><b> 啟動服務(wù)器:</b></p><p><b> 連接
20、服務(wù)器:</b></p><p><b> 實(shí)現(xiàn)私聊:</b></p><p><b> 圖3-5</b></p><p> ?。?)若選擇修改操作,則進(jìn)入如下界面:</p><p><b> 界面實(shí)現(xiàn)代碼:</b></p><p>
21、 注冊界面代碼:package t_test;</p><p> import javax.swing.*;</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import java.net.*;</p><p> i
22、mport java.io.*;</p><p> public class Register extends JFrame implements ActionListener</p><p><b> {</b></p><p> private JComboBox comboBox;</p><p> pr
23、ivate static final long serialVersionUID = 9019746127517522180L;</p><p> JPanel pnlRegister;</p><p> JLabel lblUserName,lblGender,lblAge;</p><p> JLabel lblPassword,lblConfirm
24、Pass,lblEmail,logoPosition;</p><p> JTextField txtUserName,txtAge,txtEmail;</p><p> JPasswordField pwdUserPassword,pwdConfirmPass;</p><p> JRadioButton rbtnMale,rbtnFemale;<
25、;/p><p> ButtonGroup btngGender;</p><p> JButton btnOk,btnCancel,btnClear;</p><p> String strServerIp;</p><p> final JLabel headLabel = new JLabel();</p><
26、;p> Dimension scrnsize;</p><p> Toolkit toolkit=Toolkit.getDefaultToolkit();</p><p> public Register(String ip)</p><p> { super("注冊");</p><p> strSe
27、rverIp=ip;</p><p> pnlRegister=new JPanel();</p><p> this.getContentPane().add(pnlRegister);</p><p> lblUserName=new JLabel("用 戶 名:");</p><p> lblGender=n
28、ew JLabel("性 別:");</p><p> lblAge=new JLabel("年 齡:");</p><p> lblPassword=new JLabel("密碼:");</p><p> lblConfirmPass=new JLabel("確認(rèn)密碼:&quo
29、t;);</p><p> lblEmail=new JLabel("電子郵件:");</p><p> txtUserName=new JTextField(30);</p><p> txtEmail=new JTextField(30);</p><p> txtAge=new JTextField(10);
30、</p><p> pwdUserPassword=new JPasswordField(30);</p><p> pwdConfirmPass=new JPasswordField(30);</p><p> rbtnMale=new JRadioButton("男",true);</p><p> rbtnF
31、emale=new JRadioButton("女");</p><p> btngGender=new ButtonGroup();</p><p> btnOk=new JButton("確定");</p><p> btnOk.setToolTipText("保存注冊信息");</p>
32、;<p> btnCancel=new JButton("返回");</p><p> btnCancel.setToolTipText("返回登錄窗口");</p><p> btnClear=new JButton("清空");</p><p> btnClear.setToolT
33、ipText("清空注冊信息");</p><p> pnlRegister.setLayout(null);</p><p> lblUserName.setBounds(30,80,100,30);</p><p> txtUserName.setBounds(110,85,120,20);</p><p>
34、lblPassword.setBounds(30,141,100,30);</p><p> pwdUserPassword.setBounds(110,146,120,20);</p><p> lblConfirmPass.setBounds(30,166,100,30);</p><p> pwdConfirmPass.setBounds(110,171
35、,120,20);</p><p> lblGender.setBounds(30,191,100,30);</p><p> rbtnMale.setBounds(110,196,60,20);</p><p> rbtnFemale.setBounds(190,196,60,20);</p><p> lblAge.setBoun
36、ds(30,216,100,30);</p><p> txtAge.setBounds(110,221,120,20);</p><p> lblEmail.setBounds(30,241,100,30);</p><p> txtEmail.setBounds(110,246,120,20);</p><p> btnOk.se
37、tBounds(246,166,80,25);</p><p> btnCancel.setBounds(246,201,80,25);</p><p> btnClear.setBounds(246,241,80,25);</p><p> Font fontstr=new Font("宋體",Font.PLAIN,12);</
38、p><p> lblUserName.setFont(fontstr);</p><p> lblGender.setFont(fontstr);</p><p> lblPassword.setFont(fontstr);</p><p> lblConfirmPass.setFont(fontstr);</p><
39、p> lblAge.setFont(fontstr);</p><p> lblEmail.setFont(fontstr);</p><p> rbtnMale.setFont(fontstr);</p><p> rbtnFemale.setFont(fontstr);</p><p> txtUserName.setFo
40、nt(fontstr);</p><p> txtEmail.setFont(fontstr);</p><p> btnOk.setFont(fontstr);</p><p> btnCancel.setFont(fontstr);</p><p> btnClear.setFont(fontstr);</p>&
41、lt;p> rbtnMale.setOpaque(false); </p><p> rbtnFemale.setOpaque(false);</p><p> pnlRegister.add(lblUserName);</p><p> pnlRegister.add(lblPassword);</p><p> pnl
42、Register.add(lblConfirmPass);</p><p> pnlRegister.add(lblEmail);</p><p> pnlRegister.add(lblAge);</p><p> pnlRegister.add(txtAge);</p><p> pnlRegister.add(txtUserNa
43、me);</p><p> pnlRegister.add(txtEmail);</p><p> pnlRegister.add(pwdUserPassword);</p><p> pnlRegister.add(pwdConfirmPass);</p><p> pnlRegister.add(btnOk);</p>
44、<p> pnlRegister.add(btnCancel);</p><p> pnlRegister.add(btnClear);</p><p> pnlRegister.add(rbtnMale);</p><p> pnlRegister.add(rbtnFemale);</p><p> btngGend
45、er.add(rbtnMale);</p><p> btngGender.add(rbtnFemale); </p><p> this.setSize(360,313);</p><p> this.setVisible(true);</p><p> this.setResizable(false);</p>
46、<p> btnOk.addActionListener(this);</p><p> btnCancel.addActionListener(this);</p><p> btnClear .addActionListener(this);</p><p><b> }</b></p><p&g
47、t; public void actionPerformed(ActionEvent ae)</p><p><b> {</b></p><p> Object source=new Object();</p><p> source=ae.getSource();</p><p> if (source.e
48、quals(btnOk)) {</p><p> register();</p><p><b> }</b></p><p> if (source.equals(btnCancel)) </p><p><b> {</b></p><p>
49、 new Login();</p><p> this.dispose();</p><p><b> }</b></p><p> if (source.equals(btnClear)) {</p><p> txtUserName.setText("");</p&g
50、t;<p> pwdUserPassword.setText("");</p><p> pwdConfirmPass.setText("");</p><p> txtAge.setText("");</p><p> txtEmail.setText("");
51、</p><p><b> }</b></p><p><b> }</b></p><p> public void register()</p><p><b> {</b></p><p> Register_Customer data
52、=new Register_Customer();</p><p> data.custName = txtUserName.getText();</p><p> data.custPassword = pwdUserPassword.getText();</p><p> data.age = txtAge.getText();&
53、lt;/p><p> data.sex = rbtnMale.isSelected()?"男":"女";</p><p> data.email = txtEmail.getText();</p><p><b> //chenmin</b></p><
54、;p> if(data.custName.length()==0)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"用戶名不能為空");</p><p><b> return;</b></p>
55、<p><b> }</b></p><p> if(data.custPassword.length()==0)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"密碼不能為空");</p>
56、;<p><b> return;</b></p><p><b> }</b></p><p> if(!data.custPassword.equals(pwdConfirmPass.getText()))</p><p><b> {</b></p><
57、;p> JOptionPane.showMessageDialog(null,"密碼兩次輸入不一致,請重新輸入"); return;</p><p><b> }</b></p><p> int age=Integer.parseInt(txtAge.getText());</p><p> if (ag
58、e<=0||age>100){</p><p> JOptionPane.showMessageDialog(null,"年齡輸入不合法");</p><p><b> return;</b></p><p> }int Found_flag=0; //判斷標(biāo)志</p><p&
59、gt; for (int i=0;i<data.email.length();i++)</p><p><b> {</b></p><p> if(data.email.charAt(i)=='@')</p><p><b> {</b></p><p> Foun
60、d_flag++;</p><p><b> }</b></p><p><b> }</b></p><p> if(Found_flag!=1)</p><p><b> {</b></p><p> JOptionPane.showM
61、essageDialog(null,"電子郵箱格式不正確,請重新輸入");</p><p><b> return;</b></p><p><b> }</b></p><p> data_test dt=new data_test();</p><p> dt.a
62、ddData("1",data.custName, data.custPassword, data.sex, data.age, data.email);</p><p><b> try</b></p><p><b> {</b></p><p> Socket toServer;</p
63、><p> toServer = new Socket(strServerIp,1001);</p><p> ObjectOutputStream streamToServer=new ObjectOutputStream (toServer.getOutputStream());</p><p> streamToServer.writeObject
64、((Register_Customer)data); BufferedReader fromServer=new BufferedReader(new InputStreamReader(toServer.getInputStream()));</p><p> String status=fromServer.readLine();</p><p> JOpti
65、onPane op=new JOptionPane();</p><p> op.showMessageDialog(null,status);</p><p> if(status.equals(data.custName+"注冊成功"))</p><p><b> {</b></p><p>
66、; txtUserName.setText("");</p><p> pwdUserPassword.setText("");</p><p> pwdConfirmPass.setText("");</p><p> txtAge.setText("");</p>
67、<p> txtEmail.setText("");</p><p><b> }</b></p><p> streamToServer.close();</p><p> fromServer.close();</p><p><b> }</b>&l
68、t;/p><p> catch(InvalidClassException e1)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"類錯誤!");</p><p><b> }</b></p
69、><p> catch(NotSerializableException e2)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"對象未序列化!");</p><p><b> }</b><
70、/p><p> catch(IOException e3)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"不能寫入到指定服務(wù)器!");</p><p><b> }</b></p>
71、<p><b> } </b></p><p> public static void main(String args[])</p><p><b> {</b></p><p> new Register("127.0.0.1");</p><p><
72、;b> }</b></p><p><b> } </b></p><p><b> 登錄界面代碼:</b></p><p> package t_test;</p><p> import javax.swing.*;</p><p> im
73、port java.awt.*;</p><p> import java.awt.event.*;</p><p> import java.net.*;</p><p> import java.sql.ResultSet;</p><p> import java.sql.Statement;</p><p&
74、gt; import java.io.*;</p><p> public class Login extends JFrame implements ActionListener {</p><p> private static final long serialVersionUID = -8965773902056088264L;</p><p> p
75、rivate JPanel pnlLogin;</p><p> private JButton btnLogin, btnRegister, btnExit;</p><p> private JLabel lblServer, lblUserName, lblPassword, lblLogo;</p><p> private JTextField tx
76、tUserName, txtServer;</p><p> private JPasswordField pwdPassword;</p><p> private String strServerIp;</p><p> private Dimension scrnsize;</p><p> private Toolkit to
77、olkit = Toolkit.getDefaultToolkit();</p><p> public Login() {</p><p> super("登錄");</p><p> pnlLogin = new JPanel();</p><p> this.getContentPane().add(pnlL
78、ogin);</p><p> lblServer = new JLabel("服務(wù)器:");</p><p> lblUserName = new JLabel("用戶名:");</p><p> lblPassword = new JLabel("密碼:");</p><p&g
79、t; txtServer = new JTextField(20);</p><p><b> try {</b></p><p> InetAddress address = InetAddress.getLocalHost();</p><p> String ip=address.getHostAddress();</p&g
80、t;<p> System.out.print(ip);</p><p> txtServer.setText(ip);</p><p> } catch (UnknownHostException e) {</p><p> e.printStackTrace();</p><p><b> }</b
81、></p><p> txtUserName = new JTextField(20);</p><p> pwdPassword = new JPasswordField(20);</p><p> btnLogin = new JButton("登錄");</p><p> btnLogin.setToo
82、lTipText("登錄到服務(wù)器");</p><p> btnRegister = new JButton("注冊");</p><p> btnRegister.setToolTipText("注冊新用戶");</p><p> btnExit = new JButton("退出&quo
83、t;);</p><p> btnExit.setToolTipText("退出系統(tǒng)");</p><p> pnlLogin.setLayout(null);</p><p> lblServer.setBounds(50, 100, 100, 30);</p><p> txtServer.setBounds(
84、150, 100, 120, 25);</p><p> lblUserName.setBounds(50, 130, 100, 30);</p><p> txtUserName.setBounds(150, 130, 120, 25);</p><p> lblPassword.setBounds(50, 160, 100, 30);</p>
85、<p> pwdPassword.setBounds(150, 160, 120, 25);</p><p> btnLogin.setBounds(50, 200, 80, 25);</p><p> btnRegister.setBounds(130, 200, 80, 25);</p><p> btnExit.setBounds(210,
86、 200, 80, 25);</p><p> Font fontstr = new Font("宋體", Font.PLAIN, 12);</p><p> lblServer.setFont(fontstr);</p><p> txtServer.setFont(fontstr);</p><p> lblU
87、serName.setFont(fontstr);</p><p> txtUserName.setFont(fontstr);</p><p> lblPassword.setFont(fontstr);</p><p> pwdPassword.setFont(fontstr);</p><p> btnLogin.setFont
88、(fontstr);</p><p> btnRegister.setFont(fontstr);</p><p> btnExit.setFont(fontstr);</p><p> pnlLogin.add(lblServer);</p><p> pnlLogin.add(txtServer);</p><
89、p> pnlLogin.add(lblUserName);</p><p> pnlLogin.add(txtUserName);</p><p> pnlLogin.add(lblPassword);</p><p> pnlLogin.add(pwdPassword);</p><p> pnlLogin.add(btnL
90、ogin);</p><p> pnlLogin.add(btnRegister);</p><p> pnlLogin.add(btnExit);</p><p> setResizable(false);</p><p> setSize(340, 260);</p><p> setVisible(tr
91、ue);</p><p> btnLogin.addActionListener(this);</p><p> btnRegister.addActionListener(this);</p><p> btnExit.addActionListener(this);</p><p> }public void actionPer
92、formed(ActionEvent ae) {</p><p> Object source = ae.getSource();</p><p> if (source.equals(btnLogin)) {</p><p> if (txtUserName.getText().equals("")</p><p>
93、; || pwdPassword.getText().equals("")) {</p><p> JOptionPane op1 = new JOptionPane();</p><p> op1.showMessageDialog(null, "用戶名或密碼不能為空");</p><p><b> } e
94、lse {</b></p><p> strServerIp = txtServer.getText();</p><p><b> login();</b></p><p><b> }</b></p><p><b> }</b></p>
95、<p> if (source.equals(btnRegister)) {</p><p> strServerIp = txtServer.getText();</p><p> this.dispose();</p><p> new Register(strServerIp);</p><p><b>
96、}</b></p><p> if (source == btnExit) {</p><p> System.exit(0);</p><p><b> }</b></p><p> } // actionPerformed()結(jié)束</p><p> public void
97、 login() {</p><p> try{data_test dt=new data_test();</p><p> Statement st=dt.oneConnection.createStatement();</p><p> String sql="select* from peopleMessege";</p>
98、<p> //st.executeQuery(sql);</p><p> ResultSet es=st.executeQuery(sql);</p><p> }catch(Exception e){</p><p><b> }</b></p><p><b> }</b&g
99、t;</p><p> new ChatRoom(getTitle(), strServerIp);</p><p> }public static void main(String args[]) {</p><p> new Login();</p><p><b> }</b></p>&l
100、t;p><b> } </b></p><p> 聊天界面與功能代碼:</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import java.util.EventListener;</p><
101、;p> import java.io.*;</p><p> import java.net.*;</p><p> public class ClientFrame extends Frame implements ActionListener{</p><p> //窗體應(yīng)該有發(fā)送按鈕、文本框用來輸入東西、List列表用來顯示信息</p>
102、;<p> Button connectbutton=new Button("連接");</p><p> Button sendbutton=new Button("發(fā)送");</p><p> TextField userid=new TextField(10);</p><p> TextField
103、 myid=new TextField(10);</p><p> List list =new List();</p><p> TextField content=new TextField(20);</p><p> TextField servername=new TextField(20);</p><p> Label l
104、abel=new Label("服務(wù)器地址:");</p><p> Label labe2=new Label("聊 天 信 息:");</p><p> Label labe3=new Label("好 友 賬 號:");</p><p> Label labe4=new Label("
105、;本 人 賬 號:");</p><p> Socket socket;</p><p> public ClientFrame(){</p><p> super("聊天窗體");</p><p> sendbutton.addActionListener(this);</p><p
106、> connectbutton.addActionListener(this);</p><p> Panel p1=new Panel();</p><p> p1.add(labe4);</p><p> p1.add(myid);</p><p> p1.add(label);</p><p>
107、 p1.add(servername);</p><p> p1.add(connectbutton);</p><p> Panel p2=new Panel();</p><p> p2.add(labe3);</p><p> p2.add(userid);</p><p> p2.add(labe2)
108、;</p><p> p2.add(content);</p><p> p2.add(sendbutton);</p><p> sendbutton.setEnabled(false);</p><p> Panel p3=new Panel();</p><p> p3.setLayout(new Bo
109、rderLayout());</p><p> p3.add("South",p2);</p><p> p3.add(list);</p><p> this.add("South",p1);</p><p> this.add(p3);</p><p> this.
110、setSize(600,600);</p><p><b> }</b></p><p> public void actionPerformed(ActionEvent e) {</p><p> if(e.getSource()==connectbutton){//連接服務(wù)器按鈕作用是連接服務(wù)器</p><p>
111、;<b> //連接服務(wù)器</b></p><p><b> try{</b></p><p> socket=new Socket(servername.getText(),9000);</p><p> //必須馬上發(fā)一個消息,表明自己的身份</p><p><b> try
112、{</b></p><p> OutputStream out=socket.getOutputStream();</p><p> PrintWriter pw=new PrintWriter(out,true);//強(qiáng)制把流寫出來</p><p> pw.println("**" + myid.getText()); //使
113、用特殊符號,表明這是該用戶第一次發(fā)送消息</p><p> myid.setEnabled(false);</p><p> servername.setEnabled(false);</p><p> sendbutton.setEnabled(true);</p><p> }catch(Exception ex)</p&g
114、t;<p><b> {</b></p><p> ex.printStackTrace();</p><p><b> }</b></p><p> connectbutton.setEnabled(false);</p><p> javax.swing.JOpti
115、onPane.showMessageDialog(this,"連接成功");</p><p> //啟動接收線程,并把輸入流和list列表同時交給線程</p><p> new ClientReceiveThread(socket.getInputStream(),list).start();</p><p><b> }<
116、/b></p><p> catch(Exception ex){</p><p> javax.swing.JOptionPane.showMessageDialog(this,"連接服務(wù)器失敗");</p><p> ex.printStackTrace();</p><p><b> }<
117、;/b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> //發(fā)送信息, 需要添加對方的賬號信息</p><p><b> try{&l
118、t;/b></p><p> OutputStream out=socket.getOutputStream();</p><p> PrintWriter pw=new PrintWriter(out,true);</p><p> pw.println(userid.getText() +":"+ content.getText(
119、));</p><p> list.add("本人 :"+content.getText()+"\t");</p><p> content.setText("");</p><p> }catch(Exception ex)</p><p><b> {</
120、b></p><p> ex.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b
121、></p><p> import java.awt.*;</p><p> import java.io.*;</p><p> import java.net.*;</p><p> public class ClientReceiveThread extends Thread{</p><p>
122、InputStream in;</p><p> List list;</p><p> public ClientReceiveThread(InputStream in,List list){</p><p> //在下面完成參數(shù)傳遞</p><p> this.in=in;</p><p> this.
123、list=list;</p><p><b> }</b></p><p> public void run(){</p><p><b> try{</b></p><p> BufferedReader br=new BufferedReader(new InputStreamReade
124、r(in));</p><p> while(true){</p><p> String str=br.readLine();//得不到值會阻塞</p><p> list.add(str);//得到的信息往窗體上的list里寫,list會自動更新顯示</p><p><b> }</b></p>
125、<p> }catch(Exception e){}</p><p><b> }</b></p><p><b> }</b></p><p> import java.awt.*;</p><p> import java.io.*;</p><p&g
126、t; import java.net.*;</p><p> public class ClientReceiveThread extends Thread{</p><p> InputStream in;</p><p> List list;</p><p> public ClientReceiveThread(InputS
127、tream in,List list){</p><p> //在下面完成參數(shù)傳遞</p><p> this.in=in;</p><p> this.list=list;</p><p><b> }</b></p><p> public void run(){</p>
128、<p><b> try{</b></p><p> BufferedReader br=new BufferedReader(new InputStreamReader(in));</p><p> while(true){</p><p> String str=br.readLine();//得不到值會阻塞</
129、p><p> list.add(str);//得到的信息往窗體上的list里寫,list會自動更新顯示</p><p><b> }</b></p><p> }catch(Exception e){}</p><p><b> }</b></p><p><b&g
130、t; }</b></p><p> import java.io.*;</p><p> import java.net.*;</p><p> import java.util.*;</p><p> public class QQServer{</p><p> public static
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計---聊天室系統(tǒng)
- java課程設(shè)計--聊天室系統(tǒng)
- java課程設(shè)計-聊天程序
- 基于java即時聊天系統(tǒng)設(shè)計與實(shí)現(xiàn)-
- java課程設(shè)計聊天小程序
- java網(wǎng)絡(luò)聊天室課程設(shè)計
- java課程設(shè)計報告--聊天小程序
- java課程設(shè)計---java聊天室的系統(tǒng)的設(shè)計與開發(fā)
- 基于java技術(shù)的即時聊天系統(tǒng)實(shí)現(xiàn)
- java課程設(shè)計--簡單的網(wǎng)絡(luò)聊天程序
- 網(wǎng)絡(luò)編程課程設(shè)計-java聊天室
- 局域網(wǎng)聊天程序java課程設(shè)計
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設(shè)計報告
- java課程設(shè)計之簡單聊天室
- java課程設(shè)計報告---利用java實(shí)現(xiàn)簡單聊天室
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設(shè)計報告
- java課程設(shè)計報告--利用java設(shè)計簡單聊天對話框
- java課程設(shè)計---java聊天室的系統(tǒng)的設(shè)計與開發(fā)(含代碼)
- java課程設(shè)計---java聊天室的系統(tǒng)的設(shè)計與開發(fā)(含代碼)
- 畢業(yè)論文 基于java即時聊天系統(tǒng)的設(shè)計與實(shí)現(xiàn)
評論
0/150
提交評論