当前位置:文档之家› 软件工程课程设计----实时通讯系统

软件工程课程设计----实时通讯系统

实时通讯系统的设计与实现一、可行性研究报告1引言1.1编写目的企业实时通信系统是针对企业内部职工的通讯与交流进行设计,目的是方便职工之间的交流,以提高工作效率。

1.2项目背景开发软件名称:企业实时通讯系统1.3 定义[专门术语]:Java , Java Swing, JavaDB, SQL[缩写词]:Java , Swing, JavaDB, 结构化查询语言2可行性研究的前提2.1要求主要功能:根据企业内部通讯系统的特点,可以将本系统划分为信息通讯、系统升级、系统设置、用户搜索等共计6大部分。

性能要求:1)实现员工之间的实时通信。

2)当软件拥有新版本时,使用升级功能进行升级。

3)可以对系统的用户界面、用户名称、公共路径等进行设置。

4)可以对用户按指定IP段进行搜索。

5)可以访问企业内部公共路径中的资。

2.2目标系统实现后,提高企业内部员工在工作时进行交流的效率,以达到员工之间可以利用工作的计算机进行实时通讯、而不必离开工作位置完成交流,从而提高工作效率。

2.3条件,假定和限制建议软件寿命:3年。

硬件条件:pc机。

运行环境:Windows或Linux、Java数据库:JavaDB技术可行:现有技术可完全承担开发任务。

操作可行:,软件能被原有工作人员快速接受。

3可行性分析3.1对以往的系统的分析在利用企业内部通讯系统之间,企业员工之间的交流必须通过员工本人当面完成或通过电话等设备完成,员工不得不离开工作位置而完成交流,或者通过有声的方式完成通讯,这样一来难免会对办公环境中的其他员工造成不必要的影响,也大大降低了工作的效率。

3.2开发系统简要描述在员工的工作计算机上搭载好软件的运行环境、部署好软件后,由于软件的工作方式与常用的通讯软件基本一致,用户可以轻松的掌握相关操作。

3.3经济可行性分析本项目属于非盈利项目。

由于Java本身属于开源的开发环境,所以所有的软件不需要额外的花费,只需要将软件的运行环境部署到工作计算机即可。

3.4技术可行性根据客户提出的系统功能、性能及实现系统的各项条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术以较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。

同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发。

3.5法律可行性研究开发此系统的过程并未涉及到合同侵权责任以及各种与法律相抵触的问题。

本系统适用于各种中小型企业。

运用此系统进行员工之间的内部交流,给企业员工的通讯带来极大的方便。

3.6用户使用的可行性作为本产品的使用者要求有一定的计算机基础,可以熟练得使用window操作系统所提的各种功能。

数据库管理要求具有专业水平的数据库管理员,用户需要简单的操作指导。

二、需求分析1 功能需求1.1用户管理:用户管理主要负责用户信息的管理,如通讯对象的添加、删除、改名等。

1.2系统设置:系统设置主要负责用户对系统的相关设置,如用户界面、系统路径、IP范围等。

1.3数据管理:数据管理包括对用户窗体的属性、用户的相关属性、通讯方的相关记录等的存储与管理。

2 系统性能需求2.1时间性能要求:在实际应用中由于通讯业务的要求,需要软件的响应时间应该尽可能缩短,对于有特殊需求的业务,还要求达到实时响应。

2.2储存性能要求:根据应用中实际情况配置适当容量的存储设备,由于本系统的存储要求不高,所以只要求存储设备能够稳定工作即可。

2.3稳定性安全性要求:要求软件尽可能的稳定,对于一般的应用系统,对安全性要求不高,但是对于通讯软件来说,在安全性方面应该加以保证。

3 系统运行需求由于本系统使用JavaDB数据库,所以只需要供软件运行的多台PC机即可,PC机应组成相应的局域网,并搭载Java运行环境。

三、概要设计说明书1总体设计1.1层次图:根据本次设计需要,整个企业内部通讯系统可以分成信息通讯、系统设置、用户管理等3个模块。

系统的层次图如下[图1]所示:企业内部通讯系统信息通讯系统设置用户管理[图1]企业内部通讯系统层次图1.2各模块功能及相互关系1.信息通讯模块:通讯模块是企业内部通信系统的核心模块,它用于不同职工之间的通讯,这种通讯方式能够实现多个职工之间的通话,而不存在类似电话的占线问题,增加了任务分配的新方式,从而提高了企业的工作效率。

该模块可以使用UDP协议和系统信使两种方式发送通讯信息。

2.系统设置模块:系统设置模块用于管理企业内部通讯系统的相关设置,比如窗体大小,用户名、通讯对象、IP 段、公共路径等,在企业内部通讯系统有新版本提示时,可以使用系统升级功能直接升级到最新版本,而不用重新安装。

