欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      java聊天室課程設(shè)計(jì)報(bào)告

      時(shí)間:2019-05-12 17:01:41下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《java聊天室課程設(shè)計(jì)報(bào)告》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《java聊天室課程設(shè)計(jì)報(bào)告》。

      第一篇:java聊天室課程設(shè)計(jì)報(bào)告

      課程設(shè)計(jì)報(bào)告

      2011 ~ 2012 學(xué)年 第 一 學(xué)期

      學(xué) 號(hào) 20104053020 姓 名 胡勇昌 院 系 信息工程與技術(shù) 專 業(yè) 計(jì)算機(jī)工程系 課 程 名 稱 JAVA程序設(shè)計(jì) 課程設(shè)計(jì)名稱 局域網(wǎng)內(nèi)的多功能聊天室

      學(xué) 時(shí) 學(xué) 分 1 指 導(dǎo) 教 師 許爍娜

      2011年 12 月 25 日

      目錄

      課程設(shè)計(jì)報(bào)告..........................................................................................................................................1 第1章 引言............................................................................................................................................3 1.1 背景...............................................................................................................................................3 1.2 相關(guān)技術(shù).......................................................................................................................................3 1.2.1 JAVA概述...............................................................................................................................3 1.2.2 Socket......................................................................................................................................3 1.2.3 TCP 三次握手.....................................................................................................................4 1.3 術(shù)語(yǔ)...............................................................................................................................................4 第2章 需求分析與系統(tǒng)設(shè)計(jì)................................................................................................................5 2.1 需求分析.......................................................................................................................................5 2.2 系統(tǒng)設(shè)計(jì).......................................................................................................................................6 2.2.1多用戶在線方案.....................................................................................................................6 2.2.2 系統(tǒng)功能................................................................................................................................6 第3章 系統(tǒng)實(shí)施....................................................................................................................................6 3.1聊天室窗口....................................................................................................................................6 3.2 建立客戶端窗口...........................................................................................................................8 3.3 內(nèi)嵌“私聊”窗口.......................................................................................................................9 3.4客服端類繼承客戶端窗口類,并內(nèi)嵌私聊程序......................................................................10 第4章 測(cè)試..........................................................................................................................................15 4.1 測(cè)試環(huán)境與使用方法.................................................................................................................15 4.2 功能測(cè)試.....................................................................................................................................15 4.2.1聊天室窗口...........................................................................................................................15 4.2.2 客戶端窗口..........................................................................................................................16

      4.2.3 內(nèi)嵌“私聊”窗口..........................................................................................................................16

      參考文獻(xiàn)................................................................................................................................................16

      第1章 引言

      1.1 背景

      網(wǎng)絡(luò)聊天室通常直稱聊天室,是一種人們可以在線交談的網(wǎng)絡(luò)論壇,在同一聊天室的人們通過(guò)廣播消息進(jìn)行實(shí)時(shí)交談。聊天室可以建立在即時(shí)通訊軟件(如MSN Messenger、QQ)、P2P軟件、萬(wàn)維網(wǎng)(如 Halapo,Meebo)等基礎(chǔ)上,萬(wàn)維網(wǎng)方式更為普通和種類繁多,交談的手段不局限于文本,更包括語(yǔ)音、視頻。通常聊天室是按照房間或頻道為單位的,在同一房間或頻道的網(wǎng)人可以實(shí)時(shí)地廣播和閱讀公開(kāi)消息。一般情況下,與其它網(wǎng)絡(luò)論壇、即時(shí)通訊不同的是,聊天室不保存聊天記錄。

      1.2 相關(guān)技術(shù) 1.2.1 JAVA概述

      Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言和java平臺(tái)(即JavaSE, JavaEE, JavaME)的總稱。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開(kāi)發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。

      1.2.2 Socket Socket是java中需一要編寫較低層次的網(wǎng)絡(luò)通信程序(例如Cljent/server應(yīng)用程序)時(shí)提供的一種通訊機(jī)制。Socket是兩個(gè)程序進(jìn)行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通信的端點(diǎn),一般 由一個(gè)地址加上一個(gè)端口號(hào)來(lái)標(biāo)一識(shí)。每個(gè)服務(wù)程序都在一個(gè)眾所周知的端口上提供服 務(wù),而想使用服務(wù)的客戶端程序則需要連接該端口。通過(guò)Socket的數(shù)據(jù)是原始字節(jié)流信 息,通信雙方必須根據(jù)約定的協(xié)議對(duì)數(shù)據(jù)進(jìn)行處理與解釋。

      Socket通信機(jī)制提供了兩種通信.方式:有連接方式(TCP)和無(wú)連接方式(UDP數(shù)

      據(jù)報(bào))。有連接方式中,通信雙方在開(kāi)始時(shí)必須進(jìn)行一次連接過(guò)程,建立一條通信鏈路。通信鏈路提供了可靠的,全雙工的字節(jié)流服務(wù)。無(wú)連接力一式中,通信雙方不存在一個(gè)連 接過(guò)程,一次網(wǎng)絡(luò)I/O以一個(gè)數(shù)據(jù)報(bào)形式進(jìn)行,而每次網(wǎng)絡(luò)I /O可以和不同.主機(jī)的不 同進(jìn)程進(jìn)行。無(wú)連接方式開(kāi)銷小于有連接方式,但是所提供的數(shù)據(jù)傳輸服務(wù)不可靠,不 能保證數(shù)據(jù)報(bào)一定到達(dá)目的地”」·。

      JAVA的有連接通信采用流式I/O模式。Socket是兩個(gè)進(jìn)程間通信鏈的端點(diǎn),每個(gè) Sockct有兩個(gè)流:一個(gè)輸入流和一個(gè)輸出流。只要向Sockct的輸出流寫,一個(gè)進(jìn)程就可 以通過(guò)網(wǎng)絡(luò)連接向其他進(jìn)程發(fā)送數(shù)據(jù);同樣,通過(guò)讀Sockt的輸入流,就可以讀取傳輸 來(lái)的數(shù)據(jù)。

      有連接通信一般要經(jīng)歷以下四個(gè)基本步驟ii

      (1)創(chuàng)建Sockct,建立連接;

      (2)打開(kāi)連接到Sockct的輸入/輸出流;

      (3)按照一定的一腳議對(duì)Socket進(jìn)行讀/寫操作;

      (4)關(guān)閉Socket。

      第(3)步是程序員用來(lái)調(diào)用Socket和實(shí)現(xiàn)程序功能的關(guān)鍵步驟,其他三步在各種 程序中基本相同。

      1.2.3 TCP 三次握手

      TCP協(xié)議通過(guò)三個(gè)報(bào)文段完成連接的建立,這個(gè)過(guò)程稱為三次握手(three-way handshake),過(guò)程如下圖所示。

      1.3 術(shù)語(yǔ)

      暫無(wú)

      第2章 需求分析與系統(tǒng)設(shè)計(jì)

      2.1 需求分析

      從技術(shù)發(fā)面來(lái)看,Java語(yǔ)言的優(yōu)點(diǎn)一要表現(xiàn)在:簡(jiǎn).單、面向?qū)ο?、多線程、安全性 等方面。1.簡(jiǎn)單性

      Java與C++語(yǔ)言灰常相近,但Java比C++簡(jiǎn)單,它拋棄了C++中的一些不是絕對(duì) 必要的功能,如頭文件、頂處理文件、指針、結(jié)構(gòu)、運(yùn)算符重載、多重繼承以及自動(dòng)強(qiáng)迫同型。Java實(shí)現(xiàn)了自動(dòng)的垃圾收集,簡(jiǎn)化了內(nèi)存管理的一作。這使程序一設(shè)計(jì)更加簡(jiǎn)便,同時(shí)減少了出錯(cuò)的可能。2.面向?qū)ο?/p>

      Java提供了簡(jiǎn)單的類機(jī)制和動(dòng)態(tài)的構(gòu)架模型。對(duì)象中封裝了它的狀態(tài)變量和方法,很好地實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,通過(guò)繼承和重載機(jī)制,子類可以使用或重新定義父類或超類所提供的一方法,從而既實(shí)現(xiàn)了代碼的復(fù)用,又提供了一種動(dòng)態(tài)的解決方案。

      Java是一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)一言,它除了數(shù)組、布爾和字符二個(gè)基本數(shù)據(jù)類型外的其它類都是對(duì)象,它不再支持全局變量。在Java中,如果不創(chuàng)建新類就無(wú)法創(chuàng)建程序,Java程序在運(yùn)行時(shí)必須先創(chuàng)建一個(gè)類的實(shí)例,然后才能提交運(yùn)行。

      Java同樣支持繼承特性,Java的類可以從其它類中繼承行為,但Java只支持類的 單重繼承,即每個(gè)類只能從一個(gè)類中繼承。

      Java支持界面,界面允許程序員定義方法但又不立即實(shí)現(xiàn),一個(gè)類可以實(shí)現(xiàn)多個(gè)界面,利用界面可以得到多重繼承的許多優(yōu)點(diǎn)而又沒(méi)有多重繼承的問(wèn)題。3.多線程

      多線程使應(yīng)用程序可以同時(shí)進(jìn)行不同的操作,處理不同的事件。在多線程機(jī)制中,不同的線程處理不同的任務(wù),他們之間互不干涉,不會(huì)由于一處等待影響其他部分,這樣容.易實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互操作。

      Java程序可以有多個(gè)執(zhí)行線程,如可以讓一個(gè)線程進(jìn)行復(fù)雜的計(jì)算,而讓另一個(gè)線 程與用戶進(jìn)行交互,這樣用戶可以在不中斷計(jì)算線程的前提下與系統(tǒng)進(jìn)行交互。多線程保證了較高的執(zhí)行效率。4.安全性

      Java不支持指針,一切對(duì)內(nèi)存的訪問(wèn)都必須通過(guò)對(duì)象的實(shí)例變量來(lái)實(shí)現(xiàn),這樣就防止了程序員使用欺騙手段訪問(wèn)對(duì)象的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。2.2 系統(tǒng)設(shè)計(jì) 2.2.1多用戶在線方案 2.2.2 系統(tǒng)功能

      聊天室程序通常需要完成以下一些基本功能:

      (I)登錄聊天室;

      (2)啟動(dòng)服務(wù)器;

      (3)關(guān)閉服務(wù)器;

      (4)用戶之間的聊天;

      (5)退出聊天室。

      本系統(tǒng)其體功能需求如下:

      (1)聊天室管理員經(jīng)登錄界面登錄到管理界而,即系統(tǒng)的服務(wù)器端。用戶經(jīng)登錄界而 都進(jìn)入聊天大廳。

      (2)不論是管理員還是用戶都需一要在登錄界面輸入正確的用戶名和密碼后才可以登錄 到各自的界面中去。

      (3)系統(tǒng)的兩個(gè)主要界面都是為方便管理員和用戶操作的。首先,管理員進(jìn)入到管理 界而后可以方便的啟動(dòng)/停止服務(wù)器,看到在線用戶的信息和聊人信息、。用戶進(jìn)入到聊天 大廳中可以聊天,查看服務(wù)器狀態(tài)。

      (4)一個(gè)用戶退出聊天室對(duì)其他用戶不能產(chǎn)生影響,而服務(wù)器斷開(kāi)與客戶端的連接則所有的用戶都失去與服務(wù)器的連接。

      (5)用戶的聊天信息錄入,重寫,發(fā)送,接收方便,快捷。

      (6)服務(wù)器狀態(tài),聊天信息和在線用戶人數(shù)及時(shí)刷新。

      (7)聊天室系統(tǒng)運(yùn)行穩(wěn)定、安全性高、性能可靠。

      第3章 系統(tǒng)實(shí)施

      3.1聊天室窗口

      建立服務(wù)端窗口類:窗口程序如下 import java.awt.Button;import java.awt.Color;import java.awt.FlowLayout;import java.awt.List;import java.awt.TextArea;

      import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTextField;

      public class chatroomW { JFrame f=new JFrame(“局域網(wǎng)聊天室”);JLabel label1=new JLabel(“端口”);JLabel label2=new JLabel(“發(fā)送”);Button button1=new Button(“啟動(dòng)服務(wù)”);Button button2=new Button(“發(fā)送”);Button button3=new Button(“刷新用戶列表”);JTextField text1=new JTextField(5);JTextField text2=new JTextField(25);TextArea area1=new TextArea(26,84);List userList=new List(27);JScrollPane scro1,scro2;public chatroomW(){

      chat();} public void chat(){

      area1.setBackground(new Color(204,255,255));

      area1.setForeground(Color.black);

      userList.setBackground(Color.gray);

      userList.setForeground(Color.white);

      f.setLayout(new FlowLayout());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();

      } public static void main(String args[]){

      new chatroomW();} public void myEvent(){} }

      3.2 建立客戶端窗口

      import java.awt.Color;import java.awt.FlowLayout;import java.awt.TextArea;

      import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;import javax.swing.JTextField;

      public class ClientW {

      JFrame f=new JFrame(“聊天室”);JScrollPane js;TextArea area=new TextArea(19,67);JTextField text1=new JTextField(12);JTextField text2=new JTextField(5);JTextField text3=new JTextField(5);JTextField text4=new JTextField(20);JButton button1=new JButton(“連接”);JButton button2=new JButton(“發(fā)送”);JButton button3=new JButton(“私聊”);JLabel label1=new JLabel(“服務(wù)器地址”);JLabel label2=new JLabel(“服務(wù)器端口”);JLabel label3=new JLabel(“昵稱”);public ClientW(){ } public void chat(){

      area.setBackground(new Color(204,255,255));area.setForeground(Color.black);f.setLayout(new FlowLayout());f.setBounds(300,200,500,410);f.add(label1);f.add(text1);f.add(label2);chat();//

      }

      } 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();public void myEvent(){} public static void main(String args[]){ } new ClientW();

      3.3 內(nèi)嵌“私聊”窗口

      class netchat{ JFrame f=new JFrame(“私聊”);JLabel label1,label2,label3;Button button1,button2;JTextField text1,text2,text3,text4;TextArea textarea;

      f.setLayout(new FlowLayout());f.setBounds(300,200,400,310);//設(shè)置窗口大小和位置; label1=new JLabel(“對(duì)方主機(jī)”);label2=new JLabel(“本地端口”);label3=new JLabel(“對(duì)方端口”);button1=new Button(“連接”);button2=new Button(“發(fā)送”);text1=new JTextField(7);text2=new JTextField(3);text3=new JTextField(3);public netchat(){ f.setResizable(false);//讓窗口大小固定;

      // 閉;

      } text4=new JTextField(20);textarea=new TextArea(13,53);textarea.setEditable(false);textarea.setBackground(new Color(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();

      3.4客服端類繼承客戶端窗口類,并內(nèi)嵌私聊程序

      import java.awt.Button;import java.awt.Color;import java.awt.FlowLayout;import java.awt.TextArea;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.Socket;

      import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;

      public class Client extends ClientW{ Socket s=null;public Client(){} public void myEvent(){

      button1.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent e){

      try{

      s=new Socket(text1.getText().toString(),Integer.parseInt(text2.getText()));

      new Thread(new LinkC()).start();

      area.append(“[系統(tǒng)消息]:連接成功n”);

      }catch(Exception ex){area.append(“[系統(tǒng)消息]:連接失敗n”);}

      }

      });

      button2.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent e){

      new SentC();

      }

      });

      button3.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent e){

      new netchat();

      }

      });} public static void main(String args[]){

      new Client();}

      class LinkC implements Runnable{

      public void run(){

      try{

      BufferedReader bufIn=

      new BufferedReader(new InputStreamReader(s.getInputStream()));

      String msg=null;

      PrintStream ps=new PrintStream(s.getOutputStream());

      ps.println(text3.getText());

      while(true){

      try{

      while((msg=bufIn.readLine())!=null){

      area.append(msg+“n”);

      }

      }catch(Exception ex){break;}

      }

      }catch(Exception e){}

      }

      }

      class SentC {

      public SentC(){

      try{

      PrintStream ps=new PrintStream(s.getOutputStream());

      if(!text4.getText().equals(“")){

      ps.println(text4.getText());//

      area.append(text4.getText());//服務(wù)器自動(dòng)會(huì)返回

      text4.setText(”“);

      }

      }catch(Exception e){}

      }

      } //私聊類

      class netchat{

      JFrame f=new JFrame(”私聊“);

      JLabel label1,label2,label3;

      Button button1,button2;

      JTextField text1,text2,text3,text4;

      TextArea textarea;

      public netchat(){

      f.setLayout(new FlowLayout());

      f.setBounds(300,200,400,310);

      //設(shè)置窗口大小和位置;

      f.setResizable(false);

      //讓窗口大小固定;

      label1=new JLabel(”對(duì)方主機(jī)“);

      label2=new JLabel(”本地端口“);

      label3=new JLabel(”對(duì)方端口“);

      button1=new Button(”連接“);

      button2=new Button(”發(fā)送“);

      text1=new JTextField(7);

      text2=new JTextField(3);

      text3=new JTextField(3);

      text4=new JTextField(20);

      textarea=new TextArea(13,53);

      textarea.setEditable(false);

      textarea.setBackground(new Color(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();

      }

      public void myEvent(){

      f.addWindowListener(new WindowAdapter()

      {

      public void windowClosing(WindowEvent e){

      try{

      DatagramSocket ds=new DatagramSocket();

      byte[] buf=”對(duì)方已下線“.getBytes();

      DatagramPacket dp=

      new DatagramPacket(buf,buf.length,InetAddress.getByName(text1.getText()),Integer.parseInt(text3.getText()));

      ds.send(dp);

      ds.close();

      }catch(Exception ex){}

      }

      });

      button2.addActionListener(new ActionListener()//事件源是button2

      {

      public void actionPerformed(ActionEvent e)

      {

      if(!text4.getText().equals(”“))

      new Thread(new Send()).start();

      }

      });

      button1.addActionListener(new ActionListener()//事件源是button1

      {

      public void actionPerformed(ActionEvent e)

      {

      new Thread(new Rece()).start();

      }

      });

      }

      class Send implements Runnable{

      public void run(){ try{UdpSend();}catch(Exception e){textarea.append(”[系統(tǒng)消息]:發(fā)送失敗n“);}}

      public void UdpSend()throws Exception{

      DatagramSocket ds=new DatagramSocket();

      byte[] buf=text4.getText().getBytes();

      DatagramPacket dp=

      new DatagramPacket(buf,buf.length,InetAddress.getByName(text1.getText()),Integer.parseInt(text3.getText()));

      textarea.append(”[我]: “+text4.getText()+”n“);

      text4.setText(”“);

      ds.send(dp);

      ds.close();

      }

      }

      class Rece implements Runnable{

      int index=0;

      public void run(){

      try{

      UdpRece();

      }catch(Exception e){

      textarea.append(”[系統(tǒng)消息]:連接失敗n“);

      }

      }

      public void UdpRece()throws Exception{

      while(true){

      DatagramSocket ds=new DatagramSocket(Integer.parseInt(text2.getText()));

      if(index==0){textarea.append(”[系統(tǒng)消息]:連接成功n“);}

      byte[] buf=new byte[1024];

      DatagramPacket dp=new DatagramPacket(buf,buf.length);

      ds.receive(dp);

      String data=new String(dp.getData(),0,dp.getLength());

      textarea.append(dp.getAddress()+” “+data+”n");

      index++;

      ds.close();

      }

      }

      }

      } } 第4章 測(cè)試

      4.1 測(cè)試環(huán)境與使用方法

      測(cè)試環(huán)境:測(cè)試環(huán)境:電腦安裝Java JDK 服務(wù)器端使用方法:打開(kāi)服務(wù)啟動(dòng),點(diǎn)擊“啟動(dòng)服務(wù)”,提示“啟動(dòng)服務(wù)成功”表示正常啟動(dòng)。否則,先關(guān)閉服務(wù)端,再重新打開(kāi),啟動(dòng)服務(wù)??蛻舳耸褂梅椒ǎ捍蜷_(kāi)客戶端,輸入“服務(wù)器地址”,點(diǎn)擊“連接”,如成功連接系統(tǒng)提示“成功連接”,并收到服務(wù)端返回的“歡迎”信息,否則關(guān)閉并重新啟動(dòng)。

      私聊功能使用方法:點(diǎn)擊面板上的“私聊”按鈕,輸入對(duì)方的IP地址,點(diǎn)擊連接,如連接成功系統(tǒng)會(huì)提示“連接成功”。當(dāng)對(duì)方斷開(kāi)時(shí)會(huì)收到“對(duì)方已下線”提示。如果要同時(shí)跟多人私聊,則要改變本地端口值,并告知對(duì)方。

      4.2 功能測(cè)試 4.2.1聊天室窗口

      4.2.2 客戶端窗口

      4.2.3 內(nèi)嵌“私聊”窗口

      參考文獻(xiàn)

      用JAVA程序?qū)崿F(xiàn)參考文獻(xiàn)的錄入與生成 劉瑋瑋 2009 《福建電腦》

      基于Java移動(dòng)Agent系統(tǒng)的安全參考模型 周屹 2007 《黑龍江工程學(xué)院學(xué)報(bào)》

      嵌入式Java虛擬機(jī)的性能優(yōu)化技術(shù) 李允 2004 《計(jì)算機(jī)工程》

      第二篇:Java聊天室課程設(shè)計(jì)報(bào)告

      UML課程設(shè)計(jì)

      題 目

      網(wǎng)絡(luò)聊天程序開(kāi)發(fā)設(shè)計(jì)與實(shí)現(xiàn)

      學(xué) 號(hào):201515614376 姓 名: 衛(wèi)國(guó)輝 指導(dǎo)教師:

      完成時(shí)間:2017年 12月

      0

      目錄

      1.摘要.............................................................................................................................2 2.緒論.............................................................................................................................0 2.開(kāi)發(fā)環(huán)境.....................................................................................................................0 3.需求分析....................................................................................................................1

      3.1程序簡(jiǎn)介...........................................................................................................1 3.2程序功能...........................................................................................................1 4.系統(tǒng)設(shè)計(jì).....................................................................................................................2

      4.1概要設(shè)計(jì)...........................................................................................................2 4.2詳細(xì)設(shè)計(jì)............................................................................................................2 5.測(cè)試.............................................................................................................................7 6.結(jié)論.............................................................................................................................9 參考文獻(xiàn)......................................................................................................................10

      摘要

      本次訓(xùn)練主要是考查了對(duì)JAVA程序設(shè)計(jì)的綜合運(yùn)用,設(shè)計(jì)一個(gè)Socket通信的聊天程序,用戶可以通過(guò)程序進(jìn)行聊天通信,但不支持用戶自定義表情及圖片的發(fā)送。

      本程序設(shè)計(jì)也用到了一些相關(guān)的標(biāo)準(zhǔn)Java的類,給程序設(shè)計(jì)帶來(lái)了許多的方便,但用那些要切記加相應(yīng)的類的包,還有一些構(gòu)造方法和個(gè)別接口方法。

      本程序可以實(shí)現(xiàn)用戶之間的一些簡(jiǎn)單的交互,雖然功能較少,但是我想通過(guò)這次程序設(shè)計(jì)來(lái)熟悉并且學(xué)習(xí)更多關(guān)于JAVA編程的東西,來(lái)便于以后可以使用。

      關(guān)鍵詞:java聊天

      1.緒論

      對(duì)于一個(gè)選擇網(wǎng)絡(luò)編程的人來(lái)說(shuō),必須要有足夠的細(xì)心和耐心,因?yàn)榫幊桃话銇?lái)說(shuō)是很枯燥的乏味的,而且程序會(huì)越來(lái)越復(fù)雜,它所用到的符號(hào)、標(biāo)記很多,所以不能出點(diǎn)小錯(cuò)誤的。還有,我們不能只是看程序,要學(xué)會(huì)把自己學(xué)的自己拿去實(shí)踐,自己去編一些程序,培養(yǎng)自己的動(dòng)手能力,掌握一些編程技巧,熟練運(yùn)用自己學(xué)到的理論知識(shí),這樣在以后才能開(kāi)發(fā)出屬于自己的東西。

      如今,隨著科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)已成為了我們生活中必不可少的設(shè)備了,而掌握計(jì)算機(jī)知識(shí)和運(yùn)用,又成了我們每一個(gè)人的目標(biāo)了?,F(xiàn)在IT行業(yè)的飛速發(fā)展,無(wú)不應(yīng)正了以前、現(xiàn)在、將來(lái)計(jì)算機(jī)行業(yè)都是科學(xué)發(fā)展的主導(dǎo)行業(yè)。而這些基本上都建立在程序上的,所以程序員對(duì)計(jì)算機(jī)行業(yè)來(lái)說(shuō),可想而知有多么的重要了,他們所付出的每一滴汗水都將推動(dòng)這個(gè)行業(yè)的發(fā)展。

      現(xiàn)在我就用JAVA語(yǔ)言編寫一個(gè)簡(jiǎn)單的程序——Java聊天程序。將所學(xué)的基本知識(shí)用到其中去,這里包括了構(gòu)造方法,創(chuàng)建圖形界面,引用類等等。這不僅能鍛煉我的實(shí)踐能力,同時(shí)也進(jìn)一步復(fù)習(xí)和鞏固了我所學(xué)的理論知識(shí)。對(duì)以前沒(méi)有學(xué)好的還有督促和促進(jìn)作用。而且,根據(jù)需要,還可以了解一些課外的知識(shí)。增加自己的知識(shí)面。

      2.開(kāi)發(fā)環(huán)境

      在開(kāi)發(fā)此聊天程序時(shí),該項(xiàng)目所使用的軟件開(kāi)發(fā)環(huán)境如下:

      操作系統(tǒng):Windows 7

      開(kāi)發(fā)工具:eclipse3.2及其VE插件

      0

      Eclipse簡(jiǎn)介

      Eclipse 是一個(gè)開(kāi)放源代碼的、基于 Java 的可擴(kuò)展開(kāi)發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過(guò)插件組件構(gòu)建開(kāi)發(fā)環(huán)境。幸運(yùn)的是,Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開(kāi)發(fā)工具。

      Eclipse是著名的跨平臺(tái)的自由集成開(kāi)發(fā)環(huán)境(IDE)。最初主要用來(lái)Java語(yǔ) 言開(kāi)發(fā),但是目前亦有人通過(guò)插件使其作為其他計(jì)算機(jī)語(yǔ)言比如C++和Python的開(kāi)發(fā)工具。Eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持 使得Eclipse擁有其他功能相對(duì)固定的IDE軟件很難具有的靈活性。許多軟件開(kāi)發(fā)商以Eclipse為框架開(kāi)發(fā)自己的IDE。

      Eclipse 最初由OTI和IBM兩家公司的IDE產(chǎn)品開(kāi)發(fā)組創(chuàng)建,起始于1999年4月。IBM提供了最初的Eclipse代碼基礎(chǔ),包括Platform、JDT 和PDE。目前由IBM牽頭,圍繞著Eclipse項(xiàng)目已經(jīng)發(fā)展成為了一個(gè)龐大的Eclipse聯(lián)盟,有150多家軟件公司參與到Eclipse項(xiàng)目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一個(gè)開(kāi)發(fā)源碼項(xiàng)目,它其實(shí)是 Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其開(kāi)放源碼,任何人都可以免費(fèi)得到,并可以在此基礎(chǔ)上開(kāi)發(fā)各自的插件,因此越來(lái)越受人們關(guān)注。近期還有包括Oracle在內(nèi)的許多 大公司也紛紛加入了該項(xiàng)目,并宣稱Eclipse將來(lái)能成為可進(jìn)行任何語(yǔ)言開(kāi)發(fā)的IDE集大成者,使用者只需下載各種語(yǔ)言的插件即可。

      3.需求分析

      3.1程序簡(jiǎn)介

      隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,人們?cè)絹?lái)越多的依賴于網(wǎng)絡(luò),為了方便人們的生活,網(wǎng)絡(luò)聊天自然成為了熱點(diǎn),各種工具到處都是。此程序便是模仿其他聊天工具設(shè)計(jì)的,當(dāng)然只是實(shí)現(xiàn)了比較少的功能,可以進(jìn)行基本的聊天。

      3.2 程序功能

      該程序功能:該程序分為2個(gè)部分,一個(gè)是客戶端程序,一個(gè)是服務(wù)端程序,需要先開(kāi)啟服務(wù)器,再開(kāi)啟客戶端才能使用,客戶端程序提供了相互通信、清空聊天記錄的等功能,服務(wù)端則用于接受客戶端的請(qǐng)求,記錄客戶端的信息等。

      4.系統(tǒng)設(shè)計(jì) 4.1概要設(shè)計(jì)

      此聊天程序共有2個(gè)部分,客戶端和服務(wù)器??蛻舳酥邪?個(gè)Java文件,為主類client.java,;服務(wù)器端只有一個(gè)主類Server.java。

      程序流程圖:

      服務(wù)器程序結(jié)構(gòu)

      客戶端程序結(jié)構(gòu)

      4.2詳細(xì)設(shè)計(jì)

      (1)服務(wù)器程序?qū)崿F(xiàn)

      本程序采用的是Socket通信來(lái)設(shè)計(jì)的,建立一個(gè)主類Server.java,其中主類中還包括服務(wù)器線程 然后在其構(gòu)造方法加載程序所需的組件,構(gòu)造方法如下:

      public ClientThread(Socket socket){

      try {

      this.socket = socket;

      reader = new BufferedReader(new InputStreamReader(socket

      .getInputStream()));

      writer = new PrintWriter(socket.getOutputStream());

      // 接收客戶端的基本用戶信息

      String inf = reader.readLine();

      StringTokenizer st = new StringTokenizer(inf, “@”);

      user = new User(st.nextToken(), st.nextToken());

      // 反饋連接成功信息

      writer.println(user.getName()+ user.getIp()+ “與服務(wù)器連接成功!”);

      writer.flush();

      // 反饋當(dāng)前在線用戶信息

      if(clients.size()> 0){

      String temp = “";

      for(int i = clients.size()1;i >= 0;i--){

      clients.get(i).getWriter().println(”ADD@“ + user.getName()+ user.getIp());

      clients.get(i).getWriter().flush();

      }

      } catch(IOException e){

      e.printStackTrace();

      }

      }

      @SuppressWarnings(”deprecation“)

      public void run(){// 不斷接收客戶端的消息,進(jìn)行處理。

      String message = null;

      while(true){

      try {

      message = reader.readLine();// 接收客戶端消息

      if(message.equals(”CLOSE“))// 下線命令

      {

      contentArea.append(this.getUser().getName()

      + this.getUser().getIp()+ ”下線!rn“);

      // 斷開(kāi)連接釋放資源

      reader.close();

      writer.close();

      socket.close();

      // 向所有在線用戶發(fā)送該用戶的下線命令

      for(int i = clients.size()1;i >= 0;i--){

      if(clients.get(i).getUser()== user){

      ClientThread temp = clients.get(i);

      clients.remove(i);// 刪除此用戶的服務(wù)線程

      temp.stop();// 停止這條服務(wù)線程

      return;

      }

      }

      } else {

      dispatcherMessage(message);// 轉(zhuǎn)發(fā)消息

      }

      } catch(IOException e){

      e.printStackTrace();

      }

      }

      } 其運(yùn)行截圖如下圖所示:

      (2)、客戶端主程序

      本程序使用了默認(rèn)的卡片布局方式,對(duì)窗口的大小進(jìn)行設(shè)置,讓聊天窗口能

      夠居中顯示,以及登錄主窗口類。

      實(shí)現(xiàn)窗口布局功能和類的調(diào)用功能的主要代碼如下:

      * 連接服務(wù)器

      *

      * @param port

      * @param hostIp

      * @param name

      */ public boolean connectServer(int port, String hostIp, String name){

      // 連接服務(wù)器

      try {

      socket = new Socket(hostIp, port);// 根據(jù)端口號(hào)和服務(wù)器ip建立連接

      writer = new PrintWriter(socket.getOutputStream());

      reader = new BufferedReader(new InputStreamReader(socket

      .getInputStream()));

      // 發(fā)送客戶端用戶基本信息(用戶名和ip地址)

      sendMessage(name + ”@“ + socket.getLocalAddress().toString());

      // 開(kāi)啟接收消息的線程

      messageThread = new MessageThread(reader, textArea);

      messageThread.start();

      isConnected = true;// 已經(jīng)連接上了

      return true;

      } catch(Exception e){

      textArea.append(”與端口號(hào)為:“ + port + ” IP地址為:“ + hostIp

      + ” 的服務(wù)器連接失敗!“ + ”rn“);

      isConnected = false;// 未連接上

      return false;

      } }

      (5)、聊天窗口程序設(shè)計(jì)

      程序提供了發(fā)送文字和關(guān)閉聊天的的簡(jiǎn)單功能。以下是實(shí)現(xiàn)程序的主要方

      法:

      * 發(fā)送消息

      *

      * @param message

      */ public void sendMessage(String message){

      writer.println(message);

      writer.flush();}

      /**

      * 客戶端主動(dòng)關(guān)閉連接

      */ @SuppressWarnings(”deprecation“)public synchronized boolean closeConnection(){

      try {

      sendMessage(”CLOSE");// 發(fā)送斷開(kāi)連接命令給服務(wù)器

      messageThread.stop();// 停止接受消息線程

      // 釋放資源

      if(reader!= null){

      reader.close();

      }

      if(writer!= null){

      writer.close();

      }

      if(socket!= null){

      socket.close();

      }

      isConnected = false;

      return true;

      } catch(IOException e1){

      e1.printStackTrace();

      isConnected = true;

      return false;

      } } 其運(yùn)行截圖如下圖所示:

      5.測(cè)試

      程序在編碼過(guò)程中,出現(xiàn)了許多的問(wèn)題,有的是因?yàn)槌绦虻耐晟菩圆粔蚝枚斐傻?,有的是因?yàn)榧夹g(shù)不夠而無(wú)法解決。通過(guò)不停的調(diào)試,修改,多數(shù)已發(fā)現(xiàn)的問(wèn)題都已完善,但依然存在少數(shù)的問(wèn)題無(wú)法解決。例如,在用戶注冊(cè)這個(gè)功能中,當(dāng)用戶的用戶名重復(fù)時(shí),服務(wù)器會(huì)出現(xiàn)用戶名重復(fù)的異常,服務(wù)器就不會(huì)響應(yīng)。

      6.結(jié)論

      通過(guò)這次程序的實(shí)訓(xùn),我知道了自己在許多地方的不足,雖然書上的程序基本能看懂,但是自己的編程實(shí)踐能力實(shí)在是欠缺,而且我知道了,Java語(yǔ)言最重要的不僅僅是學(xué)好語(yǔ)法,而Java中最重要的還是要理解它的面向?qū)ο缶幊痰乃枷耄斫馑拿嫦驅(qū)ο蟮奶卣?。因?yàn)閷W(xué)習(xí)任何一門語(yǔ)言最重要的就是理解它的思想,要做到知其然,并且知其所以然。要學(xué)會(huì)真正的編寫程序,而不僅僅是把語(yǔ)法背的滾瓜爛熟。還要經(jīng)常寫代碼,做到一邊寫一邊理解,這樣才能真正的實(shí)現(xiàn)學(xué)習(xí)Java語(yǔ)言的目的。

      這次實(shí)訓(xùn)也告訴了我,光有書上的知識(shí)對(duì)我們來(lái)說(shuō)是遠(yuǎn)遠(yuǎn)不夠的,如果我們要想讓自己在編程上有所突破的話,我們必須拓展自己的知識(shí)面,此次程序設(shè)計(jì)就給我增加了不少的知識(shí),讓我在編程方面學(xué)到了許多編程所需要的東西,還有也鍛煉我的耐性,磨礪了我的意志,在錯(cuò)誤面前反復(fù)修改但是從不氣餒。

      所以,這次實(shí)訓(xùn)讓我受益匪淺,不管是在知識(shí)方面還是做事方面,都交會(huì)了我許多。同時(shí)還鞏固了以前所學(xué)的知識(shí),學(xué)到了不少書本上沒(méi)有的知識(shí);學(xué)到了很多java編程知識(shí),并學(xué)會(huì)了簡(jiǎn)單的使用Eclipse來(lái)開(kāi)發(fā)Java程序的一些使用技巧這次課程設(shè)計(jì)是對(duì)我本學(xué)期所學(xué)的知識(shí)的檢驗(yàn),由此我發(fā)現(xiàn)了不少的問(wèn)題??梢哉f(shuō)它給了我一次自我評(píng)估的機(jī)會(huì)。通過(guò)設(shè)計(jì)讓我知道了那些方面我還是有欠缺的,促使我花時(shí)間彌補(bǔ)。

      臨近考試,時(shí)間太緊迫,致使程序?qū)崿F(xiàn)的功能在方法上也許不是很完美,但我以后會(huì)多向老師請(qǐng)教,自己也要加強(qiáng)對(duì)Java 的學(xué)習(xí)。努力進(jìn)一步提高自己的編程水平。

      參考文獻(xiàn)

      [1]耿祥義.Java課程設(shè)計(jì):清華大學(xué)出版社第二版,2008年11月.[2]馬皓.Java語(yǔ)言程序設(shè)計(jì):機(jī)械工業(yè)出版社,2007年3月 [3]孫衛(wèi)琴.java 面向?qū)ο缶幊?電子工業(yè)出版社.2007 [4]劉海軍.Java程序設(shè)計(jì).中國(guó)鐵道出版社,2006 [5]鄭阿奇,姜乃松,殷紅先.Java實(shí)用教程.電子工業(yè)出版社,2005 [6]張廣彬、王小寧、高靜, Java課程設(shè)計(jì)案例精編(第二版)清華大學(xué)出版社,2011年

      第三篇:JAVA課程設(shè)計(jì)之簡(jiǎn)單聊天室

      課程設(shè)計(jì)報(bào)告

      課程名稱 課程代碼 題

      目 年級(jí)/專業(yè)/班 學(xué)生姓名 學(xué)

      號(hào) 指導(dǎo)老師 開(kāi)題時(shí)間 完成時(shí)間 Java程序設(shè)計(jì)

      簡(jiǎn)單聊天室

      孟青 09308910203

      I

      : : : : : : : : :

      摘要..............................................................................................................................................................I 1 引言...........................................................................................................................................................1 2 設(shè)計(jì)任務(wù)與目的.......................................................................................................................................1 3 需求分析...................................................................................................................................................1 3.1 系統(tǒng)用例圖............................................................................................................................1 3.2 主要用例分析........................................................................................................................2 4 系統(tǒng)設(shè)計(jì).................................................................................................................................................3 4.1 總體設(shè)計(jì)........................................................................................................................................3 4.1.1 系統(tǒng)類圖.............................................................................................................................3 4.1.2 主要時(shí)序圖.........................................................................................................................6 4.2 詳細(xì)設(shè)計(jì)........................................................................................................................................8 4.2.1 ChatServer類......................................................................................................................9 4.2.2 ServerListen類..................................................................................................................10 4.2.3 ServerReceive類...............................................................................................................10 4.2.4 PortConf類.......................................................................................................................11 4.2.5 Help類..............................................................................................................................11 4.2.6 UserLinkList類.................................................................................................................11 4.2.7 Node類.............................................................................................................................12 4.2.8 ChatClient類.....................................................................................................................13 4.2.9 ConnectConf類.................................................................................................................15 4.2.10 UserConf類....................................................................................................................15 4.2.11 Help類............................................................................................................................16 4.2.12 ClientReceive類.............................................................................................................16 5 系統(tǒng)實(shí)現(xiàn).................................................................................................................................................16 5.1 系統(tǒng)主要用例的實(shí)現(xiàn)..................................................................................................................16 5.1.1 聊天室服務(wù)端用例運(yùn)行效果...........................................................................................17 5.1.2 聊天室客戶端用例運(yùn)行效果...........................................................................................18 5.2 系統(tǒng)發(fā)布與運(yùn)行..........................................................................................................................18 5.2.1 系統(tǒng)打包...........................................................................................................................18 5.2.2 系統(tǒng)發(fā)布與運(yùn)行...............................................................................................................18 6 結(jié)束語(yǔ).....................................................................................................................................................19 參考文獻(xiàn).......................................................................................................................................................19 致謝...............................................................................................................................................................19 附錄A:系統(tǒng)源程序...................................................................................................................................20

      1、ChatServer類..........................................................................................................................20

      2、ServerListen類.......................................................................................................................31

      3、ServerReceive類.....................................................................................................................32

      4、UserLinkList類.......................................................................................................................36

      5、Node類...................................................................................................................................39

      I

      6、PortConf類.............................................................................................................................40

      7、Help類....................................................................................................................................42

      8、ChatClient類...........................................................................................................................44

      9、ClientReceive類.....................................................................................................................56

      10、ConnectConf類.....................................................................................................................58

      11、UserConf類...........................................................................................................................61

      12、Help類..................................................................................................................................63 附錄B:編碼規(guī)范.......................................................................................................................................66

      II

      摘要

      本課程設(shè)計(jì)我們通過(guò)聊天室的代碼實(shí)現(xiàn),體會(huì)到將理論知識(shí)與具體實(shí)現(xiàn)相結(jié)合,鞏固Java相關(guān)方法。聊天室共分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶端發(fā)來(lái)的消息,客戶端需登陸到服務(wù)器才可以實(shí)現(xiàn)正常的聊天功能。本聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個(gè)借助網(wǎng)絡(luò)進(jìn)行人際交往的平臺(tái),也是網(wǎng)絡(luò)與現(xiàn)實(shí)最貼近的實(shí)用型網(wǎng)站。

      關(guān)鍵詞:(3-5個(gè),每個(gè)之間用分號(hào)隔開(kāi))聊天室;多線程;C/S模式

      Abstract

      The course design our chat room through the code, understand the theoretical knowledge and practical realization of the combination, the consolidation of java-related methods.Chat client and the server is divided into two parts, the client, server-side program is mainly responsible for listening client sent the news to be landing the client to the server will be realized only if the normal chat.The chat system to exchange-based chat, in order to provide customers with a network platform for interpersonal communication, but also network with the reality of the practical is the closest site.Key words: Chat rooms, multi-threaded, C / S mode I

      簡(jiǎn)單聊天室 引言

      隨著互聯(lián)網(wǎng)逐步普及,人們的生活和工作也越來(lái)越離不開(kāi)信息網(wǎng)絡(luò)的支持,而聊天室是人們最常見(jiàn),最直接的網(wǎng)上交流的方式。本聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個(gè)借助網(wǎng)絡(luò)進(jìn)行人際交往的平臺(tái),也是網(wǎng)絡(luò)與現(xiàn)實(shí)最貼近的實(shí)用型網(wǎng)站。本文所介紹的網(wǎng)絡(luò)聊天系統(tǒng)是基于開(kāi)放的JAVA應(yīng)用程序開(kāi)發(fā)設(shè)計(jì)的,其主要特性是能動(dòng)態(tài)、實(shí)時(shí)的完成信息的傳遞,且具有高效的交互性,更有效的處理客戶請(qǐng)求,且具有脫離數(shù)據(jù)庫(kù)技術(shù)方法,易于維護(hù)和更新的特點(diǎn)。設(shè)計(jì)任務(wù)與目的

      本聊天室程序基于C/S模式,聊天室共分為服務(wù)器端和客戶端兩部分,服務(wù)器端程序主要負(fù)責(zé)偵聽(tīng)客戶端發(fā)來(lái)的消息,客戶端需登陸到服務(wù)器才可以實(shí)現(xiàn)正常的聊天功能。

      通過(guò)本項(xiàng)目的設(shè)計(jì)實(shí)踐,力求熟練掌握GUI程序設(shè)計(jì)、多線程技術(shù)、基于TCP的Socket通信編程。需求分析

      本系統(tǒng)所要實(shí)現(xiàn)的主要功能是為廣大用戶提供一個(gè)借助網(wǎng)絡(luò)進(jìn)行人際交往的平臺(tái)。因?yàn)榉?wù)端采用多線程,所以性能有很大提升。因?yàn)榉?wù)端和客戶端之間采用TCP協(xié)議進(jìn)行網(wǎng)絡(luò)通信,建立的是可靠的、端到端的網(wǎng)絡(luò)連接,所以可靠性和安全性都很好。

      3.1 系統(tǒng)用例圖

      圖3-1 系統(tǒng)用例圖

      3.2 主要用例分析 服務(wù)器端的主要功能如下:

      1,在特定端口上進(jìn)行偵聽(tīng),等待客戶端連接

      2,用戶可以配置服務(wù)端的偵聽(tīng)端口,默認(rèn)端口為8888.3,向已經(jīng)連接到服務(wù)端的用戶發(fā)送系統(tǒng)消息。4,統(tǒng)計(jì)在線人數(shù)

      5,當(dāng)停止服務(wù)時(shí),斷開(kāi)所有的用戶連接??蛻舳说闹饕δ苋缦拢?/p>

      1,連接到已經(jīng)開(kāi)啟的聊天服務(wù)的服務(wù)端。

      2,用戶可以配置要連接服務(wù)器端的IP地址和端口號(hào)。3,用戶可以配置連接后顯示的用戶名。

      4,當(dāng)服務(wù)器端開(kāi)啟的時(shí)候,用戶可以隨時(shí)登錄和注銷。5,用戶可以向所有人或者某一個(gè)人發(fā)送消息。

      系統(tǒng)設(shè)計(jì) 4.1 總體設(shè)計(jì)

      4.1.1 系統(tǒng)類圖

      圖4-1-1 服務(wù)端系統(tǒng)類圖

      圖4-1-2 客戶端系統(tǒng)類圖

      4.1.2 主要時(shí)序圖

      圖4-2-1 服務(wù)端主要時(shí)序類圖

      圖4-2-2 客戶端主要時(shí)序類圖

      4.2 詳細(xì)設(shè)計(jì)

      聊天室服務(wù)器端的設(shè)計(jì)

      聊天室服務(wù)端主要包括7個(gè)類,放在server包中:

      4.2.1 ChatServer類

      圖4-3 ChatServer類圖

      ChatServer.java 包含名為ChatServer的public類,其主要功能為定義服務(wù)器端的界面,添加時(shí)間

      監(jiān)聽(tīng)與時(shí)間處理。調(diào)用ServerListen類來(lái)實(shí)現(xiàn)服務(wù)端用戶上線與下線的監(jiān)聽(tīng),調(diào)用ServerListen來(lái)實(shí)現(xiàn)服務(wù)器端的消息收發(fā)。

      4.2.2 ServerListen類

      圖4-4 ServerListen類圖

      ServerListen.java 該類實(shí)現(xiàn)服務(wù)器用戶上線與下線的監(jiān)聽(tīng)。該類對(duì)用戶上線下線的監(jiān)聽(tīng)是通過(guò)調(diào)用用戶鏈表類(UserLinkList)來(lái)實(shí)現(xiàn)的。當(dāng)用戶上線與下線情況發(fā)生變化時(shí),該類會(huì)對(duì)主類的界面進(jìn)行相應(yīng)的修改。

      4.2.3 ServerReceive類

      圖4-5 ServerReceive類圖

      ServerReceive.java 該類是實(shí)現(xiàn)服務(wù)器消息收發(fā)的類,該類分別定義了向某用戶及所有人發(fā)送消息的方法,發(fā)送的消息會(huì)顯示在主界面類的街面上。

      4.2.4 PortConf類

      圖4-6 PortConf類圖

      PortConf.java

      該類繼承自Jdialog,是用戶對(duì)服務(wù)器端監(jiān)聽(tīng)端口進(jìn)行修改配置的類。

      4.2.5 Help類

      圖4-7 Help類圖

      Help.java

      服務(wù)端程序幫助類。

      4.2.6 UserLinkList類

      圖4-8 UserLinkList類圖

      UserLinkList.java

      用戶鏈表節(jié)點(diǎn)的具體實(shí)現(xiàn)類。該類通過(guò)構(gòu)造函數(shù)構(gòu)造用戶鏈表,定義了添加用戶、刪除用戶、返回用戶數(shù)、根據(jù)用戶名查找用戶、根據(jù)索引查找用戶這5個(gè)方法。

      4.2.7 Node類

      圖4-9 Node類圖

      Node.java 用戶鏈表的節(jié)點(diǎn)類,定義了鏈表中的用戶。該類與前面所講的鏈表節(jié)點(diǎn)Node類的功能相當(dāng)。聊天室客戶端設(shè)計(jì)

      聊天室客戶端主要包括5個(gè)類,放在client包中:

      4.2.8 ChatClient類

      圖4-10 ChatClient類圖

      ChatClient.java 包含名為ChatClient的public類,其主要功能為定義客戶端的界面,添加時(shí)間監(jiān)聽(tīng)與事件處理。該類定義了Connect()與DisConnect()方法實(shí)現(xiàn)與客戶端的連接與斷開(kāi)連接。當(dāng)?shù)顷懙街付ǖ姆?wù)器時(shí),調(diào)用ClientReceive類實(shí)現(xiàn)消息收發(fā),同時(shí)該類還定義了SendMessaga()方法來(lái)其他用戶發(fā)送帶有表情的消息或悄悄話。

      4.2.9 ConnectConf類

      圖4-11 ConnectConf類圖

      ConnectConf.java 該類繼承自Jdialog,是用戶對(duì)所有要連接的服務(wù)器IP及監(jiān)聽(tīng)端口進(jìn)行修改配置的類。

      4.2.10 UserConf類

      圖4-12 UserConf類圖

      UserConf.java

      該類繼承自Jdialog,是用戶對(duì)鏈接到服務(wù)器時(shí)所顯示的用戶名進(jìn)行修改配置的類。

      4.2.11 Help類

      圖4-13 Help類圖

      Help.java 客戶端程序的幫助類。

      4.2.12 ClientReceive類

      圖4-14 ClientReceive類圖

      ClientReceive.java 該類是實(shí)現(xiàn)服務(wù)器端與客戶端消息收發(fā)的類。系統(tǒng)實(shí)現(xiàn)

      5.1 系統(tǒng)主要用例的實(shí)現(xiàn)

      5.1.1 聊天室服務(wù)端用例運(yùn)行效果

      圖5-1 聊天室服務(wù)端用例運(yùn)行效果圖

      5.1.2 聊天室客戶端用例運(yùn)行效果

      圖5-2 聊天室客戶端用例運(yùn)行效果圖

      5.2 系統(tǒng)發(fā)布與運(yùn)行

      5.2.1 系統(tǒng)打包

      使用MyEclipse自帶的打包工具分別將server包和client包中的.class文件打成兩個(gè)Jar包:ChatServer.jar和CharClient.jar。

      5.2.2 系統(tǒng)發(fā)布與運(yùn)行

      將server包和client包中的.class文件打成兩個(gè)Jar包,就可以發(fā)布系統(tǒng)了。直接分別雙擊兩個(gè)Jar包(ChatServer.jar和CharClient.jar),就可以運(yùn)行服務(wù)端和客戶端了。

      結(jié)束語(yǔ)

      Java面向?qū)ο蟪绦蛟O(shè)計(jì)是一門應(yīng)用廣泛并且實(shí)用性極強(qiáng)的高級(jí)程序設(shè)計(jì)語(yǔ)言。通過(guò)本次課程設(shè)計(jì),我們對(duì)面向?qū)ο蟮幕舅枷胗辛诉M(jìn)一步的理解,對(duì)項(xiàng)目的各個(gè)階段的任務(wù)也有了一定的了解。設(shè)計(jì)開(kāi)始階段必須明確設(shè)計(jì)的目的與需求分析,總體設(shè)計(jì)要全面分析聊天室系統(tǒng)的架構(gòu)。通過(guò)這次設(shè)計(jì),使我們認(rèn)識(shí)到體系的架構(gòu)是最重要的,只有準(zhǔn)確的系統(tǒng)設(shè)計(jì)、很好的定義各個(gè)模塊及模塊之間的關(guān)系,才能在編碼階段更輕松的的實(shí)現(xiàn)。

      通過(guò)這次課程設(shè)計(jì),對(duì)我們的邏輯思維能力是一個(gè)很大的鍛煉,它不僅加強(qiáng)了我們的系統(tǒng)思考問(wèn)題的能力,而且還改變了我們以前不好的編程習(xí)慣,雖然花費(fèi)了不少的時(shí)間,但是我們學(xué)到了豐富的知識(shí)。

      另外,此次課程設(shè)計(jì)也提高了我們的團(tuán)對(duì)合作精神,讓我們明白不是不能一個(gè)人能單獨(dú)完成,而是要集思廣益,結(jié)合更多的人的創(chuàng)意思維。讓我們大家深刻的體會(huì)到理論與實(shí)際相結(jié)合的重要性與微妙之處。對(duì)于不同的想法我們都會(huì)集中討論并對(duì)好的意見(jiàn)加以借鑒,在這個(gè)討論的過(guò)程中,還更正了不少我們各自自身對(duì)于某個(gè)知識(shí)點(diǎn)的誤區(qū)。

      這次程序設(shè)計(jì)也是一個(gè)毅力的考驗(yàn)過(guò)程。有時(shí)候往往只是一個(gè)小小的錯(cuò)誤,卻要花出幾小時(shí)甚至是一兩天的時(shí)間才可能發(fā)現(xiàn)它。所以在這個(gè)過(guò)程不能過(guò)于急躁,要很有耐心將程序反復(fù)調(diào)試,參考文獻(xiàn)

      [1] 張廣彬,孟紅蕊,張永寶.Java課程設(shè)計(jì)案例精編[M].北京:清華大學(xué)出版社,2007,1.[2] 黃曉東.Java課程設(shè)計(jì)案例精編[M].北京:中國(guó)水利水電出版社,2004,5.[3] 求是科技.Java信息管理系統(tǒng)開(kāi)發(fā)實(shí)例導(dǎo)航[M].北京:人民郵電出版社,2005,4.[4] 求是科技.Java數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)實(shí)例導(dǎo)航[M].北京:人民郵電出版社,2004,9.[5]廖衛(wèi)東Java程序設(shè)計(jì)實(shí)用指南[M].北京:機(jī)械工業(yè)出版社,2002.1[3] [6]李衛(wèi)華,傅曉東.Java語(yǔ)言基礎(chǔ)及其應(yīng)用[M]北京:中國(guó)水利水電出版社,1996[5]

      致謝

      本次課程由上海杰普公司三為指導(dǎo)老師以及我們?nèi)握n老師郭老師精心輔導(dǎo),讓我們大家深刻的體會(huì)到理論與實(shí)際相結(jié)合的重要性與微妙之處。使我們對(duì)java有了更深刻的認(rèn)識(shí),產(chǎn)生濃厚的學(xué)習(xí)興趣。我們由衷對(duì)他們表示感謝。

      附錄A:系統(tǒng)源程序

      1、ChatServer類

      功能:為定義服務(wù)器端的界面,添加時(shí)間監(jiān)聽(tīng)與時(shí)間處理。調(diào)用ServerListen類來(lái)實(shí)現(xiàn)服務(wù)端用戶上線與下線的監(jiān)聽(tīng),調(diào)用ServerListen來(lái)實(shí)現(xiàn)服務(wù)器端的消息收發(fā)。代碼:

      package server;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;/* * 聊天服務(wù)端的主框架類 */ public class ChatServer extends JFrame implements ActionListener{

      /** * */ private static final long serialVersionUID = 1L;

      public static int port = 8888;//服務(wù)端的偵聽(tīng)端口

      ServerSocket serverSocket;//服務(wù)端Socket JComboBox combobox;//選擇發(fā)送消息的接受者

      JTextArea messageShow;//服務(wù)端的信息顯示

      JScrollPane messageScrollPane;//信息顯示的滾動(dòng)條

      JTextField showStatus;//顯示用戶連接狀態(tài)

      JLabel sendToLabel,messageLabel;JTextField sysMessage;//服務(wù)端消息的發(fā)送

      JButton sysMessageButton;//服務(wù)端消息的發(fā)送按鈕

      UserLinkList userLinkList;//用戶鏈表

      //建立菜單欄

      JMenuBar jMenuBar = new JMenuBar();//建立菜單組

      JMenu serviceMenu = new JMenu(“服務(wù)(V)”);//建立菜單項(xiàng)

      JMenuItem portItem = new JMenuItem(“端口設(shè)置(P)”);JMenuItem startItem = new JMenuItem(“啟動(dòng)服務(wù)(S)”);

      JMenuItem stopItem=new JMenuItem(“停止服務(wù)(T)”);JMenuItem exitItem=new JMenuItem(“退出(X)”);

      JMenu helpMenu=new JMenu(“幫助(H)”);JMenuItem helpItem=new JMenuItem(“幫助(H)”);//建立工具欄

      JToolBar toolBar = new JToolBar();//建立工具欄中的按鈕組件

      JButton portSet;//啟動(dòng)服務(wù)端偵聽(tīng) JButton startServer;//啟動(dòng)服務(wù)端偵聽(tīng) JButton stopServer;//關(guān)閉服務(wù)端偵聽(tīng) JButton exitButton;//退出按鈕

      //框架的大小

      Dimension faceSize = new Dimension(400, 600);

      ServerListen listenThread;JPanel downPanel;GridBagLayout girdBag;GridBagConstraints girdBagCon;/** * 服務(wù)端構(gòu)造函數(shù) */ public ChatServer(){ init();//初始化程序

      //添加框架的關(guān)閉事件處理

      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();//設(shè)置框架的大小

      this.setSize(faceSize);//設(shè)置運(yùn)行時(shí)窗口的位置

      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setLocation((int)(screenSize.widthfaceSize.getHeight())/ 2);this.setResizable(false);this.setTitle(“聊天室服務(wù)端”);//設(shè)置標(biāo)題

      setVisible(true);

      //為服務(wù)菜單欄設(shè)置熱鍵'V'

      serviceMenu.setMnemonic('V');

      //為端口設(shè)置快捷鍵為ctrl+p

      portItem.setMnemonic('P');

      portItem.setAccelerator(KeyEvent.VK_P,InputEvent.CTRL_MASK));

      //為啟動(dòng)服務(wù)快捷鍵為ctrl+s

      startItem.setMnemonic('S');

      startItem.setAccelerator(KeyEvent.VK_S,InputEvent.CTRL_MASK));

      //為端口設(shè)置快捷鍵為ctrl+T

      stopItem.setMnemonic('T');

      stopItem.setAccelerator(KeyEvent.VK_T,InputEvent.CTRL_MASK));

      //為退出設(shè)置快捷鍵為ctrl+x

      exitItem.setMnemonic('X');

      exitItem.setAccelerator(KeyEvent.VK_X,InputEvent.CTRL_MASK));

      //為幫助菜單欄設(shè)置熱鍵'H'

      helpMenu.setMnemonic('H');

      //為幫助設(shè)置快捷鍵為ctrl+p

      helpItem.setMnemonic('H');

      helpItem.setAccelerator(KeyEvent.VK_H,InputEvent.CTRL_MASK));

      }

      /** * 程序初始化函數(shù)

      */ public void init(){

      Container contentPane = getContentPane();

      contentPane.setLayout(new BorderLayout());

      (KeyStroke.getKeyStroke

      (KeyStroke.getKeyStroke

      (KeyStroke.getKeyStroke

      (KeyStroke.getKeyStroke

      (KeyStroke.getKeyStroke

      //添加菜單欄

      serviceMenu.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(“端口設(shè)置”);startServer = new JButton(“啟動(dòng)服務(wù)”);stopServer = new JButton(“停止服務(wù)”);exitButton = new JButton(“退出”);//將按鈕添加到工具欄 toolBar.add(portSet);toolBar.addSeparator();//添加分隔欄 toolBar.add(startServer);toolBar.add(stopServer);toolBar.addSeparator();//添加分隔欄 toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);//初始時(shí),令停止服務(wù)按鈕不可用 stopServer.setEnabled(false);stopItem.setEnabled(false);//為菜單欄添加事件監(jiān)聽(tīng)

      portItem.addActionListener(this);startItem.addActionListener(this);stopItem.addActionListener(this);exitItem.addActionListener(this);helpItem.addActionListener(this);

      //添加按鈕的事件偵聽(tīng)

      portSet.addActionListener(this);startServer.addActionListener(this);stopServer.addActionListener(this);exitButton.addActionListener(this);

      combobox = new JComboBox();combobox.insertItemAt(“所有人”,0);combobox.setSelectedIndex(0);23

      messageShow = new JTextArea();messageShow.setEditable(false);//添加滾動(dòng)條

      messageScrollPane = new JScrollPane(messageShow, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);messageScrollPane.setPreferredSize(new Dimension(400,400));messageScrollPane.revalidate();

      showStatus = new JTextField(35);showStatus.setEditable(false);

      sysMessage = new JTextField(24);sysMessage.setEnabled(false);sysMessageButton = new JButton();sysMessageButton.setText(“發(fā)送”);//添加系統(tǒng)消息的事件偵聽(tīng)

      sysMessage.addActionListener(this);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;girdBagCon.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;girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0);girdBagCon.ipadx = 5;24

      girdBagCon.ipady = 5;girdBag.setConstraints(sendToLabel,girdBagCon);downPanel.add(sendToLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx =1;girdBagCon.gridy = 2;girdBagCon.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);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(sysMessageButton,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,BorderLayout.CENTER);contentPane.add(downPanel,BorderLayout.SOUTH);

      //關(guān)閉程序時(shí)的操作

      this.addWindowListener(new WindowAdapter(){

      public void windowClosing(WindowEvent e){

      stopService();25

      }

      System.exit(0);

      } });/** * 事件處理 */ public void actionPerformed(ActionEvent e){ Object obj = e.getSource();if(obj == startServer || obj == startItem){ //啟動(dòng)服務(wù)端

      startService();} else if(obj == stopServer || obj == stopItem){ //停止服務(wù)端

      int j=JOptionPane.showConfirmDialog(this,“真的停止服務(wù)嗎?”,“停止服務(wù)”,JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);

      if(j == JOptionPane.YES_OPTION){

      stopService();

      } } else if(obj == portSet || obj == portItem){ //端口設(shè)置

      //調(diào)出端口設(shè)置的對(duì)話框

      PortConf portConf = new PortConf(this);

      portConf.setVisible(true);} else if(obj == exitButton || obj == exitItem){ //退出程序

      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)出幫助對(duì)話框

      Help helpDialog = new Help(this);

      helpDialog.setVisible(true);} else if(obj == sysMessage || obj == sysMessageButton){ //發(fā)送系統(tǒng)消息

      sendSystemMessage();} } /** * 啟動(dòng)服務(wù)端 */ public void startService(){ try{

      serverSocket = new ServerSocket(port,10);

      messageShow.append(“服務(wù)端已經(jīng)啟動(dòng),在”+port+“端口偵聽(tīng)...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){

      //System.out.println(e);} userLinkList = new UserLinkList();

      listenThread = new ServerListen(serverSocket,combobox,messageShow,showStatus,userLinkList);listenThread.start();} /** * 關(guān)閉服務(wù)端 */ public void stopService(){ try{

      //向所有人發(fā)送服務(wù)器關(guān)閉的消息

      sendStopToAll();

      listenThread.isStop = true;

      serverSocket.close();

      int count = userLinkList.getCount();

      int i =0;27

      while(i < count){ Node node = userLinkList.findUser(i);

      node.input.close();node.output.close();node.socket.close();

      i ++;} stopServer.setEnabled(false);stopItem.setEnabled(false);startServer.setEnabled(true);startItem.setEnabled(true);portSet.setEnabled(true);portItem.setEnabled(true);sysMessage.setEnabled(false);messageShow.append(“服務(wù)端已經(jīng)關(guān)閉n”);

      combobox.removeAllItems();

      combobox.addItem(“所有人”);} catch(Exception e){

      //System.out.println(e);} } /** * 向所有人發(fā)送服務(wù)器關(guān)閉的消息 */ public void sendStopToAll(){ int count = userLinkList.getCount();

      int i = 0;while(i < count){

      Node node = userLinkList.findUser(i);

      if(node == null){

      i ++;

      continue;

      }

      try{

      node.output.writeObject(“服務(wù)關(guān)閉”);28

      node.output.flush();

      }

      catch(Exception e){

      //System.out.println(“$$$”+e);

      }

      i++;} } /** * 向所有人發(fā)送消息 */ public void sendMsgToAll(String msg){ int count = userLinkList.getCount();//用戶總數(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(Exception e){

      //System.out.println(“@@@”+e);

      }

      i++;} sysMessage.setText(“");} /** * 向客戶端用戶發(fā)送消息 */ public void sendSystemMessage(){ 29

      } String toSomebody = combobox.getSelectedItem().toString();String message = sysMessage.getText()+ ”n“;

      messageShow.append(message);

      //向所有人發(fā)送消息

      if(toSomebody.equalsIgnoreCase(”所有人“)){ sendMsgToAll(message);} else{ //向某個(gè)用戶發(fā)送消息

      Node node = userLinkList.findUser(toSomebody);

      try{

      node.output.writeObject(”系統(tǒng)信息“);

      node.output.flush();

      node.output.writeObject(message);

      node.output.flush();} catch(Exception e){

      //System.out.println(”!!“+e);} sysMessage.setText(”“);//將發(fā)送消息欄的消息清空 } public static void main(String[] args){ try {

      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch(ClassNotFoundException e){

      // TODO Auto-generated catch block

      e.printStackTrace();} catch(InstantiationException e){

      // TODO Auto-generated catch block

      e.printStackTrace();} catch(IllegalAccessException e){

      // TODO Auto-generated catch block

      e.printStackTrace();} catch(UnsupportedLookAndFeelException e){

      // TODO Auto-generated catch block

      e.printStackTrace();} new ChatServer();} 30

      }

      2、ServerListen類

      功能:實(shí)現(xiàn)服務(wù)器用戶上線與下線的監(jiān)聽(tīng)。該類對(duì)用戶上線下線的監(jiān)聽(tīng)是通過(guò)調(diào)用用戶鏈表類(UserLinkList)來(lái)實(shí)現(xiàn)的。當(dāng)用戶上線與下線情況發(fā)生變化時(shí),該類會(huì)對(duì)主類的界面進(jìn)行相應(yīng)的修改。

      代碼:

      package server;

      import javax.swing.*;import java.io.*;import java.net.*;/* * 服務(wù)端的偵聽(tīng)類 */ public class ServerListen extends Thread { ServerSocket server;

      JComboBox combobox;JTextArea textarea;JTextField textfield;UserLinkList userLinkList;//用戶鏈表

      Node client;ServerReceive recvThread;

      public boolean isStop;

      /* * 聊天服務(wù)端的用戶上線于下線偵聽(tīng)類

      */ public ServerListen(ServerSocket server,JComboBox combobox,JTextArea textarea,JTextField textfield,UserLinkList userLinkList){

      this.server = server;

      this.combobox = combobox;

      this.textarea = textarea;

      this.textfield = textfield;

      this.userLinkList = userLinkList;

      isStop = false;}

      public void run(){

      while(!isStop &&!server.isClosed()){

      try{

      client = new Node();

      client.socket = server.accept();

      client.output = new ObjectOutputStream(client.socket.getOutputStream());

      client.output.flush();

      client.input = new ObjectInputStream(client.socket.getInputStream());

      client.username =(String)client.input.readObject();

      //顯示提示信息

      combobox.addItem(client.username);

      userLinkList.addUser(client);

      textarea.append(”用戶 “ + client.username + ” 上線“ + ”n“);

      textfield.setText(”在線用戶“ + userLinkList.getCount()+ ”人n“);

      recvThread = new ServerReceive(textarea,textfield,combobox,client,userLinkList);

      recvThread.start();

      }

      catch(Exception e){

      }

      } } }

      3、ServerReceive類

      功能:實(shí)現(xiàn)服務(wù)器消息收發(fā)的類,該類分別定義了向某用戶及所有人發(fā)送消息的方法,發(fā)送的消息會(huì)顯示在主界面類的街面上。

      代碼:

      package server;

      import javax.swing.*;/* * 服務(wù)器收發(fā)消息的類 */ public class ServerReceive extends Thread { JTextArea textarea;JTextField textfield;JComboBox combobox;

      Node client;UserLinkList userLinkList;//用戶鏈表

      public boolean isStop;

      public ServerReceive(JTextArea textarea,JTextField textfield, JComboBox combobox,Node client,UserLinkList userLinkList){ this.textarea = textarea;this.textfield = textfield;this.client = client;this.userLinkList = userLinkList;this.combobox = combobox;

      isStop = false;}

      public void run(){ //向所有人發(fā)送用戶的列表

      sendUserList();

      while(!isStop &&!client.socket.isClosed()){

      try{

      String type =(String)client.input.readObject();

      if(type.equalsIgnoreCase(”聊天信息“)){

      String toSomebody =(String)client.input.readObject();

      String status =(String)client.input.readObject();

      String action =(String)client.input.readObject();

      String message =(String)client.input.readObject();

      String msg = client.username

      +” “+ action

      + ”對(duì) “

      + toSomebody

      + ” 說(shuō) : “

      + message

      + ”n“;

      if(status.equalsIgnoreCase(”悄悄話“)){

      msg = ” [悄悄話] “ + msg;

      }

      textarea.append(msg);

      if(toSomebody.equalsIgnoreCase(”所有人“)){ 33

      sendToAll(msg);//向所有人發(fā)送消息

      } else{

      try{

      client.output.writeObject(”聊天信息“);

      client.output.flush();

      client.output.writeObject(msg);

      client.output.flush();

      }

      catch(Exception e){

      //System.out.println(”###“+e);

      }

      Node node = userLinkList.findUser(toSomebody);

      if(node!= null){

      node.output.writeObject(”聊天信息“);

      node.output.flush();

      node.output.writeObject(msg);

      node.output.flush();

      } } } else if(type.equalsIgnoreCase(”用戶下線“)){ Node node = userLinkList.findUser(client.username);userLinkList.delUser(node);

      String msg = ”用戶 “ + client.username + ” 下線n“;int count = userLinkList.getCount();

      combobox.removeAllItems();combobox.addItem(”所有人“);int i = 0;while(i < count){ node = userLinkList.findUser(i);if(node == null){

      i ++;

      continue;} combobox.addItem(node.username);i++;} combobox.setSelectedIndex(0);34

      textarea.append(msg);

      textfield.setText(”在線用戶“ + userLinkList.getCount()+ ”人n“);

      sendToAll(msg);//向所有人發(fā)送消息

      sendUserList();//重新發(fā)送用戶列表,刷新

      break;

      }

      }

      catch(Exception e){

      //System.out.println(e);

      } } } /* * 向所有人發(fā)送消息 */ public void sendToAll(String msg){ int count = userLinkList.getCount();

      int i = 0;while(i < count){

      Node node = userLinkList.findUser(i);

      if(node == null){

      i ++;

      continue;

      }

      try{

      node.output.writeObject(”聊天信息“);

      node.output.flush();

      node.output.writeObject(msg);

      node.output.flush();

      }

      catch(Exception e){

      //System.out.println(e);

      }

      i++;} }

      } /* * 向所有人發(fā)送用戶的列表 */ public void sendUserList(){ String userlist = ”“;int count = userLinkList.getCount();

      } int i = 0;while(i < count){ Node node = userLinkList.findUser(i);if(node == null){

      i ++;

      continue;}

      userlist += node.username;userlist += 'n';i++;}

      i = 0;while(i < count){ Node node = userLinkList.findUser(i);if(node == null){

      i ++;

      continue;}

      try{

      node.output.writeObject(”用戶列表“);

      node.output.flush();

      node.output.writeObject(userlist);

      node.output.flush();} catch(Exception e){

      //System.out.println(e);} i++;}

      4、UserLinkList類

      功能:用戶鏈表節(jié)點(diǎn)的具體實(shí)現(xiàn)類。該類通過(guò)構(gòu)造函數(shù)構(gòu)造用戶鏈表,定義了添加

      用戶、刪除用戶、返回用戶數(shù)、根據(jù)用戶名查找用戶、根據(jù)索引查找用戶這5個(gè)方法。

      代碼:

      package server;/** * 用戶鏈表 */ public class UserLinkList { Node root;Node pointer;int count;

      /** * 構(gòu)造用戶鏈表

      */ public UserLinkList(){

      root = new Node();

      root.next = null;

      pointer = null;

      count = 0;}

      /** * 添加用戶

      */ public void addUser(Node n){

      pointer = root;

      while(pointer.next!= null){

      pointer = pointer.next;

      }

      pointer.next = n;

      n.next = null;

      count++;

      }

      /** * 刪除用戶

      */ public void delUser(Node n){

      pointer = root;

      while(pointer.next!= null){

      if(pointer.next == n){

      pointer.next = n.next;

      count--;

      break;

      }

      pointer = pointer.next;} } /** * 返回用戶數(shù) */ public int getCount(){ return count;} /** * 根據(jù)用戶名查找用戶 */ public Node findUser(String username){ if(count == 0)return null;

      pointer = root;

      while(pointer.next!= null){

      pointer = pointer.next;

      if(pointer.username.equalsIgnoreCase(username)){

      return pointer;

      } }

      return null;} /** * 根據(jù)索引查找用戶 */ public Node findUser(int index){ if(count == 0){

      return null;38

      }

      } }

      if(index < 0){ return null;}

      pointer = root;

      int i = 0;while(i < index + 1){ if(pointer.next!= null){

      pointer = pointer.next;} else{

      return null;}

      i++;}

      return pointer;

      5、Node類

      功能:用戶鏈表的節(jié)點(diǎn)類,定義了鏈表中的用戶。該類與前面所講的鏈表節(jié)點(diǎn)Node類的功能相當(dāng)。

      代碼:

      package server;

      import java.net.*;import java.io.*;/** * 用戶鏈表的結(jié)點(diǎn)類 */ public class Node { String username = null;Socket socket = null;ObjectOutputStream output = null;ObjectInputStream input = null;

      Node next = null;39

      }

      6、PortConf類

      功能:該類繼承自Jdialog,是用戶對(duì)服務(wù)器端監(jiān)聽(tīng)端口進(jìn)行修改配置的類。代碼:

      package server;

      import java.awt.*;import javax.swing.*;import java.awt.event.*;/** * 生成端口設(shè)置對(duì)話框的類 */ public class PortConf extends JDialog { /** * */ private static final long serialVersionUID = 1L;JPanel panelPort = new JPanel();JButton save = new JButton();JButton cancel = new JButton();public static JLabel DLGINFO=new JLabel(” 默認(rèn)端口號(hào)為:8888“);

      JPanel panelSave = new JPanel();JLabel message = new JLabel();

      public static JTextField portNumber;

      public PortConf(JFrame frame){

      super(frame, true);

      try {

      jbInit();

      }

      catch(Exception e){

      e.printStackTrace();

      }

      //設(shè)置運(yùn)行位置,使對(duì)話框居中

      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

      this.setLocation((int)(screenSize.width600)/ 2 + 150);

      this.setResizable(false);40

      }

      private void jbInit()throws Exception {

      this.setSize(new Dimension(300, 120));

      this.setTitle(”端口設(shè)置“);

      message.setText(”請(qǐng)輸入偵聽(tīng)的端口號(hào):“);

      portNumber = new JTextField(10);

      portNumber.setText(”“+ChatServer.port);

      save.setText(”保存“);

      cancel.setText(”取消“);

      panelPort.setLayout(new FlowLayout());

      panelPort.add(message);

      panelPort.add(portNumber);

      panelSave.add(new Label(” “));

      panelSave.add(save);

      panelSave.add(cancel);

      panelSave.add(new Label(” “));

      Container contentPane = getContentPane();

      contentPane.setLayout(new BorderLayout());

      contentPane.add(panelPort, BorderLayout.NORTH);

      contentPane.add(DLGINFO, BorderLayout.CENTER);

      contentPane.add(panelSave, BorderLayout.SOUTH);

      //保存按鈕的事件處理

      save.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent a){

      int savePort;

      try{

      savePort=Integer.parseInt(PortConf.portNumber.getText());

      if(savePort<1 || savePort>65535){

      PortConf.DLGINFO.setText(” 偵聽(tīng)端口必須是0-65535之間的整數(shù)!“);

      PortConf.portNumber.setText(”“);

      return;

      }

      ChatServer.port = savePort;

      dispose();

      } 41

      catch(NumberFormatException e){

      PortConf.DLGINFO.setText(” 錯(cuò)誤的端口號(hào),端口號(hào)請(qǐng)?zhí)顚懻麛?shù)!“);

      PortConf.portNumber.setText(”“);

      return;

      }

      }

      });

      //關(guān)閉對(duì)話框時(shí)的操作

      this.addWindowListener(new WindowAdapter(){

      public void windowClosing(WindowEvent e){

      DLGINFO.setText(”

      為:8888“);

      }

      });

      //取消按鈕的事件處理

      cancel.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent e){

      DLGINFO.setText(”

      為:8888“);

      dispose();

      }

      });} }

      7、Help類

      功能:服務(wù)端程序幫助類。代碼:

      package server;

      import java.awt.*;import javax.swing.*;import java.awt.event.*;/** 42

      默認(rèn)端口號(hào)默認(rèn)端口號(hào)

      * 生成設(shè)置對(duì)話框的類 */ public class Help extends JDialog {

      /** * */ private static final long serialVersionUID = 1L;JPanel titlePanel = new JPanel();JPanel contentPanel = new JPanel();JPanel closePanel = new JPanel();

      JButton close = new JButton();JLabel title = new JLabel(”聊天室服務(wù)端幫助“);JTextArea help = new JTextArea();

      Color bg = new Color(255,255,255);

      public Help(JFrame frame){

      super(frame, true);

      try {

      jbInit();

      }

      catch(Exception e){

      e.printStackTrace();

      }

      //設(shè)置運(yùn)行位置,使對(duì)話框居中

      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

      this.setLocation((int)(screenSize.width320)/ 2);

      this.setResizable(false);}

      private void jbInit()throws Exception {

      this.setSize(new Dimension(400, 200));

      this.setTitle(”幫助“);

      titlePanel.setBackground(bg);;

      contentPanel.setBackground(bg);

      closePanel.setBackground(bg);

      help.setText(”

      1、設(shè)置服務(wù)端的偵聽(tīng)端口(默認(rèn)端口為8888)。n“+

      2、點(diǎn)擊 啟動(dòng)服務(wù) 按鈕便可在指定的端口啟動(dòng)服務(wù)。n“+

      3、選擇需要接受消息的用戶,在消息欄中寫入消息,之后便可發(fā)送消息。n“+ 43

      }

      } ”

      4、信息狀態(tài)欄中顯示服務(wù)器當(dāng)前的啟動(dòng)與停止?fàn)顟B(tài)、“+ ”用戶發(fā)送的消息和n 服務(wù)器端發(fā)送的系統(tǒng)消息?!?;help.setEditable(false);titlePanel.add(new Label(” “));titlePanel.add(title);titlePanel.add(new Label(” “));contentPanel.add(help);closePanel.add(new Label(” “));closePanel.add(close);closePanel.add(new Label(” “));Container contentPane = getContentPane();contentPane.setLayout(new BorderLayout());contentPane.add(titlePanel, BorderLayout.NORTH);contentPane.add(contentPanel, BorderLayout.CENTER);contentPane.add(closePanel, BorderLayout.SOUTH);close.setText(”關(guān)閉“);//事件處理

      close.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent e){

      dispose();

      } });

      8、ChatClient類

      功能:定義客戶端的界面,添加時(shí)間監(jiān)聽(tīng)與事件處理。該類定義了Connect()與DisConnect()方法實(shí)現(xiàn)與客戶端的連接與斷開(kāi)連接。當(dāng)?shù)顷懙街付ǖ姆?wù)器時(shí),調(diào)用ClientReceive類實(shí)現(xiàn)消息收發(fā),同時(shí)該類還定義了SendMessaga()方法來(lái)其他用戶發(fā)送帶有表情的消息或悄悄話。

      代碼:

      package client;

      import java.awt.*;import java.awt.event.*;import javax.swing.*;

      import java.io.*;import java.net.*;/* * 聊天客戶端的主框架類 */ public class ChatClient extends JFrame implements ActionListener{

      /** * */ private static final long serialVersionUID = 1L;String ip = ”127.0.0.1“;//連接到服務(wù)端的ip地址

      int port = 8888;//連接到服務(wù)端的端口號(hào)

      String userName = ”匆匆過(guò)客“;//用戶名

      int type = 0;//0表示未連接,1表示已連接

      JComboBox combobox;//選擇發(fā)送消息的接受者

      JTextArea messageShow;//客戶端的信息顯示

      JScrollPane messageScrollPane;//信息顯示的滾動(dòng)條

      JLabel express,sendToLabel,messageLabel;

      JTextField clientMessage;//客戶端消息的發(fā)送

      JCheckBox checkbox;//悄悄話

      JComboBox actionlist;//表情選擇

      JButton clientMessageButton;//發(fā)送消息

      JTextField showStatus;//顯示用戶連接狀態(tài)

      Socket socket;ObjectOutputStream output;//網(wǎng)絡(luò)套接字輸出流

      ObjectInputStream input;//網(wǎng)絡(luò)套接字輸入流

      ClientReceive recvThread;

      //建立菜單欄

      JMenuBar jMenuBar = new JMenuBar();//建立菜單組

      JMenu operateMenu = new JMenu(”操作(O)“);//建立菜單項(xiàng)

      JMenuItem loginItem = new JMenuItem(”用戶登錄(I)“);JMenuItem logoffItem = new JMenuItem(”用戶注銷(L)“);JMenuItem exitItem=new JMenuItem(”退出(X)“);

      JMenu conMenu=new JMenu(”設(shè)置(C)“);JMenuItem userItem=new JMenuItem(”用戶設(shè)置(U)“);JMenuItem connectItem=new JMenuItem(”連接設(shè)置(C)“);

      JMenu helpMenu=new JMenu(”幫助(H)“);JMenuItem helpItem=new JMenuItem(”幫助(H)“);//建立工具欄

      JToolBar toolBar = new JToolBar();//建立工具欄中的按鈕組件

      JButton loginButton;//用戶登錄 JButton logoffButton;//用戶注銷 JButton userButton;//用戶信息的設(shè)置 JButton connectButton;//連接設(shè)置 JButton exitButton;//退出按鈕

      //框架的大小

      Dimension faceSize = new Dimension(400, 600);JPanel downPanel;GridBagLayout girdBag;GridBagConstraints girdBagCon;

      public ChatClient(){ init();//初始化程序

      //添加框架的關(guān)閉事件處理

      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();//設(shè)置框架的大小

      this.setSize(faceSize);//設(shè)置運(yùn)行時(shí)窗口的位置

      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setLocation((int)(screenSize.widthfaceSize.getHeight())/ 2);this.setResizable(false);this.setTitle(”聊天室客戶端");//設(shè)置標(biāo)題 setVisible(true);//為操作菜單欄設(shè)置熱鍵'V' operateMenu.setMnemonic('O');46

      第四篇:JAVA聊天室實(shí)驗(yàn)報(bào)告

      Java聊天室實(shí)驗(yàn)報(bào)告

      班 級(jí):學(xué) 號(hào):姓 名:

      ****** ******** ***

      目錄:

      一、實(shí)驗(yàn)?zāi)康?......................................................3

      二、所需技術(shù).......................................................3

      三、需求分析.......................................................3

      四、系統(tǒng)設(shè)計(jì).......................................................4

      1、服務(wù)器結(jié)構(gòu)..................................................4

      2、客戶端結(jié)構(gòu)..................................................4

      五、實(shí)現(xiàn)細(xì)節(jié).......................................................5

      1、客戶端細(xì)節(jié)...................................................5

      2、服務(wù)器細(xì)節(jié)...................................................6

      六、系統(tǒng)展示.......................................................7

      七、實(shí)驗(yàn)小結(jié).......................................................9

      Rain153 WeChat 聊天室系統(tǒng)一、實(shí)驗(yàn)?zāi)康模?/p>

      1、使用Java技術(shù)完成聊天室系統(tǒng),深入學(xué)習(xí)使用Java語(yǔ)言。

      2、使用Java 的多線程機(jī)制,深入理解Java多線程技術(shù)的應(yīng)用。

      3、使用GUI,對(duì)JFrame的深入學(xué)習(xí)。

      4、使用網(wǎng)絡(luò)編程,掌握基于TCP協(xié)議的Socket編程,了解Socket編程的協(xié)議約定,掌握簡(jiǎn)單應(yīng)用協(xié)議的開(kāi)發(fā)。

      5、使用C/S架構(gòu),對(duì)網(wǎng)絡(luò)編程有一定的了解。

      二、所需技術(shù)

      本系統(tǒng)要求使用java技術(shù)開(kāi)發(fā)。所需知識(shí)包括java程序設(shè)計(jì)語(yǔ)言、swing基本GUI組件、多線程編程、socket編程、集成開(kāi)發(fā)環(huán)境使用eclipse。系統(tǒng)采用兩層C/S體系結(jié)構(gòu),C端負(fù)責(zé)通過(guò)GUI與客戶交互,實(shí)現(xiàn)注冊(cè)、登陸、收發(fā)信息、退出等功能; S端是聊天系統(tǒng)的服務(wù)器。

      三、需求分析

      開(kāi)發(fā)一個(gè)類似QQ 的聊天室系統(tǒng),即WeChat聊天系統(tǒng)。該系統(tǒng)應(yīng)具有如下功能:

      1、2、用戶注冊(cè)、登錄 群聊;

      3、私聊;

      4、服務(wù)器發(fā)送系統(tǒng)消息;

      5、服務(wù)器踢人;

      6、保存日志;

      7、保存聊天信息;

      四、系統(tǒng)設(shè)計(jì)

      1、服務(wù)器結(jié)構(gòu)

      啟動(dòng)服務(wù)器監(jiān)聽(tīng)AppServer服務(wù)器控制監(jiān)聽(tīng)窗體ServerFrameConnection處理所有用戶請(qǐng)求

      服務(wù)器端結(jié)構(gòu)圖示

      2、客戶端結(jié)構(gòu)

      啟動(dòng)客戶端ChatClient用戶登錄窗體Login用戶聊天主窗體ChatRoom時(shí)鐘窗體ClockRegister用戶注冊(cè)窗體Windowclose用戶窗體監(jiān)聽(tīng)器

      客戶端結(jié)構(gòu)圖示

      1、AppServer.java

      為服務(wù)器端監(jiān)聽(tīng)類,負(fù)責(zé)服務(wù)器的啟動(dòng),包括啟動(dòng)監(jiān)聽(tīng)端口、服務(wù)器監(jiān)控界面。

      2、ServerFrame.java 為服務(wù)器監(jiān)控窗體,負(fù)責(zé)監(jiān)控服務(wù)器運(yùn)行狀態(tài)。

      3、Connection.java 為服務(wù)器連接處理的具體實(shí)現(xiàn)。

      4、ChatClient.java 為客戶端程序啟動(dòng)類,負(fù)責(zé)客戶端的啟動(dòng)和退出。

      5、Login.java 為客戶端程序登錄界面,負(fù)責(zé)用戶帳號(hào)信息的驗(yàn)證與反饋。

      6、Register.java 為客戶端程序注冊(cè)界面,負(fù)責(zé)用戶帳號(hào)信息的注冊(cè)驗(yàn)證與反饋。

      7、ChatRoom.java 為客戶端程序聊天室主界面,負(fù)責(zé)接收、發(fā)送聊天內(nèi)容與服務(wù)器的Connection合作。

      8、Windowclose 為ChatRoom.java的內(nèi)部類,負(fù)責(zé)監(jiān)聽(tīng)聊天室界面的操作,當(dāng)用戶退出時(shí)返回給服務(wù)器信息。

      9、Clock.java 為客戶端程序的一個(gè)小程序,實(shí)現(xiàn)的一個(gè)石英鐘功能。(可選)

      五、實(shí)現(xiàn)細(xì)節(jié)

      概述:聊天室主要功能的實(shí)現(xiàn):從界面輸入登錄信息,然后與服務(wù)器建立Socket連接(連接時(shí)應(yīng)指定服務(wù)器的IP地址和端口號(hào),而客戶端socket的端口由本方操作系統(tǒng)從空閑端口中確定),服務(wù)器端的“傾聽(tīng)Socket”收到連接請(qǐng)求后,一般會(huì)接受連接請(qǐng)求,并生成一個(gè)服務(wù)端socket,專門負(fù)責(zé)與此客戶端socket的通信。一旦連接請(qǐng)求成功,客戶端將信息及請(qǐng)求通過(guò)本方socket的輸出流發(fā)送給服務(wù)器端相應(yīng)的socket,服務(wù)端則通過(guò)服務(wù)器端Socket的輸入流接受客戶端傳輸過(guò)來(lái)的信息及請(qǐng)求,分析是何請(qǐng)求,然后根據(jù)請(qǐng)求類型,進(jìn)行相應(yīng)的處理(如登錄、轉(zhuǎn)發(fā)信息等)。服務(wù)方也可以根據(jù)需要,通過(guò)socket的輸出流發(fā)信息和請(qǐng)求給客戶端(公告)??蛻舴胶头?wù)方都可以通過(guò)關(guān)閉本方的socket而結(jié)束一次通訊過(guò)程。為了實(shí)現(xiàn)多客戶在線的請(qǐng)求,使用多線程機(jī)制來(lái)處理,對(duì)每一個(gè)客戶端連接通訊,服務(wù)器端都有一個(gè)線程專門負(fù)責(zé)處理。

      一)客戶端細(xì)節(jié)

      1、注冊(cè):

      當(dāng)選擇注冊(cè)時(shí),Register界面等待用戶輸入注冊(cè)信息,并將信息封裝成Register_Customer類,然后通過(guò)建立在Socket的連接之上的對(duì)象輸出流將用戶注冊(cè)信息發(fā)送給服務(wù)器端,服務(wù)器端將請(qǐng)求轉(zhuǎn)發(fā)給Connection處理,Connection 在收到信息后將驗(yàn)證數(shù)據(jù)的完整性并在數(shù)據(jù)庫(kù)中查找該用戶名是否已經(jīng)注冊(cè),然后將注冊(cè)信息加入數(shù)據(jù)庫(kù),最后將注冊(cè)結(jié)果返回給客戶端??蛻舳孙@示注冊(cè)結(jié)果。

      2、登錄:

      當(dāng)選擇登錄時(shí),客戶端由Login 界面等待用戶輸入登錄信息后,封裝成Customer對(duì)象類然后通過(guò)建立在Socket的連接之上的對(duì)象輸出流將用戶登錄信息發(fā)送給服務(wù)器端,服務(wù)器端將請(qǐng)求轉(zhuǎn)發(fā)給Connection處理,Connection 在收到信息后將驗(yàn)證數(shù)據(jù)的完整性并在對(duì)象型數(shù)據(jù)庫(kù)中查找該用戶名是否已經(jīng)注冊(cè),然后將注冊(cè)用戶的信息與登錄請(qǐng)求信息進(jìn)行密碼驗(yàn)證,在登錄成功后將該用戶添加到在線用戶列表,最后將登錄結(jié)果返回給客戶端。若登錄成功,客戶端將啟動(dòng)聊天室主界面。

      3、聊天 a、發(fā)送聊天信息:私聊功能需在在線列表中選中私聊聊天對(duì)象,并勾選私聊選項(xiàng)。群聊功能取消對(duì)私聊功能的勾選即可。當(dāng)用戶點(diǎn)擊完發(fā)送按鈕后,程序開(kāi)始將當(dāng)前用戶名、聊天對(duì)象、聊天內(nèi)容、表情和是否私聊進(jìn)行封裝,然后獲取Socket連接,再用對(duì)象輸出流包裝Socket的輸出流將聊天信息對(duì)象發(fā)送給服務(wù)器端。

      b、接收聊天信息:用一個(gè)單獨(dú)的接收線程實(shí)現(xiàn),客戶端必須隨時(shí)接收服務(wù)器發(fā)來(lái)的消息,而讀取消息的方法采用的是阻塞式方法,若在事件處理程序中讀(占用的是事件處理線程)則會(huì)使程序在此后無(wú)法響應(yīng)用戶操作,所以需要生成一個(gè)單獨(dú)的線程專門用于讀取處理消息。而發(fā)送消息的方法則是將消息放入操作系統(tǒng)的發(fā)送緩沖區(qū)后就返回的,所以發(fā)送執(zhí)行的相當(dāng)快,可以在事件處理線程中直接調(diào)用。發(fā)送和接收可以同時(shí)進(jìn)行。二)服務(wù)器端細(xì)節(jié)

      1、注冊(cè):創(chuàng)建一個(gè)File文件類,載入“user.txt”,再用對(duì)象輸入流ObjectInputStream包裝File文件類,將存儲(chǔ)在“user.txt”得向量對(duì)象Vector中載入內(nèi)存中,現(xiàn)在系統(tǒng)中的向量就是對(duì)象型數(shù)據(jù)庫(kù),存儲(chǔ)著每條用戶信息對(duì)象。判斷是否是第一個(gè)注冊(cè)用戶,判斷用戶名是否已經(jīng)存在,判斷用戶名是否為系統(tǒng)關(guān)鍵字,用戶名有效后 寫入數(shù)據(jù)庫(kù),并給客戶端返回信息,關(guān)閉Socket連接。

      2、登錄:去數(shù)據(jù)庫(kù)讀用戶數(shù)據(jù),打開(kāi)用戶數(shù)據(jù)庫(kù)文件“user.txt”,將用戶數(shù)據(jù)對(duì)象集載入內(nèi)存,以供下面的程序使用。驗(yàn)證用戶名是否存在,驗(yàn)證用戶密碼是否正確,驗(yàn)證用戶是否已經(jīng)登錄,驗(yàn)證是否已經(jīng)超過(guò)最大登錄人數(shù),如果以上驗(yàn)證全部正確,返回客戶端信息,關(guān)閉Socket連接。

      3、退出:接收退出信息,當(dāng)用戶退出時(shí),客戶端將會(huì)用基于Socket的對(duì)象輸出流發(fā)給服務(wù)器退出對(duì)象,把用戶從在線列表中刪除,更新在線列表。

      4、聊天:接收用戶聊天信息,當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會(huì)收到客戶端用Socket傳輸過(guò)來(lái)的聊天信息對(duì)象,然后將其轉(zhuǎn)換為Message對(duì)象,返回聊天信息,然后系統(tǒng)從Message中提出消息類型,再根據(jù)類型將消息強(qiáng)制轉(zhuǎn)化ChatMessage,調(diào)用ChatMeaage中方法,獲取目的客戶名稱列表,根據(jù)目的地用戶名從用戶名、socket鍵值表中獲取socket,再通過(guò)socket將Message轉(zhuǎn)發(fā)到相應(yīng)的用戶。

      六、系統(tǒng)展示

      1、注冊(cè)

      客戶端注冊(cè)界面

      2、登錄

      客戶端登錄界面

      3、聊天界面

      聊天界面

      4、服務(wù)器界面

      服務(wù)器管理界面

      服務(wù)器用戶信息管理界面

      七、實(shí)驗(yàn)小結(jié)

      本次實(shí)驗(yàn)是比較復(fù)雜的一個(gè)題目,采用C/S架構(gòu)設(shè)計(jì)的聊天室,使用增量迭代方式開(kāi)發(fā),從初始的0.1版到最終的2.0正式版。通過(guò)本次實(shí)驗(yàn),對(duì)C/S架構(gòu)有了較深的認(rèn)識(shí),也對(duì)多線程編程、網(wǎng)絡(luò)編程、GUI的認(rèn)識(shí)更清晰。在項(xiàng)目中遇到很多問(wèn)題,在解決問(wèn)題的過(guò)程中,對(duì)Java也漸漸的熟悉,尤其是對(duì)各種異常的處理更是對(duì)自己的一種鍛煉。在此次實(shí)驗(yàn)中應(yīng)用了很多上課時(shí)未講到的知識(shí),自己查閱API,閱讀JDK源碼學(xué)習(xí)方法的使用讓自己收獲頗豐。由于這是一個(gè)人的項(xiàng)目,雖然在項(xiàng)目的實(shí)施上很自由,可到問(wèn)題沒(méi)有人討論,耗費(fèi)了很多精力,不過(guò)這也是提高自己的好方法。

      該Rain153 WeChat聊天室由于時(shí)間原因,很多功能實(shí)現(xiàn)的并不合理,也有些功能尚未實(shí)現(xiàn)。Rain153 WeChat并未與數(shù)據(jù)庫(kù)連接,只是簡(jiǎn)單的用文件保存用具信息及消息記錄。

      第五篇:Java課程設(shè)計(jì)報(bào)告

      課 程 設(shè) 計(jì)

      課程名稱 Java語(yǔ)言課程設(shè)計(jì) 題目名稱 人事管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 學(xué)生學(xué)院 應(yīng)用數(shù)學(xué)學(xué)院 專業(yè)班級(jí) 學(xué) 號(hào) 學(xué)生姓名 指導(dǎo)教師 劉科峰

      2014 年 10 月 29

      日 一.設(shè)計(jì)內(nèi)容

      自學(xué)Swing圖形界面設(shè)計(jì)和數(shù)據(jù)庫(kù)程序設(shè)計(jì)。開(kāi)發(fā)用于某單位的人事管理系統(tǒng)。該系統(tǒng)要求實(shí)現(xiàn)以下功能:

      1.員工信息管理包括:?jiǎn)T工信息一覽表、新員工的建立、修改 2.薪資福利管理:考勤與薪資的連動(dòng)計(jì)算、薪資與福利的設(shè)置

      3.考勤假期管理:考勤項(xiàng)目錄入, 實(shí)現(xiàn)考勤信息的查詢、統(tǒng)計(jì)、匯總 4.人事報(bào)表管理:按照員工性別,數(shù)目,薪酬自動(dòng)生成相關(guān)報(bào)表, 可自定義統(tǒng)計(jì)分析條件并可對(duì)歷史報(bào)表進(jìn)行管理。

      設(shè)計(jì)亮點(diǎn)

      1.null布局方式

      Swing圖形界面設(shè)計(jì)中有很多布局方式,通過(guò)本次學(xué)習(xí)了解到了FlowLayout,BorderLayout,GridLayout以及null布局,就這四種布局方式而言,null布局的優(yōu)點(diǎn)在于可以將組建的位置精準(zhǔn)到坐標(biāo)值,可以把組件放到任意想放置的位置,另外可以通過(guò)null去設(shè)置組件的大小,相較于其他布局方式來(lái)說(shuō)是一個(gè)很大的優(yōu)勢(shì)。但同時(shí)它的缺點(diǎn)在于不能根據(jù)Frame的大小變化而改變位置。

      2.組件部分屬性的設(shè)計(jì)

      Swing中有很多方法是用來(lái)實(shí)現(xiàn)組件屬性設(shè)置的,比如button.setVisible(false);按鈕通過(guò)調(diào)用這個(gè)方法實(shí)現(xiàn)不可見(jiàn),這是我此次課程設(shè)計(jì)中的一個(gè)亮點(diǎn),因?yàn)榻M件是沒(méi)有設(shè)置大小的方法的,只有依靠于相應(yīng)的布局方式才能改變它的大小,通過(guò)設(shè)置多幾個(gè)按鈕設(shè)為不可見(jiàn),將所要可見(jiàn)按鈕實(shí)現(xiàn)大小以及位置的控制是一種很好的方法。

      二、設(shè)計(jì)方案

      1主界面(只列出界面設(shè)計(jì)方面的代碼)

      JPanel panel=new JPanel();JTable table=null;JButton ibtn=new JButton(“員工信息”);JButton cbtn=new JButton(“考勤管理”);JButton mbtn=new JButton(“薪資管理”);JButton tbtn=new JButton(“人事報(bào)表”);ImageIcon rtou = new ImageIcon(“rentou.jpg”);

      JLabel imgLabel=new JLabel(rtou);

      //上面代碼定義了一個(gè)面板與四個(gè)標(biāo)簽,并引入了一個(gè)圖片

      panel.setLayout(new FlowLayout());//設(shè)置面板為流布局

      panel.add(ibtn);panel.add(cbtn);panel.add(mbtn);panel.add(tbtn);panel.setBackground(Color.GRAY);

      //將按鈕加到面板中,設(shè)置面板為灰色

      this.add(imgLabel,BorderLayout.CENTER);this.add(panel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*圖片標(biāo)簽以邊框布局放置在中間,將面板也以邊框布局放置在下面,可見(jiàn),灰色,點(diǎn)擊關(guān)閉程序*/

      (2)查詢員工界面(只列出界面設(shè)計(jì)方面的代碼)

      Label idlabel = new JLabel(“ID”);JLabel namelabel = new JLabel(“姓名”);JLabel bumenlabel = new JLabel(“部門”);JLabel zhiweilabel = new JLabel(“職位”);

      JTextField idfiled = new JTextField(8);JTextField namefield = new JTextField(8);JComboBox bumenbox =new JComboBox();JComboBox zhiweubox = new JComboBox();

      JButton btn=new JButton(“查詢”);JButton ibtn=new JButton(“添加”)

      JPanel spanel=new JPanel();JPanel vpanel=new JPanel();

      /*定義和各個(gè)組件,4個(gè)標(biāo)簽,兩個(gè)文本框,兩個(gè)復(fù)選框,兩個(gè)按鈕,兩個(gè)面板容器*/ spanel.setLayout(new FlowLayout());

      vpanel.setLayout(new FlowLayout(FlowLayout.CENTER,45,25));

      bumenbox.addItem(“");

      bumenbox.addItem(”管理部“);

      bumenbox.addItem(”生產(chǎn)部“);

      bumenbox.addItem(”業(yè)務(wù)部“);

      zhiweubox.addItem(”“);

      zhiweubox.addItem(”部長(zhǎng)“);

      zhiweubox.addItem(”副部長(zhǎng)“);

      zhiweubox.addItem(”普工“);

      spanel.add(idlabel);

      spanel.add(idfiled);

      spanel.add(namelabel);

      spanel.add(namefield);

      spanel.add(bumenlabel);

      spanel.add(bumenbox);

      spanel.add(zhiweilabel);

      spanel.add(zhiweubox);

      spanel.add(btn);

      vpanel.add(ibtn);

      spanel.setBackground(Color.GRAY);

      vpanel.setBackground(Color.GRAY);

      //將各個(gè)組件放進(jìn)對(duì)應(yīng)面板,設(shè)置相關(guān)屬性

      this.add(spanel,BorderLayout.NORTH);

      this.add(vpanel,BorderLayout.SOUTH);

      this.setBounds(300, 180, 600, 350);

      this.setVisible(true);

      this.getContentPane().setBackground(Color.GRAY);

      //將面板以邊框布局放入框架中,設(shè)置屬性(3)增加員工信息界面

      JPanel panel=new JPanel();

      JLabel timeLabel=new JLabel(”時(shí)間“);JLabel allnumLabel=new JLabel(”員工總數(shù)“);

      JLabel staffMoLabel=new JLabel(”考勤“);JLabel entryLabel=new JLabel(”全勤“);

      JLabel quitLabel=new JLabel(”缺勤“);JLabel mwLabel=new JLabel(”性別比例“);

      JLabel manLabel=new JLabel(”男“);

      JLabel womanLabel=new JLabel(”女“);JLabel proportionLabel=new JLabel(”男女比例“);JLabel distributionLabel=new JLabel(”人員部門分布“);JLabel mdpLabel=new JLabel(”管理部“);

      JLabel pdpLabel=new JLabel(”生產(chǎn)部“);JLabel bdpLabel=new JLabel(”業(yè)務(wù)部“);JLabel xmLabel=new JLabel(”項(xiàng)目“);JLabel xzLabel=new JLabel(”細(xì)則“);JLabel stLabel=new JLabel(”數(shù)據(jù)統(tǒng)計(jì)“);

      JTextField timeFiled = new JTextField(8);

      JTextField allnumFiled = new JTextField(8);JTextField entryFiled = new JTextField(8);JTextField quitFiled = new JTextField(8);JTextField manFiled = new JTextField(8);JTextField womanFiled = new JTextField(8);JTextField proportionFiled = new JTextField(8);JTextField mdpFiled = new JTextField(8);JTextField pdpFiled = new JTextField(8);JTextField bdpFiled = new JTextField(8);// 定義所需組件

      public Selectrenshi(String tablename){

      super(”人事管理“);

      panel.setLayout(null);

      panel.setBackground(Color.GRAY);

      panel.add(xmLabel);

      panel.add(xzLabel);

      panel.add(stLabel);

      panel.add(timeLabel);

      panel.add(timeFiled);

      panel.add(allnumLabel);

      panel.add(allnumFiled);

      panel.add(staffMoLabel);

      panel.add(entryLabel);

      panel.add(entryFiled);

      panel.add(quitLabel);

      panel.add(quitFiled);

      panel.add(mwLabel);

      panel.add(manLabel);

      panel.add(manFiled);

      panel.add(womanLabel);

      panel.add(womanFiled);

      panel.add(proportionLabel);

      panel.add(proportionFiled);

      panel.add(distributionLabel);

      panel.add(mdpLabel);

      panel.add(mdpFiled);

      panel.add(pdpLabel);

      panel.add(pdpFiled);

      panel.add(bdpLabel);

      panel.add(bdpFiled);

      //將組件加到相應(yīng)面板中

      xmLabel.setBounds(120,20,100,30);

      xzLabel.setBounds(240,20,100,30);

      stLabel.setBounds(360,20,100,30);

      timeLabel.setBounds(120,50,100,30);

      timeFiled.setBounds(360,50,100,30);

      allnumLabel.setBounds(120,100,100,30);

      allnumFiled.setBounds(360,100,100,30);

      staffMoLabel.setBounds(120,150,100,30);

      entryLabel.setBounds(240,150,100,30);

      entryFiled.setBounds(360,150,100,30);

      quitLabel.setBounds(240,200,100,30);

      quitFiled.setBounds(360,200,100,30);

      mwLabel.setBounds(120,250,100,30);

      manLabel.setBounds(240,250,100,30);

      manFiled.setBounds(360,250,100,30);

      womanLabel.setBounds(240,300,100,30);

      womanFiled.setBounds(360,300,100,30);

      proportionLabel.setBounds(240,350,100,30);

      proportionFiled.setBounds(360,350,100,30);

      distributionLabel.setBounds(120,400,100,30);

      mdpLabel.setBounds(240,400,100,30);

      mdpFiled.setBounds(360,400,100,30);

      pdpLabel.setBounds(240,450,100,30);

      pdpFiled.setBounds(360,450,100,30);

      bdpLabel.setBounds(240,500,100,30);

      bdpFiled.setBounds(360,500,100,30);

      //采用null布局,設(shè)置組建坐標(biāo)值

      this.add(panel,BorderLayout.CENTER);

      this.setBounds(300, 100, 600, 600);

      this.setVisible(true);

      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      this.getContentPane().setBackground(Color.GRAY);

      //將面板放入框架,設(shè)置相應(yīng)屬性(4)員工考勤界面

      JLabel idlabel = new JLabel(”ID“);JComboBox idbox =new JComboBox();CheckTable model = null;

      JButton wbtn=new JButton(”修改“);

      JButton cbtn=new JButton(”查詢“);JButton mbtn=new JButton(”創(chuàng)建薪資表“);JButton rbtn=new JButton(”創(chuàng)建人事表“);

      JScrollPane scrollpane = null;JPanel spanel=new JPanel();JPanel vpanel=new JPanel();JTable table=null;spanel.add(idbox);panel.add(wbtn);spanel.add(cbtn);vpanel.add(mbtn);vpanel.add(rbtn);spanel.setBackground(Color.GRAY);vpanel.setBackground(Color.GRAY);this.add(spanel,BorderLayout.NORTH);this.add(vpanel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY);

      (5)選擇考勤表界面

      JLabel checklabel = new JLabel(”選擇考勤表“);JLabel newlabel = new JLabel(”創(chuàng)建考勤表“);JComboBox timebox =new JComboBox();JTextField newfield = new JTextField();JButton btn=new JButton(”確認(rèn)“);JButton nbtn=new JButton(”創(chuàng)建");JPanel spanel=new JPanel();spanel.add(checklabel);

      spanel.add(timebox);

      spanel.add(btn);

      spanel.add(newlabel);

      spanel.add(newfield);

      spanel.add(nbtn);

      checklabel.setBounds(30,90,100,30);

      timebox.setBounds(180,90,100,30);

      btn.setBounds(360,90,100,30);

      newlabel.setBounds(30,200,100,30);

      newfield.setBounds(180,200,100,30);

      nbtn.setBounds(360,200,100,30);

      this.add(spanel);

      this.setBounds(300, 180, 600, 350);

      this.setVisible(true);

      三、結(jié)果和數(shù)據(jù)處理

      四、結(jié)論

      1.Swing圖形界面

      圖形用戶界面(GUI)是程序不可或缺的一部分,它便于用戶和程序的交互。在Swing界面中是以Frame為框架,采用合理的布局方式(FlowLayout,BorderLayout,GridLayout,null),將Panel加入框架之中,而實(shí)現(xiàn)界面的各個(gè)組件將調(diào)用各種方法設(shè)置自身屬性實(shí)行可視化界面以及加入到面板之中。再通過(guò)事件監(jiān)聽(tīng)器實(shí)現(xiàn)事件的監(jiān)聽(tīng)預(yù)處理機(jī)制。

      2.數(shù)據(jù)庫(kù)

      在這次課程設(shè)計(jì)中哦我主要負(fù)責(zé)Swing圖像界面,對(duì)于數(shù)據(jù)庫(kù)只做了最簡(jiǎn)單的了解。程序中采用了最流行的關(guān)系型數(shù)據(jù)庫(kù)mysql,雪化了mysql的建立,刪除,與修改以及使用sql語(yǔ)言對(duì)數(shù)據(jù)庫(kù)進(jìn)行一些簡(jiǎn)單的操作,將按鈕等設(shè)置的監(jiān)聽(tīng)事件與數(shù)據(jù)庫(kù)相連接。

      五、問(wèn)題與討論

      1.組件的方法調(diào)用

      在這次課程設(shè)計(jì)中,用到了很多的組件,例如Button,Jlabel,TextField,ComBox,等。Swing圖形界面也確實(shí)提供了很多方法去設(shè)置相關(guān)組件的屬性,例如label.setVisible(false);設(shè)置標(biāo)簽不可見(jiàn)等很多方法,只要查看API文檔幾乎就能實(shí)現(xiàn)很多功能,但是對(duì)于按鈕等最常見(jiàn)的組件來(lái)說(shuō)設(shè)置大小如果不依靠相關(guān)布局方式很難設(shè)置,我在程序中之所以運(yùn)用了很多的bull布局方式就是為了實(shí)現(xiàn)組件大小的設(shè)置,如果說(shuō)能有一個(gè)方法直接設(shè)置組件大小而不受其他組件或容器影響就能使代碼很簡(jiǎn)潔了。2.相對(duì)布局

      在編寫圖像界面的程序的時(shí)候,我用了很多的布局方式,有FlowLayout,BorderLayout,GrirLayout,null等,其中null布局用的最多。null布局的優(yōu)點(diǎn)在于可以將組建的位置精準(zhǔn)到坐標(biāo)值,可以把組件放到任意想放置的位置,另外可以通過(guò)null去設(shè)置組件的大小,相較于其他布局方式來(lái)說(shuō)是一個(gè)很大的優(yōu)勢(shì)。但同時(shí)它的缺點(diǎn)在于不能根據(jù)Frame的大小變化而改變位置。其他三種布局方式雖然實(shí)現(xiàn)了歲Frame大小變動(dòng)而改變組件大小及位置但是不容易控制,如果null布局能實(shí)現(xiàn)相對(duì)布局就是很好的一種布局方式了。

      下載java聊天室課程設(shè)計(jì)報(bào)告word格式文檔
      下載java聊天室課程設(shè)計(jì)報(bào)告.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        java課程設(shè)計(jì)報(bào)告[本站推薦]

        《Java語(yǔ)言程序設(shè)計(jì)》 題 目:指導(dǎo)老師:姓 名:專 業(yè):班 級(jí):日 期:課程設(shè)計(jì)報(bào)告 目 錄 一、系統(tǒng)總體設(shè)計(jì) ....................................... 1 (一)設(shè)計(jì)目標(biāo)及完成功能..............

        Java課程設(shè)計(jì)報(bào)告

        《Java課程實(shí)習(xí)》報(bào)告 題目 學(xué)號(hào) 學(xué)生姓名 音樂(lè)播放器 201011621335 201011621329 200811621320 朱劍峰 薛文博 劉彬 聯(lián)系方式 *** *** *** 所在......

        java聊天室設(shè)計(jì)總結(jié)

        JAVA聊天室程序設(shè)計(jì)總結(jié) 大二第一學(xué)期末我們進(jìn)行了為期兩周的java實(shí)習(xí),這次的實(shí)習(xí)內(nèi)容是設(shè)計(jì)一個(gè)多人聊天室。在網(wǎng)絡(luò)越來(lái)越發(fā)達(dá)的今天,人們對(duì)網(wǎng)絡(luò)的依賴越來(lái)越多,越來(lái)越離不開(kāi)......

        java局域聊天室實(shí)踐總結(jié)

        河北科技師范學(xué)院 JAVA程序設(shè)計(jì)課程設(shè)計(jì) 個(gè)人實(shí)習(xí)總結(jié) 實(shí)習(xí)類型 課程設(shè)計(jì) 實(shí)習(xí)單位 指導(dǎo)教師 所在院(系) 信息技術(shù)系 班 級(jí) 姓 名 學(xué)號(hào)_一、實(shí)習(xí)時(shí)間和地點(diǎn) 時(shí)間:2015.3.17-20......

        JAVA課程設(shè)計(jì)報(bào)告_完整版

        《JAVA面向?qū)ο蟪绦蛟O(shè)計(jì)》 課 程 設(shè) 計(jì) 報(bào) 告 (2011-2012學(xué)年第2學(xué)期)系 別: 專業(yè)名稱: 廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系 10級(jí)網(wǎng)絡(luò)工程1班 課程設(shè)計(jì)科目: 《JAVA面向?qū)ο蟪绦蛟O(shè)計(jì)......

        java課程設(shè)計(jì)報(bào)告—計(jì)算器

        1 --計(jì)算器 Java實(shí)習(xí)報(bào)告目錄一、課程設(shè)計(jì)目的 ................................................................................................................. 2......

        Java課程設(shè)計(jì)

        統(tǒng)一要求: 設(shè)計(jì)成品 (按難度自選一個(gè)到兩個(gè)完成) 可分組或單獨(dú)完成,每組最多兩人,19周前交 1設(shè)計(jì)報(bào)告 (1)本程序的功能描述 (2)程序設(shè)計(jì)思想(數(shù)據(jù)結(jié)構(gòu)和各功能的實(shí)現(xiàn)辦法)......

        JAVA課程設(shè)計(jì)

        JAVA程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告 目 錄 一、 項(xiàng)目背景及意義: ............................................... 2 二、 系統(tǒng)描述 ..................................................