




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*实践教学* 兰州理工大学计算机与通信学院2015年秋季学期 Java 课程设计题 目: 聊天程序 专业班级:计算机科学与技术一班 姓 名: 邢洪源 学 号: 13240103 指导教师: 王 燕 成 绩: 28摘要Java是一种重要的、流行的计算机程序设计语言。Java课程设计要求学生利用图形用户界面,实现一个聊天室中多人聊天;两人私聊等功能。主要技术利用Java的Socket通信。设计、开发一套简单的聊天程序软件。Java是一个面向对象的程序设计软件,它将重点放在数据和对象的接口上,与C+相比的主要不同在于多继承,在Java中,取而代之的是简单的接口,以及Java的元类模型。这也很大程度上给我们初学编程的人带来很呆的方便,也使我们更容易掌握Java编程的一些基本要领和深层知识。通过该题目的设计,培养学生面向对象程序设计的思想,要求学生达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同时强调好的程序设计风格,提高解决实际问题的能力。关键词:类;可视化界面;聊天程序;Java;图形界面 序言Java不仅是一门最为流行的计算机语言,而且已经形成一种专门的技术,带来了20世纪末和本世纪初网络科技和网络经济超常发展。Java的与平台无关性、高可靠性、安全机制和内嵌网络支持等特性使它成为编写网络应用程序的首选工具之一。从另一方面来看,软件开发的规模也日渐扩大,对软件质量的要求越来越高,与之相对应的是,各种软件技术和工具层出不穷,各种软件开发、软件质量控制、软件管理法方法学业日渐成熟。面对软件发展的这一现状和趋势,无论是拥有计算机基础知识的学生还是IT领域的起步者,熟练掌握一门语言都是至关重要的。Java是一个面向对象的程序设计软件,它将重点放在数据和对象的接口上,与C+相比的主要不同在于多继承,在Java中,取而代之的是简单的接口,以及Java的元类模型。这也很大程度上给我们初学编程的人带来很呆的方便,也使我们更容易掌握Java编程的一些基本要领和深层知识。该程序是利用文件来实现的,程序的重要作用是利用图形用户界面,设计一个简单的聊天程序,实现一个聊天室中多人聊天;两人私聊等功能。通过该题目的设计,培养学生面向对象程序设计的思想,要求学生达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同时强调好的程序设计风格,提高解决实际问题的能力。目录一、分析与设计41.1问题描述41.2需求分析41.3功能模块图41.4系统类层次5二、 详细设计62.1聊天室客户端类62.2聊天线程类的实现62.3接收服务器发送的信息类的实现72.4处理系统信息的实现82.5私聊窗口类的实现10三、 系统测试123.1测试方案123.2测试用例123.3测试结果123.4软件可靠性分析18四、 软件使用说明书19设计总结20主要参考文献21致谢22附录:源程序23一、分析与设计1.1问题描述 该设计要求设计、开发一套简单聊天程序软件,主要实现一个聊天室中两人私聊,多人聊天两大功能。通过该题目的设计,培养面向对象程序设计的思想,要求达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同时强调好的程序设计风格,提高解决实际问题的能力。1.2需求分析 聊天程序要求实现最基本的功能,包括一个聊天室中多人聊天;两人私聊等功能,主要技术利用Java的Socket通信。聊天程序主要包括以下功能:(1). 登录:新用户登录。(2). 私聊:两人私聊。(3). 群聊:一个聊天室中多人聊天。(4). 退出:已在聊天室用户退出。 1.3功能模块图总体功能模块图,如图1.1所示:聊天程序登录群聊退出私聊图1.1 聊天程序模块示意图 1.4系统类层次 定义聊天室客户端类:public class Client定义聊天室服务器端类:public class Server implements Protocol定义用户线程类:static class UserThread extends Thread私聊窗口类:private class ChatWindow接收服务器发送的信息类:class GetMsgThread extends Thread登陆线程类:public class LoginThread extends Thread implements Protocol聊天线程类:class ChatThread extends Thread implements Protocol检查信息是否允许发送,包括检查敏感词汇/空信息/刷屏:private boolean isAllowed(String msg, String msgto)2、 详细设计2.1聊天室客户端类public class Client /主方法:启动登陆线程public static void main(String args) throws Exception Thread login = new LoginThread();login.start();2.2聊天线程类的实现 class ChatThread extends Thread implements Protocol private Map users = new HashMap();private String name;private Socket s;private BufferedReader in;private PrintWriter out;private JComboBox cb;private JFrame f;private JTextArea ta;private JTextField tf;private static long time;/ 上一条信息的发出时间private static int total;/ 在线人数统计public ChatThread(String name, Socket s, BufferedReader in, PrintWriter out) = name;this.s = s;this.in = in;this.out = out;2.3接收服务器发送的信息类的实现 class GetMsgThread extends Thread public void run() try String msg, name;while (!s.isClosed() /* * 不断接受服务器信息,外层循环防止读到null跳出循环 */while (!s.isClosed() & (msg = in.readLine() != null) msg = specialMsg(msg);/ 系统信息处理if (msg.startsWith(MSG_FROM) msg = msg.replaceFirst(MSG_FROM, );name = msg.substring(0, msg.indexOf(NAME_END);msg = msg.replaceFirst(name + NAME_END, );JTextArea tas = (ChatWindow) users.get(name).tas;tas.append(name + 说: + msg + n);tas.setCaretPosition(tas.getText().length();ta.append(name + 悄悄地对你说: + msg + n); else if (msg.contains(NAME_END) name = msg.substring(0, msg.indexOf(NAME_END);msg = msg.replaceFirst(name + NAME_END, );ta.append(name + 说: + msg + n);/ 在窗口显示信息 else ta.append(msg + n);ta.setCaretPosition(ta.getText().length();/ 自动滚动到底部 catch (Exception e) out.println(SYSTEM_MSG + USER_LOGOUT);/ 当异常产生时向系统发出退出信息 finally try s.close(); catch (IOException e) GetMsgThread gt = new GetMsgThread();gt.start();2.4处理系统信息的实现 private String specialMsg(String msg) if (msg.startsWith(SYSTEM_MSG) msg = msg.replaceFirst(SYSTEM_MSG, );/* * 当有人进入聊天室 */if (msg.startsWith(ADD_USER) msg = msg.replaceFirst(ADD_USER, );cb.addItem(msg);users.put(msg, new ChatWindow(msg);/total+;msg += 进入聊天室;/* * 当有人离开聊天室 */else if (msg.startsWith(DELETE_USER) msg = msg.replaceFirst(DELETE_USER, );cb.removeItem(msg);(ChatWindow) users.get(msg).tas.append(msg + 退出聊天室n);users.remove(msg);total-;msg += 退出聊天室;/* * 登陆时获得的在线用户列表信息 */else if (msg.startsWith(EXIST_USERS) msg = msg.replaceFirst(EXIST_USERS, );cb.addItem(msg);users.put(msg, new ChatWindow(msg);total+;msg += 正在聊天室;/* * 即时显示在线人数 */f.setTitle(SOFTWARE + - + name + 当前在线人数: + total);return msg;return msg;/* * 检查信息是否允许发送,包括检查敏感词汇/空信息/刷屏 */private boolean isAllowed(String msg, String msgto) /* * 过滤空信息 */if (msg.length() = 0)return false;String errmsg = null;/* * 过滤敏感词汇 */for (int i = 0; i -1) errmsg = 包含敏感信息,信息发送失败!n;break;long timenow = (new Date().getTime();/ 获得当前时间信息/* * 防刷屏 */if (timenow - time 0) /* * 收到用户退出的系统信息,删除集合中对应项,通知所有用户 */if (msg.startsWith(SYSTEM_MSG + USER_LOGOUT) synchronized (lock) users.remove(this.username);send群聊(SYSTEM_MSG + DELETE_USER + this.username);s.close();System.out.print(rOnline: + -online + );/* * 收到聊天信息,解析出发送对象和信息内容,并发送 */else touser = msg.substring(0, msg.indexOf(NAME_END);msg = msg.replaceFirst(touser + NAME_END, );send(msg, touser);/* * 登陆时出现用户名已存在情况,通知用户 */catch (ExistException e) out.println(SYSTEM_MSG + USER_EXIST);out.flush(); catch (Exception e) finally try s.close(); catch (Exception e) /* * 发送信息给所有用户 */private void send群聊(String msg) Set s = users.keySet();Iterator it = s.iterator();while (it.hasNext() UserThread t = (UserThread) users.get(it.next();if (t != this)t.sendUser(msg);/* * 给本线程发送在线用户列表 */private void list群聊() Set s = users.keySet();Iterator it = s.iterator();while (it.hasNext() this.sendUser(SYSTEM_MSG + EXIST_USERS + it.next();/* * 判断用户名是否已经有人使用 */private boolean isExist(String name) Set s = users.keySet();Iterator it = s.iterator();while (it.hasNext() if (name.equals(String) it.next() return true;return false;/* * 给本线程对应的用户发信息 */private void sendUser(String msg) out.println(msg);out.flush();/ System.out.println(to + this.username + : + msg);/ 调试用代码/* * 给指定对象发送信息 */private void send(String msg, String touser) /* * 调用相应函数,给所有人发信息时 */if (touser.equals(群聊) send群聊(this.username + NAME_END + msg);return;/* * 根据发送目标的名字获得相应线程,调用目标线程的函数给目标发送信息 */if (users.containsKey(touser)/ 加判断,防止用户已经离线(UserThread) users.get(touser).sendUser(MSG_FROM+ this.username + NAME_END + msg);/* * 主方法:启动服务器 */public static void main(String args) /*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国内外致密气藏储层特征比较及定量表征技术
- 危重病患护理与监护
- 肯德基的消费体验优化
- 建筑工地噪音控制技术
- 2022-2023学年山东省临沂市罗庄区人教PEP版六年级下册期末质量检测英语试卷(解析版)
- 德克士的品牌延续传承
- 德克士的社群运营模式
- 涂膜防水干燥时间间隔研究与应用
- 保险公司月度活动方案
- 保险公司续保活动方案
- 国开作业《公共关系学》实训项目3:社区关系建设(六选一)-实训项目二社区关系建设方案-参考(含答案)98
- 千喜鹤培训手册终版
- 《历史文化名城名镇名村保护规划编制要求》
- 申请人申请仲裁送达信息确认书
- (完整版)生物同源性荷尔蒙替代疗法课件
- 福建跨学科四门主干课程作业及答案小学语文
- (高清正版)JJF 1908-2021 双金属温度计校准规范
- 硬式内窥镜项目计划书_模板范本
- 房屋建筑工程安全防护指导图集(防高坠篇)
- 皮内注射--ppt课件
- 机械原理课程设计半自动钻床郭
评论
0/150
提交评论