Java聊天室课程设计报告.docx

上传人:b****2 文档编号:12672800 上传时间:2023-04-21 格式:DOCX 页数:15 大小:57.43KB
下载 相关 举报
Java聊天室课程设计报告.docx_第1页
第1页 / 共15页
Java聊天室课程设计报告.docx_第2页
第2页 / 共15页
Java聊天室课程设计报告.docx_第3页
第3页 / 共15页
Java聊天室课程设计报告.docx_第4页
第4页 / 共15页
Java聊天室课程设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Java聊天室课程设计报告.docx

《Java聊天室课程设计报告.docx》由会员分享,可在线阅读,更多相关《Java聊天室课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

Java聊天室课程设计报告.docx

Java聊天室课程设计报告

甘肃政法学院计算机科学学院

Java程序设计课程设计

题 目网络聊天程序开发设计与实现

计算机科学学院信息管理与信息系统专业10级信管班

学号:

201081020108 201081020112

姓  名:

贾燚  李思敏

指导教师:

李 瑞 生

成  绩:

____________

完成时间:

2011年12月

          

1.摘要  2

2.绪论  0

2.开发环境  0

3.需求分析  1

3.1程序简介  1

3.2程序功能  1

4.系统设计  2

4.1概要设计  2

4.2详细设计  2

5.测试  8

6.结论  11

参考文献  12

摘要

本次训练主要是考查了对JAVA程序设计的综合运用,设计一个Socket通信的聊天程序,用户可以通过程序进行聊天通信,但不支持用户自定义表情及图片的发送。

本程序设计也用到了一些相关的标准Java的类,给程序设计带来了许多的方便,但用那些要切记加相应的类的包,还有一些构造方法和个别接口方法。

本程序可以实现用户之间的一些简单的交互,虽然功能较少,但是我想通过这次程序设计来熟悉并且学习更多关于JAVA编程的东西,来便于以后可以使用。

关键词:

java聊天

1.绪论

对于一个选择网络编程的人来说,必须要有足够的细心和耐心,因为编程一般来说是很枯燥的乏味的,而且程序会越来越复杂,它所用到的符号、标记很多,所以不能出点小错误的。

还有,我们不能只是看程序,要学会把自己学的自己拿去实践,自己去编一些程序,培养自己的动手能力,掌握一些编程技巧,熟练运用自己学到的理论知识,这样在以后才能开发出属于自己的东西。

如今,随着科学技术的发展,计算机已成为了我们生活中必不可少的设备了,而掌握计算机知识和运用,又成了我们每一个人的目标了。

现在IT行业的飞速发展,无不应正了以前、现在、将来计算机行业都是科学发展的主导行业。

而这些基本上都建立在程序上的,所以程序员对计算机行业来说,可想而知有多么的重要了,他们所付出的每一滴汗水都将推动这个行业的发展。

现在我就用JAVA语言编写一个简单的程序——Java聊天程序。

将所学的基本知识用到其中去,这里包括了构造方法,创建图形界面,引用类等等。

这不仅能锻炼我的实践能力,同时也进一步复习和巩固了我所学的理论知识。

对以前没有学好的还有督促和促进作用。

而且,根据需要,还可以了解一些课外的知识。

增加自己的知识面。

2.开发环境

在开发此聊天程序时,该项目所使用的软件开发环境如下:

 操作系统:

WindowsXP

 开发工具:

eclipse3.2及其VE插件

Eclipse简介

 Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具。

  Eclipse是著名的跨平台的自由集成开发环境(IDE)。

最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。

Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。

许多软件开发商以Eclipse为框架开发自己的IDE。

 Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。

IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。

目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。

Eclipse是一个开发源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。

近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集大成者,使用者只需下载各种语言的插件即可。

3.需求分析

3.1程序简介

随着网络技术的发展,人们越来越多的依赖于网络,为了方便人们的生活,网络聊天自然成为了热点,各种工具到处都是。

此程序便是模仿其他聊天工具设计的,当然只是实现了比较少的功能,可以进行基本的聊天。

3.2程序功能

该程序功能:

该程序分为2个部分,一个是客户端程序,一个是服务端程序,需要先开启服务器,再开启客户端才能使用,客户端程序提供了相互通信、清空聊天记录的等功能,服务端则用于接受客户端的请求,记录客户端的信息等。

4.系统设计

4.1概要设计

此聊天程序共有2个部分,客户端和服务器。

客户端中包含了3个Java文件,分别为主类Chat.java,登陆窗口类LoginFrame.java,聊天窗口类ChatFrame.java;服务器端只有一个主类Server.java。

程序流程图:

         服务器程序结构           客户端程序结构

4.2详细设计

(1)服务器程序实现

   本程序采用的是Socket通信来设计的,建立一个主类Server.java,其中主类中还包括服务器线程类CreateServerThread.java然后在其构造方法加载程序所需的组件,构造方法如下:

