java课设聊天程序说明书解析.docx
- 文档编号:14408555
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:31
- 大小:265.27KB
java课设聊天程序说明书解析.docx
《java课设聊天程序说明书解析.docx》由会员分享,可在线阅读,更多相关《java课设聊天程序说明书解析.docx(31页珍藏版)》请在冰点文库上搜索。
java课设聊天程序说明书解析
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2013年秋季学期
Java课程设计
题目:
聊天程序
专业班级:
计算机科学与技术班
姓名:
学号:
指导教师:
成绩:
摘要
Java是一种重要的、流行的计算机程序设计语言。
Java课程设计要求学生利用图形用户界面,实现一个聊天室中多人聊天;两人私聊等功能。
主要技术利用Java的Socket通信。
设计、开发一套简单的聊天程序软件。
Java是一个面向对象的程序设计软件,它将重点放在数据和对象的接口上,与C++相比的主要不同在于多继承,在Java中,取而代之的是简单的接口,以及Java的元类模型。
这也很大程度上给我们初学编程的人带来很呆的方便,也使我们更容易掌握Java编程的一些基本要领和深层知识。
通过该题目的设计,培养学生面向对象程序设计的思想,要求学生达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
同时强调好的程序设计风格,提高解决实际问题的能力。
关键词:
类;可视化界面;聊天程序;Java
序言
Java不仅是一门最为流行的计算机语言,而且已经形成一种专门的技术,带来了20世纪末和本世纪初网络科技和网络经济超常发展。
Java的与平台无关性、高可靠性、安全机制和内嵌网络支持等特性使它成为编写网络应用程序的首选工具之一。
从另一方面来看,软件开发的规模也日渐扩大,对软件质量的要求越来越高,与之相对应的是,各种软件技术和工具层出不穷,各种软件开发、软件质量控制、软件管理法方法学业日渐成熟。
面对软件发展的这一现状和趋势,无论是拥有计算机基础知识的学生还是IT领域的起步者,熟练掌握一门语言都是至关重要的。
Java是一个面向对象的程序设计软件,它将重点放在数据和对象的接口上,与C++相比的主要不同在于多继承,在Java中,取而代之的是简单的接口,以及Java的元类模型。
这也很大程度上给我们初学编程的人带来很呆的方便,也使我们更容易掌握Java编程的一些基本要领和深层知识。
该程序是利用文件来实现的,程序的重要作用是利用图形用户界面,设计一个简单的聊天程序,实现一个聊天室中多人聊天;两人私聊等功能。
通过该题目的设计,培养学生面向对象程序设计的思想,要求学生达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
同时强调好的程序设计风格,提高解决实际问题的能力。
目录
一、分析与设计4
1.1问题描述4
1.2需求分析4
1.3功能模块图4
1.4系统类层次5
二、详细设计6
2.1聊天室客户端类6
2.2聊天线程类的实现6
2.3接收服务器发送的信息类的实现7
2.4处理系统信息的实现8
2.5私聊窗口类的实现10
三、系统测试12
3.1测试方案12
3.2测试用例12
3.3测试结果12
3.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系统类层次
定义聊天室客户端类:
publicclassClient
定义聊天室服务器端类:
publicclassServerimplementsProtocol
定义用户线程类:
staticclassUserThreadextendsThread
私聊窗口类:
privateclassChatWindow
接收服务器发送的信息类:
classGetMsgThreadextendsThread
登陆线程类:
publicclassLoginThreadextendsThreadimplementsProtocol
聊天线程类:
classChatThreadextendsThreadimplementsProtocol
检查信息是否允许发送,包括检查敏感词汇/空信息/刷屏:
privatebooleanisAllowed(Stringmsg,Stringmsgto)
2、详细设计
2.1聊天室客户端类
publicclassClient
{
//主方法:
启动登陆线程
publicstaticvoidmain(String[]args)throwsException
{
Threadlogin=newLoginThread();
login.start();
}
}
2.2聊天线程类的实现
classChatThreadextendsThreadimplementsProtocol{
privateMapusers=newHashMap();
privateStringname;
privateSockets;
privateBufferedReaderin;
privatePrintWriterout;
privateJComboBoxcb;
privateJFramef;
privateJTextAreata;
privateJTextFieldtf;
privatestaticlongtime;//上一条信息的发出时间
privatestaticinttotal;//在线人数统计
publicChatThread(Stringname,Sockets,BufferedReaderin,PrintWriterout){
this.name=name;
this.s=s;
this.in=in;
this.out=out;
}
2.3接收服务器发送的信息类的实现
classGetMsgThreadextendsThread{
publicvoidrun(){
try{
Stringmsg,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,"");
JTextAreatas=((ChatWindow)users.get(name)).tas;
tas.append(name+"说:
"+msg+"\n");
tas.setCaretPosition(tas.getText().length());
ta.append(name+"悄悄地对你说:
"+msg+"\n");
}elseif(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(Exceptione){
out.println(SYSTEM_MSG+USER_LOGOUT);//当异常产生时向系统发出退出信息
}finally{
try{
s.close();
}catch(IOExceptione){
}
}
}
}
GetMsgThreadgt=newGetMsgThread();
gt.start();
2.4处理系统信息的实现
privateStringspecialMsg(Stringmsg){
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,newChatWindow(msg));//////////////////////////////
total++;
msg+="进入聊天室";
}
/*
*当有人离开聊天室
*/
elseif(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+="退出聊天室";
}
/*
*登陆时获得的在线用户列表信息
*/
elseif(msg.startsWith(EXIST_USERS)){
msg=msg.replaceFirst(EXIST_USERS,"");
cb.addItem(msg);
users.put(msg,newChatWindow(msg));
total++;
msg+="正在聊天室";
}
/*
*即时显示在线人数
*/
f.setTitle(SOFTWARE+"-"+name+"当前在线人数:
"+total);
returnmsg;
}
returnmsg;
}
/**
*检查信息是否允许发送,包括检查敏感词汇/空信息/刷屏
*/
privatebooleanisAllowed(Stringmsg,Stringmsgto){
/*
*过滤空信息
*/
if(msg.length()==0)
returnfalse;
Stringerrmsg=null;
/*
*过滤敏感词汇
*/
for(inti=0;i if(msg.indexOf(FORBID_WORDS[i])>-1){ errmsg="包含敏感信息,信息发送失败! \n"; break; } } longtimenow=(newDate()).getTime();//获得当前时间信息 /* *防刷屏 */ if(timenow-time errmsg="发送信息的最短间隔为"+TIME_BETWEEN_MSG+"秒,请勿刷屏! \n"; } if(errmsg==null){ time=timenow;//记录发送信息时间 returntrue; }elseif(msgto==null) ta.append(errmsg); else ((ChatWindow)users.get(msgto)).tas.append(errmsg); returnfalse; } 2.5私聊窗口类的实现 privateclassChatWindow{ JFramefs; JTextAreatas; Stringname; publicChatWindow(Stringusername){ this.name=username; fs=newJFrame(); fs.setSize(400,200); fs.setTitle(SOFTWARE+"-"+"与"+name+"私聊"); fs.setLocation(300,200); tas=newJTextArea(); JScrollPanesps=newJScrollPane(tas); tas.setEditable(false); finalJTextFieldtfs=newJTextField(); JPanelps=newJPanel(newBorderLayout()); //JComboBoxcbs=newJComboBox(); //cbs.addItem(name); //ps.add(cbs,BorderLayout.WEST); ps.add(tfs); fs.getContentPane().add(ps,BorderLayout.SOUTH); fs.getContentPane().add(sps); /* *监听用户在私聊窗口输入的信息(匿名内部类) */ tfs.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(users.containsKey(name)){//////////////////////////////////////////// if(isAllowed(e.getActionCommand(),name)){ sendMsg(name,e.getActionCommand(),true); tfs.setText(null); } }else{ tas.append("信息发送失败,用户已经离开聊天室.\n"); } } }); } } 3、系统测试 3.1测试方案 采用白盒测试,也称为结构化测试、基于代码的测试,是一种测试用例设计方法,它从程序的控制结构导出测试用例。 由于测试采用的是白盒单元测试,所以,我们的测试原则是: 1.准备测试数据和预期结果 2.调用测试单元对测试数据进行处理,得到处理结果 3.比较处理结果和预期结果是否匹配 3.2测试用例 测试所用数据: 用户总数4名,分别为: 冰玉翔翎、只为你写诗、四季如春、陌北北1 3.3测试结果 用户登录界面如图3.1所示: 图3.1用户登录界面 两人私聊界面如图3.2所示: 图3.2两人私聊界面 群聊界面如图3.3所示: 图3.3群聊界面 用户退出聊天室界面如图3.4所示: 图3.4用户退出聊天室界面 3.4软件可靠性分析 利用计算机进行聊天程序,其系统为C/S模式。 首先根据功能模块将系统分为两部分: 服务端(Server)和客户端(Client)。 然后构造可以序列化的类,这是本系统的对象。 根据功能细分类和方法,建立文件和网络的传输通信,实现聊天室的基本功能。 4、 软件使用说明书 4.1用户登录: 打开登录界面,输入用户名,点击登录按钮,进入聊天室。 4.2两人私聊: 选择已在聊天室且想私聊的用户,发送并接受消息。 4.3群聊: 选择群聊功能,发送并接受消息。 4.4退出: 关闭聊天界面,退出聊天室。 设计总结 通过这次的课设我收获了许多,首先使我提高了分析问题,并根据需求转化成相应的程序结构的能力;其次也丰富了自己编写程序,调试程序的经验,这使得我认识到编程时可能出现的错误,并对如何去避免产生了新的认识。 总的来说这次课设比较成功,虽然在课设过程中遇到了很多棘手的问题,比如编了好几天的程序却一大堆的错误,又得改好长时间。 经过这次Java课程设计,发现了自己Java方面的好的不足,加深我对Java语言的理解,同时也提高了自己的编程的能力,编程是个长久的过程,平时要多去动手实践,去提高自己分析问题、发现问题、解决问题的能力。 通过该题目的设计,培养面向对象程序设计的思想,要求达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 同时强调好的程序设计风格,提高解决实际问题的能力。 这次Java实习计终于顺利完成了,在设计中遇到了很多的问题,也学会了很多很多在学校里面无法学到的东西。 比如团队合作等等。 Java课设让我受益匪浅! 使我充分的认识到了课设的重要性和自己在Java学习方面的优缺点! 最后对于给过我帮助的老师和同学表示衷心的感谢! 同时也感谢老师为我们提供了一个了解自己检验自己知识水平的平台! 主要参考文献 [1]曲朝阳,杨杰明等.Java程序设计.北京: 清华大学出版社,2008.10 [2]耿祥以,张跃平.Java大学生实用教程.北京: 电子工业出版社,2012.6 [3]明日科技.Java经典编程.北京: 清华大学出版社,2012.10 [4]李尊朝,苏军.Java语言程序设计.北京: 中国铁道出版社,2004.2 [5]王博.面向对象的建模、设计技术与方法.北京希望电脑公司,1990. [6]张桂元,贾燕枫.Eclipse开发入门与项目实践[M].北京: 人民邮电出版社,2006 [7]赵强.基于开源软件的J2EE企业级应用开发[M].北京: 电子工业出版社,2005 [8](美)JohnHunt,ChrisLoftus著.精通J2EE——Java企业级应用[M].周立斌,杨飞等译.北京: 清华大学出版社.2004 [9]曹广鑫,王谢华,王建凤等.Struts数据库项目开发宝典[M].北京: 电子工业出版社,2006 [10]施伯乐、丁宝康.数据库系统教程,高等教育出版社,2008年7月; [11]邵丽萍.软件开发技术[M].北京: 清华大学出版社,2005 [12]谢星星,沈懿卓.UML基础与ROSE建模实用教程.北京: 清华大学出版社,2009 [13]邵丽萍.软件开发技术[M].北京: 清华大学出版社,2005 [14]郭兴成.PowerBuilder9.0实用教程[M].北京: 清华大学出版社,2003 致谢 对于这次Java课设,我感慨颇多。 首先感谢我的指导老师,她在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术,理论联系实际,完成这一设计。 同时也感谢我的Java任课老师,感谢她在基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。 我的同学在设计过程中,给我提出了许多建设性的意见和建议,并在最后的调试程序的过程中帮我找出了一些潜在的错误,没有他们,我也许发现不了这些错误,在此一并表示感谢。 的确,在这两周的课程设计日子里,可以说是苦多于甜,但是可以学到很多很多的东西,不仅可以巩固了以前所学过的知识,而且还学到了很多在书本上没有学到过的知识。 这次课程设计使我对图形化界面有了充分的了解,以前上课的时候对知识的掌握只是理论性的,没有通过自己动手实践,当真正的自己动手操作的时候才会感觉到理论的知识太片面,通过实践,我也解决了很多困我很久的问题,以前看似很难理解的问题,在实践的过程中都有了充分的理解和认识,我发现了自己很多的缺点和错误,并且改正了不好的习惯,养成了遇事要认真的态度,使我认识到无论做什么事都要持之以恒,只要自己努力就会成功! 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学过的理论知识与实践相结合起来,从理论中得出结论,才能真正的为社会服务,从而提高自己的实际动手能力和独立思考问题的能力。 在设计的过程中遇到问题,我学会了自己进行独立的思考和解决。 通过课程设计之后,把以前所学过的知识重新温故。 附录: 源程序 import.*; importjava.io.*; importjava.util.*; publicclassServerimplementsProtocol{ /* *用户名存入key,线程存入对应value */ privatestaticMapusers=newHashMap(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 聊天 程序 说明书 解析