《Java程序設計》課程設計大作業(yè)服務端聊天系統(tǒng)

上傳人:仙*** 文檔編號:26912622 上傳時間:2021-08-14 格式:DOC 頁數(shù):21 大?。?46.05KB
收藏 版權申訴 舉報 下載
《Java程序設計》課程設計大作業(yè)服務端聊天系統(tǒng)_第1頁
第1頁 / 共21頁
《Java程序設計》課程設計大作業(yè)服務端聊天系統(tǒng)_第2頁
第2頁 / 共21頁
《Java程序設計》課程設計大作業(yè)服務端聊天系統(tǒng)_第3頁
第3頁 / 共21頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《Java程序設計》課程設計大作業(yè)服務端聊天系統(tǒng)》由會員分享,可在線閱讀,更多相關《《Java程序設計》課程設計大作業(yè)服務端聊天系統(tǒng)(21頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、 2011—2012學年第一學期 《Java程序設計》課程大作業(yè) 題目: 服務端聊天系統(tǒng) 專業(yè): 計算機 班級: 計算機1班 學號: 090400224 姓名: 馬英俊 教師: 楊樹林 日期:2011年 12月 22 日 項目 內(nèi)容 單項分值 總分 選題 1.題目明確,系統(tǒng)功能較集中 4 8 2.

2、題目難度適宜,有一定的綜合性 4 功能實現(xiàn) 3.功能完整,能夠正確運行 6 24 4.模塊劃分合理,程序結構清晰 6 5.界面設計合理、易用、協(xié)調(diào) 6 6.設計與實現(xiàn)程序 6 規(guī)范性及文檔 7.代碼規(guī)范性及注釋 5 10 8.文檔內(nèi)容齊全,格式規(guī)范 5 總體效果 9.完成總體質(zhì)量 6 12 10.軟件功能及技術水平 6 答辯 11.講解清楚明了,功能演示流暢 6 6 評語 總分 一. 課程設計目的 JAVA程序設計是計算機相關專業(yè)的必修專業(yè)基礎課程,其實踐性、應用性很強。實踐是必不可少的一個重要環(huán)節(jié)。JAVA程序

3、設計的設計目的是加深對理論內(nèi)容的理解和掌握,更加系統(tǒng)地掌握程序設計及其在開發(fā)中的廣泛應用,基本方法及技巧,為綜合運用所學知識,利用軟件工程為基礎進行軟件開發(fā)、并在實踐應用方面打下一定基礎。 二. 課程設計的實驗環(huán)境 運行windows 2007或XP以上微機系統(tǒng),JDK,NETBEAN。 三. 課程設計主要內(nèi)容 Java語言的學習熱潮并沒有因為時間的推移而消退,相反,由于計算機技術的發(fā)展所帶來新應用的出現(xiàn),Java越來越流行,這種情況是以往程序設計語言在其生存周期內(nèi)所不多見的。Java語言之所以這樣長盛不衰,一是因為其眾多的技術特點與現(xiàn)今的應用十分合拍,可以覆蓋大部分的需求;二是因為S

4、UN公司不斷推出新的版本,完善Java自身的功能。有了這兩點,Java語言成為程序員首選的程序設計開發(fā)工具就在情理之中了。 服務端聊天系統(tǒng)是一個方便于兩端用戶溝通的軟件,通過輸入偵聽方的端口號(例如:8888)來啟動服務。當服務啟動時,可進行聊天;當停止服務時,聊天信息將不再接受。 四. 詳細設計 程序詳細設計代碼如下: package org.Adam; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import .*; impor

5、t java.io.*; import org.Adam.PortConf; import org.Adam.ServerListen; /** * * @author Administrator */ public class ChatServer extends JFrame implements ActionListener{ public static int port = 8888;//服務端的偵聽端口 ServerSocket serverSocket;//服務端Socket Image icon;//程序圖標 JComboBox com

6、bobox;//選擇發(fā)送消息的接受者 JTextArea messageShow;//服務端的信息顯示 JScrollPane messageScrollPane;//信息顯示的滾動條 JTextField showStatus;//顯示用戶連接狀態(tài) JLabel sendToLabel,messageLabel; JTextField sysMessage;//服務端消息的發(fā)送 JButton sysMessageButton;//服務端消息的發(fā)送按鈕 UserLinkList userLinkList;//用戶鏈表 //建立菜單欄 JMenuBar

7、jMenuBar = new JMenuBar(); //建立菜單組 JMenu serviceMenu = new JMenu ("服務(V)"); //建立菜單項 JMenuItem portItem = new JMenuItem ("端口設置(P)"); JMenuItem startItem = new JMenuItem ("啟動服務(S)"); JMenuItem stopItem=new JMenuItem ("停止服務(T)"); JMenuItem exitItem=new JMenuItem ("退出(X)"); JMenu he

8、lpMenu=new JMenu ("幫助(H)"); JMenuItem helpItem=new JMenuItem ("幫助(H)"); //建立工具欄 JToolBar toolBar = new JToolBar(); //建立工具欄中的按鈕組件 JButton portSet;//啟動服務端偵聽 JButton startServer;//啟動服務端偵聽 JButton stopServer;//關閉服務端偵聽 JButton exitButton;//退出按鈕 //框架的大小 Dimension faceSize = new

9、Dimension(400, 600); ServerListen listenThread; JPanel downPanel ; GridBagLayout girdBag; GridBagConstraints girdBagCon; /** * 服務端構造函數(shù) */ public ChatServer(){ init();//初始化程序 //添加框架的關閉事件處理 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); //

10、設置框架的大小 this.setSize(faceSize); //設置運行時窗口的位置 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2, (int) (screenSize.height - faceSize.getHeight()) / 2); this.setResizable(false); this.s

11、etTitle("聊天室服務端"); //設置標題 //程序圖標 icon = getImage("icon.gif"); this.setIconImage(icon); //設置程序圖標 this.setVisible(true); /** * 程序初始化函數(shù) */ public void init(){ Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); //添加菜單欄 serviceMenu

12、.add (portItem); serviceMenu.add (startItem); serviceMenu.add (stopItem); serviceMenu.add (exitItem); jMenuBar.add (serviceMenu); helpMenu.add (helpItem); jMenuBar.add (helpMenu); setJMenuBar (jMenuBar); //初始化按鈕 portSet = new JButton("端口設置"); startServer = new JButt

13、on("啟動服務"); stopServer = new JButton("停止服務" ); exitButton = new JButton("退出" ); //將按鈕添加到工具欄 toolBar.add(portSet); toolBar.addSeparator();//添加分隔欄 toolBar.add(startServer); toolBar.add(stopServer); toolBar.addSeparator();//添加分隔欄 toolBar.add(exitButton); contentPane.add(to

14、olBar,BorderLayout.NORTH); //初始時,令停止服務按鈕不可用 stopServer.setEnabled(false); stopItem .setEnabled(false); //為菜單欄添加事件監(jiān)聽 portItem.addActionListener(this); startItem.addActionListener(this); stopItem.addActionListener(this); exitItem.addActionListener(this); helpItem.addActi

15、onListener(this); //添加按鈕的事件偵聽 portSet.addActionListener(this); startServer.addActionListener(this); stopServer.addActionListener(this); exitButton.addActionListener(this); combobox = new JComboBox(); combobox.insertItemAt("所有人",0); combobox.setSelectedIndex(0);

16、 messageShow = new JTextArea(); messageShow.setEditable(false); //添加滾動條 messageScrollPane = new JScrollPane(messageShow, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); messageScrollPane.setPreferredSize(new Dimension(400,400)); messageSc

17、rollPane.revalidate(); showStatus = new JTextField(35); showStatus.setEditable(false); sysMessage = new JTextField(24); sysMessage.setEnabled(false); sysMessageButton = new JButton(); sysMessageButton.setText("發(fā)送"); //添加系統(tǒng)消息的事件偵聽 sysMessage.addActionListener(this);

18、 sysMessageButton.addActionListener(this); sendToLabel = new JLabel("發(fā)送至:"); messageLabel = new JLabel("發(fā)送消息:"); downPanel = new JPanel(); girdBag = new GridBagLayout(); downPanel.setLayout(girdBag); girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0; girdBagCo

19、n.gridy = 0; girdBagCon.gridwidth = 3; girdBagCon.gridheight = 2; girdBagCon.ipadx = 5; girdBagCon.ipady = 5; JLabel none = new JLabel(" "); girdBag.setConstraints(none,girdBagCon); downPanel.add(none); girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0; g

20、irdBagCon.gridy = 2; girdBagCon.insets = new Insets(1,0,0,0); girdBagCon.ipadx = 5; girdBagCon.ipady = 5; girdBag.setConstraints(sendToLabel,girdBagCon); downPanel.add(sendToLabel); girdBagCon = new GridBagConstraints(); girdBagCon.gridx =1; girdBagCon.gridy = 2; girdBag

21、Con.anchor = GridBagConstraints.LINE_START; girdBag.setConstraints(combobox,girdBagCon); downPanel.add(combobox); girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0; girdBagCon.gridy = 3; girdBag.setConstraints(messageLabel,girdBagCon); downPanel.add(messageLabel);

22、 girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 1; girdBagCon.gridy = 3; girdBag.setConstraints(sysMessage,girdBagCon); downPanel.add(sysMessage); girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 2; girdBagCon.gridy = 3; girdBag.setConstraints(sysMessa

23、geButton,girdBagCon); downPanel.add(sysMessageButton); girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0; girdBagCon.gridy = 4; girdBagCon.gridwidth = 3; girdBag.setConstraints(showStatus,girdBagCon); downPanel.add(showStatus); contentPane.add(messageScrollPane,

24、BorderLayout.CENTER); contentPane.add(downPanel,BorderLayout.SOUTH); //關閉程序時的操作 this.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){ stopService(); System.exit(0); } } ); } /** * 事件處理 */ public void actionP

25、erformed(ActionEvent e) { Object obj = e.getSource(); if (obj == startServer || obj == startItem) { //啟動服務端 startService(); } else if (obj == stopServer || obj == stopItem) { //停止服務端 int j=JOptionPane.showConfirmDialog( this,"真的停止服務嗎?","停止服務", JOptionPane.YES_OPTION,JOp

26、tionPane.QUESTION_MESSAGE); if (j == JOptionPane.YES_OPTION){ stopService(); } } else if (obj == portSet || obj == portItem) { //端口設置 //調(diào)出端口設置的對話框 PortConf portConf = new PortConf(this); portConf.setVisible(true); } else if (obj == exitButton || obj == exitI

27、tem) { //退出程序 int j=JOptionPane.showConfirmDialog( this,"真的要退出嗎?","退出", JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE); if (j == JOptionPane.YES_OPTION){ stopService(); System.exit(0); } } else if (obj == helpItem) { //菜單欄中的幫助 //調(diào)出幫助對話框 Help h

28、elpDialog = new Help(this); helpDialog.setVisible(true); } else if (obj == sysMessage || obj == sysMessageButton) { //發(fā)送系統(tǒng)消息 sendSystemMessage(); } } /** * 啟動服務端 */ public void startService(){ try{ serverSocket = new ServerSocket(port,10); messageShow.appen

29、d("服務端已經(jīng)啟動,在"+port+"端口偵聽...\n"); startServer.setEnabled(false); startItem.setEnabled(false); portSet.setEnabled(false); portItem.setEnabled(false); stopServer .setEnabled(true); stopItem .setEnabled(true); sysMessage.setEnabled(true); } catch (Exception e){

30、 //System.out.println(e); } userLinkList = new UserLinkList(); listenThread = new ServerListen(serverSocket,combobox, messageShow,showStatus,userLinkList); listenThread.start(); } /** * 關閉服務端 */ public void stopService(){ try{ //向所有人發(fā)送服務器關閉的消息 sendStopToAll();

31、 listenThread.isStop = true; serverSocket.close(); int count = userLinkList.getCount(); int i =0; while( i < count){ Node node = userLinkList.findUser(i); node.input .close(); node.output.close(); node.socket.close(); i ++; } stopServer .setEnable

32、d(false); stopItem .setEnabled(false); startServer.setEnabled(true); startItem.setEnabled(true); portSet.setEnabled(true); portItem.setEnabled(true); sysMessage.setEnabled(false); messageShow.append("服務端已經(jīng)關閉\n"); combobox.removeAllItems(); combobox.addItem("所有

33、人"); } catch(Exception e){ //System.out.println(e); } } /** * 向所有人發(fā)送服務器關閉的消息 */ public void sendStopToAll(){ int count = userLinkList.getCount(); int i = 0; while(i < count){ Node node = userLinkList.findUser(i); if(node == null) { i ++; con

34、tinue; } try{ node.output.writeObject("服務關閉"); node.output.flush(); } catch (Exception e){ //System.out.println("$$$"+e); } i++; } } /** * 向所有人發(fā)送消息 */ public void sendMsgToAll(String msg){ int count = userLinkList.getCount();//用戶總

35、數(shù) int i = 0; while(i < count){ Node node = userLinkList.findUser(i); if(node == null) { i ++; continue; } try{ node.output.writeObject("系統(tǒng)信息"); node.output.flush(); node.output.writeObject(msg); node.output.flush(); } catch (Except

36、ion e){ //System.out.println("@@@"+e); } i++; } sysMessage.setText(""); } /** * 向客戶端用戶發(fā)送消息 */ public void sendSystemMessage(){ String toSomebody = combobox.getSelectedItem().toString(); String message = sysMessage.getText() + "\n"; messageShow.app

37、end(message); //向所有人發(fā)送消息 if(toSomebody.equalsIgnoreCase("所有人")){ sendMsgToAll(message); } else{ //向某個用戶發(fā)送消息 Node node = userLinkList.findUser(toSomebody); try{ node.output.writeObject("系統(tǒng)信息"); node.output.flush(); node.output.writeObject(message);

38、 node.output.flush(); } catch(Exception e){ //System.out.println("!!!"+e); } sysMessage.setText("");//將發(fā)送消息欄的消息清空 } } /** * 通過給定的文件名獲得圖像 */ Image getImage(String filename) { URLClassLoader urlLoader = (URLClassLoader)this.getClass(). getClassLoader();

39、 URL url = null; Image image = null; url = urlLoader.findResource(filename); image = Toolkit.getDefaultToolkit().getImage(url); MediaTracker mediatracker = new MediaTracker(this); try { mediatracker.addImage(image, 0); mediatracker.waitForID(0); } catch (InterruptedEx

40、ception _ex) { image = null; } if (mediatracker.isErrorID(0)) { image = null; } return image; } public static void main(String[] args) { ChatServer app = new ChatServer(); } } 五. 測試分析 服務端聊天系統(tǒng)初始化界面如圖(1)所示。 圖(1) 服務端聊天系統(tǒng)端口設置界面如圖(2)所示。 圖(2)

41、服務端聊天系統(tǒng)啟動服務界面如圖(3)所示。 圖(3) 服務端聊天系統(tǒng)發(fā)送消息結果如圖(4)所示。 圖(4) 服務端聊天系統(tǒng)停止服務界面如圖(5)(6)所示。 圖(5) 圖(6) 服務端聊天系統(tǒng)退出界面如圖(7)所示。 圖(7) 六. 課程設計總結 通過這學期學習JAVA語言,我學到很多知識,當然在這期間遇到的困難也數(shù)不勝數(shù)。我想做些復雜的程序,但實在是能力有限,最后終于決定做服務端聊天系統(tǒng)。. 這個服務端聊天系統(tǒng)雖然理論上來講應該很簡單,但當我真正著手的時

42、候才發(fā)現(xiàn),原來自己會的知識太少了。剛剛開始什么我什么都不太懂,于是我參閱了大量的資料,也不停的向同學們請教,終于漸漸的讓我從剛開始連如何運行程序,甚至類的作用等一些最基本的東西都不清楚到最后通過努力終于把程序成功的做出來。 經(jīng)過編寫這個服務端聊天系統(tǒng),我認識到無論什么事情都應該注意細節(jié),雖然是很小的問題,但可以提高自己編程的能力,而且還可以培養(yǎng)自己的嚴謹性,同時還可以為以后的工作積累經(jīng)驗。除此之外讓我對JAVA編程語言又有了更深一步的了解。總之,通過這次課程設計真的讓我學到了很多.。ut2ApOdfXXc02GyBKsKCWw97MrqqWhoj5TL15Zt6jIPYytYCummtARp

43、3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUXyBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09RtsZEYS8Zrd2Yktj8l6jEAzVAjnfbtryLvs

44、m6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VVLRKN7R8psz1BN6oRic5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77Ib7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJtt6QilZxtyrF7d20FbmabcfiixrQKUsVNXB

45、PPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwFJthphEipDFNqnR2HjQKV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU

46、1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ ut2ApOdfXXc02GyBKsKCWw97MrqqWhoj5TL15Zt6jIPYytYCummtARp3v1N5luizi3xh3BhWYreKO8d9g7nmZQoWPJeTLDrw08gVS8DsDQQYGC3cE7moO2tLF0Jf1gK74IUXyBmtIVR97CkrfVqULT5fn2t6MpJR6rbzVPSortZvIj5NB5ndVvSr4iWr1TwLFKgLSPzuhRjQ3CmZU98eUOuijdLSZqPmvrw9zKupxf8WFUG9l2G9277g2rTipa

47、1YpCZEuqxpKBhtVDCooQOzxUz3vJrZmOcijyM62zchmeooTYes8EBMm932tbz2Yo09RtsZEYS8Zrd2Yktj8l6jEAzVAjnfbtryLvsm6oFbfToXVRFFn7OwIYgJlamkUNXJYbz5Rrb7r4VsuR9zpfZFMfsjhcfCA37lNW2VVLRKN7R8psz1BN6oRic5hU5Z6HCxAYqyNPOG8duYbAwqSl20CSg06Dh2sM8HLtgPkIcSkrgOPDpuHBj1LmPk7lYdvC6NNMwL3fwhZFTFVYAARY7lHSSxJ10V3pH3Y19BxYR77I

48、b7CpZSu2tijqe3hKqkKAu9KSkCpHKXUIKvvyJZpg2YijRkqfbGgOvyqKuxNWI9oMnJtt6QilZxtyrF7d20FbmabcfiixrQKUsVNXBPPFUXyQ1fJSKFSUbkgs2DUVQC9sz4JkbgN4Qqv66pyoARjurNFJ3TxyfclZiEePtwFJthphEipDFNqnR2HjQKV2DzWtMPDJQkBcXmovdsjqCTJagjMdLsKPgaD2s0H0vmZGAHt36gyUEZ7UmANk1ndREuBeqdgrx0venqGnsyIB2ilq3SIQrNL4m56t7Z8Y8da5K0KUpn5Nzg4JvjdtfFHyt82AoGQkXo4VBLmLEiy2P7HtHBho07rCfttxodYDPPdtQsO7wxD0J6fKKlGm4woDzplhtRr2XgqN13hqy59zU1GegDyQniHNTaVSieueFQcYfUCJwd3vk5I7YKmhunDmIZ

展開閱讀全文
溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!