




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课 程 设 计 报 告 课程设计名称 Java课程设计 题 目采用Java网络通信技术实现基于C/S模式的聊天室 院 系 信息工程学部 专 业 信息管理与信息系统 班 级 姓 名 指导教师 题目:采用Java网络通信技术实现基于C/S模式的聊天室1 课程设计教学条件要求 eclipse/ netbeans/ Jbuilder 2 课程设计任务编写一个简易CS版聊天室,多个客户端可以同时发送信息,服务器端监听并显示到客户端页面。1要求可以实现多人同时在线聊天。2要求客户端和服务器端的界面采用Swing或SWT实现3服务器可以向多个客户进行广播通信。3 课程设计报告书主要内容1 需求分析2 总体设计 21 设计的总体思想与算法描述 22 模块结构图 23 各功能模块的功能与处理流程描述 24 界面设计3 各功能模块程序设计按照功能模块的功能与处理流程描述给出详细的程序代码,并给出重点语句的注释.4 小结4 课程设计要求1 按时到机房签到,在指定机位上机。遵守机房纪律。 2 独立完成课程设计任务。指导教师到机位上指导学生和分时段验收学生完成的程序。 3 按时提交打印的课程设计报告书。5 课程设计参考书1 许文宪 懂子建. Java程序设计教程与实训. 北京:北京大学出版社,2005.2 辛运帏 .Java程序设计.北京:清华大学出版社, 20043 美Echel,B .Java编程思想(第三版).北京:机械工业出版社,2005目 录1 需求分析12 总体设计221 设计的总体思想与算法描述222 模块结构图22. 3界面设计32.3.1 管理员界面32.3.2 登陆界面32.3.3 聊天界面42.3.4 文件发送界面52.3.5 接受提示界面52.3.6 选择保存界面62.3.7 传输成功提示界面63程序设计74 小结22参考文献231 需求分析本系统是实现c/s模式的聊天室 首先要建立侦听服务,这个需求是服务器端的需求。其次还应实现:用户登录,包括客户端请求登录以及服务器端响应登录两个过程。收发聊天信息,包括客户端发送聊天信息以及服务器端转发聊天信息两个过程。收发系统信息,由服务器端发送给客户端的信息。用户下线,包括客户端请求下线以及服务器响应请求两个过程,这个与用户登录类似,服务器关闭。其中我还加入了文件传输功能,方便了用户文件的共享。2 总体设计21 设计的总体思想与算法描述依据需求分析的结果,该系统应设计成一个可以实现多人同时在线聊天功能的聊天软件,下面从软件的整体结构设计、界面设计、变量设计等方面阐述一下系统的总体设计。依据需求分析结果,设计应实现多人同时在线聊天,就应该分为服务端和用户端两个端口。用户端把信息发送到服务端,而后服务端再把信息分发到各个用户端。22 模块结构图图2.1 模块结构图2. 3界面设计2.3.1 管理员界面图2.2 管理员界面2.3.2 登陆界面图2.3登陆界面2.3.3 聊天界面图2.4聊天界面2.3.4 文件发送界面图2.5文件发送界面2.3.5 接受提示界面图2.6接受提示界面2.3.6 选择保存界面图2.7选择保存界面2.3.7 传输成功提示界面图2.8传输成功提示界面3 程序设计package com.ff;import java.io.*;import .*;import java.util.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class StartServer public static void main(String args) StartServer startServer = new StartServer();StartServer.Server serverFrame=startServer.new Server(); class Server extends JFrame private JScrollPane jp_rec;private JScrollPane jp_send;private JScrollPane jp_list;private JTextArea jta_rec;private JTextArea jta_send;private JLabel lbl_rec;private JLabel lbl_edit;private JList jlist;private JButton btnSend;/ 发送消息按钮private JButton btnT;private DefaultListModel listModel;private HashMap allUserLink = new HashMap();public Server() init();try ServerSocket server_socket = new ServerSocket(9999);while (true) Socket client_socket = server_socket.accept();SocketThread dealThread = new SocketThread(client_socket);new Thread(dealThread).start(); catch (Exception ex) ex.printStackTrace();public void init() this.setTitle(管理员平台);this.setSize(800, 400);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setLocationRelativeTo(this);Container c = this.getContentPane();c.setLayout(null);jta_rec = new JTextArea();jta_send = new JTextArea();jp_rec = new JScrollPane();jp_send = new JScrollPane();jp_list = new JScrollPane();lbl_rec = new JLabel(-消息记录-);lbl_edit = new JLabel(-文本编辑-);btnSend = new JButton(发送);btnT = new JButton(T除成员);listModel=new DefaultListModel();jlist = new JList(listModel);jlist.setBorder(BorderFactory.createTitledBorder(在线成员);jp_rec.getViewport().add(jta_rec);jp_send.getViewport().add(jta_send);jp_list.getViewport().add(jlist);jta_rec.setLineWrap(true);jta_send.setLineWrap(true);jta_rec.setEditable(false);lbl_rec.setBounds(30, 10, 80, 20);jp_rec.setBounds(30, 30, 450, 100);lbl_edit.setBounds(30, 130, 80, 20);jp_send.setBounds(30, 150, 450, 100);btnSend.setBounds(350, 260, 80, 20);jp_list.setBounds(500, 30, 120, 220);btnT.setBounds(520, 260, 80, 20);c.add(lbl_rec);c.add(lbl_edit);c.add(jp_rec);c.add(jp_send);c.add(btnSend);c.add(jp_list);c.add(btnT);this.setVisible(true);class SocketThread extends BaseTrans private boolean threadON=true;public SocketThread(Socket client_socket) super(client_socket);btnSend.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) messageEvent(code=001;msg=公告 +new Date().toLocaleString()+rn+jta_send.getText();jta_send.setText(););btnT.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) if(jlist.getSelectedValue()!=null)SocketThread st=allUserLink.get(jlist.getSelectedValue().toString().trim();allUserLink.remove(jlist.getSelectedValue().toString().trim();st.sendMessage(code=0);messageEvent(code=001;msg=公告 +new Date().toLocaleString()+rn+jlist.getSelectedValue()+被管理员踢了出去!);st.closeLink();threadON=false;listModel.remove(jlist.getSelectedIndex(););public void messageEvent(String msg) StringUtil stringUtil = new StringUtil();stringUtil.AnalysisMessage(msg);String code = stringUtil.getValueByKey(code);if (code.equalsIgnoreCase(000) System.out.println(进入了001);listModel.addElement(stringUtil.getValueByKey(userName);for (Iterator it =allUserLink.keySet().iterator(); it.hasNext();) allUserLink.get(it.next().sendMessage(code=001;msg=公告 +new Date().toLocaleString()+rn+stringUtil.getValueByKey(userName) +进入了聊天室,大家欢迎他(她)吧!);allUserLink.put(stringUtil.getValueByKey(userName),this);jta_rec.setText(jta_rec.getText()+rn+公告 +new Date().toLocaleString()+rn+stringUtil.getValueByKey(userName)+进入了聊天室,大家欢迎他(她)吧!);jta_rec.setCaretPosition(jta_rec.getText().length(); else if (code.equalsIgnoreCase(001) System.out.println(进入了001);for (Iterator it =allUserLink.keySet().iterator(); it.hasNext();) allUserLink.get(it.next().sendMessage(msg);jta_rec.setText(jta_rec.getText()+rn+stringUtil.getValueByKey(msg);jta_rec.setCaretPosition(jta_rec.getText().length(); else if (code.equalsIgnoreCase(010) System.out.println(进入了010);this.setFileName(stringUtil.getValueByKey(fileName);this.setFileLength(Integer.parseInt(stringUtil.getValueByKey(fileSize);initFileOutputStream(./);sendMessage(code=011); else if (code.equalsIgnoreCase(012) System.out.println(进入了012);sendMessage(code=013);setSendFileFlag(true); else if (code.equalsIgnoreCase(014) System.out.println(进入了014);for (Iterator it =allUserLink.keySet().iterator(); it.hasNext();) if (this != allUserLink.get(it.next() SocketThread st=allUserLink.get(it.next();st.setFileName(getFileName();st.setFileLength(getFileLength();st.sendMessage(code=015;username=+ stringUtil.getValueByKey(username)+ ;fileName=+ getFileName()+ ;fileSize=+ getFileLength(); else if (code.equalsIgnoreCase(016) System.out.println(进入了016);sendFileData(./ + this.getFileName();sendMessage(code=018); else if (code.equalsIgnoreCase(017) for (Iterator it =allUserLink.keySet().iterator(); it.hasNext();) if (this != allUserLink.get(it.next() allUserLink.get(it.next().initNet();public void run() while (threadON) receive();客户端代码package com.ff;import java.io.*;import .*;import java.util.Date;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class StartClient public static void main(String args)StartClient sc=new StartClient();StartClient.Client client=sc.new Client();class Clientpublic Client()init();public void init()trySocket client_socket=new Socket(InetAddress.getLocalHost(),9999);new Thread(new ChatPanel(client_socket).start();catch(Exception ex)ex.printStackTrace();class ChatPanel extends BaseTransprivate String userName;private JFrame jThis;private JLabel lbl_rec;private JLabel lbl_edit;private JTextArea jta_rec;/接收消息框private JTextArea jta_send;/发送消息框private JTextField jtxt_file;private JScrollPane jp_rec;private JScrollPane jp_send;private JButton btnSelFile;/选择文件private JButton btnSend;/发送消息按钮private JFileChooser jfc;/文件选择器public ChatPanel(Socket client_socket)super(client_socket);userName=JOptionPane.showInputDialog(请输入用户名:);init();public void init()jThis=new JFrame();jThis.setTitle(你好:+userName+ 欢迎进入聊天程序);jThis.setSize(600,400);jThis.setDefaultCloseOperation(jThis.EXIT_ON_CLOSE);jThis.setLocationRelativeTo(jThis);Container c=jThis.getContentPane();c.setLayout(null);lbl_rec=new JLabel(-消息记录-);lbl_edit=new JLabel(-文本编辑-);jtxt_file=new JTextField();jta_rec=new JTextArea();jta_send=new JTextArea();jp_rec=new JScrollPane();jp_send=new JScrollPane();btnSelFile=new JButton(文件.);btnSend=new JButton(发送);jfc=new JFileChooser();jp_rec.getViewport().add(jta_rec);jp_send.getViewport().add(jta_send);jta_rec.setLineWrap(true);jta_send.setLineWrap(true);jtxt_file.setEditable(false);jta_rec.setEditable(false);jfc.setDialogTitle(请选择要传送的文件.);lbl_rec.setBounds(30,10,80,20);jp_rec.setBounds(30,30, 450, 100);lbl_edit.setBounds(30,130,80,20);jp_send.setBounds(30,150,450,100);jtxt_file.setBounds(30,260,150,20);btnSelFile.setBounds(180,260,80,20);btnSend.setBounds(350,260,80,20);btnSelFile.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ae)jfc.showOpenDialog(null);jtxt_file.setText(jfc.getSelectedFile().getPath()+););c.add(lbl_rec);c.add(lbl_edit);c.add(jp_rec);c.add(jp_send);c.add(jtxt_file);c.add(btnSelFile);c.add(btnSend);btnSend.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ae)sendMessage(code=001;msg=+userName+ +new Date().toLocaleString()+rn+jta_send.getText();jta_send.setText();if(jtxt_file.getText().length()4)File file=new File(jtxt_file.getText().trim();sendMessage(code=010;fileName=+file.getName()+;fileSize=+file.length();sendMessage(code=000;username=+userName);jThis.setVisible(true);public void messageEvent(String msg) StringUtil stringUtil=new StringUtil();stringUtil.AnalysisMessage(msg);String code=stringUtil.getValueByKey(code);if(code.equalsIgnoreCase(0)this.closeLink();JOptionPane.showMessageDialog(jThis,您已近被管理员T走了,再见!);jThis.dispose();System.exit(0);else if(code.equalsIgnoreCase(001)System.out.println(进入到001);jta_rec.setText(jta_rec.getText()+rn+stringUtil.getValueByKey(msg);jta_rec.setCaretPosition(jta_rec.getText().length();else if(code.equalsIgnoreCase(011)System.out.println(进入到011);sendMessage(code=012);else if(code.equalsIgnoreCase(013)System.out.println(进入到了013);sendFileData(jtxt_file.getText().trim();this.initNet();jtxt_file.setText();sendMessage(code=014;username=+userName);else if(code.equalsIgnoreCase(015)System.out.println(进入到了015);setFileName(stringUtil.getValueByKey(fileName);setFileLength(Integer.parseInt(stringUtil.getValueByKey(fileSize);int result=JOptionPane.showConfirmDialog(null,userName+,+stringUtil.getValueByKey(username)+发文件【+getFileName()+】给你,要接受吗?,提示,JOptionPane.OK_CANCEL_OPTION);if(result=JOptionPane.OK_OPTION)JFileChooser jfc=new JFileChooser();jfc.setDialogTitle(请选择保存的目录.);jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);jfc.showOpenDialog(jThis);String path=jfc.getSelectedFile().getPath();initFileOutputStream(path+/);sendMessage(code=016);setSendFileFlag(true);else if(result=JOptionPane.CANCEL_OPTION)sendMessage(code=017);else if(code.equalsIgnoreCase(018)JOptionPane.showMessageDialog(jThis,userName+,文件【+getFileName()+】传输成功,提示,JOptionPane.INFORMATION_MESSAGE);/jta_rec.setText(jta_rec.getText()+rn+msg);public void run() while(true)receive(); 4 小结 每次课程设计都是一个学习的升华,这次我做的课题是网络通信技术实现基于C/S模式的聊天室程序设计。为了使课程设计能够顺利的进行,刚拿到任务书,我就开始复习课本和软件工程中的相关知识,并去图书馆查阅了很多资料,大致熟悉了课题所需要的知识点。然后拟定JAVA设计的框架,全面布局设计的界面。准备工作完成之后开始编写代码了,事实远超出了我当初想象的那样简单。在实际的代码设计中,我碰到了很多难以解决的困难。首先是不知道怎么构建框架,等大致有了框架,却不知道怎么让这个框架有血有肉,去实现应有的功能。幸亏有指导老师的热情辅导和鼓励,为我迷途指津,才使得我的课程设计不至于夭折。所谓万事开头难,开始许多的小问题都会造成我的进程的停止,比如大小写没注意,括号没打好,常常一个小小的问题都会让我停滞不前,于是与同学们讨论。在这样浓浓的氛围中,学习效率极高,不到一个星期我就构建好了框架,并做了一些后续准备。因为有了开始的准备工作,后来的事情就简单多了。之前我上网查询相似代码学习借鉴,现在就把那些代码用上了,虽然常常出些问题,但是因为有老师的指导,一切都迎刃而解,课程设计不久就完成了。最后我想说感谢老师和同学们,使他们的帮助才使得我的课程设计如此顺利的完成。但是完成之后我还是觉得有些遗憾,但是我努力了。所以我期望下次课程设计有更好的表现。 参考文献1孙卫琴.JAVA面向对象编程M.北京:电子工业出版社.20062彭晨阳.Java实用系统开发指南M.北京:机械工业出版社.2008 3朱仲杰. Palm应用程序设计使用Java语言M.北京:中国电力出版社4迪特尔.Java程序设计教程/国外经典教材M.北京:清华大学出版社5蔡翠平 .Java程序设计.北京:清华大学出版社,2003.课程设计评分表评分标准:1. 学生是否严格遵守课程设计纪律,按照规定时间完成设计任务(占30%)2. 程序设计的质量与规范:(占40%)(1)是否采用了良好的设计方法,独立完成程序设计(2)程序界面设计是否合理、美观(3)数据库设计是否合理,具有良好的扩展性(4)程序是否运行正常,未见运行错误3. 课程设计报告书的质量与规范 (占30%)教师评分:1.学生出勤得分: _2.程序设计得分: _3.设计报告得分: _ 总分:_教师评语: 根据该生在课程设计期间,是否严格遵守课程设计纪律,按照规定时间完成设计任务,完成的程序设计的质量与规范,提交的课程设计报告书的质量与规范等多方面的评分,该生本次课程设计的评分为:_ 教师签名: 日期: 年 月 日能人士的50个习惯 在行动前设定目标 有目标未必能够成功,但没有目标的肯定不能成功。著名的效率提升大师博思.崔西説:“成功就是目标的达成,其他都是这句话的注释。”现实中那些顶尖的成功人士不是成功了才设定目标,而是设定了目标才成功。 一次做好一件事 著名的效率提升大师博思.崔西有一个著名的论断:“一次做好一件事的人比同时涉猎多个领域的人要好得多。”富兰克林将自己一生的成就归功于对“在一定时期内不遗余力地做一件事”这一信条的实践。 培养重点思维 从重点问题突破,是高效能人士思考的一项重要习惯。如果一个人没有重点地思考,就等于无主要目标,做事的效率必然会十分低下。相反,如果他抓住了主要矛盾,解决问题就变得容易多了。 发现问题关键 在许多领导者看来,高效能人士应当具备的最重要的能力就是发现问题关键能力,因为这是通向问题解决的必经之路。正如微软总裁兼首席软件设计师比尔。盖茨所説:“通向最高管理层的最迅捷的途径,是主动承担别人都不愿意接手的工作,并在其中展示你出众的创造力和解决问题的能力。” 把问题想透彻 把问题想透彻,是一种很好的思维品质。只要把问题想透彻了,才能找到问题到底是什么,才能找到解决问题最有效的手段。 不找借口 美国成功学家格兰特纳说过这样的话:“如果你有为自己系鞋带的能力,你就有上天摘星星的机会!”一个人对待生活和工作是否负责是决定他能否成功的关键。一名高效能人士不会到处为自己找借口,开脱责任;相反,无伦出现什么情况,他都会自觉主动地将自己的任务执行到底。 要事第一 创设遍及全美的事务公司的亨瑞。杜哈提说,不论他出多小两种能力是:第一,能思想;第二,能按事情的重要程度来做事。因此,在工作中,如果我们不能选择正确的事情去做,那么唯一正确的事情就是停止手头上的事情,直到发现正确的事情为止。 运假公济私,那么你要尝试学习如何与不同的人相处,提高自己化 能人士的50个习惯 在行动前设定目标 有目标未必能够成功,但没有目标的肯定不能成功。著名的效率提升大师博思.崔西説:“成功就是目标的达成,其他都是这句话的注释。”现实中那些顶尖的成功人士不是成功了才设定目标,而是设定了目标才成功。 一次做好一件事 著名的效率提升大师博思.崔西有一个著名的论断:“一次做好一件事的人比同时涉猎多个领域的人要好得多。”富兰克林将自己一生的成就归功于对“在一定时期内不遗余力地做一件事”这一信条的实践。 培养重点思维 从重点问题突破,是高效能人士思考的一项重要习惯。如果一个人没有重点地思考,就等于无主要目标,做事的效率必然会十分低下。相反,如果他抓住了主要矛盾,解决问题就变得容易多了。 发现问题关键 在许多领导者看来,高效能人士应当具备的最重要的能力就是发现问题关键能力,因为这是通向问题解决的必经之路。正如微软总裁兼首席软件设计师比尔。盖茨所説:“通向最高管理层的最迅捷的途径,是主动承担别人都不愿意接手的工作,并在其中展示你出众的创造力和解决问题的能力。” 把问题想透彻 把问题想透彻,是一种很好的思维品质。只要把问题想透彻了,才能找到问题到底是什么,才能找到解决问题最有效的手段。 不找借口 美国成功学家格兰特纳说过这样的话:“如果你有为自己系鞋带的能力,你就有上天摘星星的机会!”一个人对待生活和工作是否负责是决定他能否成功的关键。一名高效能人士不会到处为自己找借口,开脱责任;相反,无伦出现什么情况,他都会自觉主动地将自己的任务执行到底。 要事第一 创设遍及全美的事务公司的亨瑞。杜哈提说,不论他出多小两种能力是:第一,能思想;第二,能按事情的重要程度来做事。因此,在工作中,如果我们不能选择正确的事情去做,那么唯一正确的事情就是停止手头上的事情,直到发现正确的事情为止。 运假公济私,那么你要尝试学习如何与不同的人相处,提高自己化 能人士的50个习惯 在行动前设定目标 有目标未必能够成功,但没有目标的肯定不能成功。著名的效率提升大师博思.崔西説:“成功就是目标的达成,其他都是这句话的注释。”现实中那些顶尖的成功人士不是成功了才设定目标,而是设定了目标才成功。 一次做好一件事 著名的效率提升大师博思.崔西有一个著名的论断:“一次做好一件事的人比同时涉猎多个领域的人要好得多。”富兰克林将自己一生的成就归功于对“在一定时期内不遗余力地做一件事”这一信条的实践。 培养重点思维 从重点问题突破,是高效能人士思考的一项重要习惯。如果一个人没有重点地思考,就等于无主要目标,做事的效率必然会十分低下。相反,如果他抓住了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年浙江省金华县移动公司公开招聘工作人员试题带答案详解
- 2024年四川省普格县烟草公开招聘工作人员试题带答案详解
- 2024年山东省长岛县移动公司公开招聘工作人员试题带答案详解
- 2024年广东省新兴县烟草公开招聘工作人员试题带答案详解
- 2024年甘肃省天祝藏族自治县烟草公开招聘工作人员试题带答案详解
- 2024年福建省霞浦县移动公司公开招聘工作人员试题带答案详解
- 2024年河南省泌阳县移动公司公开招聘工作人员试题带答案详解
- 2024年湖北省宣恩县移动公司公开招聘工作人员试题带答案详解
- 年中国心脏起搏器市场深度研究与投资前景分析报告
- 中国锦纶工业长丝行业市场竞争格局分析及投资方向研究报告
- 张克非《公共关系学》(修订版)笔记和课后习题详解
- 货车转让不过户合同协议书
- 化工自动化仪表 选择题805-1556
- GB/T 7631.14-1998润滑剂和有关产品(L类)的分类第14部分:U组(热处理)
- GB/T 4604-2006滚动轴承径向游隙
- GB/T 12008.2-2010塑料聚醚多元醇第2部分:规格
- 既有住宅适老化改造项目可行性研究报告书
- 公司网银盾交接单
- 施工人员安全教育培训课件
- 建筑施工项目成本费用分析手册
- 电磁干扰及防护课件
评论
0/150
提交评论