《Java程序设计》课程设计大作业服务端聊天系统.docx
- 文档编号:11822955
- 上传时间:2023-04-03
- 格式:DOCX
- 页数:43
- 大小:76.88KB
《Java程序设计》课程设计大作业服务端聊天系统.docx
《《Java程序设计》课程设计大作业服务端聊天系统.docx》由会员分享,可在线阅读,更多相关《《Java程序设计》课程设计大作业服务端聊天系统.docx(43页珍藏版)》请在冰豆网上搜索。
《Java程序设计》课程设计大作业服务端聊天系统
2011—2012学年第一学期
《Java程序设计》课程大作业
题目:
服务端聊天系统
专业:
计算机
班级:
计算机1班
学号:
090400224
姓名:
马英俊
教师:
杨树林
日期:
2011年12月22日
项目
内容
单项分值
总分
选题
1.题目明确,系统功能较集中
4
8
2.题目难度适宜,有一定的综合性
4
功能实现
3.功能完整,能够正确运行
6
24
4.模块划分合理,程序结构清晰
6
5.界面设计合理、易用、协调
6
6.设计与实现程序
6
规范性及文档
7.代码规范性及注释
5
10
8.文档内容齐全,格式规范
5
总体效果
9.完成总体质量
6
12
10.软件功能及技术水平
6
答辩
11.讲解清楚明了,功能演示流畅
6
6
评语
总分
一.课程设计目的
JAVA程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践是必不可少的一个重要环节。
JAVA程序设计的设计目的是加深对理论内容的理解和掌握,更加系统地掌握程序设计及其在开发中的广泛应用,基本方法及技巧,为综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
二.课程设计的实验环境
运行windows2007或XP以上微机系统,JDK,NETBEAN。
三.课程设计主要内容
Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。
Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。
有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。
服务端聊天系统是一个方便于两端用户沟通的软件,通过输入侦听方的端口号(例如:
8888)来启动服务。
当服务启动时,可进行聊天;当停止服务时,聊天信息将不再接受。
四.详细设计
程序详细设计代码如下:
packageorg.Adam;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.event.*;
import.*;
importjava.io.*;
importorg.Adam.PortConf;
importorg.Adam.ServerListen;
/**
*
*@authorAdministrator
*/
publicclassChatServerextendsJFrameimplementsActionListener{
publicstaticintport=8888;//服务端的侦听端口
ServerSocketserverSocket;//服务端Socket
Imageicon;//程序图标
JComboBoxcombobox;//选择发送消息的接受者
JTextAreamessageShow;//服务端的信息显示
JScrollPanemessageScrollPane;//信息显示的滚动条
JTextFieldshowStatus;//显示用户连接状态
JLabelsendToLabel,messageLabel;
JTextFieldsysMessage;//服务端消息的发送
JButtonsysMessageButton;//服务端消息的发送按钮
UserLinkListuserLinkList;//用户链表
//建立菜单栏
JMenuBarjMenuBar=newJMenuBar();
//建立菜单组
JMenuserviceMenu=newJMenu("服务(V)");
//建立菜单项
JMenuItemportItem=newJMenuItem("端口设置(P)");
JMenuItemstartItem=newJMenuItem("启动服务(S)");
JMenuItemstopItem=newJMenuItem("停止服务(T)");
JMenuItemexitItem=newJMenuItem("退出(X)");
JMenuhelpMenu=newJMenu("帮助(H)");
JMenuItemhelpItem=newJMenuItem("帮助(H)");
//建立工具栏
JToolBartoolBar=newJToolBar();
//建立工具栏中的按钮组件
JButtonportSet;//启动服务端侦听
JButtonstartServer;//启动服务端侦听
JButtonstopServer;//关闭服务端侦听
JButtonexitButton;//退出按钮
//框架的大小
DimensionfaceSize=newDimension(400,600);
ServerListenlistenThread;
JPaneldownPanel;
GridBagLayoutgirdBag;
GridBagConstraintsgirdBagCon;
/**
*服务端构造函数
*/
publicChatServer(){
init();//初始化程序
//添加框架的关闭事件处理
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
//设置框架的大小
this.setSize(faceSize);
//设置运行时窗口的位置
DimensionscreenSize=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);
/**
*程序初始化函数
*/
publicvoidinit(){
ContainercontentPane=getContentPane();
contentPane.setLayout(newBorderLayout());
//添加菜单栏
serviceMenu.add(portItem);
serviceMenu.add(startItem);
serviceMenu.add(stopItem);
serviceMenu.add(exitItem);
jMenuBar.add(serviceMenu);
helpMenu.add(helpItem);
jMenuBar.add(helpMenu);
setJMenuBar(jMenuBar);
//初始化按钮
portSet=newJButton("端口设置");
startServer=newJButton("启动服务");
stopServer=newJButton("停止服务");
exitButton=newJButton("退出");
//将按钮添加到工具栏
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=newJComboBox();
combobox.insertItemAt("所有人",0);
combobox.setSelectedIndex(0);
messageShow=newJTextArea();
messageShow.setEditable(false);
//添加滚动条
messageScrollPane=newJScrollPane(messageShow,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
messageScrollPane.setPreferredSize(newDimension(400,400));
messageScrollPane.revalidate();
showStatus=newJTextField(35);
showStatus.setEditable(false);
sysMessage=newJTextField(24);
sysMessage.setEnabled(false);
sysMessageButton=newJButton();
sysMessageButton.setText("发送");
//添加系统消息的事件侦听
sysMessage.addActionListener(this);
sysMessageButton.addActionListener(this);
sendToLabel=newJLabel("发送至:
");
messageLabel=newJLabel("发送消息:
");
downPanel=newJPanel();
girdBag=newGridBagLayout();
downPanel.setLayout(girdBag);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=0;
girdBagCon.gridy=0;
girdBagCon.gridwidth=3;
girdBagCon.gridheight=2;
girdBagCon.ipadx=5;
girdBagCon.ipady=5;
JLabelnone=newJLabel("");
girdBag.setConstraints(none,girdBagCon);
downPanel.add(none);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=0;
girdBagCon.gridy=2;
girdBagCon.insets=newInsets(1,0,0,0);
girdBagCon.ipadx=5;
girdBagCon.ipady=5;
girdBag.setConstraints(sendToLabel,girdBagCon);
downPanel.add(sendToLabel);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=1;
girdBagCon.gridy=2;
girdBagCon.anchor=GridBagConstraints.LINE_START;
girdBag.setConstraints(combobox,girdBagCon);
downPanel.add(combobox);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=0;
girdBagCon.gridy=3;
girdBag.setConstraints(messageLabel,girdBagCon);
downPanel.add(messageLabel);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=1;
girdBagCon.gridy=3;
girdBag.setConstraints(sysMessage,girdBagCon);
downPanel.add(sysMessage);
girdBagCon=newGridBagConstraints();
girdBagCon.gridx=2;
girdBagCon.gridy=3;
girdBag.setConstraints(sysMessageButton,girdBagCon);
downPanel.add(sysMessageButton);
girdBagCon=newGridBagConstraints();
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(
newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
stopService();
System.exit(0);
}
}
);
}
/**
*事件处理
*/
publicvoidactionPerformed(ActionEvente){
Objectobj=e.getSource();
if(obj==startServer||obj==startItem){//启动服务端
startService();
}
elseif(obj==stopServer||obj==stopItem){//停止服务端
intj=JOptionPane.showConfirmDialog(
this,"真的停止服务吗?
","停止服务",
JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if(j==JOptionPane.YES_OPTION){
stopService();
}
}
elseif(obj==portSet||obj==portItem){//端口设置
//调出端口设置的对话框
PortConfportConf=newPortConf(this);
portConf.setVisible(true);
}
elseif(obj==exitButton||obj==exitItem){//退出程序
intj=JOptionPane.showConfirmDialog(
this,"真的要退出吗?
","退出",
JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if(j==JOptionPane.YES_OPTION){
stopService();
System.exit(0);
}
}
elseif(obj==helpItem){//菜单栏中的帮助
//调出帮助对话框
HelphelpDialog=newHelp(this);
helpDialog.setVisible(true);
}
elseif(obj==sysMessage||obj==sysMessageButton){//发送系统消息
sendSystemMessage();
}
}
/**
*启动服务端
*/
publicvoidstartService(){
try{
serverSocket=newServerSocket(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(Exceptione){
//System.out.println(e);
}
userLinkList=newUserLinkList();
listenThread=newServerListen(serverSocket,combobox,
messageShow,showStatus,userLinkList);
listenThread.start();
}
/**
*关闭服务端
*/
publicvoidstopService(){
try{
//向所有人发送服务器关闭的消息
sendStopToAll();
listenThread.isStop=true;
serverSocket.close();
intcount=userLinkList.getCount();
inti=0;
while(i Nodenode=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(Exceptione){ //System.out.println(e); } } /** *向所有人发送服务器关闭的消息 */ publicvoidsendStopToAll(){ intcount=userLinkList.getCount(); inti=0; while(i Nodenode=userLinkList.findUser(i); if(node==null){ i++; continue; } try{ node.output.writeObject("服务关闭"); node.output.flush(); } catch(Exceptione){ //System.out.println("$$$"+e); } i++; } } /** *向所有人发送消息 */ publicvoidsendMsgToAll(Stringmsg){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java程序设计 Java 程序设计 课程设计 作业 服务端 聊天 系统