《Java程序设计》课程设计大作业-服务端聊天系统.doc_第1页
《Java程序设计》课程设计大作业-服务端聊天系统.doc_第2页
《Java程序设计》课程设计大作业-服务端聊天系统.doc_第3页
《Java程序设计》课程设计大作业-服务端聊天系统.doc_第4页
《Java程序设计》课程设计大作业-服务端聊天系统.doc_第5页
免费预览已结束,剩余16页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

20112012学年第一学期java程序设计课程大作业题目: 服务端聊天系统 专业: 计算机 班级: 计算机1班 学号: 090400224 姓名: 马英俊 教师: 杨树林 日期:2011年 12月 22 日项目内容单项分值总分选题1题目明确,系统功能较集中482题目难度适宜,有一定的综合性4功能实现3功能完整,能够正确运行6244模块划分合理,程序结构清晰65界面设计合理、易用、协调66设计与实现程序6规范性及文档7代码规范性及注释5108文档内容齐全,格式规范5总体效果9完成总体质量61210软件功能及技术水平6答辩11讲解清楚明了,功能演示流畅66评语总分一 课程设计目的java程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践是必不可少的一个重要环节。java程序设计的设计目的是加深对理论内容的理解和掌握,更加系统地掌握程序设计及其在开发中的广泛应用,基本方法及技巧,为综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。二 课程设计的实验环境运行windows 2007或xp以上微机系统,jdk,netbean。三 课程设计主要内容java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来新应用的出现,java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为sun公司不断推出新的版本,完善java自身的功能。有了这两点,java语言成为程序员首选的程序设计开发工具就在情理之中了。服务端聊天系统是一个方便于两端用户沟通的软件,通过输入侦听方的端口号(例如:8888)来启动服务。当服务启动时,可进行聊天;当停止服务时,聊天信息将不再接受。四 详细设计程序详细设计代码如下:package org.adam;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import .*;import java.io.*;import org.adam.portconf;import org.adam.serverlisten;/* * * author administrator */public class chatserver extends jframe implements actionlistenerpublic static int port = 8888;/服务端的侦听端口serversocket serversocket;/服务端socketimage icon;/程序图标jcombobox combobox;/选择发送消息的接受者jtextarea messageshow;/服务端的信息显示jscrollpane messagescrollpane;/信息显示的滚动条jtextfield showstatus;/显示用户连接状态jlabel sendtolabel,messagelabel;jtextfield sysmessage;/服务端消息的发送jbutton sysmessagebutton;/服务端消息的发送按钮userlinklist userlinklist;/用户链表/建立菜单栏jmenubar jmenubar = new jmenubar(); /建立菜单组jmenu servicemenu = new jmenu (服务(v); /建立菜单项jmenuitem portitem = new jmenuitem (端口设置(p);jmenuitem startitem = new jmenuitem (启动服务(s);jmenuitem stopitem=new jmenuitem (停止服务(t);jmenuitem exititem=new jmenuitem (退出(x);jmenu helpmenu=new jmenu (帮助(h);jmenuitem helpitem=new jmenuitem (帮助(h);/建立工具栏jtoolbar toolbar = new jtoolbar();/建立工具栏中的按钮组件jbutton portset;/启动服务端侦听jbutton startserver;/启动服务端侦听jbutton stopserver;/关闭服务端侦听jbutton exitbutton;/退出按钮/框架的大小dimension facesize = new dimension(400, 600);serverlisten listenthread;jpanel downpanel ;gridbaglayout girdbag;gridbagconstraints girdbagcon;/* * 服务端构造函数 */public chatserver()init();/初始化程序/添加框架的关闭事件处理this.setdefaultcloseoperation(jframe.exit_on_close);this.pack();/设置框架的大小this.setsize(facesize);/设置运行时窗口的位置dimension screensize = toolkit.getdefaulttoolkit().getscreensize();this.setlocation( (int) (screensize.width - facesize.getwidth() / 2, (int) (screensize.height - facesize.getheight() / 2);this.setresizable(false);this.settitle(聊天室服务端); /设置标题/程序图标icon = getimage(icon.gif);this.seticonimage(icon); /设置程序图标this.setvisible(true);/* * 程序初始化函数 */public void init()container contentpane = getcontentpane();contentpane.setlayout(new borderlayout();/添加菜单栏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(端口设置);startserver = new jbutton(启动服务);stopserver = new jbutton(停止服务 );exitbutton = new jbutton(退出 );/将按钮添加到工具栏toolbar.add(portset);toolbar.addseparator();/添加分隔栏toolbar.add(startserver);toolbar.add(stopserver);toolbar.addseparator();/添加分隔栏toolbar.add(exitbutton);contentpane.add(toolbar,borderlayout.north);/初始时,令停止服务按钮不可用stopserver.setenabled(false);stopitem .setenabled(false);/为菜单栏添加事件监听portitem.addactionlistener(this);startitem.addactionlistener(this);stopitem.addactionlistener(this);exititem.addactionlistener(this);helpitem.addactionlistener(this);/添加按钮的事件侦听portset.addactionlistener(this);startserver.addactionlistener(this);stopserver.addactionlistener(this);exitbutton.addactionlistener(this);combobox = new jcombobox();combobox.insertitemat(所有人,0);combobox.setselectedindex(0);messageshow = new jtextarea();messageshow.seteditable(false);/添加滚动条messagescrollpane = new jscrollpane(messageshow,jscrollpane.vertical_scrollbar_as_needed,jscrollpane.horizontal_scrollbar_as_needed);messagescrollpane.setpreferredsize(new dimension(400,400);messagescrollpane.revalidate();showstatus = new jtextfield(35);showstatus.seteditable(false);sysmessage = new jtextfield(24);sysmessage.setenabled(false);sysmessagebutton = new jbutton();sysmessagebutton.settext(发送);/添加系统消息的事件侦听sysmessage.addactionlistener(this);sysmessagebutton.addactionlistener(this);sendtolabel = new jlabel(发送至:);messagelabel = new jlabel(发送消息:);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;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);/关闭程序时的操作this.addwindowlistener(new windowadapter()public void windowclosing(windowevent e)stopservice();system.exit(0););/* * 事件处理 */public void actionperformed(actionevent e) object obj = e.getsource();if (obj = startserver | obj = startitem) /启动服务端startservice();else if (obj = stopserver | obj = stopitem) /停止服务端int j=joptionpane.showconfirmdialog(this,真的停止服务吗?,停止服务,joptionpane.yes_option,joptionpane.question_message);if (j = joptionpane.yes_option)stopservice();else if (obj = portset | obj = portitem) /端口设置/调出端口设置的对话框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) /菜单栏中的帮助/调出帮助对话框help helpdialog = new help(this);helpdialog.setvisible(true);else if (obj = sysmessage | obj = sysmessagebutton) /发送系统消息sendsystemmessage();/* * 启动服务端 */public void startservice()tryserversocket = new serversocket(port,10);messageshow.append(服务端已经启动,在+port+端口侦听.n);startserver.setenabled(false);startitem.setenabled(false);portset.setenabled(false);portitem.setenabled(false);stopserver .setenabled(true);stopitem .setenabled(true);sysmessage.setenabled(true);catch (exception e)/system.out.println(e);userlinklist = new userlinklist();listenthread = new serverlisten(serversocket,combobox,messageshow,showstatus,userlinklist);listenthread.start();/* * 关闭服务端 */public void stopservice()try/向所有人发送服务器关闭的消息sendstoptoall();listenthread.isstop = true;serversocket.close();int count = userlinklist.getcount();int i =0;while( i count)node node = userlinklist.finduser(i);node.input .close();node.output.close();node.socket.close();i +;stopserver .setenabled(false);stopitem .setenabled(false);startserver.setenabled(true);startitem.setenabled(true);portset.setenabled(true);portitem.setenabled(true);sysmessage.setenabled(false);messageshow.append(服务端已经关闭n);combobox.removeallitems();combobox.additem(所有人);catch(exception e)/system.out.println(e);/* * 向所有人发送服务器关闭的消息 */public void sendstoptoall()int count = userlinklist.getcount();int i = 0;while(i count)node node = userlinklist.finduser(i);if(node = null) i +;continue;trynode.output.writeobject(服务关闭);node.output.flush();catch (exception e)/system.out.println($+e);i+;/* * 向所有人发送消息 */public void sendmsgtoall(string msg)int count = userlinklist.getcount();/用户总数int i = 0;while(i count)node node = userlinklist.finduser(i);if(node = null) i +;continue;trynode.output.writeobject(系统信息);node.output.flush();node.output.writeobject(msg);node.output.flush();catch (exception e)/system.out.println(+e);i+;sysmessage.settext();/* * 向客户端用户发送消息 */public void sendsystemmessage()string tosomebody = combobox.getselecteditem().tostring();string message = sysmessage.gettext() + n;messageshow.append(message);/向所有人发送消息if(tosomebody.equalsignorecase(所有人)sendmsgtoall(message);else/向某个用户发送消息node node = userlinklist.finduser(tosomebody);trynode.output.writeobject(系统信息);node.output.flush();node.output.writeobject(message);node.output.flush();catch(exception e)/system.out.println(!+e);sysmessage.settext();/将发送消息栏的消息清空/* * 通过给定的文件名获得图像 */image getimage(string fi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论