JAVA程序设计
课程设计报告
班级: 计0902 学号: 12 姓名: 李兴华 指导教师: 蔚承建
完成日期:2010-12-26
课 程 设 计 报 告 书 专 用 纸
一: 题目内容的描述
本文围绕Java编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对计算器程序进行需求分析、概要设计、详细设计,最后使用Java编程实现的全过程。在编程我们使用的java语言,是目前比较流行的编程语言。在当今这个网络的时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。
二: 需求分析
1.1 开发背景:
在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个局域网的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识. 1.1
功能要求:
(1)登录功能.
(2)客户可以通过服务器转发,实现一对一和多对多聊天. (3)实现呼叫功能.
(4)客户端程序应该可以实时显示目前其它用户的状态.
三: 主要模块的算法描述
? 聊天室服务器端设计: JFrame ActionListener ChatServer -port:public static in -serverSocket:ServerSocket -messageShow:JTextArea -userLinkList:UserLinkList -showStatus:JTextField + ChatServer():public +init():public void +startService():public void +stopService():public void +sendStopToAll():public void +sendMsgToAll(String):public void + sendSystemMessage():public void Thread ServerListen - server: ServerSocket - userLinkList :UserLinkList - isStop: public Boolean +ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkList) ServerReceive -textarea:JTextArea - userLinkList :UserLinkList - isStop: public Boolean +ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkList) 第 1 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
? 聊天室客户端设计: ActionListener JFrame ChatClient -port:public static in -serverSocket:ServerSocket -messageShow:JTextArea -userLinkList:UserLinkList -showStatus:JTextField + ChatClient():public +init():public void +Connect():public void +DisConnect():public void +SendMessage():public void Thread ClientReceive - socket: Socket -output:ObjectOutputStream -input:ObjectInputStream +ClientReceive(Socket,ObjectOutputStream,ObjectInputStream,JComboBox,JTextArea,JTextField ) 四: 详细设计
? 聊天室服务器端设计:
聊天室服务端主要包括7个文件,它们的功能如下:
(1)ChatServer.java:包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。
import java.awt.*;
import java.awt.event.*; import javax.swing.*;
import javax.swing.event.*; import java.net.*; import java.io.*; /*
* 聊天服务端的主框架类
*/
public class ChatServer extends JFrame implements ActionListener{
public static int port = 8888;//服务端的侦听端口 ServerSocket serverSocket;//服务端Socket Image icon;//程序图标
JComboBox combobox;//选择发送消息的接受者
第 2 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
//建立菜单栏
JMenuBar jMenuBar = new JMenuBar(); //建立菜单组
JMenu serviceMenu = new JMenu (\服务(V)\//建立菜单项
JMenuItem portItem = new JMenuItem (\端口设置(P)\JMenuItem startItem = new JMenuItem (\启动服务(S)\ImageIcon(\JMenuItem stopItem=new JMenuItem (\停止服务(T)\JMenuItem
exitItem=new
JMenuItem
(\
退
出
(X)\
JTextArea messageShow;//服务端的信息显示
JScrollPane messageScrollPane;//信息显示的滚动条 JTextField showStatus;//显示用户连接状态 JLabel sendToLabel,messageLabel;
JTextField sysMessage;//服务端消息的发送 JButton sysMessageButton;//服务端消息的发送按钮 UserLinkList userLinkList;//用户链表
ImageIcon(\ImageIcon(\
//框架的大小
Dimension faceSize = new Dimension(400, 600); ServerListen listenThread; JPanel downPanel ;
GridBagLayout girdBag;
GridBagConstraints girdBagCon; /**
* 服务端构造函数 */
public ChatServer(){ init();//初始化程序
//添加框架的关闭事件处理 //建立工具栏
JToolBar toolBar = new JToolBar(); //建立工具栏中的按钮组件
JButton portSet;//启动服务端侦听
JButton startServer;//启动服务端侦听 JButton stopServer;//关闭服务端侦听 JButton exitButton;//退出按钮
JMenu helpMenu=new JMenu (\帮助(H)\JMenuItem helpItem=new JMenuItem (\帮助(H)\ImageIcon(\
第 3 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
//设置运行时窗口的位置
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2, (int) (screenSize.height - faceSize.getHeight()) / 2); this.setResizable(false);
this.setTitle(\聊天室服务端\设置标题 //为服务菜单栏设置热键'V' serviceMenu.setMnemonic('V'); //为端口设置快捷键为ctrl+p portItem.setMnemonic ('P'); portItem.setAccelerator
(KeyStroke.getKeyStroke
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack();
//设置框架的大小
this.setSize(faceSize); this.setVisible(true);
(KeyEvent.VK_P,InputEvent.CTRL_MASK));
//为启动服务快捷键为ctrl+s startItem.setMnemonic ('S'); startItem.setAccelerator
(KeyStroke.getKeyStroke
(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//为端口设置快捷键为ctrl+T stopItem.setMnemonic ('T');
(KeyStroke.getKeyStroke
stopItem.setAccelerator
(KeyEvent.VK_T,InputEvent.CTRL_MASK)); //为退出设置快捷键为ctrl+x
exitItem.setMnemonic ('X');
exitItem.setAccelerator
(KeyEvent.VK_X,InputEvent.CTRL_MASK)); //为帮助菜单栏设置热键'H'
helpMenu.setMnemonic('H'); //为帮助设置快捷键为ctrl+p helpItem.setMnemonic ('H'); helpItem.setAccelerator
(KeyStroke.getKeyStroke
(KeyStroke.getKeyStroke
(KeyEvent.VK_H,InputEvent.CTRL_MASK));
}
第 4 页 共 18 页