《Java课程设计》需求分析文档要求
位置: 首页 >公文写作 > 礼仪文书 > 文章内容

《Java课程设计》需求分析文档要求

2020-09-23 14:26:59 投稿作者: 点击:

 目录 1. 选题背景

 ..............................................................................

 1 2. 开发技术概述

 ..........................................................................

 1 3. 功能需求分析

 ..........................................................................

 1 4. 功能设计

 ..............................................................................

 2 4.1 登录界面功能表

 ..................................................................

 2 4.2 注册界面功能表

 ..................................................................

 3 4.3 聊天界面功能表

 ..................................................................

 4 4.4 文件功能表

 ......................................................................

 5 5. 系统流程分析

 ..........................................................................

 5 5.1 系统总体设计流程图

 ..............................................................

 5 5.2 详细设计流程图

 ..................................................................

 6 6. 界面设计

 ..............................................................................

 9 6.1 登录界面

 .........................................................................

 9 6.2 注册界面

 ........................................................................

 9 6.3 聊天界面

 ........................................................................

 10 7. 系统测试

 ..............................................................................

 11 8. 关键代码说明

 ..........................................................................

 13 小结

 .................................................................................

 16 参考文献

 .............................................................................

 17

 1

 1. 选题背景 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而 产生的聊天工具越来越多 . 目前国内外做即时通讯软件的公司很多,产品也琳琅满目,国内 有诸如腾讯 QQ 新浪 UC网易泡泡、淘宝旺旺等,国外有著名的 MSN( 新版改名为 Live Messenger )以及跨平台的米聊等。

 QQ 是国内即时通讯软件市场上无可争议的 "老 大” , 您使用 QQ 可以与好友交流,信息及时发送,及时回复,收发及时功能全面。

 QQ 与国 外最大的即时通讯软件 MSN 功能强大,但它们唯一不足的地方就是必须要联网或者下载到 它们的服务端,否则无法脱离 Internet 使用。

 本聊天系统,是可以在局域网聊天的一个工具。无需联网,即可进行群聊。所以也存 在局限性,只有在同一局域网内的用户才能聊天交流,除此之外,该系统未设置私聊功能。

 2. 开发技术概述 本系统采用 java 技术开发, 使用文件保存数据, 集成开发环境使用 eclipse 。开发者 应有 java 程序设计语言、 SWINC 基本 GUI 组件、多线程、文件使用、 socket 编程、使用 eclipse 的基本知识和技能。系统采用两层 c/s 体系结构, c 端负责通过 GUI 与客户交互,实现注册、 登录、收发信息、退出等功能; c 端和 s 端是通过网络交互的。

 首先服务器启动,建立一个专门用于接收客户端请求的”倾听 Socket ” , 然后等待客 户的连接请求。当客户想聊天时,从界面输入信息,然后与服务器建立 Socket 连接,服务 器端的“倾听 Socket ”收到连接请求后, 一般会接收连接请求, 并生成一个服务器端 socket ,

 专门负责与此客户端 socket 的通信。一旦连接请求成功,通过 I/O 流来实现数据的输入输 出。用多线程来实现多人聊天功能。

 3. 功能需求分析 使得第一次使用的用户可以通过填写个人信息来注册,已注册用户可以在验证他的登 录信息后登录,允许在线用户查看其他在线用户的列表,允许用户在公共聊天室中聊天。

 客户端和用户端的需求如下:

 a. 客户端 ( 1 )用户注册界面及结果 ( 2 )用户登录界面及结果 ( 3 )用户发送信息及结果 ( 4 )用户得到信息及结果 ( 5 )用户退出界面及结果 b. 服务器端 ( 1 )处理用户注册 ( 2 )处理用户登录 ( 3 )处理用户发送信息 ( 4 )处理用户退出 ( 5 )保存服务器日志 ( 6 )保存用户聊天信息

 2

 4. 功能设计 4.1 登录界面功能表 表 4-1 登录功能表 序号 功能内容 控件 对象名 备注 1. 用户名输入框 JTextField textfield

 2. 密码输入框 JPasswordFi password

 eld

  3. 登录 JButt on b1

 4. 取消 JButt on b2

 5. 注册 JButt on b3

 6. 存放组件的容器 JPanel P1 存放 b1 b2 b3 7. 盒式容器 Box baseBox 存 box1 box2 8. 盒式容器 Box box1 box2

 9. 标签 JLabel

 标记用户名

  密码

 3

 4.2 注册界面功能表 表 4-2 注册功能表 序号 功能内容 控件 对象名 备注 1. 用户名输入框 TextField textfield1

 2. 密码输入框 TextField Pw1

 3. 确认密码输入框 TextField Pw2

 4. 年龄输入框 TextField textfield2

 5. 复选框男 JCheckBox C1 选定 6. 复选框女 JCheckBox C2

 7. 注册按钮 JButt on bsubmit

 8. 取消按钮 JButton

 bca ncel

 9. 存放组件的容器 JPanel

 P1 存放信息 10. 存放组件的容器 JPanel

 P2 存放两个提

  交取消按钮 11. 存放组件的容器 JPanel

 P3 存放性别选

  项

 4

 4.3 聊天界面功能表 表 4-3 聊天功能表 序号 功能内容 控件 对象名 备注 12. 聊天内容显示框 TextArea

 textareaMessage

 13. 用户列表显示框 TextArea

 textareaList

 14. 发送内容输入框 TextField

 textfield

  15. 用户列表标签 JLabel

 userlist

  16. 聊天室标签 JLabel

 chatroom

 17. 退出按钮 JButton

 butt onout

  18. 发送按钮 JButton

 butt onsent

  19. 存放组件的容器 JPanel

 pan elout 存放退出按 钮 20. 存放组件的容器 JPanel

 P

 21. 显示指定组件内容 JScrollPa ne

 messagepa nel textareaMes sage

 显示指定组件内容

 22. JScrollPa ne

 listpa nel

 textareaLis t

 显示指定组件内容

 23. JScrollPa ne

 sen dpa nel

 textfield 24. 格式布局 GridBagLayout ()

 25. GridBagLayout 类布置的 组件的约束 GridBagCo nstr aints

 bgc

 5

 4.4 文件功能表 表 4-4 文件功能表 序号 功能内容 控件 对象名 备注 1. 指定流里面读取对象 Objectl nputSt ream br

 2. 从流里读取内容 getl nputStrea m

  3. 文件写 Prin tWriter pw

 4. 读对象 readObject

  5. 客户端套接字 Socket fromClie nt 建立连接 6. 服务器端套接字 ServerSocket server 建立连接

 5. 系统流程分析 5.1 系统总体设计流程图 聊天应用程序包括登录界面和注册界面,当启动登录界面,用户填写信息后登录,登录的 信息将反馈给聊天服务器,服务器验证用户信息,若验证成功则跳到聊天界面,否则,服务器 反馈给登录界面拒绝登录消息。启动注册界面,用户在界面填写注册信息,注册信息反馈给服 务器,服务器要验证用户信息,验证成功,跳到登录界面,否则,服务器反馈给注册界面,显 示错误消息。

 6

 开始

  5.2 详细设计流程图 1. 服务器结构 服务器端,处理用户的请求,当收到“来自定时器”消息时 , 服务器给客户反馈,客户端在 聊天界面更新消息和在线用户信息;服务器收到“登录信息”请求时 , 验证登录信息,验证成功 则更新聊天界面里的消息和在线用户信息,否则给客户端反馈“用户不存在”消息;当服务器 端接收到“注册消息”请求时,服务器验证注册信息,若验证成功,将注册信息写入文件保存, 并反馈给客户端“注册成功”信息,跳到登录界面,否则在注册界面给客户端反馈“用户已经 存在”消息。

 验证登录消息 否决登录 V 是 I 图 5-1 系统总体流程图

 7

  图 5-2 服务器结构流程图

 2. 客户端结构 登录界面,将登录消息发送给聊天服务器, 聊天服务器验证登录消息, 如果验证成功将“欢 迎”消息发送给登录界面,登录界面向用户显示聊天界面;如果验证不成功,则将拒绝消息发 送给登录界面,登录界面显示错误对话框。注册界面,同登录界面。

 8

  图 5-3 登录界面流程图

 聊天界面 , 服务器接收“来自定时器”的消息,随时更新消息和在线用户信息,若用户 在聊天界面中单击“发送”按钮,服务器接收用户“发送”请求,服务器将用户的发送信 息保存,向聊天界面,若用户退出,服务器收到用户“用户退出”请求,将在线列表中删 除用户,并更新聊天界面里的消息和在线用户信息。

 9

 开始 聊天界面

 结束 图 5-4 聊天界面流程图 6. 界面设计 6.1 登录界面 运行 Login.java 程序会出现如下界面。

 图 6-1 登录界面

 6.2 注册界面 运行 Resigter.java 可出现如下界面,注册信息时,用户名不能为中文,程序采用了 RandomAccessFile 来随机读取文件,为单独设置类来处理中文字符,用户若注册用户名信 息含有中文将无法读取,尽管注册成功,登录时将报错:用户名或密码错误。

 1F 1 f 1 r 聊天服务器 更新消息和在 线用户信息 将“来自定时器”的 消息发送给服务器 将“用户退岀”消 息发送给服务器 从在线列表中 删除用户 用户在聊天界面中 单击“发送”按钮

 10

  图 6-2 注册界面

 6.3 聊天界面 用户先注册,在登录,登录成功可以出现如下界面。

 11

 图 6-3 聊天界面

 7. 系统测试 用户 xiaowang 和 wang 注册后登录聊天室, xiaowang 在聊天室里发送消息:

 你好; wang 发送消息:好。两个用户都能看到彼此所发的信息。

 12

 13

  图 7-2 系统测试

 8. 关键代码说明 表 8-1 关键代码表 序号 事件内容 事件名 对象名 1 登录 JButton bl 2 注册 JButton b2 3 聊天 JButton b3 4 发送 JButton Ibutt onsent

 14

 public Conn ect(Socket inF romClie nt) { // 建立一个用户 //vcList = new Vector<Stri ng>(); String msg = ""; String mesg = ""; try { // 服务器端先读再写 streamFromClie nt = new BufferedReader( new In putStreamReader( inF romClie nt.getl nputStream())); //System.out.println(” 客户端连接成功 "); streamtoClie nt = new ObjectOutputStream( inF romClie nt.getOutputStream()); //System.out.pri ntln(” 服务器反馈信息给用户 ”) ; msg = streamFromClie nt .readL in e(); System. out .println( ” 从客户获得的信息为:

 ” + msg); if (msg.equals( " 来自定时器 " )) { streamtoClient .writeObject( vector ); // 将指定的对象写入 // ObjectOutputStream

 } else if (msg.equals( " 登录消息 " )) { msg = streamFromClie nt .readLi ne(); System. out .println( " 客户信息为: "+ msg); int ver = verify(msg);

  System. out .println( " 验证消息为: "+ ver); if (ver == 1) {

  String colon = new String( ":” );

 int in dex = msg.lastl ndexOf(col on); String user name = msg.substri ng(0, in dex); System. out .println( "usernaem-->>" +username); if (!( vcList .indexOf(username) >= 0)) { // 如果用户列表 中不存在该用户则在列表中添加该用户 streamtoClient .writeObject( " 欢迎 ” ); // addEleme nt 将指定的组件添加到此向量的末尾,将其大小 增加 // 1 。如果向量的大小比容量大,则增大其容量。

 vcList .addFlement((String)username); System. out .println( " 用户列表人数为:

 "+vcList .size()); } else { // 已经登录了streamtoClie nt .writeObject( vcList );

 15

  // "+vcList.size()); 反馈信息 } else streamtoClient .writeObject( " 欢迎 ” ) ; System.out.pri ntl n(” 用户列表人数为:

 streamtoClient .writeObject( " 拒绝登录 ” ); // 给客户端 } } else { streamtoClie nt .writeObject( } " 该用户不存在 ” ) ; if (msg.equals( " 注册消息 " )) { msg = streamFromClie nt .readL in e(); System. out .println( ” 从客户端接收的信息为:

 ” + msg); int ret = checkFile(msg); System. out .println( ” 用户存在为 0 ” + ret); if (ret == 0) { streamtoClient .writeObject( " 用户已经存在 ” ); } FileOutputStream( if (ret == 1) { // 创建在文件中写入的文件流 System. out .println( ” 在文件中写入信息 ” ) ; FileOutputStream out = new "UsrPwd.txt" , true ); Prin tStream p = new Prin tStream(out); p.pri ntl n(); p.pri ntl n( msg); p.close(); streamtoClient .writeObject( " 注册成功 ” ) ; System. out .println( ” 注册成功 ” ); } } else } else if (msg.equals( " 用户退出 " )) { System. out .println( " 用户退出 ” ); Stri ng remuser = streamFromClie nt .readL in e(); //boolea n b = vcList.removeEleme nt(remuser);// vcList .removeEleme nt(remuser); 移除退出用户 { // 发送信息 message = message + msg;

 16

 System. out .println( "message:" + message ); vector .addElement( message ); // 向聊天列表中添加用户发送的聊天 信息 streamtoClient .writeObject( vector ); // 反馈给用户现在的 向量 集合 } } catch (Exception e1) { e1.pri ntStackTrace(); System. out .println( ” 无法获取客户端的流对象 ” + e1); }// try...catch 结束 fin ally { try { inF romClie nt.close(); } catch (IOException e2) { e2.pri ntStackTrace(); System. out .println( " 发生异常 "+ e2); } } 小结 本次系统设计总结,我将对我在做这次系统设计中遇到过的问题以及新学的内容进行 总结。本系统的登录界面,我采用了 Box 容器来排版界面格式,注册界面与聊天界面采用 了 GirdBagLayout() 布局格式,来排版界面。用 Vector 类来实现添加、删除用户的操作, Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的 组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或 移除项的操作。用 RandomAccessFile 来实现文件内容的读取, RandomAccessFile 创建从中 读取和向其中写入的随机访问文件流, 类里面有 getFilePointer 方法来返回文件中的当前 偏移量,到此文件开头的偏移量,在该位置发生下一个读取或写入操作。采用 objectOutputStream 类来读取流里的对象,用其中的 writerObject() 方法来向流里传递(写 入)一个对象。最重要的一点,在调用 close ()方法关闭读写流之前一定要先 flush() , flush 是清空而不是刷新,一般主要用在 Io 中,即清空缓冲区数据,当我们用读写流的时 候,数据先被读到了内存,然后用数据写到文件中,当数据读完,数据并没有写完,还有 一部分可能留在内存这个缓冲区中,如果你调用了 close() 方法关闭了读写流,那么这部 分数据就会丢失,所以应该在关闭读写流之前先 flush() (把缓冲区中的内容强制写出),

 17

 先清空数据。

 18

 参考文献 [1] 王雷,潘英 J2EE 专业项目实例开发 [M]. 北京:中国水利水电出版社, [2] 耿祥义,张跃平 Java 程序设计实用教程 [M]. 北京:电子工业出版社, [3] 王保罗 .Java 面向对象程序设计 [M]. 北京:清华大学出版社, 2003 [4] 张珣,杨三成 . 关键技术 JSP 与 JDBC 应用详解 [M]. 中国铁道出版, 2010 ⑸

 刘腾红,孙细明 • 信息系统分析与设计 [M]. 北京:科学出版社, 2003 ⑹ 林邦杰 • 彻底研究 Java[M]. 北京:电子工业出版社, 2002 [7] 毕广吉 .Java 程序设计实例教程 [M]. 北京:冶金工业出版社, 2007 [8] 王保罗 .Java 面向对象程序设计 [M]. 北京:清华大学出版社, 2003 [9] 耿祥义,张跃平 .Java 设计模式 [M]. 北京:清华大学出版社, 2009 [10] Bruce Eckel.Java 编程思想 [M]. 北京:机械工业出版社, 20032006 2007

 19

 Java 程序设计课程设计成绩评定 成绩评定:

 ______________________________

 指导教师签字:

 __________________________

 年 月 日

猜你喜欢
推荐图文