1、计算机课程设计任务书 滁州学院课程设计任务书课程名称: 计算机网络 设计题目: MTS聊天系统 系 别: 计算机科学与技术系 专 业: 计算机科学与技术 组 别: 学生姓名: 江怡顺 学 号: 2008210765 起止日期: 2010年5月22日2010年6月26日 指导教师: 赵生慧 教研室主任: 课程设计题目MTS聊天系统姓名江怡顺学号2008210765班级08计科班系别计算机系专业计算机科学与技术专业组别组长江怡顺组员江怡顺,庞伟,马琳琳,解飞龙,李兴江指导教师赵生慧课程设计目的为了实现网络即时通信课程设计环境专业实验室S501课程设计任务和要求Window操作系统,JDK6课程设计
2、工作进度计划序号起止日期工 作 内 容12010-5-222010-5-27明确各组内成员的工作与任务22010-5-282010-6-5查阅相关资料32010-6-62010-6-10系统分析和概要设计42010-6-112009-6-16进行详细设计,编写代码52009-6-202010-6-26系统打包并测试2010-6-202010-6-26完成课程设计报告,并上交教研室审核意见:教研室主任签字: 年 月 日教学院(系)审核意见:主任签字: 年 月 日 课程设计的主要内容1.需求分析 1.1 开发背景:在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天
3、工具越来越多,类似QQ、网络聊天一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识。1.2 涉及的编程知识基于TCP的Socket通信编程、GUI程序设计、事件处理、多线程技术、输入输出处理、异常处理等。1.3 编程语言及环境在编程中我们使用的java语言,是目前比较流行的编程语言。在当今这个网络的时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。开发环境我们使用的是JCreator,JDK6。2.系统分析为实现网络聊天的功能,
4、本次课程设计采用Windows Socket编程,服务器与客户端采用了TCP/IP连接方式,是支持多客户端同时在线的聊天系统。本聊天室程序设计基于C/S模式,聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听与转发客户端发来的消息,客户端需登陆到服务器才可以实现正常的聊天功能。3.概要设计3.1 主界面设计利用自制窗口,主界面中包括:一个能显示信息的文本框、一个能编辑消息的文本框、一个能清空显示消息的按钮、一个能发送消息的按钮、一个能更换背景图片的按钮和一个能调节透明度的JSlider。3.2 功能设计服务器端具有消息转发的功能,就是其中一个客户端发出的消息,服务器会将此消息转发给每
5、个客户端,另外客户端也有发送消息的功能,也就是一个简单的多人聊天系统,客户端和服务器都有调节界面透明度、清除显示的聊天记录和更换背景图片功能。4.详细设计4.1 自制窗口(以服务器端代码说明)新建一个SSever继承JFrame,然后利用setUndecorated(true);默认去除边框,新建一个JLayeredPane,加到新建的窗体中。自定义标题栏的长度private static final int BAR_HEIGHT = 69;新建一个TitlePanel类,部分代码为: public void paintComponent(Graphics g) super.paintComp
6、onent(g); Graphics2D g2d = (Graphics2D)g; Font title_Font = g.getFont(); g.setFont(new Font(g.getFont().getName(),20,20); g.setColor(Color.white); g.drawImage(leftImage , 0 , 0 , leftImage.getWidth(this), getHeight() , this); for(int i=0;i=(getWidth()-leftImage.getWidth(this)-rightImage.getWidth(thi
7、s)/midImage.getWidth(this);i+ ) g.drawImage(midImage,leftImage.getWidth(this)+midImage.getWidth(this)*i,0,midImage.getWidth(this),getHeight(),this); g.drawImage(rightImage,getWidth()-rightImage.getWidth(this),0 , rightImage.getWidth(this),getHeight() ,this); titleLabel.setBounds(10,10,50,50); g.draw
8、String(titleString , 70,40); if(skinColor != null) Rectangle clip = g.getClipBounds();Color newColor=newColor(skinColor.getRed(),skinColor.getGreen(),skinColor.getBlue(),120); g.setColor(newColor); g.fillRect(clip.x,clip.y,clip.width,clip.height); 此类的功能是建立一个图片标题栏,加在自制窗口的上端。如图所示:新建一个WindowButton类来生成自
9、制窗口的按钮,部分代码: public void initButton(ImageIcon icon) setIcon(icon); setUI(new BasicButtonUI(); setBorderPainted(false); setBorder (BorderFactory.createLineBorder(Color.white, 1); setCursor(new Cursor(Cursor.HAND_CURSOR); setOpaque(false);4.2 加入组件新建一个ImagePanel来用来装载背景图片,部分代码:public void paint(Graphics
10、 g) super.paint(g); Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);/反锯齿 g.drawImage(backGroundImage , 0 , 0 , getWidth(), getHeight() , this); Rectangle clip = g.getClipBounds(); g.setColor(new Color(255, 255, 255, 140); g.fil
11、lRect(clip.x,clip.y,clip.width,clip.height);新建MyJToolBar类,加入选择更换背景的菜单栏,加入清除显示的聊天记录的按钮和调节透明度的JSlider。新建一个JTextArea为显示聊天内容,并将其设置为全透明,代码为:msgText.setOpaque(false);msgText.setEditable(false);msgText.setFont(new Font(Serif,Font.BOLD,15);msgText.setCursor(new Cursor(Cursor.DEFAULT_CURSOR);msgText.setMargi
12、n(new Insets(15, 15, 15, 15);msgText.setLineWrap(true);再新建一个JTextArea用来编辑发送的聊天内容,代码为:writeText.setOpaque(false);writeText.setFont(new Font(Serif,Font.BOLD,15);writeText.setLineWrap(true); 增加一个JButton的发送消息按钮,代码为:writeText.setOpaque(false);writeText.setFont(new Font(Serif,Font.BOLD,15);writeText.setLi
13、neWrap(true); 新建一个SystemDate类,用来聊天时显示,发送消息的时间。4.3 客户端的登录界面设计部分变量:private JPanel LoginPanel = new JPanel();private JPanel BottomPanel = new JPanel();private JLabel imageLogo = new JLabel();private JLabel countLab = new JLabel(账号: );private JLabel passwordLab = new JLabel(密码: );private JLabel stationL
14、ab = new JLabel(状态: );private JLabel serverIP = new JLabel(服务器IP:);private JTextField countText = new JTextField();private JTextField passwordText = new JTextField();private JTextField severIPText = new JTextField(127.0.0.1);private JComboBox statusComBox = new JComboBox();private JCheckBox rmbPassw
15、ord = new JCheckBox(记住密码);private JButton setUpButton = new JButton(设 置);private JButton loginButton = new JButton(登 录); 然后初始化这些变量,在JFrame中定义好这些组件的位置,在输入账号和号码时要经过public boolean checkTheTextField()方法验证,在初始化登录信息中需要public void initInformation()方法从文本文档中读取数据。4.4 系统打包 新建MANIFEST.MF清单文件,内容为:Manifest-Versio
16、n: 1.0Created-By: 1.6.0_02 (Sun Microsystems Inc.) Main-Class: mts.SServer在dos下输入:jar cfm Server.jar MANIFEST.MF mts image data background theme5.操作说明先双击Sever.jar启动服务器,如图所示:然后再双击Client.jar启动客户端,如图所示:输入用户名和密码,在设置中输入服务器端IP地址,默认的是127.0.0.1,然后点击登录,如图所示:也可以同时启动多个客户端进行聊天。聊天窗口如图:6.总结和体会通过这次课程设计让我进一步的了解了简单聊
17、天过程的一般流程及网络编程的一般原理,也使我们体会到了Java面向对象程序设计是一门应用广泛并且实用性极强的高级程序设计语言。通过本次课程设计,我对面向对象的基本思想有了进一步的理解,对项目的各个阶段的任务也有了一定的了解。设计开始阶段必须明确设计的目的与需求分析,总体设计要全面分析聊天室系统的架构。通过这次设计,使我们认识到体系的架构是最重要的,只有准确的系统设计、很好的定义各个模块及模块之间的关系,才能在编码阶段更轻松的的实现。通过这次课程设计,对我们的逻辑思维能力是一个很大的锻炼,它不仅加强了我们的系统思考问题的能力,而且还改变了我们以前不好的编程习惯,虽然花费了不少的时间,但是我学到了
18、丰富的知识。这次程序设计也是一个毅力的考验过程。有时候往往只是一个小小的错误,却要花出几小时甚至是一两天的时间才可能发现它。所以在这个过程不能过于急躁,要很有耐心将程序反复调试。7.致谢非常感谢赵老师在本周的聊天室程序制作实习过程中给予的帮助。你给予的鼓励,增强了我们的自信心和对电脑产生更浓重的兴趣。对我们的实习有很大的帮助。在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。 总之,知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。 在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计的功能做的还不是很完整,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。