企业QQ通信系统设计与实现_毕业设计.doc_第1页
企业QQ通信系统设计与实现_毕业设计.doc_第2页
企业QQ通信系统设计与实现_毕业设计.doc_第3页
企业QQ通信系统设计与实现_毕业设计.doc_第4页
企业QQ通信系统设计与实现_毕业设计.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

宜宾职业技术学院宜宾职业技术学院 毕业设计 企业企业 QQQQ 通信系统设计与实现通信系统设计与实现 系系 部部 专专 业业 名名 称称 班班 级级 姓姓 名名 学学 号号 指指 导导 教教 师师 20132013 年年 0909 月月 2828 日日 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 I 企业企业QQ通信系统设计与实现通信系统设计与实现 摘摘 要要 企业 QQ 通信系统可作为企业内部的交流工具使用 虽然通信的安全性不 是很高 但是要求信息的响应速度要较快 能让企业内部员工充分享受到网络 即时消息的方便和快捷 从而提高工作质量和效率 本设计采用 Visual C 6 0 程序 使用 C 编程语言进行软件的开发 主要实现了用户注册 用户登录 用户之间文字聊天 文件传输 语音聊天 视频聊天功能 构成一个实用的 功能完善的聊天软件 达到预期目标 通过运行 测试与分析说明 该多功能 聊天软件运行稳定 可靠 具有一定的实用价值 关键词关键词 QQ 系统 企业通信 Visual C 6 0 C 数据库 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 II 目 录 1 引引 言言 1 1 1 课题背景课题背景 1 1 2 国内外主要聊天工具的发展状况国内外主要聊天工具的发展状况 1 1 3 本课题研究的意义本课题研究的意义 3 2 系统需求分析系统需求分析 4 2 1 系统的功能需求分析系统的功能需求分析 4 2 2 系统的可行性分析系统的可行性分析 4 2 2 1 可行性要求 目标 4 2 2 2 技术可行性分析 5 2 2 3 经济可行性分析 5 3 系统设计系统设计 6 3 1 系统拓扑结构图系统拓扑结构图 6 3 2 系统功能结构图系统功能结构图 6 3 3 网络通信原理分析网络通信原理分析 7 3 4 开发环境开发环境 8 3 5 数据库设计数据库设计 9 4 服务器端设计服务器端设计 10 4 1 服务器端主窗体模块服务器端主窗体模块 10 4 1 1 服务器端主窗体概述 10 4 1 2 窗口设计 10 4 1 3 关键代码分析 11 4 2 服务器端账户管理模块服务器端账户管理模块 15 4 2 1 服务器端账户管理概述 15 4 2 2 窗口设计 15 4 2 3 关键代码分析 16 4 3 服务器端系统组织结构管理模块服务器端系统组织结构管理模块 19 4 3 1 服务器端系统组织结构概述 19 4 3 2 窗口设计 19 4 3 3 关键代码 20 5 客户端关键技术客户端关键技术 21 5 1 客户端概述 21 5 2 客户端的关键技术 21 6 系统测试系统测试 24 6 1 软件测试基础理论 24 6 2 系统测试 24 6 3 测试结果 26 结束语结束语 27 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 III 致谢致谢 28 参考文献参考文献 29 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 1 企业 QQ 通信系统设计与实现 1 引引 言言 1 1 课题背景课题背景 21 世纪将是网络化 信息化的世纪 信息的融合已经成为社会发展的主流 方向 简易版企业 QQ 聊天系统将不断与信息交流领域的系统相互集成和渗透 扩展其自己的功能和应用范围 满足未来话音 数据和视频的多媒体应用需要 使即时消息以更丰富的接入方法 更高的服务质量 更友好的面貌呈现在世人 的面前 从功能角度来看 简易版企业 QQ 聊天系统向支持全媒体方向发展 随着 多媒体技术在网络应用中的发展 简易版企业 QQ 聊天系统承载的媒体 不再 局限于原来的文字 语音和文件的信息交换 信息载体扩展到图形 图像和流 媒体等多媒体业务上 目前 ICQ 和 QQ 预设了部分简单的表情图像 通过传输 图像代码来传递表情图像 可以被视为即时消息开发商开发支持图形 图像为 载体的即时消息软件的开端 从应用范围角度来看 简易版企业 QQ 聊天系统集中在 Internet 个人用户之 间的信息交流应用 随着网络技术应用的发展 简易版企业 QQ 聊天系统应用 范围向园区化 集团化拓展 应用领域突破个人 而用于远程教学 远程医疗 远程演示 网络会议等领域 1 2 国内外主要聊天工具的发展状况国内外主要聊天工具的发展状况 中国的大部分网络用户都拥有自己的 QQ 号码 腾讯计算机系统有限公司 成立于 1998 年 11 月 1999 年 2 月 腾讯自主开发了基于 Internet 的即时通信 网络工具 腾讯即时通信 Tencent InstantMessenger 简称 TIM 或腾讯 QQ 腾讯 QQ 经过三年时间的发展 到 2002 年 其用户群成为中国最大的互联网注 册用户群 注册用户达到 1 亿 6000 万 其中活跃用户总数超过 5000 万 自此 腾讯 QQ 成为中国最大的即时通信服务提供商 腾讯公司是中国最早也是目前 中国市场上最大的本土互联网即时通信软件开发商 公司成立 10 多年以来 一 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 2 直以追求卓越的技术为导向 始终处于稳健 高速发展的状态 腾讯 QQ 超过 6 亿的注册用户群体现了网络用户对腾讯 QQ 这一聊天工具的广泛应用 在当 今市场经济高速发展的前提下 腾讯 QQ 也在不断自我完善 渐渐地演变为一 个人性化 市场化的多功能的聊天工具软件 它可以给网络聊天用户带来越来 越多的人性化服务 从原来单一的文字聊天过渡到集语音 视频 文件传输等 多功能于一身的聊天软件 ICQ 和 MSN 是在国外比较盛行的即时聊天工具 腾讯 QQ 的开发对 MSN 和 ICQ 都进行了借鉴 ICQ 是 I Seek You 我找你 的缩写 最初是一家以色 列公司开发出来的免费软件 中文名称目前可以称之为 网络呼叫器 它在全 球拥有超过 4000 万的用户 事实上这种软件最主要的功能就是让用户知道网络 上的朋友现在有没有上线 前提是对方也有安装 ICQ 然后可以互送 Messages 消息 交谈或是交换档案等等 比电子邮件更具即时性 正如一位 ICQ 软件的最初程序设计员所说 当你登录因特网之后 你周围都是些自己 熟悉的人 而且 你还可以和他们分享这种体验 这的确是一件令人激动的事 情 MSN 是微软推出的聊天软件 是一套类似 ICQ 的网上即时通讯软件 它 以最简单的方式为用户提供强有力的即时消息支持 同时能使 Microsoft OutlookExpress R 和 MSN Hotmail R 变得更简单易用 MSN Messenger Service 还可使用户间的联机交谈变得更加轻松愉快 了解谁在联机以及查看用户何时 联机并与其交换即时消息 用户间可以进行单独的聊天 或者在同一个对话窗 口中与多达四个的联系人进行聊天 自动的输入指示器可让用户知道何时联系 人正在输入答复 还可以进行全球电话呼叫 以非常低的费用呼叫世界的任 何地方 用户可以选择所要使用的电话服务提供商 从服务提供商的列表中选 择最适合的提供商 用交谈取代键盘输入 使用计算机上的话筒和扬声器就可 以和位于世界各地的朋友进行交谈 甚至可以呼叫联系人将文本消息发送到联 系人的移动电话和传呼机上 注 此特性仅适用于美国和加拿大 而进入 聊 天室 结识新朋友 或加入与名人聊天 此特性在所有地区都适用 用户可以使 用 MSN Messenger 与朋友交换照片 喜爱的音乐或任何其他文件 也可以监视 新的电子邮件并查看用户有多少新的电子邮件 MSN Messenger 能在收到新的 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 3 Hotmail 邮件时通知用户 还能邀请联系人进行联机 DirectPlay 兼容游戏 1 3 本课题研究的意义本课题研究的意义 此次开发的企业 QQ 通信系统可作为个人的交流工具使用 通信的安全性 不是很高 但要求信息的响应速度要较快 让用户充分享受到网络即时消息的 方便和快捷 本聊天工具由服务器端程序和客户端程序两部分组成 整体采用 Visual C 6 0 平台开发 并使用 Access 2003 管理数据库数据 服务器是可以 监听和查看用户的基本操作 客户端程序面向实际用户 它有必要的界面的按 钮 向用户提供网络即时消息的功能 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 4 2 系统需求分析系统需求分析 2 1 系统的功能需求系统的功能需求分析分析 本系统的设计目标是实现一个企业内部局域网通信系统 企业内部职工可 以方便的进行交流 可以大大的提高职工的工作效率 根据企业对局域网通信的需求 本系统主要包括信息通信 系统设置 搜 索用户 访问公共资源 访问对方主机五大功能 各功能概述 信息通信 信息通信是企业内部通信系统的核心功能 它用于不同职工之 间的通信 这种通信方式能够实现多个职工之间的通信 而不存在类似电话占 线的问题 增加了任务分配的新方式 从而提高企业的工作效率 系统设置 系统设置用于设置用户界面 公共路径 公告栏等的功能 用户搜索 用户搜索用于搜索企业局域网内的其他用户 系统会根据用户 所设置的 IP 搜索范围搜索所有计算机上的用户 访问公共资源 本功能用于实现企业内部公共服务器上资源访问的功能 访问对方主机 本功能用于两人聊天情况下对对方主机的访问和控制的功 能 第一次使用系统的用户通过填写个人信息来注册 服务器返回一个注册 ID 号给注册用户 用来登录 已经注册的用户在登录界面填写完相关登录信息 通过服务器的验证后就可以进入客户端界面 在线用户在添加好友时可以查看 所要添加用户的列表信息 当对要添加的好友发送请求添加的信息后 由该好 友验证是否通过请求 同意后会向请求方发送同意添加的消息 当请求方添加 完成后 服务器端会把相关信息存入到好友表的数据库中 完成以上操作以后 两人即可进行在线聊天 2 2 系统的可行性分析系统的可行性分析 2 2 1 可行性要求 目标可行性要求 目标 企业内部通信系统必须提供网络通信功能 在通信过程中禁止使用聊天表 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 5 情 文件传送等功能 避免资料外泄 或因发送错误而导致上机资料的丢失以 及其他损失 最重要的是必须适应任何操作系统 也就是实现跨平台技术 因 为企业内部的工作需要 工作环境中使用了多个操作系统来完成不同的工作 另外 系统不需要使用服务器中转和记录通信内容 可以独立完成通信任务 排除职工对领导监视工作进度等行为的逆反心理 企业内部通信系统的目标是实现企业的信息化通信 提高企业通信能力 提高任务理解和执行能力 减少没有必要的人员流动和资金损耗 以最快的速 度提升企业的市场竞争力 2 2 2 技术可行性分析技术可行性分析 局域网通信系统的技术已经非常成熟 首先 从硬件上讲 计算机硬件速 度现在已经不是问题 高速便捷的网络已经十分普遍 这些为本系统的运行打 下坚实的基础 从软件的角度上讲 数据库技术已经相当成熟 目前用得比较 多的有 SQL Server Visual C 6 0 等 并且处理能力也非常强 这为海量数据 的存储和处理打下了坚实的基础 同时 使用 Visual C 6 0 开发程序也相当 普遍 有了这些技术的支持 我们成功开发一个局域网通信系统没有任何技术 风险 2 2 3 经济可行性分析经济可行性分析 经济可行性主要是对项目的经济效益进行评价 本系统开发完成后可缩减 工作时间 提高工作效率 而且简单易操作 不需对使用人员进行培训 不管 是在资金上还是效率上都能达到预期的效果 本系统开发经费对于企业在经济上是可以接受的 并且本系统实施后可以 显著提高工作效率 有助于企业的信息化管理 所以该企业内部通信系统在经 济上是可行的 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 6 3 系统设计系统设计 3 1 系统拓扑结构系统拓扑结构图图 企业 QQ 通信系统分为客户端和服务器端 并且多个客户端可以连接同一 个服务器端 通信系统的拓扑结构如图 3 1 所示 服务 器端 客户端客户端 客户端 客户端 图 3 1 企业 QQ 通信系统拓扑结构图 3 2 系统功能结构图系统功能结构图 企业 QQ 通信系统分为客户端和服务器端两个项目 其中服务器端不但提 供接收客户端的链接 还能够对账户进行管理 服务器端的主要模块如图 3 2 所示 客户端只要实现相互之间的消息和文件传递 客户端的主要模块如图 3 3 所示 服务器端 主 界 面 组 织 管 理 帐 户 管 理 图 3 2 服务器端 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 7 客户端 主 界 面 添 加 联 系 人 发 送 消 息 密 码 修 改 系 统 设 置 登 录 界 面 图 3 3 客户端 3 3 网络通信原理分析网络通信原理分析 企业 QQ 通信系统使用 TCP 和 UDP 两种连接方式进行连接 客户端使用 TCP 连接服务器 服务器端是使用 UDP 进行通信 系统连接模式如图 3 4 所示 图 3 4 连接模式 服务器端和客户端使用 Socket 建立通信连接的过程如下 1 服务器端建立 m SvrSock 和 m OrgSock 两个套接字句柄 m OrgSock 和 OnOrgMsg 函数建立异步通信 端口 1201 接收客户端发送 的连接请求 FD ACCEPT 在 OnOrgMsg 函数内将 org xml 文件发送到客户 端 m SvrSock 和 OnNetEvent 函数建立异步通信 端口 1200 接收客户端发 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 8 送的连接请求 接收到客户端的心跳测试和登录请求 登录后将端口 1201 的信 息发送过去 并判断是否已经登录 定时向客户端发送心跳包 每隔 10s 发送 一次 如果 5 次没有心跳回复 则认为掉线 2 客户端建立 m ClientSock 和 m UdpSock 两个套接句柄 m ClientSock 连接方式为 TCP m UdpSock 连接方式为 UDP 端口都是随机获 取的 m ClientSock 和 OnNetEvent 函数建立异步通信 m UdpSock 和 OnOrgMsg 函数建立异步通信 客户端首先使用 m ClientSock 建立连接 连接服务器的 IP 地址和端口 首先发送 PT LOGINREQUEST 和本机 UDP 端口 m nUdpPort 到服务器 如 果用户名和密码正确 则得到 PT LOGINACCEPT 和 1201 端口 此时服务器 会向每个客户端发送刚登录客户端的 IP 地址和 UDP 端口 PT USERINFO 客户端接收到 PT LOGINACCEPT 后 创建 m OrgSock 套接字 本地端口 随机 连接到服务器端的 1201 端口 准备获取 org xml 文件 客户端发送消息首先会创建 taskSock 套接字 客户端为 A 因为用户在双 击要发送消息的用户时 OnDblclkOrgtree 会获得它的 UDP 端口和 IP 地址 然后发送 PT REQUESTUDPPORT 到客户端 B B 新生成的 UDP 连接端口号后 返回 PT RETURNUDPPORT 消息给 A 每次创建 taskSock 套接字都会启动一 个接收数据的线程 SendTaskProc 此时客户端 A 和 B 都启动了接收数据的线 程 A 接收到 PT RETURNUDPPORT 后 返回 PT STREAM 及相应的数据 发送文件和发送消息流程相同 创建 taskSock 套接字后启动的是 SendFile 进程 A 接收到 PT RETURNUDPPORT 后 返回 PT FILE 3 4 开发环境开发环境 企业 QQ 通信系统的开发环境如下 系统开发平台 Visual C 6 0 系统开发语言 C 数据库管理系统软件 Access 2003 运行平台 Windows XP SP2 Windows 2000 SP4 Windows Server 2003 SP1 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 9 分辨率 最佳效果 1024 768 像素 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 10 3 5 数据库设计数据库设计 服务器端使用 Access 2003 作为后台数据库 用来储存组织结构及账户信息 数据库命名为 SvrInfo 其中包含 2 张数据表 tb Account 表 tb Account 表储存的是账户信息 账户信息如表 3 1 所示 表 3 1 账户信息表 字段名数据 类型 长度描述字段名数据 类型 长度描述 AccountID数字4账户HeaderShip文本20职务 Username文本12姓名OfficePhone文本22办公电话 Password文本18密码Handset文本22手机 Sex文本2性别E mail文本32电子邮件 Age数字4年龄Address文本50联系地址 OrgID数字4部门Picture文本20图片 以 账户命名 OrgName文本50部门 名称 tb OrgInfo 表 tb OrgInfo 表用于储存组织信息 组织信息如表 3 2 所示 表 3 2 组织信息表 字段名数据类型长度描述 OrgID数字4组织编号 OrgName文本20组织姓名 ParentID数字4上一级编号 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 11 4 服务器端设计服务器端设计 4 1 服务器端主窗体模块服务器端主窗体模块 4 1 1 服务器端主窗体概述服务器端主窗体概述 服务器端可以对组织结构及账户进行管理 并且提供通信服务 负责将组 织结构信息和账户信息发送给各个客户端 提供通信服务 负责将组织结构信 息和账户信息发送给各个客户端 验证账户的登录权限 检查客户端是否保持 在线 客户端主窗体模块主要负责通信服务 并且可以调用组织信息管理模块 和账户信息管理模块 服务器端主界面效果如图 4 1 所示 图 4 1 服务器端主界面 4 1 2 窗口设计窗口设计 创建一个对话框 向对话框中添加两个按钮控件 设置控件属性如表 4 1 所示 表 4 1 控件属性 控件 类型 资源值对应类成员名称属性 设置 ButtonIDC ORGMANAGEOnOrgmanage组织信 息管理 默认 ButtonIDC ACCOUNTMANAGEOnAccountManage账户信 息管理 默认 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 12 4 1 3 关键代码分析关键代码分析 在对话框初始化函数中 对数据库进行初始化 创建套接字并绑定本机 IP 地址和一个端口 然后开始监听 并将网络设置为异步通信 为什么要使用异 步通信 异步通信有什么好处 可以通过 OnInitDialog 函数的应用来了解 部 分代码如下 BOOL CQQServerDlg OnInitDialog CDialog OnInitDialog Add About menu item to system menu IDM ABOUTBOX must be in the system command range ASSERT IDM ABOUTBOX ASSERT IDM ABOUTBOX m Sock accept m SvrSock sockaddr if client m Sock INVALID SOCKET 接受连接失败 catch 修改密码失败 CPackage Package Package m Type PT PT UPDATEPASSFAILD send wParam char delete pBuffer break return S OK 服务器端创建两个端口 并使用 TCP 进行数据传输 TCP 是传输控制协议 是一种提供可靠数据传输的通信协议 它在网际协议模块和 TCP 模块之间的传 输 该协议允许两个应用程序建立一个连接 并在全双工方向上发送数据 然 后终止连接 每一个 TCP 连接可靠地建立并完善地终止 在终止发生前 所有 数据都会被可靠地传输 TCP 通过 3 次握手建立可靠的连接 所谓 3 次握手指通信双方彼此交换 3 次信息 3 次握手是在存在数据报丢失 重复和延迟的情况下 确保通信双方 信息交换确定性的充分必要条件 使用 TCP 协议建立通信的步骤如图 4 2 所示 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 14 调用WSAStartup初始化Winsock 调用socket 创建一个会话Socket 调用bind 为Socket制定通信对象 调用Listen 设置登录连接状态 调用accept 接收连接并生成会话 Socket 调用send和recv进行会话 Closesocket 关闭Socket 调用WSAStartup初始化Winsock 调用socket 创建一个会话Socket 调用connect 和Server端连接 调用send和recv进行会话 Closesocket 关闭Socket 服务器端客户端 图 4 2 TCP 通信连接过程 在应用程序是指定时器用来做什么 从 OnTimer 的实现代码中可以看出 判断用户是否在线需要使用定时器 每隔一段时间就向客户端发送一个消息 如果客户端能够回复消息 说明客户端在线 否则认为客户端已经掉线 将服 务器端发送给客户端的这条信息称为心跳包 消息类型 PT TEST 就代表该包是 心跳包 服务器端保存有在线客户的列表 如果客户端掉线了 就在列表中将 客户端删除 void CQQServerDlg OnTimer UINT nIDEvent switch nIDEvent case 1 向客户端发送心跳包 POSITION pos m ClientSockList GetHeadPosition m ClientSockList GetNext pos break CDialog OnTimer nIDEvent 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 15 验证用户名和密码 通过 SQL 语句检查数据库中是否有相应的用户名和密 码 BOOL CQQServerDlg VerifyUser int nID char szPassword CString szSQL szSQL Format select AccountID from tb Account where AccountID d and Password s nID szPassword RecordsetPtr pRecord m DataManage m pConnect Execute bstr t szSQL 0 adCmdText if pRecord ADOEOF 判断用户是否存在 return TRUE return FALSE OnOrgMsg 函数同 OnNetEvent 函数一样 都是消息的处理函数 同样可以 处理 FD ACCEPT 事件 在 OnOrgMsg 函数中当有客户端发送请求时 服务器 端会将 org xml 文件发送到客户端 org xml 文件中存放的是组织结构信息 也 就是含有在线用户列表 每个客户端都会在登录时获得该列表 如果组织结构 和用户比较多时 文件会比较大 所以如果文件超出一定范围后 就将文件分 成多份进行发送 LRESULT CQQServerDlg OnOrgMsg WPARAM wParam LPARAM lParam WORD nEvent WSAGETSELECTEVENT lParam 获取网络事件 WORD nError WSAGETSELECTERROR lParam 获取错误代码 DWORD dwRead file ReadHuge pTmp dwMsg sizeof CPackage int nlen send sock pData dwMsg 0 closesocket sock delete pBuffer break return S OK UserIsLogined 函数主要用来判断客户端是否已经在线了 和 FindClient 函 数类似 同样需要遍历整个列表 同样如果列表中有相同的 IP 和 ID 说明客 户端存在 否则客户端不存在 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 16 BOOL CQQServerDlg UserIsLogined int nID SOCKET sock 获取套接字 IP sockaddr in Addr Addr sin family AF INET int nAddrlen sizeof sockaddr in int nRet getsockname sock sockaddr if nRet 0 m ClientSockList GetNext pos return FALSE 4 2 服务器端账户管理模块服务器端账户管理模块 4 2 1 服务器端账户管理概述服务器端账户管理概述 账户管理模块主要完成向已建好的部门中添加部门成员 账户管理 模块 如图 4 3 所示 图 4 3 账户管理 模块 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 17 4 2 2 窗口设计窗口设计 创建一个对话框 向对话框中添加树控件 按钮 编辑框 组合框等控件 设置窗体中的各种控件属性 如表 4 2 所示 表 4 2 控件属性 控件类型资源值对应类成员名称或 含义 属性设置 ButtonIDC BTADDOnBtadd添加默认 ButtonIDC BT DELETEOnBtDelete删除默认 Tree Control IDC ORGLISTm Orglist组织结 构 Has button Has line Combo Box IDC SEXm Sex性别DroplistData Edit BoxIDC ACCOUNTIDm AccoutID账户 ID number Edit BoxIDC ACNAMEm AccountName姓名默认 Edit BoxIDC ACPASSWOR D m Password密码password Edit BoxIDC DEPARTm OrgName部门ReadOnly Edit BoxIDC DEPAPTIDm OrgID部门 ID ReadOnlyNumber Edit BoxIDC HANDERSHIPm HanderShip职务默认 Edit BoxIDC USERIDm UserID用户 ID ReadOnly Edit BoxIDC CURUSERm User账户姓 名 ReadOnly 4 2 3 关键代码分析关键代码分析 LoadOrgInfo 函数从数据库中读取信息 将数据添加到属性结构中 并生 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 18 成 xml 文件 将数据库中的内容生成 XML 文件 void CAccountManage LoadOrgInfo if m InitSucess 已连接数据库 m OrgList DeleteAllItems 删除所有节点 CString sql select from tb OrgInfo where ParentID 0 CString szOrgName HTREEITEM hRoot hParent m DataManage m pRecord m DataManage m pConnect Execute select from tb OrgInfo where ParentID 0 0 adCmdText hRoot m OrgList InsertItem 部门组织 0 0 添加根节点 m pXMLDoc save unsigned short bstr t szFileName m OrgList Expand hRoot TVE EXPAND m pXMLDoc Release 在程序读写 XML 文件需要借助微软提供的接口 如果使用 Windows2000 操作系统 还需要到微软的官方网站下载关于 XML 解析的动态链接库 使用 微软提供的 XML 接口步骤 打开数据可读取数据 将读取的子节点数据显示到树形结构中 并将数据 写入 XML 文件 代码如下 void CAccountManage LoadAccountInfo CString szSQL szName szOrgName szSex int nOrgID nAccountID szSQL Format select from tb Account RecordsetPtr pRecord m DataManage m pConnect Execute bstr t szSQL 0 adCmdText if hInsert NULL DWORD dwData MAKELRESULT 0 nAccountID m OrgList SetItemData hInsert dwData m pXMLDoc save unsigned short bstr t szFileName pRecord MoveNext m pXMLDoc Release FindNode 是递归调用函数 从数据库读取子节点数据并保存到 XML 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 19 文件中 while pRecord ADOEOF OrgName TCHAR bstr t pRecord GetFields GetItem OrgName Value int nID pRecord GetFields GetItem OrgID Value iVal hTemp m OrgList InsertItem OrgName 0 0 hParent FindNode hTemp nID pTmp pRecord MoveNext 查找树形结构中节点是否存在 并递归调用返回子节点 代码如下 HTREEITEM CAccountManage GetOrgItem int nOrgID HTREEITEM hCurrent HTREEITEM hRet NULL if hCurrent NULL DWORD dwData m OrgList GetItemData hCurrent int nID LOWORD dwData if nID 0 hRet GetOrgItem nOrgID hFind if hRet NULL return hRet return hRet 进行添加操作 首先获取用户的输入信息 对输入信息进行判断 然后将 合法的用户的账户数据保存到数据库 代码如下 if szAcID IsEmpty szAcName IsEmpty szSex IsEmpty szOrgName IsEmpty szOrgID IsEmpty szPassword IsEmpty szHanderShip IsEmpty MessageBox 帐户信息不能为空 提示 return if atoi szAcID 300000 catch com error 4 3 服务器端系统组织结构管理模块服务器端系统组织结构管理模块 4 3 1 服务器端系统组织结构概述服务器端系统组织结构概述 系统组织结构管理模块主要完成组织结构的建立 程序运行结果如图 4 4 所示 图 4 4 系统组织结构管理 模块 4 3 2 窗口设计窗口设计 创建一个对话框 向对话框中添加树控件 文本框控件 静态文本控件和 按钮控件 设置窗口中的各种控件属性如表 4 3 所示 表 4 3 控件属性 控件类型资源值对应类成员名称默认属性 ButtonIDC BT ADDOnBtAdd添加默认 ButtonIDC BT DELOnBtDel删除默认 Tree ControlIDC ORGLISTm OrgList组织结构Has button Has line Edie BoxIDC CURRENTNODEm CurNode当前节点ReadOnly Edie BoxIDC ORGNAMEm OrgName组织名称默认 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 21 4 3 3 关键代码关键代码 LoadOrgInfo 从数据库的 tb OrgInfo 表中读取组织结构信息 将组织机构 信息添加到树形结构中 通过 FindNode 函数查询出子节点数据 代码如下 if m InitSucess 数据库已连接 m OrgList DeleteAllItems 删除所有节点 CString sql select from tb OrgInfo where ParentID 0 CString OrgName FindNode hParent nID m DataManage m pRecord MoveNext m OrgList Expand hRoot TVE EXPAND FindNode 函数查询指定的 ID 节点的子节点数据 函数使用递归算法获 取指定节点的所有子节点 代码如下 void COrgManage FindNode HTREEITEM hParent int ParentID ConnectionPtr pCon 定义连接对象 RecordsetPtr pRecord 定义记录集对象 dwData MAKELPARAM nID ParentID m OrgList SetItemData hTemp dwData FindNode hTemp nID pRecord MoveNext 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 22 5 客户端客户端关键技术关键技术 5 1 客户端概述客户端概述 用户使用客户端登录服务器 然后可以和其他登录的用户进行通信 客户 端主窗体模块是用户有登陆权限登录服务器后的界面 在主窗体界面中 主要 有一个树形列表 树形列表中显示了所有的组织结构及结构下的成员 并且在 主窗体上可以调用系统设置和修改密码等其他模块 客户端主界面如图 6 1 所 示 5 2 客户端的关键客户端的关键技术技术 ThreadProc 是向服务器端发送连接请求的线程 CS CONNECTING 然后设 置超时时间 如果超时需要重新连接 连接时将用户名和密码都会发送到服务 器端 发送请求时消息包的类型设置为 PT LOGINREQUEST 服务器端会根据 这个类型进行相应的处理 在 LoginSrv 函数中调用 InitSocket 初始化网络套接字 然后启动 ThreadProc 线程向服务器发送登录请求 OnTimer 是定时器 其可以判断 CS CONNECT CS UNCONNECT CS CONNECTING 这 3 种状态 通过计 数标量 m mCount 判断是否连接中断 根据连接状态改变系统托盘图标的样式 初始化 m ClientSock 和 m UdpSock 套接字 将 IP 地址都绑定为本机 IP 地 址 然后随机选用端口 随机选用端口使用 goto 语句形成了一个循环 直到能 正确获得端口后循环停止 并且将套接字都设置为异步通信 在 OnNetEvent 中主要处理分包 以及对消息类型为 PT TEST PT USERINFO PT DISCOUNT PT LOGINACCEPT PT LOGI NDENY PT LINEACCEPT PT UPDATEPASSSUCCESS PT PT UPDATEP ASSFAILD 数据包进行处理 主要消息类型如图 5 1 所示 如果接收到 PT TEST 的数据包 需要向服务器回复心跳测试 如果是 PT USERINFO 的消 息包 需要播放声音提示并在主窗体的树形列表改变新登录用户的图标 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 23 PT TEST心跳测试 PT USERINFO新用户登录 PT DISCOUNT客户端断开连接 PT DISCOUNT客户端断开连接 PT LOGINDENY用户名或密码不正确 PT LOGINED用户在其他地点登录 PT LOGINACCEPT用户名和密码验证通过 PT LINEACCEPT服务器发送在线用户信息 分 析 消 息 的 类 型 图 5 1 消息类型 在 OnOrgMsg 中主要接收组织结构信息 如果组织机构信息比较大 一次 只能接收固定大小的内容 所以设计了分包处理机制 当数据接收完整后 通 过 HandleOrgData 函数进行处理 OnOrgMsg 处理分包的流程如图 5 2 所示 是否是完 整的数据 结构 继续接收数 据 继续接收数 据合成数据 结构 继续接收数 据合成数据 包 处理接收到 的数据 是否是完 整的数据 结构 是否是完 整的数据 包 否 否 否 是 是 是 图 5 2 处理分包流程 如果是第一次处理读取的数据 可以分为包结构是否完整两种情况 将实 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 24 现对读取的数据进行分析和处理 读取部分数据包结构后 需要继续判断数据包结构是否完整 其中 OnOrgMsg 函数中关于数据包结构是否完整的处理过程 获取完整的数据结构后 就需要判断数据包是否已经接收完毕 OnOrgMsg 函数中关于数据包是否完整的处理过程 RecTaskProc 是接收消息并处理的线程 处理流程如图 5 3 所示 判断数据 包顺序 等待数据 判 断 数 据 类 型 PT FILE PT STREAM显示数据 处理分包数据 是否有 数据 数据小 有分包 是 否 图5 3 接收消息并处理的处理流程 判断是否为第一个接收的数据包 如果是第一个接收的数据包 需要播放 声音提示 并找到对话框进行交互 如果不是第一个接收的数据包 那么就进 行分包处理 OnUdpMsg 用来接收 UDP 消息并处理 函数中使用 recvfrom 接 收消息 如果接收到 PT REQUESTUDPPORT 就创建新套接字 然后将端口信 息发送过去 如果有 PT TEXT 类型的数据 就直接进行显示 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通信系统设计与实现 25 6 系统系统测试测试 6 1 软件测试基础理论软件测试基础理论 软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计 的一批测试用例 并利用这些测试用例运行程序以及发现错误的过程 即执行 测试步骤 软件测试就是在软件投入运行前 对软件需求分析 设计规格说明和编码 实现的最终审查 它是软件质量保证的关键步骤 测试的含义 所谓测试 首先是一项活动 在这项活动中某个系统或组成的部分将在特 定的条件下运行 结果将被观察和记录 并对系统或组成部分进行评价 测试 活动有两种结果 找出缺陷和故障 或显示软件执行正确 测试是一个或多个 测试用例的集合 测试的意义 系统测试是管理信息系统的开发周期中的一个十分重要环节 尽管在系统 开发周期的各个阶段均采取了严格的技术审查 但依然难免会留下错误 如果 没有在投入运行前的系统测试阶段被发现并纠正 问题迟早会在运行中暴露出 来 到那时要纠正错误将会付出更大的代价 系统测试占用的时间 花费的人 力和成本占软件开发的很大比例 6 2 系统测试系统测试 在设计系统的过程中 难免会存在一些错误 在程序编写过程中 一些程 序语句的语法错误 在程序运行时自动提示 可以立即纠正 因此 这类错误 比较容易发现及改正 但另一类错误是在程序执行时由于不正确的操作或对某 些数据的计算公式的逻辑错误导致的错误结果 这类错误隐蔽性强 因此 对 这一类动态发生的错误的排查是耗时费力的 测试并不仅仅是为了要找出错误 通过分析错误产生的原因和错误的分布 特征 可以帮助项目管理者发现当前所采用的软件过程的缺陷 以便改进 为 了保证测试质量 所以制定了测试方案如下 宜宾职业技术学院电子信息与控制工程系 企业 QQ 通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论