3.用户管理模块:用户管理模块类似聊天软件的好友列表,它包含了所有用户信息,具有更名、添加用户、删除用户、信使群发等功能。

四、详细设计说明书1 流程图开始启动状态启动已运行N结束Y 标记系统已运行加载系统配置加载用户信息加载通讯列表就绪状态系统初始化流程图当系统初始化完毕之后,就可以进行具体的通讯业务了(即普通通讯和信使通讯)。

2 各个模块的具体流程当用户启动系统后会出现一个主窗体,如下图所示:主窗体界面通讯子窗体主窗体中包含了各种子窗体,如用户列表窗体、系统设置窗体和用户搜索窗体,以切换卡的方式进行切换。

2.1通讯模块设计:当用户用鼠标双击选中[图3]中用户列表中的某个用户时,会创建一个通讯子窗体,如图所示,此时可以按照如下图所示的流程进行通信业务:开始启用信使服务发送信使UDP通讯?NY创建并初始化数据报对象发送数据报End通讯业务流程图2.2系统设置模块设计:当用户使用切换卡切换到系统设置界面时,如下图所示,可以进行系统相关配置的设置,具体业务流程如下图所示:系统运行从数据库读取系统设置是否更改设置保存设置至数据库结束N Y系统设置界面系统设置业务流程2.3用户管理模块设计:操作用户可以使用多种途径对用户列表进行管理,比如在用户列表单击右键,在弹出菜单中按指定IP 添加用户,或者选中删除用户。

也可以在用户搜索面板中按指定的IP 范围进行批量搜索添加,如下图所示,用户管理业务的流程如图所示:系统运行从数据库读取用户列表用户列表是否更改更新数据库结束NY[图8] 用户搜索面板[图9] 用户管理流程3 关键代码分析3.1通信模块关键代码:通讯模块使用UDP 进行通讯,利用Java 听过的 包中的相关API 进行编程设计,利用MVC 设计模式,将一个监听器绑定在发送按钮对象上,当用户点击发送时发送消息框中的消息。

关键代码及注释如下:class sendActionListener implements ActionListener { public void actionPerformed(final ActionEvent e) { String sendInfo = getSendInfo(); if (sendInfo == null)//对消息进行判断return;insertUserInfoToReceiveText(tree);//将操作用户的信息插入发送文本appendReceiveText(sendInfo + "\n", null);byte[] tmpBuf = sendInfo.getBytes();DatagramPacket tdp = null;try {tdp = new DatagramPacket(tmpBuf, tmpBuf.length,new InetSocketAddress(ip, 1111)); //初始化数据报包对象包装信息ss.send(tdp); //发送消息} catch (SocketException e2) {e2.printStackTrace();} catch (IOException e1) {e1.printStackTrace();JOptionPane.showMessageDialog(TelFrame.this, e1.getMessage());}sendText.setText(null); //清空消息框,为再次输入准备sendText.requestFocus(); //使消息框获得焦点,减少操作if (messageMode.isSelected())setState(ICONIFIED);}}3.2系统设置模块关键代码:系统设置模块设计的关键在于与JavaDB数据库的交互,关键代码与注释如下:public void updateLocation(Rectangle location) {// 更新窗体位置String sql = "updatetb_locationsetxLocation=?,yLocation=?,width=?,height=?";try {PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1, location.x); //插入窗体位置数据pst.setInt(2, location.y);pst.setInt(3, location.width);pst.setInt(4, location.height);pst.executeUpdate(); //更新数据库信息pst.close(); //关闭连接} catch (SQLException e) {e.printStackTrace();}}public Rectangle getLocation() { // 获取窗体位置Rectangle rec = new Rectangle(100, 0, 240, 500);//创建rec对象并设置默认数据String sql = "select * from tb_location";try {Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);if (rs.next()) { //若存在,则重设rec属性rec.x = rs.getInt(1);rec.y = rs.getInt(2);rec.width = rs.getInt(3);rec.height = rs.getInt(4);}rs.close();stmt.close();} catch (SQLException e) {e.printStackTrace();}return rec;}3.3用户管理模块关键代码:用户管理模块使用了树的数据结构,这样一来对用户对象的搜索插入操作就和对树的插入删除操作一样了,关键代码如下:public void delUser() { // 删除用户TreePath path = getSelectionPath();if (path == null)return;User user = (User) ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject(); //获取节点中的用户对象int operation = JOptionPane.showConfirmDialog(this, "确定要删除用户:" + user + "?", "删除用户", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); //给出提示信息以确认删除if (operation == JOptionPane.YES_OPTION) {dao.delUser(user); //调用删除方法root.remove((DefaultMutableTreeNode)path.getLastPathComponent()); //删除该节点treeModel.reload();}}五、测试分析报告1 测试方案在测试过程中,采用黑盒测试,即检查程序功能是否能按要求进行,是否适当的接收数据产生正确的输出,并保持外部信息的完整性。

相关主题