ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:513.98KB ,
资源ID:7159190      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7159190.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(软件工程 实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

软件工程 实验报告.docx

1、软件工程 实验报告中南民族大学学生实验报告院 系: 计算机科学学院 专 业: 计算机科学与技术 年 级: 2013级 课程名称: 软件工程 组 员: 司少武 (201321091135) 兰少雄 (201321091136) 宇 (201321091133) 纳洪泽(201321091132)指导教师: 卫平 2015年 12月 26 日聊天室1 前言1.1 即时消息系统的研究现状 即时消息系统1(Instant Messenger,IM)是一种在后 PC 时代兴起的,以 Internet 网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。即时

2、消息系统产生有着深刻的社会原因:人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时消息软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。从这点上讲,即时消息系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。1.2本工程的主要容 随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持, 而聊天室是人们最常见, 最直接的网上交流的方式。本聊天系统以聊天交流为主,为广大用户提供一个借助网络进行人际交往的平台,也

3、是网络与现实最贴近的实用型。本文所介绍的网络聊天系统是基于开放的JAVA应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的处理客户请求, 且具有脱离数据库技术方法, 易于维护和更新的特点。2 需求分析本系统所要实现的主要功能是当用户聊天时,将当前用户名、聊天对象、聊天容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Mes

4、sage中,以供所有聊天用户访问。接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是3秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人感觉没有时效性,所以经过权衡后认为3秒最佳,因为每个用户都不可能在3秒连续发送信息。当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。2.1 业务需求 1. 与聊天室成员一起聊天。 2. 可以与聊天室成员私聊。 3. 可以改变聊天容风格。 4. 用户注册(含头像)、登录。 5. 服务器监控聊天容。 6. 服务器过滤非法

5、容。 7. 服务器发送通知。 8. 服务器踢人。 9. 保存服务器日志。 10.保存用户聊天信息。2.2 系统功能模块2.2.1 服务器端 1.处理用户注册 2.处理用户登录 3.处理用户发送信息 4.处理用户得到信息 5.处理用户退出2.2.2 客户端 1.用户注册界面及结果 2.用户登录界面及结果 3.用户发送信息界面及结果 4.用户得到信息界面及结果 5.用户退出界面及结果2.3 性能需求 运行环境:Windows All 必要环境:JDK 1.5 以上 硬件环境:CPU 400MHz以上,存64MB以上3数据结构3.1 数据结构 此系统数据库中储存信息采用字符指针储存,将用户的信息用字

6、符的形式进行处理并储存。3.2 逻辑结构逻辑结构:用户向服务器发送请求,服务器获取对方IP,若获取成功,用户向其发送消息,服务器将其处理并将其记录,然后将消息发给另一用户。其ER图如下所示:2将E-R图转化为关系模型,建立关系模型为:消息(容,时间);记录信息(容,储存信息);服务器(服务器IP); 33.3 功能模块划分3.3.1结构框图3.3.2程序流图(1)整个系统流程图如下: 3.3.3模块功能分析及外部设计模块功能分析:(1)发送消息:用户选择好友,如果好友在线,服务器便获取其IP地址,用户打开消息盒编辑需要发送的消息,然后发送,服务器接受此消息,并处理记录到记录表中,然后将其发送给

7、好友。(2)接收消息:好友发送的信息通过服务器处理并发送到本用户,如果设置为接收消息,则系统提示并可以打开查看此消息,否则服务器不将此消息发送到本用户。(3)消息记录查询:用户向服务器发送查询请求,服务器作出响应并将最近消息记录发送到此用户。外部设计:交互设计是面向最终用户的设计,是软件的外部设计,交互设计要求在研究软件技术问题的同时对人加以研究。用户是什么样的人?用户怎样与新的计算机系统进行交互?用户怎样解释系统产生的信息?用户对系统有哪些期望?这些问题仅仅是需要在用户交互设计时必须询问和回答的问题。作为点对点的聊天系统,作为服务使用者得用户和提供服务的聊天系统有着互动和交换信息的过程,用户

8、有请求,系统就必须有应答,需要双方参与。(1)当用户选择好友向其发送消息时,点击好友,向服务器发送请求,如果好友在线,服务器自动获取好友IP并建立双方的连接,进行聊天。否则应该提示好友不在,不能聊天或发送离线信息。(2)用户查询聊天信息时,向服务器发送查询请求,服务器作出响应并将相应记录发送到此用户界面。通过对产品的界面和行为进行交互设计,让产品和它的使用者之间建立一种有机关系,从而可以有效的达到使用者的目标,而好的交互设计会使系统和使用者之间更好的交互,达到“愉悦地合作”,这是交互设计的最终目的。4 详细设计4.1 类定义 ChatClient.java 为客户端程序启动类,负责客户端的启动

9、和退出。 Login.java 为客户端程序登录界面,负责用户信息的验证与反馈。 Register.java 为客户端程序注册界面,负责用户信息的注册验证与反馈。 ChatRoom.java 为客户端程序聊天室主界面,负责接收、发送聊天容与服务器端的Connection.java 亲密合作。 Windowclose 为ChatRoom.java的部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。 Clock.java 为客户端程序的一个小程序,实现的一个石英钟功能。4.2 主要模块部设计此点对点聊天系统主要包括以下模块:(1)发送消息;(2)接收消息;(3)查询消息记录。每个模块的

10、主要执行功能函数及算法如下。4.2.1模块1设计4.2.1.1 模块算法模块一:发送消息: 发送消息函数:send messages(char *p,InetAdrress); 发送消息后自动执行储存函数:memory messages(InetAdrress,char *p);4.2.1.2 流程图4.2.2模块2设计4.2.2.1 模块算法模块二:接收消息: 接收消息消息函数: *receive messages(InetAdrress,char *p); 接收消息后自动执行储存消息函数:memory messages(InetAdrress,char *p);4.2.2.2 流程图:4.

11、2.3模块3设计4.2.3.1 模块算法模块三:消息记录查询: 执行发送请求函数:*check notes(InetAdrress,char *p); 删除记录函数:delete notes(InetAdrress); 自动执行接收消息函数:*receive messages(InetAdrress,char *p); 4.2.3.2 流程图:5 测试分析与截图在实现本系统的同时每设计一个模块,就实现模块测试,使其能实现该函数需要实现的功能,此阶段为白盒测试。此阶段将此模块作为单独的一个实体来测试,而且比较容易实际检验模块正确性的测试方案,保证每个模块单元的正确运行,来确定编码和详细设计的错误

12、。 然后集成测试。集成测试阶段,先将单元测试成功的模块放在一起形成一个子系统来测试,以解决模块间的协调和通信问题。然后将子系统测试通过的模块放在一起形成一个完整的系统测试,检验功能,来发现需求报告中的错误。5.1 测试用例为了检验此系统的正确性,设计了以下的一些测试用例:(1)登录注册 (2)发送和接收消息A:你好B:你好 (3)保存聊天记录 (4)保存聊天记录 (5)保存服务器日志 (6)服务器踢人不同的测试数据发现程序错误的能力差别很大,为了提高测试效率低测试成本,应该选择高效的测试用例,数据尽量少,做到尽可能完备的测试就可以了。5.2 测试结果 5.2.1登录界面 5.2.2注册界面5.

13、2.3 服务器5.2.4 聊天室聊天对所有人,私人聊天,系统提示信息。5.2.5 聊天记录保存5.2.6服务器日志保存5.2.7服务器踢人5.2.8时钟6 结束语Java面向对象程序设计是一门应用广泛并且实用性极强的高级程序设计语言。通过本次课程设计,我们对面向对象的基本思想有了进一步的理解,对项目的各个阶段的任务也有了一定的了解。设计开始阶段必须明确设计的目的与需求分析,总体设计要全面分析聊天室系统的架构。通过这次设计,使我们认识到体系的架构是最重要的,只有准确的系统设计、很好的定义各个模块及模块之间的关系,才能在编码阶段更轻松的的实现。通过这次课程设计,对我们的逻辑思维能力是一个很大的锻炼

14、,它不仅加强了我们的系统思考问题的能力,而且还改变了我们以前不好的编程习惯,虽然花费了不少的时间,但是我们学到了丰富的知识。另外,此次课程设计也提高了我们的团对合作精神,让我们明白不是不能一个人能单独完成,而是要集思广益,结合更多的人的创意思维。让我们大家深刻的体会到理论与实际相结合的重要性与微妙之处。对于不同的想法我们都会集中讨论并对好的意见加以借鉴,在这个讨论的过程中,还更正了不少我们各自自身对于某个知识点的误区。这次程序设计也是一个毅力的考验过程。有时候往往只是一个小小的错误,却要花出几小时甚至是一两天的时间才可能发现它。所以在这个过程不能过于急躁,要很有耐心将程序反复调试。App se

15、rver.javaimport java.io.*;import .*;import java.util.*;public class AppServer extends Thread private ServerSocket serverSocket; private ServerFrame sFrame; private static Vector userOnline = new Vector(1, 1); private static Vector v = new Vector(1, 1); public AppServer() sFrame = new ServerFrame();

16、try serverSocket = new ServerSocket(1001);/ 获取服务器的主机名和IP地址 InetAddress address = InetAddress.getLocalHost(); sFrame.txtServerName.setText(address.getHostName(); sFrame.txtIP.setText(address.getHostAddress(); sFrame.txtPort.setText(1001); catch (IOException e) fail(e, 不能启动服务!); sFrame.txtStatus.setTe

17、xt(已启动.); this.start(); / 启动线程 public static void fail(Exception e, String str) System.out.println(str + 。 + e); public void run() try while (true) Socket client = serverSocket.accept(); new Connection(sFrame, client, userOnline, v); System.out.println(userLength:+userLength); catch (IOException e)

18、fail(e, 不能监听!); public static void main(String args) new AppServer(); Login.javaimport*;publicclass Login extends JFrame implements ActionListener privatestaticfinallongserialVersionUID = -8965773902056088264L;private JPanel pnlLogin;private utton btnLogin, btnRegister, btnExit;private JLabel lblSer

19、ver, lblUserName, lblPassword, lblLogo;private JTextField txtUserName, txtServer;private JPasswordField pwdPassword;private String strServerIp;private Dimension scrnsize;private Toolkit toolkit = Toolkit.getDefaultToolkit();public Login() super(登录HappyChat聊天室);pnlLogin = new JPanel();this.getContent

20、Pane().add(pnlLogin);lblServer = new JLabel(服务器(S):);lblUserName = new JLabel(用户名(U):);lblPassword = new JLabel(口 令(P):);txtServer = new JTextField(20);txtServer.setText(127.0.0.1);txtUserName = new JTextField(20);pwdPassword = new JPasswordField(20);btnLogin = new utton(登录(L);btnLogin.setToolTipTex

21、t(登录到服务器);btnLogin.setMnemonic(L);btnRegister = new utton(注册(R);btnRegister.setToolTipText(注册新用户);btnRegister.setMnemonic(R);btnExit = new utton(退出(X);btnExit.setToolTipText(退出系统);btnExit.setMnemonic(X);pnlLogin.setLayout(null);pnlLogin.setBackground(new Color(52, 130, 203);lblServer.setBounds(50, 1

22、00, 100, 30);txtServer.setBounds(150, 100, 120, 25);lblUserName.setBounds(50, 130, 100, 30);txtUserName.setBounds(150, 130, 120, 25);lblPassword.setBounds(50, 160, 100, 30);pwdPassword.setBounds(150, 160, 120, 25);btnLogin.setBounds(50, 200, 80, 25);btnRegister.setBounds(130, 200, 80, 25);btnExit.se

23、tBounds(210, 200, 80, 25); Font fontstr = new Font(宋体, Font.PLAIN, 12);lblServer.setFont(fontstr);txtServer.setFont(fontstr);lblUserName.setFont(fontstr);txtUserName.setFont(fontstr);lblPassword.setFont(fontstr);pwdPassword.setFont(fontstr);btnLogin.setFont(fontstr);btnRegister.setFont(fontstr);btnE

24、xit.setFont(fontstr);lblUserName.setForeground(Color.BLACK);lblPassword.setForeground(Color.BLACK);btnLogin.setBackground(Color.ORANGE);btnRegister.setBackground(Color.ORANGE);btnExit.setBackground(Color.ORANGE);pnlLogin.add(lblServer);pnlLogin.add(txtServer);pnlLogin.add(lblUserName);pnlLogin.add(t

25、xtUserName);pnlLogin.add(lblPassword);pnlLogin.add(pwdPassword);pnlLogin.add(btnLogin);pnlLogin.add(btnRegister);pnlLogin.add(btnExit); Icon logo1 = new ImageIcon(imagesloginlogo.jpg);lblLogo = new JLabel(logo1);lblLogo.setBounds(0, 0, 340, 66);pnlLogin.add(lblLogo); setResizable(false); setSize(340

26、, 260); setVisible(true);scrnsize = toolkit.getScreenSize(); setLocation(scrnsize.width / 2 - this.getWidth() / 2, scrnsize.height / 2 - this.getHeight() / 2); Image img = toolkit.getImage(imagesappico.jpg); setIconImage(img);btnLogin.addActionListener(this);btnRegister.addActionListener(this);btnEx

27、it.addActionListener(this);SuppressWarnings( deprecation, static-access )publicvoid actionPerformed(ActionEvent ae) Object source = ae.getSource();if (source.equals(btnLogin) if (txtUserName.getText().equals() | pwdPassword.getText().equals() JOptionPane op1 = new JOptionPane(); op1.showMessageDialo

28、g(null, 用户名或密码不能为空); else strServerIp = txtServer.getText(); login(); if (source.equals(btnRegister) strServerIp = txtServer.getText();this.dispose();new Register(strServerIp); if (source = btnExit) System.exit(0); SuppressWarnings(deprecation)publicvoid login() Customer data = new Customer(); data.

29、custName = txtUserName.getText(); data.custPassword = pwdPassword.getText();try Socket toServer; toServer = new Socket(strServerIp, 1001); ObjectOutputStream streamToServer = new ObjectOutputStream(toServer .getOutputStream(); streamToServer.writeObject(Customer) data); BufferedReader fromServer = n

30、ew BufferedReader(new InputStreamReader(toServer.getInputStream(); String status = fromServer.readLine();if (status.equals(登录成功) new ChatRoom(String) data.custName, strServerIp);this.dispose(); streamToServer.close(); fromServer.close(); toServer.close(); else JOptionPane.showMessageDialog(null, status); streamToServer.close(); fromServer.clos

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1