




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计题目:设计题目: 阿狸聊天室阿狸聊天室 姓姓 名:名: 学号:学号: 专专 业:业:软件工程软件工程 班级:班级: 软件一班软件一班 所属院系:所属院系:信息学院信息学院 指导教师:指导教师:赵怡赵怡 二一三年 十二 月 应用系统开发综合实训 设 计 报 告 阿狸聊天室 2 目目 录录 1. 设计概述 .1 2. 总体设计 .1 2.1 设计的目的与任务.1 2.2 设计思路.2 2.3 系统(程序)的主要功能.2 3. 详细设计 .2 3.1 界面设计.3 3.2 各个类的功能说明.4 4. 运行调试与讨论 .5 5. 设计体会与小结 参考文献 .5 附录(主要代码) .5 阿狸聊天室 1 阿狸聊天室 1. 设计概述 这是一个聊天程序,采用聊天室的形式,采用用户自行组建服务器的形式,用聊天昵称和服务器 IP 地址登入聊天,实现了简单的文字聊天功能。在聊天室内所有人都可以接收到某一人的聊天内容。 并且在登录窗口中可以自动记录用户的昵称,方便用户下次登录。 2. 总体设计 本程序包括登陆界面、聊天窗口和服务器管理界面。 2.1 设计的目的与任务 本程序是一个简易的聊天室,具备聊天室的基本功能,方便人们之间的交流。脱离外网的限制, 可以在局域网之间进行聊天。 (1)通过对本程序的设计,了解一个 JAVA 程序开发的大概流程。合理设计程序的各个模块间 功能的相互连接。 (2)通过对本程序的设计,学会运用 Swing、Sock、文件存储、多线程等方面的编程运用。 (3)通过对本程序的设计,学会如何在程序编写过程中,对程序各个功能的调试、修改等各个 方面的实际操作。 (4)通过对本程序的设计,开发一个聊天程序,巩固自己对所学知识的掌握,对其进行实际应 用。 2.2 设计思路 本程序分文聊天程序和服务器管理程序两个部分。在登陆界面利用文件存储和读取实现对用户输 入昵称的记录,方便下次登录时程序自动填写,并在启动程序时弹出提示对话框告知用户本程序使用 方法。利用 Sock 实现聊天的基本功能。 阿狸聊天室 2 聊天程序 服务器管理 聊天室 开启服务器 登入服务器 2.3 系统(程序)的主要功能 本程序有服务器和聊天程序两部分,服务器部分负责接收各个用户的数据并发送个各个聊天室内 的用户。聊天程序提供用户的操作界面和登陆界面,实现用户对文字的输入,和聊天室接收到内容的 读取功能。 具体需求如下: 1.设计合理的系统布局。 2.各种基本功能的算法分析。 3.编程实现具体功能。 4. 运行测试程序,调试纠正运行错误。 5. 调试无误,运行,测试具体功能,. . 3.3.详细设计详细设计 3.1 界面设计 登入界面 阿狸聊天室 3 服务器管理界面 聊天界面 阿狸聊天室 4 3.2 各个类的功能说明 1、MyFrame 类:登陆聊天窗口的界面,在此界面获取聊天用户的 ID 和服务器 IP 以及打开服务器管 理系统 2、ServerFrame 类:服务器管理系统界面,此界面实现服务器的创建和服务器启动说明。 3、ChatServer 类:聊天服务器功能的实现。用于实现各个用户聊天内容的接收和转发。 4、ChatCilent 类:聊天室界面,实现用户的输入、发送以及和服务器的通讯。 5、ChatNOte 类:实现对服务器 IP(保存在 IP.txt 中)和用户输入昵称(保存在 name.txt 中)的保存, 以便用户下次启动时自动填写。 4. 运行调试与讨论 基本功能均已实现,可以进行基本的文字聊天。但是还不够完善,没有发送表情和共享文件功能, 不能查看在线用户。 5. 设计体会与小结 经过这段时间的学习我收获不小,总结起来有如下几点: 1、了解了 JAVA 开发的大致过程,很好的锻炼了自己所学在实际程序中的应用。 2、锻炼了自己的动手和自学能力,将课堂上所了解的知识真正的展现在程序里,实现自己想要的功 能。 。 3、体会到写程序最重要的是程序思想,而不是单纯的写代码。如何解决类之间的关联和继承关系, 如何组织类是很关键的。此外对于接口和变量的私有还是公有,以及参数传递等方面也收获不小。 阿狸聊天室 5 4、在实验的过程中,总有一些错误,经过不断的测试和改进,来实现自己想要的功能和界面。达到 理想的设计效果。 参考文献 JAVA API 文档 JAVA 高级程序讲义 赵怡 附录(主要代码) 1、主界面代码: publicpublic classclass MyFrame extendsextends JFrame privateprivate JPanel jp1,jp2,jp,jp3,jp4; /private J privateprivate staticstatic String st; privateprivate JLabel jl1,jl2,jl3; privateprivate JTextField jt1; privateprivate JTextField j1; privateprivate JButton jb1,jb2,jb3; privateprivate String userList; privateprivate String userName; /* * 创建登录界面 */ publicpublic MyFrame() jp = newnew JPanel(); jp.setBackground(newnew Color(232,188,123); jp1 = newnew JPanel(newnew BorderLayout(); jp2 = newnew JPanel(newnew GridLayout(2,1); jp2.setBackground(newnew Color(232,188,123); jp3 = newnew JPanel(); jp3.setBackground(newnew Color(232,188,123); jp4 = newnew JPanel(); jp4.setBackground(newnew Color(232,188,123); jl1 = newnew JLabel(newnew ImageIcon(image/beijing1.jpg); jl2 = newnew JLabel(聊天昵称); jt1 = newnew JTextField(20); /读取输入过的昵称的方法 /* 阿狸聊天室 6 * 读取输入过的昵称的方法 */ File file = newnew File(name.txt);/声明并创建一个File对象,与外部磁盘文件note.txt 关联 /声明一个Scanner对象 Scanner fReader; trytry /创建一个Scanner对象,该对象在读取磁盘文件中的数据时会抛出异常,因此需要对异常 进行捕获和处理 fReader = newnew Scanner(file); /使用循环结构读取外部磁盘中保存的记录 whilewhile(fReader.hasNext() jt1.setText(fReader.next(); fReader.close(); catchcatch (FileNotFoundException e) / TODOTODO Auto-generated catch block e.printStackTrace(); jl3 = newnew JLabel(服务器 IP); j1 = newnew JTextField(20); File file1 = newnew File(IP.txt); Scanner fReader1; 阿狸聊天室 7 trytry /创建一个Scanner对象,该对象在读取磁盘文件中的数据时会抛出异常,因此需要对 异常进行捕获和处理 fReader1 = newnew Scanner(file1); /使用循环结构读取外部磁盘中保存的记录 whilewhile(fReader1.hasNext() j1.setText(fReader1.next(); fReader1.close(); catchcatch (FileNotFoundException e) / TODOTODO Auto-generated catch block e.printStackTrace(); jb1 = newnew JButton( 开始聊天 ); jb1.setBackground(newnew Color(232,188,123); jb1.addActionListener(newnew ActionListener() publicpublic voidvoid actionPerformed(ActionEvent agr0) setVisible(falsefalse); ChatClient cc = newnew ChatClient(); cc.createUI(); cc.inputName(jt1.getText(); cc.connect(j1.getText(); cc.createThread(); ); jb2 = newnew JButton(创建服务器); jb2.setBackground(newnew Color(232,188,123); 阿狸聊天室 8 jb2.addActionListener(newnew ActionListener() publicpublic voidvoid actionPerformed(ActionEvent arg0) newnew ServerFrame(); setVisible(falsefalse); ); jb3 = newnew JButton(); /jp1.add(jl1); jp3.add(jl2); jp3.add(jt1); jp4.add(jl3); jp4.add(j1); jp2.add(jp3); jp2.add(jp4); jp.add(jb1); jp.add(jb2); jp1.add(jp2, BorderLayout.CENTER); /jp.add(jp1, BorderLayout.NORTH); /jp.add(jp2,BorderLayout.CENTER); /jp1.add(jb2); thisthis.add(jl1,North); thisthis.add(jp1,Center); thisthis.add(jp,South); thisthis.setSize(450,300); thisthis.setLocationRelativeTo(nullnull); thisthis.setUndecorated(truetrue); setIconImage(newnew ImageIcon(image/touxiang01.jpg).getImage(); /setIconImage(new ImageIcon(C:/Users/Administrator/Desktop/001.jpg).getImage(); setVisible(truetrue); 2、服务器管理系统界面的方法 publicpublic ServerFrame() finalfinal JFrame jf = newnew JFrame(服务器管理系统); JButton jb1 = newnew JButton(打开服务器); 阿狸聊天室 9 jb1.setBackground(newnew Color(232,188,123); jb1.addActionListener(newnew ActionListener() Override publicpublic voidvoid actionPerformed(ActionEvent e) / TODOTODO Auto-generated method stub /获取IP地址 trytry st = InetAddress.getLocalHost().getHostAddress(); catchcatch (UnknownHostException e1) / TODOTODO Auto-generated catch block e1.printStackTrace(); JOptionPane.showMessageDialog(nullnull,服务器启动成功,当前服务器IP为: +st+请启动客户端开始聊天); jf.setTitle(服务器管理系统(当前IP:+st+); newnew ChatNote().ChatNote(st,IP.txt); jf.setVisible(falsefalse); newnew ChatServer(); ); JButton jb2 = newnew JButton(帮助说明); jb2.setBackground(newnew Color(232,188,123); jb2.addActionListener(newnew ActionListener() Override publicpublic voidvoid actionPerformed(ActionEvent e) / TODOTODO Auto-generated method stub JOptionPane.showMessageDialog(nullnull,启动服务器请单击打开按钮,服务器IP将 自动在你启动客户端时写入,或您手动写入); ); JPanel jp = newnew JPanel(); jp.setBackground(newnew Color(232,188,123); JPanel jp1 = newnew JPanel(); jp1.setBackground(newnew Color(232,188,123); JLabel jl1 = newnew JLabel(newnew ImageIcon(image/huanying.jpg); jl1.setBackground(newnew Color(232,188,123); jp.add(jb1); 阿狸聊天室 10 jp.add(jb2); jp1.add(jl1); jf.add(jp,North); jf.add(jp1,South); jf.setSize(500,300); jf.setLocationRelativeTo(nullnull); jf.setResizable(falsefalse); jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); jf.setIconImage(newnew ImageIcon(image/touxiang01.jpg).getImage(); jf.setVisible(truetrue); 3、服务器实现 publicpublic ChatServer() System.out.println(fuwuqi); Hashtable userList = newnew Hashtable(); String name; DataInputStream dis; DataOutputStream dos; trytry /创建绑定到特定端口9999的服务器 ServerSocket ss = newnew ServerSocket(8888); whilewhile(truetrue) /侦听此端口连接 Socket s = ss.accept(); /返回此套接字的输入流 使用数据输出流写入稍后由数据输入流读取的数据 dis = newnew DataInputStream(s.getInputStream(); dos = newnew DataOutputStream(s.getOutputStream(); /从所包含的输入流中读取 name = dis.readUTF(); userList.put(name,dos); newnew MyServerReader(name,dis,userList).start(); catchcatch(Exception e) e.printStackTrace(); classclass MyServerReader extendsextends Thread privateprivate String name; 阿狸聊天室 1 1 privateprivate DataInputStream dis; privateprivate Hashtable userList; publicpublic MyServerReader(String name,DataInputStream dis,Hashtable userList ) = name; thisthis.dis = dis; thisthis.userList = userList; publicpublic voidvoid run() String info; trytry transmitMessage(name + 进入聊天室,系统消息); whilewhile(truetrue) info = dis.readUTF(); ifif(info.equals(bye) DataOutputStream dos = (DataOutputStream)(userList.get(name); Thread.sleep(1000); dos.close(); dis.close(); userList.remove(name); transmitMessage(name + 离开聊天室,系统消息); breakbreak; elseelse ifif(info.length()0) transmitMessage(info,name); catchcatch (Exception e) publicpublic voidvoid transmitMessage(String msg,String name) Collection doses = userList.values(); DataOutputStream dos; forfor(Object o: doses) dos = (DataOutputStream)o; trytry dos.writeUTF(name + : + msg); catchcatch(Exception e) 4、聊天界面实现 publicpublic voidvoid createUI() 阿狸聊天室 12 JOptionPane.showMessageDialog(nullnull,欢迎使用阿狸聊天室,祝您聊天愉快); f = newnew Frame(); ta = newnew TextArea(欢迎进入阿狸聊天室+n); ta.setEditable(falsefalse); tf = newnew TextField(45); Button send = newnew Button(发送); Panel p = newnew Panel(); p.setBackground(newnew Color(232,188,123); p.setLayout(newnew BorderLayout(); Panel p1 = newnew Panel(); p1.setBackground(newnew Color(232,188,123); p1.add(tf); p.add(p1,Center); p.add(send,East); f.add(ta,Center); f.add(p,South); MyClientListener listener = newnew MyClientListener(thisthis); send.addActionListener(listener); tf.addActionListener(listener); f.addWindowListener(newnew WindowAdapter() publicpublic voidvoid windowClosing(WindowEvent e) ChatClient.thisthis.shutDown(); ); f.setSize(400,400); f.setLocation(600,0); f.setVisible(truetrue); f.setIconImage(newnew ImageIcon(image/touxiang01.jpg).getImage(); tf.requestFocus(); publicpublic voidvoid inputName(String name) / name = javax.swing.JOptionPane.showInputDialog(Input Your Name:); thisthis.setName(name); newnew ChatNote().ChatNote(name,name.txt); f.setTitle(您以+name+进入聊天室); publicpublic voidvoid connect(String ip) trytry s = newnew Socket(ip,8888); dos = newnew DataOutputStream(s.getOutputStream(); dis = newnew DataInputStream(s.getInputStream(); dos.writeUTF(name); catchcatch (IOException e) 阿狸聊天室 1 3 e.printStackTrace(); publicpublic voidvoid createThread() MyClientReader reader = newnew MyClientReader(thisthis); reader.start(); publicpublic voidvoid stop() runnable = falsefalse; publicpublic voidvoid shutDown() trytry dos.writeUTF(bye); ta.append(谢谢使用阿狸聊天室); thisthis.stop(); Thread.sleep(1000); dis.close(); dos.close(); s.close(); catchcatch(Exception e) System.exit(0); publicpublic booleanboolean getRunnable() returnreturn runnable; publicpublic voidvoid setName(String name) = name; publicpublic DataInputStream getDataInputStream() returnreturn dis; publicpublic DataOutputStream getDataOutputStream() returnreturn dos; publicpublic TextArea getTextArea() returnreturn ta; publicpublic TextField getTextField() returnreturn tf; 阿狸聊天室 14 classclass MyClientListener implementsimplements ActionListener privateprivate ChatClient client; publicpublic MyClientListener(ChatClient client) thisthis.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《汉语阅读教程》课件-教学课件:汉语阅读教程
- 2025标准办公室装修设计合同
- 湖南省长沙市雅礼教育集团2024-2025学年高一下学期期中考试物理试题(原卷版)
- 钝痛的临床护理
- 2025金融服务行业中介居间合同范本
- 2025汽车买卖的合同范文
- 江苏移动2025春季校园招聘笔试参考题库附带答案详解
- 2025房产交易合同样本:个人房屋买卖协议
- 2025年公共营养师之二级营养师题库综合试卷B卷附答案
- 胃出口梗阻的临床护理
- (二模)济宁市2025年4月高考模拟考试地理试卷
- 首都医科大学附属北京安贞医院招聘考试真题2024
- 抽化粪池合同协议
- 中医养生馆运营方案中医养生馆策划书
- (二模)宁波市2024-2025学年第二学期高考模拟考试 英语试卷(含答案)+听力音频+听力原文
- 高考备考:100个高考常考易错的文言实词(翻译+正误辨析)
- 软件项目交付管理制度
- 知识产权现场审核记录表模板
- 机械系统动力学试题及答案
- 食品安全自查、从业人员健康管理、进货查验记录、食品安全事故处置等保证食品安全的规章制度
- 2024年吉林省中考满分作文《情味浸润的时光》4
评论
0/150
提交评论