publicclassServerextendsServerSocket

{

 staticfinalintSERVER_PORT=10000;//定义端口

 Vectorvector1=newVector();

 Vectorvector2=newVector();

 publicServer()throwsIOException

 {

  super(SERVER_PORT);

  try

  {

  while(true)

  {

   System.out.println("等待客户连接......");   

   Socketsocket=accept();

   newCreateServerThread(socket,vector1,vector2);

  }

  }

  catch(IOExceptione){System.out.println("客户连接错误");}

  finally

  {

   close();

  }

 }

 publicstaticvoidmain(String[]args)throwsIOException

 {

  newServer();

 }

}

其运行截图如下图所示:

(2)、客户端主程序

本程序使用了默认的卡片布局方式,对窗口的大小进行设置,让聊天窗口能够居中显示,以及调用注册类和登录主窗口类。

实现窗口布局功能和类的调用功能的主要代码如下:

 publicclassChat

{

 booleanpackFrame=false;

 Chat()

 {

 chatFrameframe=newchatFrame();

 DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

 DimensionframeSize=frame.getSize();

 if(frameSize.height>screenSize.height){

  frameSize.height=screenSize.height;

 }

 if(frameSize.width>screenSize.width){

  frameSize.width=screenSize.width;

 }

 frame.setLocation((screenSize.width-frameSize.width)/2,

         (screenSize.height-frameSize.height)/2);

 }

publicstaticvoidmain(String[]args)

{

 SwingUtilities.invokeLater(newRunnable()

  {

   publicvoidrun()

   {  newChat(); } 

 });

}

(3)、登录界面的设计

 程序提供了注册窗口,用户可以对用户名和性别进行填写,同时,可以接受几个用户的注册,但用户名不能相同。

 实现注册功能的主要代码如下:

 publicclassLoginFrameextendsJFrameimplementsActionListener

{

 JPanelcontentPane;

 JLabeljLabel1=newJLabel();

 JTextFieldjTextField1=newJTextField();

 ButtonGroupbuttonGroup1=newButtonGroup();

 JRadioButtonjRadioButton1=newJRadioButton("男");

 JRadioButtonjRadioButton2=newJRadioButton("女");

 JLabeljLabel2=newJLabel("性别:

");

 JButtonjButton1=newJButton();

 JButtonjButton2=newJButton();

 Stringsex="男";

 Stringname=null;

 booleanbool=false;

 Socketsocket;

 DataInputStreamin;

 DataOutputStreamout;

 

 publicLoginFrame()

 {

  setSize(newDimension(400,210));

  setTitle("登录界面"); 

  setVisible(true);

  contentPane=(JPanel)getContentPane();

  contentPane.setLayout(null);

  this.setResizable(false);

  jLabel1.setFont(newFont("Dialog",15,15));

  jLabel1.setText("请输入您的昵称:

");

  jLabel1.setBounds(53,20,113,44);

  jTextField1.setBounds(182,25,154,33);//输入客户昵称

  jRadioButton1.setFont(newFont("Dialog",Font.PLAIN,13));

  jRadioButton1.setSelected(true);//输入客户性别

  jRadioButton1.setBounds(186,64,91,25);

  jRadioButton1.addActionListener(this);

  jRadioButton2.setFont(newFont("Dialog",Font.PLAIN,13));

  jRadioButton2.setBounds(187,90,91,25);

  jRadioButton2.addActionListener(this);

  jLabel2.setFont(newFont("Dialog",Font.PLAIN,15));

  jLabel2.setBounds(136,80,34,16); 

  jButton1.setBounds(182,138,71,25);//"确定"与"取消"按钮 

  jButton1.setText("确定");

  jButton1.addActionListener(this);

  jButton2.setBounds(264,138,71,25); 

  jButton2.setText("取消");

  jButton2.addActionListener(this);

  contentPane.add(jLabel1);

  contentPane.add(jTextField1);

  contentPane.add(jRadioButton1);

  contentPane.add(jRadioButton2);

  contentPane.add(jLabel2);

  contentPane.add(jButton2);

  contentPane.add(jButton1);

  buttonGroup1.add(jRadioButton1);

  buttonGroup1.add(jRadioButton2);

  DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();

  DimensionframeSize=getSize();

  if(frameSize.height>screenSize.height) 

   {frameSize.height=screenSize.height;}

  if(frameSize.width>screenSize.width)

   { frameSize.width=screenSize.width;}

  setLocation((screenSize.width-frameSize.width)/2,

       (screenSize.height-frameSize.height)/2);

  setVisible(true);

}

其运行截图如下图所示:

  

(5)、聊天窗口程序设计

 程序提供了发送文字和清空聊天记录的的简单功能。

以下是实现程序的主要方法:

 publicchatFrame()

 {

  setTitle("JY聊天室");

  setSize(602,515);

  this.setResizable(false);

  this.setVisible(false);

  

  try{

  setDefaultCloseOperation(EXIT_ON_CLOSE);

  addWindowListener(newWindowAdapter()

   {

    publicvoidwindowClosing(WindowEvente)

    {

     try{ 

      out.writeUTF("下线了:

"+frame.name+"/"+frame.sex);

      out.close();

      in.close();

      socket.close();

     }

     catch(Exceptionee){  }

     finally

     {

      frame.dispose();

      dispose();

     }

    }

   }

  );

 jbInit();

 }catch(Exceptionexception)

  {exception.printStackTrace();}

 }

voidjbInit()throwsException

 {

  jScrollPane1.setBounds(2,2,445,320);

  jScrollPane2.setBounds(1,333,448,95);

  jScrollPane3.setBounds(458,6,139,424);

  jBtnSend.setBounds(93,441,78,31);

  jBtnClear.setBounds(185,441,76,31);

  frame.setVisible(true);

  jTextArea1.setEditable(false);

  contentPane=(JPanel)getContentPane();

  contentPane.setLayout(null);  

  contentPane.add(jScrollPane2);

  contentPane.add(jScrollPane1,null);

  contentPane.add(jScrollPane3);

  contentPane.add(jBtnSend);

  contentPane.add(jBtnClear);

  contentPane.add(jBtnBiaoQing);

  jScrollPane1.getViewport().add(jTextArea1);  

  jScrollPane2.getViewport().add(jTextArea2);

  jScrollPane3.getViewport().add(jList1);

  jBtnClear.addActionListener(this);

  jBtnSend.addActionListener(this);

  try{

   InetAddressaddress=InetAddress.getLocalHost();

   socket=newSocket(address.getHostAddress(),port);

   //socket=newSocket("127.0.0.1",port);

   in=newDataInputStream(socket.getInputStream());

   out=newDataOutputStream(socket.getOutputStream());

  }catch(Exceptione){

   setVisible(true);

   jTextArea2.setText("无法与服务器联接,请退出...");

  }

  if(thread==null)

  {

   thread=newThread(this);

   thread.start();

  }

  frame.setClection(socket,in,out);

}

 publicvoidactionPerformed(ActionEvente)

 {

  if(e.getSource()==jBtnSend)

   {sendStr();}

  if(e.getSource()==jBtnClear)

   {jTextArea1.setText(""); }

 }

其运行截图如下图所示:

5.测试

  程序在编码过程中,出现了许多的问题,有的是因为程序的完善性不够好而造成的,有的是因为技术不够而无法解决。

通过不停的调试,修改,多数已发现的问题都已完善,但依然存在少数的问题无法解决。

例如,在用户注册这个功能中,当用户的用户名重复时,服务器会出现用户名重复的异常,服务器就不会响应。

6.结论

通过这次程序的实训,我知道了自己在许多地方的不足,虽然书上的程序基本能看懂,但是自己的编程实践能力实在是欠缺,而且我知道了,Java语言最重要的不仅仅是学好语法,而Java中最重要的还是要理解它的面向对象编程的思想,理解它的面向对象的特征。

因为学习任何一门语言最重要的就是理解它的思想,要做到知其然,并且知其所以然。

要学会真正的编写程序,而不仅仅是把语法背的滚瓜烂熟。

还要经常写代码,做到一边写一边理解,这样才能真正的实现学习Java语言的目的。

这次实训也告诉了我,光有书上的知识对我们来说是远远不够的,如果我们要想让自己在编程上有所突破的话,我们必须拓展自己的知识面,此次程序设计就给我增加了不少的知识,让我在编程方面学到了许多编程所需要的东西,还有也锻炼我的耐性,磨砺了我的意志,在错误面前反复修改但是从不气馁。

所以,这次实训让我受益匪浅,不管是在知识方面还是做事方面,都交会了我许多。

同时还巩固了以前所学的知识,学到了不少书本上没有的知识;学到了很多java编程知识,并学会了简单的使用Eclipse来开发Java程序的一些使用技巧这次课程设计是对我本学期所学的知识的检验,由此我发现了不少的问题。

可以说它给了我一次自我评估的机会。

通过设计让我知道了那些方面我还是有欠缺的,促使我花时间弥补。

  临近考试,时间太紧迫,致使程序实现的功能在方法上也许不是很完美,但我以后会多向老师请教,自己也要加强对Java的学习。

努力进一步提高自己的编程水平。

参考文献

[1]耿祥义.Java课程设计:

清华大学出版社第二版,2008年11月.

[2]马皓.Java语言程序设计:

机械工业出版社,2007年3月

[3]孙卫琴.java面向对象编程.电子工业出版社.2007

[4]刘海军.Java程序设计.中国铁道出版社,2006

[5]郑阿奇,姜乃松,殷红先.Java实用教程.电子工业出版社,2005

[6]张广彬、王小宁、高静,Java课程设计案例精编(第二版)清华大学出版社,2011年

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1