JQQ即时通讯系统的设计与实现 毕业论文.doc_第1页
JQQ即时通讯系统的设计与实现 毕业论文.doc_第2页
JQQ即时通讯系统的设计与实现 毕业论文.doc_第3页
JQQ即时通讯系统的设计与实现 毕业论文.doc_第4页
JQQ即时通讯系统的设计与实现 毕业论文.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

jqq 即时通讯系统的设计与实现 jqq 即时通讯系统的设计与实现 摘 要运用 internet 和 java 开发技术,采用 c/s 模式,建立一个基于应用的 即时通讯系统。本系统实现了用户注册,用户登陆,分组管理,好友管理,查询用户, 用户即时通讯,查看聊天记录等功能。用户注册是通过系统来添加新的用户;用户登 录用来验证用户的信息是否合法;分组管理功能主要是对分组的管理,如添加分组、 删除分组等;好友管理功能主要是对好友的管理,如添加好友、删除好友等;查询用 户是查询所有已注册的用户以便加为好友进行通讯;用户即时通讯使成为好友的双方 可以即时在线交流;查看聊天记录保存了与好友通讯的所有记录。 关键词即时通讯系统;c/s 模式;tcp;udp jqq instant messaging system design and implementation abstract: the use of internet and java development technologies, using c / s mode, a real- time communication system based on application. the system implements user registration, user login, group administration, friends manage, query user, instant messaging, view the chat history. user registration is through the system to add new users; user login used to authenticate the users information is legitimate; group management functions mainly for the management of groups, such as adding a group, delete group, etc.; friends management functions mainly for friends management, such as adding friends, remove friends, etc.; query the user is the query to all registered users to add as friends to communicate; users to instant messaging to become friends of the two sides can exchange real-time online; view chat history with a good save friends of the communication of all records. key words: instant messaging system; c / s mode; tcp; udp jqq 即时通讯系统的设计与实现 目 录 1 绪论 1 1.1 项目背景 1 1.2 国内外研究现状 1 1.3 预期目标和经济效益 2 1.4 课题简要介绍 3 1.5 系统创新点 .3 2 需求分析 3 2.1 功能需求 3 2.1.1 用户管理.3 2.1.2 分组管理.4 2.1.3 好友管理.4 2.1.4 即时通讯.5 2.2 通讯模型的特点 5 2.2.1 适用性.5 2.2.2 扩展性.5 2.3 可行性研究 5 2.3.1 技术可行性分析.5 2.3.2 不确定性分析.6 2.3.3 分析结论.6 2.4 运行环境 6 3 概要设计 6 3.1 框架设计 6 3.2 拓扑结构 7 3.3 功能设计 9 3.2.1 用户注册模块.9 3.2.2 用户登录模块10 3.2.3 分组管理模块 10 3.2.4 好友管理模块10 3.2.5 查询用户模块11 3.2.6 即时通讯模块11 3.2.7 聊天记录模块12 3.4 设计原则及一般要求 .12 4 系统设计 .12 jqq 即时通讯系统的设计与实现 4.1 模块设计 .12 4.2 即时通讯系统关系型数据库的实现 .12 4.2.1 数据库分析13 4.2.2 数据库概念设计13 4.2.3 数据库逻辑结构设计14 5 系统实现 .15 5.1 注册模块 .15 5.2 登录模块 .17 5.3 分组管理模块 .18 5.3.1 添加分组 18 5.3.2 删除分组 20 5.4 好友管理模块 .21 5.4.1 添加好友21 5.4.2 删除好友23 5.5 查询用户模块 .24 5.6 即时通讯模块 .25 5.7 聊天记录模块 .26 6 测试报告 .28 6.1 测试基本要求 .28 6.1.1 内容检查28 6.1.2 易用性测试28 6.1.3 功能检查28 6.1.4 容错性测试28 6.2 测试用例方法举例 29 6.2.1 功能测试29 6.2.3 性能测试29 结论及尚存在的问题 .30 参考文献 .30 致谢 .31 1 绪论 即时通讯软件的出现正在逐渐改变人们的沟通与交际方式。无论近在咫尺, 还是远隔重洋,通讯也只是在键盘和鼠标之间就可以解决问题。即时通讯服务 非常适合企业内部或企业和客户之间的交流。网络聊天程序,越来越影响着我 们的网络生活。 随着全球信息化进程的不断发展,网络也在飞速发展。出于高效、快速地 处理各种事务的目的,越来越多的企业和单位在其内部使用局域网来进行工作 和交流。在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速 度,从而提高工作效率。然而,随着局域网规模的扩大,业务量的增加,在局 域网上运行的应用越来越多,如知识库、网络会议、数据库应用和数据的同步 与备份等,这些应用对局域网的信息吞吐、处理能力的要求也越来越高。这些 在原有局域网设计之初未曾考虑到的新情况的出现使得局域网不堪重负,容易 发生信息阻塞,此时,局域网不但不能提高生产效率,反而成为工作效率的瓶 颈。基于 socket 的局域网聊天室是局域网通信软件的具体实例之一,它很好地 诠释了 socket 通信的原理,并且在局域网部通信、教学、讨论等应用中都具有 一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低, 占用服务器吞吐能力低,易于编程实现等优点。 1.1 项目背景 即时聊天使亲友的沟通突破时空极限,使人与人的沟通突破上下级极限, 使陌生人的沟通突破环境极限,使自我与外界的沟通突破心理极限 作为使用频率最高的网络软件,即时聊天已经突破了作为技术工具的极限, 被认为是现代交流方式的象征,并构建起一种新的社会关系。它是迄今为止对 人类社会生活改变最为深刻的一种网络新形态,没有极限的沟通将带来没有极 限的生活。 聊天一直是网民们上网的主要活动之一,网上聊天的主要工具已经从初期 的聊天室、论坛变为以 msn、oicq(又称 qq)为代表的即时通讯软件。迄今为止, 全球约有一亿多人使用即时通讯软件在网上交流。中国网民惯用的即时聊天工 具腾讯 qq 从 1999 年 2 月诞生到现在,注册用户已超过 1.6 亿,在线用户最高 时超过 200 万人,而每天独立上线人数更是达到一千二百多万,拥有活跃用户 5500 万,几乎覆盖所有中国网民。 即时通讯工具使用频率之高,超出任何一种网络软件。电子邮件曾是最重 要的通讯交流工具,是互联网最早的“杀手级应用。到 2004 年,即时通讯软件 已取代电子邮件,成为最流行的互联网通讯工具 1.2 国内外研究现状 即时通讯软件,几乎是每一个上网用户都必备的联络工具。即时通讯软件 除了能够让您迅速地在网上找到自己的朋友和工作伙伴,还可以实时交谈和传 递信息,而且,现在不少即时通讯软件还集成了文件共享、语音聊天、网络会 议等功能。截止到目前,全球约有近 3 亿多人使用即时通讯软件进行交流,正 因为即时通讯软件拥有数以亿计的用户和迅速增长的市场,所以各个公司都盯 上了中国这个潜在的最大市场,一时间,即时通讯市场硝烟四起。除了腾讯 qq 和国外的几款著名即时通讯软件纷纷推出新版本,网易也推出了一种新的即时 通讯软件网易泡泡。朗玛公司也推出了名为 uc 的通讯工具。 即时通讯软件最早发布于 1996 年 11 月 15 日,以色列特拉维文的 mirabilis ltd.发表了一个题为e.t surf home:mirabilis ltd. provides new solutions for peer-to-peer internet communications的新闻稿,同 时发布了他们新产品 icq(i seek you)的 beta 测试版。这天标志着 internet 上的第一个成热的即时通讯系统(instant message system)的诞生。即时通 讯服务在诞生之后的几年时间得到了迅猛发展,成为新增 internet 用户的 3 个 主要应用之一(web,电子邮件和即时通讯)。 在国内,1999 年 2 月,深圳腾讯公司正式发布 oicq99 beta build 0210, 开通腾讯即时通讯服务。2000 年 5 月,腾讯 qq 同时在线用户突破 10 万;2001 年 2 月 l0 日,腾讯 qq 同时在线用户突破 100 万。2004 年 4 月份腾讯 qq 同时 在线人数最高记录已经突破了 600 万大关,现在腾讯公司正在把即时通讯系统 往移动通讯方向扩展,如今已经将即时通讯与手机短信息(short messaging service ,sms)成功结合起来。即时通讯软件涉及和影响的领域已近越来越广, 其竞争也越来越激烈。国内 qq 最大的敌手朗玛 uc 从 2001 年开始研发,2002 年的 12 月份 uc 正式发布,并且首创了很多技术:uc 是国内第一个做场景聊天 的;uc 是第一个把同学录和校友录结合的;第一个把即时通讯与休闲游戏相结 合的;第一个把发送动画与即时通讯相结合的。在一年的发展里,uc 一度达到 峰值在线 30 万人,注册用户达到 7000 万。 纵观即时通讯软件业的迅速发展,设计并开发一个即时通讯平台,对于现 阶段的学习和研究,都是极为有意义的,基于这个前提和起因,我选择了设计 一个名为 jqq 的即时通讯系统作为我的毕业设计。 1.3 预期目标和经济效益 即时通讯简称 im(instant messaging) ,它是一种面向终端使用者的网络沟 通工具服务,使用者可以通过安装了即时通信的终端机进行两人或多人之间的 实时沟通。 即时通信利用的是互联网线路,通过文字、语音、视频、文件的信息交流 与互动,有效节省了沟通双方的时间与经济成本。即时通信不再是一个单纯的 聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和 企业客户服务等为一体的综合化信息平台。 即时通讯系统一旦开发完成,只需要一些基本维护和简单扩展的费用,产 生的经济效益源源不断,相当乐观,有着很广阔的发展前景。 1.4 课题简要介绍 本课题之前:充分调查了市场主流类似通讯软件的优点与缺点;对大数操 作者的年龄、职业、文化层次等做了一系列调查;在结合行业自身的特点的同 时,也充分考虑到设计者自身的条件与现有技术成熟程度的基础上做出的一款 适合大多数人使用的即时通讯软件。 产品定位: 大多数人能够使用,操作者有无相关专业知识都可 主要功能有: 用户注册 用户登陆 分组管理 好友管理 即时通讯 查询用户 查询聊天记录 实现技术: myeclipse 7.1 sql server 2000 数据库 1.5 系统创新点 操作简单、方便,快捷、准确、数据存储安全可靠,针对自身特点去除了 不必要的冗余东西,使系统负担最小,速度最快;采用更高的安全机制,使数 据更加安全,用户可以放心的使用。 2 需求分析 2.1 功能需求 2.1.1 用户管理 即时通讯系统拥有多个账户,允许多个用户注册;一个用户可以注册多个 标识;注册所使用的帐号类型为字母数字的组合;注册新用户时必须填写符合 要求的信息;注册后只有用户名与密码验证成功才能正确登录。用户管理如图 2-1 所示。 图 2-1 用户管理用例图 2.1.2 分组管理 分组管理部分要能够实现分组的添加与删除,所添加的分组名称可以是中 文也可以是字母数字的组合,通过对分组的有效管理以便于更方便的管理好友。 分组管理如图 2-2 所示。 图 2-2 分组管理用例图 2.1.3 好友管理 用户可以查询所有用户;选择适当的可以加为好友;一个用户可以添加多 个人为好友,一个用户也可以被多个人添加为好友;用户可以删除好友;用户 只可以将好友放在一个组中。好友管理如图 2-3 所示。 图 2-3 好友管理用例图 2.1.4 即时通讯 即时通讯模块用户可以与在线的好友进行聊天,用户首先查看好友是否在 线,如果在线即可进行即时通讯,并且用户可以查看与好友的所有聊天记录。 即时通讯如图 2-4 所示。 图 2-4 即时通讯用例图 2.2 通讯模型的特点 2.2.1 适用性 作为一个一般性的模型,本通讯模型适用于无线网络和 internet 上现存的 多种系统。模型中的 jqq 可以是 internet 上的应用程序,也可以是移植到移动 电话和其他各种无线手持设备上的应用程序。即时通讯和服务可以是 internet 上 icq(i seek you!的谐音)服务,可以是 gsm(global system for mobile communications,为全球移动通讯系统)标准中的 sms,也可以是 ntt docomo(日本最大的携带电话公司,ntt 是 new technology telescope 的编写, docomo 是 do communication over the mobile network 电信沟通无界限的意思) 的 i-mode(information-mode,一种移动电话服务)服务。 2.2.2 扩展性 模型具有很强的扩展性。本模型并没有规定服务必须采用中央服务器。在 模型实现的时候,可以使用基于中央服务器的星形结构,也可以使用对等网络 结构甚至其他混合结构。例如,深圳腾讯 qq 的通讯服务系统使用的是基于中央 服务器的 client/server 的混合星型结构,而即时通讯服务使用的是对等网络 加客户机服务器结构。 2.3 可行性研究 2.3.1 技术可行性分析 (1)项目开发过程中遇到难以克服的技术问题,该怎么办。 这一方面,我们庆幸的是在学校我们有好多的老师在背后支持着我们,同 时学校的网络比较方面,给我们解决问题提供了方便。而且,凭借借阅图书馆 收藏图书更增加了我们解决技术问题的信心。 (2)软件的质量如何。 有些应用对实时性要求很高,如果软件运行慢如蜗牛,即便功能完备也毫 无实用价值。有些高风险的应用对软件的正确性与精确性要求极高,如果软件 出了差错而造成用户利益损失,那么软件开发在某种意义上说也就失败了。 鉴于此,我们在编码测试的时候,找专业老师作为技术支持。并且在完成 之后,实际验证可行性,同时要考虑到机器硬件设备的不同而给软件带来的不 可预知的结果,所以在机房的不同电脑上运行软件达到测试目的。 2.3.2 不确定性分析 需要格外考虑的实际情况也可以说是面临的一个现实问题就是:毕业生面 临着毕业与找工作,还有就是最后的毕业答辩与论文设计。这个过程中,学校 会有许多有关毕业生的信息要安排,事情要处理。在进行课题设计的时候,难 免会有一些格外的因素,如时间被耽误,在规定的时间中无法完成相应的任务; 有问题存在的时候,老师也恰巧也有事情,问题无法及时解决等一系列问题, 都是要考虑在内的。 再有就是,最害怕在做系统的中途遇到系统崩溃而东西又无法保存;或者 是东西全部做好之后,忘记了备份,而更为不巧的是以染上了病毒,而致使几 个月的辛苦付之东流。这些是容易忽视的也是最容易出现的情况。所以要在设 计的时候做足这方面的准备,不让那种情况发生。 2.3.3 分析结论 通过上面简要的分析,最后做出的结论是:方案可以按照时间要求、保证 质量的基础上运用 myeclipse 与 sql server 2000 数据库进行系统的开发。 2.4 运行环境 操作系统:windows2000server 中文版、windows 2003 server 或者 windows xp sp3 数据库:sql server 2000 中文个人版 开发工具:myeclipse 7.1 硬件配置:cpu 1.7ghz 以上,内存 512mb 以上 3 概要设计 3.1 框架设计 本系统总体框架如图 3-1 所示。 图 3-1 系统总体框架图 3.2 拓扑结构 系统的拓扑结构如图 3-2 所示。 s1 s3 s2 c1 c2 c3 客户端服务器星型结构 服务器服务器对等结构 模式一 s1 s3 s2 c1 c2 c3 客户端服务器星型结构 服务器服务器对等结构 客户端客户机对等结构 模式二 c s 服务器客户端 客户端客户端连接 客户端服务器连接 服务器服务器连接 现在不少即时通讯系统服务的内部拓扑中采用模式一;也有极其个别系统 在即时通讯服务上面采用模式二(例如,深圳腾讯的 qq 服务中的即时通讯服务, 发信者首先考虑直接与即时收信箱进行通讯,如果发现直接通讯超时,会转为 使用服务器中转完成通讯)。 模式一是一种非常成熟的模式,大多数 tcp/ip 应用系统,例如 smtp 服务、 dns 服务、www 服务等都是使用这种模式。模式二对于模式一是一个技术上的修 正,虽然这个修正带来了新的问题,但是其实用性是不可质疑的;jqq 正是实 用模式二作为服务模式。 jqq 的服务是由服务器构成的;jqq 中每个实体都由一个寄主服务器管理。 个体必须向服务器注册,注册后就有可以控制的发信者和即时收件箱。发信者 是独立于即时通讯服务外的实体,而即时收信箱则存在于寄主服务器中。jqq 的通讯系统中只有存在发送者和接收者两类实体。注册后的用户必须在服务器 上建立登记表,才能知道其他用户的存在,与其他用户进行交流。 1) tcp 协议 tcp 和 udp 是 tcp/ip 协议族的两个主要的传输协议, tcp 是面向连接的, udp 是面向无连接的,而实际上他们最大的区别在于为应用协议提供不同的服 务,tcp 协议为应用程序提供点到点的通信:建立可靠的连接。如果有故障发 图 3-2 系统的拓扑结构图 生,阻碍分组到达远程系统,或者服务器不接受连接,客户都会得到通知:数 据可靠的交付,故障而不能交付,发送方会得到通知;具有流控的传输;双工 的传输,单个 tcp 连接允许同时双向传送数据流模式,tcp 从发送方到接收方 发送没有报文边界的字节。 2) udp 协议 udp 为应用程序提供多对多的通信,udp 在进行通讯的应用的数量上面,具 有更大的灵活性。多个应用可以向一个接收方发送报文,一个发送方向也可以 向多个接收方发送报文。udp 还可以使用底层网络的广播和组播设施交付报文: udp 提供的是不可靠交付语义,报文可能丢失、重复或者失序,而发送方是得 不到通知的;缺乏流控制;报文模式,当有数据交付的时候,必须制定报文边 界。 3) 传输层协议的选定 由于 tcp 和 udp 的语义及其不同,如果要考虑应用协议所要求的语义,设 计者就不能不在面向连接和无连接的传输协议间作出选择。利用面向连接的 tcp 协议,可以大大简化应用协议的设计工作。由于 udp 不提供可靠的交付, 无连接传输要求应用协议提供可靠性,并在必要时,使用一种称为自适应重传 的复杂技术。为现有的应用程序增加自适应重传比较困难,它需要程序员具有 相当地专业知识。 选择 tcp 一个很大的缺点就是,建立和中止连接的三次握手(tcp 协议提 供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时, 客户端发送 syn 包(syn=j) 到服务器,并进入 syn_send 状态,等待服务器确认; 第二次握手:服务器收到 syn 包,必须确认客户的 syn(ack=j+1) ,同时自己 也发送一个 syn 包(syn=k) ,即 syn+ack 包,此时服务器进入 syn_recv 状态; 第三次握手:客户端收到服务器的 syn ack 包,向服务器发送确认 包 ack(ack=k+1),此包发送完毕,客户端和服务器进入 established 状态, 完成三次握手。客户端与服务器开始传送数据) ,使 tcp 比起 udp 开销大。在考 虑是用 udp 还是用 tcp 作为域名服务系统的运输层协议是,设计者往往陷入两 难的境地。一个理想的解决方案应该既能提供可靠的数据传输,又不需要专门 的建立和释放连接,不需要报文的反段和重组,同时还能是两端的空闲状态所 处的时间最短。tcp 什么都好,只可惜他需要建立和释放连接。 还有一个严重的问题就是 tcp 在空闲的连接上根本不发送任何分组。假设 客户与某个服务器建立了连接,并与之交换请求和响应,接着便崩溃了。因为 客户已经崩溃了,它就不会再发送任何请求了,然而,服务器到目前为止对它 收到的所有请求都进行了响应,它便不会再向客户发送更多的数据。这种情况 下,服务器拥有分配给该连接的数据结构(包括缓存空间),这些资源不能被重 新分配。服务器是设计成始终运行的。如果不断有客户崩溃,服务器就会耗尽 资源(如套接字、缓存空间、tcp 连接)从而中止运行。 3.3 功能设计 系统功能设计,如图 3-3 所示。 客户端 用 户 注 册 用 户 登 录 分 组 管 理 好 友 管 理 查 询 用 户 即 时 通 讯 聊 天 记 录 服务器 登 录 服 务 查 找 好 友 在 线 服 务 端 口 分 配 图 3-3 系统功能设计图 3.2.1 用户注册模块 用户需要正确填写自己的用户名、密码、真实姓名、性别、个性签名等信 息,如果用户名合法且未被占用,则可以注册成功。用户注册如图 3-4 所示。 图 3-4 用户注册流程图 3.2.2 用户登录模块 用户需要正确填写自己的用户名、密码,如果验证成功,则可以进入到 jqq 即时通讯系统主面板,与在线好友进行即时通讯。用户登录如图 3-5 所示。 图 3-5 用户登录流程图 3.2.3 分组管理模块 分组管理模块包括对分组的添加与删除。添加分组过程中,分组不能为空 并且不能有重复的分组。删除分组过程中,只要选定要删除的分组,即可删除 成功。分组管理如图 3-6 所示。 图 3-6 分组管理流程图 3.2.4 好友管理模块 好友管理模块包括对好友的添加与删除。添加好友过程中,好友不能为空, 不能加自己为好友,要添加的好友必须存在并且不能有重复的好友。删除好友 过程中,只要选定所属分组下的相应好友,即可删除成功。好友管理如图 3-7 所示。 图 3-7 好友管理流程图 3.2.5 查询用户模块 查询用户模块列出了除了自己的所有用户的基本信息包括是否在线,用户 可以根据需要加为好友并进行通讯,对于在线状态的好友可以进行在线交流。 查询用户如图 3-8 所示。 图 3-8 查询用户流程图 3.2.6 即时通讯模块 即时通讯模块是本系统最关键的环节与目的所在。用户可以选择分组中的 在线好友进行即时通讯,并且当交流完毕时自动保存聊天记录。即时通讯如图 3-9 所示。 图 3-9 即时通讯流程图 3.2.7 聊天记录模块 聊天记录模块主要记录了与相应好友的所有聊天内容,可以方便的浏览一 些重要信息和谈论话题等。 3.4 设计原则及一般要求 参照各模块的功能与具体的特点,设计的整个即时通讯系统应达到以下目 的: (1)稳定性。整个系统应能稳定运行,硬件配置的局部改变不会影响整体 的正常运行,其它系统的差错不会导致即时通讯系统无法正确运作。 (2)准确性。系用户按操作要求操作产生的数据与数据库产生的变化应严 格保持一致,杜绝错误、异常等情况的出现。 (3)安全性。所有数据定时备份,错误的出现由系统自动记录备份文件, 以备查验,避免用户误操作而造成不必要的损失。 (4)易使用性。即时通讯系统的界面与操作人员的交互性好,用 client/server(客户端/服务器)结构。 4 系统设计 4.1 模块设计 功能模块设计如表 4-1 所示: 表 4-1 功能模块设计表 用户注册模块 1.用户注册 用户登录模块 1.用户登录 分组管理模块 1.添加分组2.删除分组 好友管理模块 1.添加好友2.删除好友 查询用户模块 1.查询用户 即时通讯模块 1.即时通讯 功能模块 聊天记录模块 1.查看聊天记录 4.2 即时通讯系统关系型数据库的实现 microsoft sql server 2000 是一个高性能的客户端/服务器结构的关系数 据库管理系统(rdbms) 。sql server 2000 是为支持高容量的事务处理(比如 在线订购录入、存货目录、记账或制造)以及数据仓库和决策支持系统而设计 的。它运行在 microsoft windows nt4 或 microsoft windows 2000 server 上 基于使用 intel 处理器的网络。也能够为其他的 microsoft 操作系统提供很 多客户端工具和网络接口。由于 sql server 的开放结构,其他系统也能和它交 互操作。使用它可以完成事务处理、存储和分析数据以及创建新的应用程序。 其中 sql server 的 rdbms(relational database management system,关系型数据 库管理系统)负责维护数据库中数据之间的关系,确保正确的存储数据和不违反 定义数据之间的规则,而且在系统发生错误时将所有数据恢复到某个已知的、 具备一致性的检查点上。sql server 2000 就是关系数据库开发工具,数据库 能汇集各种信息以供查询、存储和检索。sql server 2000 的优点在于它能使 用数据表示图或自定义窗体收集信息。数据库在一个信息管理系统中占有非常 重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果 产生影响。合理的数据库结构设计可以提高数据存储的效率,报填数据的完整 和一致。另外,合理的数据库结构将非常有利于程序的实现。设计数据可系统 是应该首先充分了解用户各个方面的要求,包括现有的以及将来可能增加的要 求。 4.2.1 数据库分析 即时通讯系统需求包括对用户信息、分组信息、好友信息等各方面信息的 管理,这些信息都需要保存在数据库中,因此需要建立一些相应的表结构来存 储这些相应的数据。 针对这些情况,我建立了以下若干表来存储相应的信息: 表名:用户表,分组表,好友表等。 1) 用户表:包括的数据项有:用户名、密码、真实姓名、性别、个性签名、 是否在线、登录 ip、绑定端口等。 2) 分组表:包括的数据项有:分组名称、用户等。 3) 好友表:包括的数据项有:好友名称、所在分组、用户等。 4.2.2 数据库概念设计 根据前面的需求分析和概要设计规划出本系统所使用的实体对象,分别为: 用户实体、分组实体、好友实体。下面将给出几个关键实体的 e-r 图。 (1) 用户实体 用户实体包括用户名、密码、真实姓名、性别、个人签名、是否在线、登 录 ip、绑定端口等。其 e-r 图如下所示。 图 4-1 用户实体 e-r 图 (2) 分组实体 分组实体包括分组名称、用户等。其 e-r 图如下所示。 图 4-2 分组实体 e-r 图 (3) 好友实体 好友实体包括好友名称、所在分组,用户等。其 e-r 图如下所示。 图 4-3 好友实体 e-r 图 4.2.3 数据库逻辑结构设计 根据上面所做的总结,再参考系统的实际需要,表及逻辑结构如下图所示: 1) 用户表 users,如下所示。 表 4-2 用户表 字段名 数据类型 字段说明 备注 username varchar(20) 用户名 主键 password varchar(20) 密码 不允许为空 name varchar(50) 真实姓名 不允许为空 sex varchar(10) 性别 不允许为空 sign varchar(512) 个性签名 允许为空 isonline bit(1) 是否在线 不允许为空(默认 0) loginip varchar(20) 登录 ip 允许为空 bindport int(4) 绑定端口 不允许为空(默认 0) 2) 分组表 groups,如下所示。 表 4-3 分组表 字段名 数据类型 字段说明 备注 g_name varchar(50) 分组名称 主键 owner_group varchar(50) 用户 主键 3) 好友表 friends,如下所示。 表 4-4 好友表 字段名 数据类型 字段说明 备注 friend varchar(50) 好友名称 主键 group_in varchar(50) 所在分组 主键 owner_friend varchar(50) 用户 主键 5 系统实现 5.1 注册模块 如果用户名不存在,则可以使用此用户名,然后输入用户的密码、真实姓 名、性别个性签名等成功注册。注册模块如图 5-1 所示。 图 5-1 用户注册图 主要代码实现如下: public int verify() /验证用户名是否存在 string username = txtusername.gettext().trim(); useritem ui = new useritem(); ui.setusername(username); protocal proverifyuser = new protocal(protocalnumber.verifyuser2, “,ui); sendpacket sp = new sendpacket(proverifyuser); int result = (integer) sp.send().intvalue(); return result; public void actionperformed(actionevent e) /用户注册 jbutton btnsource = (jbutton) e.getsource(); if (btnsource = btnok) int res = verify(); if (res = 0) reguser = new useritem(username, password, name,sex, sign, “, false, 0); protocal proadduser = new protocal(protocalnumber.adduser,“, reguser); sendpacket sp = new sendpacket(proadduser); int result = (integer) sp.send().intvalue(); if (result !=0) joptionpane.showmessagedialog(this, “注册成功,请登陆!“,“注册用户“, joptionpane.information_message); new frmlogin(); 确认信息填写无误后,点击注册按钮就可注册成功 5.2 登录模块 本部分主要用于用户的登录,只有在注册后才可以进入系统,用户登录时 将按照用户名和密码进行验证,当输入错误时会出现相应的提示,当用户名和 密码都正确时进入程序主界面,才能进行日常管理工作。该模块的界面设计如 图 5-3 所示。 图 5-3 登录界面 如果登录身份验证成功,则进入主界面如图 5-4 所示: 图 5-4 主界面 如果用户名或密码错误则会提示,需要重新输入。 主要代码实现如下: public void actionperformed(actionevent e) jbutton btnsource = (jbutton) e.getsource(); if (btnsource = btnlogin) int bindport = commondata.getbindport(); string loginip = commondata.getlocalip(); useritem ui = new useritem(); ui.setusername(username); ui.setpassword(password); ui.setbindport(bindport); ui.setloginip(loginip); protocal proverifyuser = new protocal(protocalnumber.verifyuser,“, ui); sendpacket sp = new sendpacket(proverifyuser); int result = (integer) sp.send().intvalue(); if (result !=0) joptionpane.showmessagedialog(this,“登录成功!“, “用户登录“, joptionpane.information_message); this.dispose(); new frmmain(ui.getusername(); else joptionpane.showmessagedialog(this, “用户名或密码错误!“, “用户登录“, joptionpane.information_message); this.txtusername.settext(“); this.txtpassword.settext(“); 5.4 好友管理模块 5.4.1 添加好友 主要功能是添加已存在的用户为好友以便进行通讯,如图 5-7 所示。 图 5-7 添加好友界面 主要实现代码如下: public int verify() /验证用户是否存在 string username = jt.gettext().trim(); useritem ui = new useritem(); ui.setusername(username); protocal proverifyuser = new protocal(protocalnumber.verifyuser2, “,ui); sendpacket sp = new sendpacket(proverifyuser); int result = (integer) sp.send().intvalue(); return result; public void actionperformed(actionevent e) /添加好友 if (e.getsource() = btnok) friend = (string) jt.gettext().trim(); if (friend.equals(“) joptionpane.showmessagedialog(this, “好友名称不能为空! “, “添加好友“, joptionpane.information_message); return; if (friend.equals(commondata.curruser.getusername() joptionpane.showmessagedialog(this, “你不能加自己为好友! “, “添加好友“, joptionpane.information_message); jt.settext(“); return; int verify = verify(); if (verify = 0) joptionpane.showmessagedialog(this, “你要添加的好友不存在!“, “添加好友“, joptionpane.information_message); jt.settext(“); return; else ui = new useritem(); ui.setusername(friend); fi = new frienditem(); fi.setfriend(ui); string g_name = (string) choice.getselecteditem(); fi.setgroup_in(g_name); fi.setowner_friend(commondata.curruser.getusername(); protocal proaddfriend = new protocal(protocalnumber.addfriend, commondata.curruser.getusername(), fi); sendpacket sp = new sendpacket(proaddfriend); int result = (integer) sp.send().intvalue(); if (result = 1) joptionpane.showmessagedialog(this, “此好友已添加过!“, “添加好友“, joptionpane.information_message); jt.settext(“); return; if (result = 0) joptionpane.showmessagedialog(this, “添加好友成功!“, “添加好友“, joptionpane.information_message); this.dispose(); 5.4.2 删除好友 主要功能是删除相应分组下的对应好友 主要实现代码如下: public void actionperformed(actionevent e) /删除好友 if (e.getsource() = btnok) try group = choicegroup.getselecteditem().tostring(); friend = choicefriend.getselecteditem().tostring(); frienditem fi = new frienditem(); fi.setowner_friend(commondata.curruser.getusername(); fi.setgroup_in(group); useritem ui = new useritem(); ui.setusername(friend); fi.setfriend(ui); protocal proexit = new protocal(protocalnumber.deletefriend, commondata.curruser.getusername(), fi); sendpacket sp = new sendpacket(proexit); int result = (integer) sp.send().intvalue(); if (result != 0) joptionpane.showmessagedialog(this, “删除好友成功!“, “删除好友“, joptionpane.information_message); dispose(); catch (exception ee) joptionpane.showmessagedialog(this, “你的分组或好友为空,无法 删除!“, “删除好友“, joptionpane.information_message); 5.5 查询用户模块 主要功能是查询当前用户外的所有用户基本信息(包括是否在线),如图 5- 9 所示。 图 5-9 查询用户界面 主要实现代码为: public vector select() /查询用户 ui=new useritem(); ui.setusername(commondata.curruser.getusername(); protocal proverifyuser = new protocal(protocalnumber.selectuser, commondata.curruser.getusername(),ui); sendpacket sp = new sendpacket(proverifyuser); vector vv= (vector)sp.send(); return vv; 5.6 即时通讯模块 主要功能是在线用户之间的即时通讯,如图 5-10 所示。 图 5-10 即时通讯界面 主要实现代码为: public void actionperformed(actionevent e) /即时通讯 if (e.getsource() = jbsend) try if (jt2.gettext().equals(“) joptionpane.showmessagedialog(this, “发送内容不能为空!“, “jqq 聊天“, joptionpane.information_message); return; useritem ui = new useritem(); ui.setusername(uitarget.getusername(); protocal profinduser = new protocal(protocalnumber.finduser, “,ui); sendpacket sp = new sendpacket(profinduser); uitarget = (useritem) sp.send(); byte b = (commondata.curruser.getusername() + “:“ + jt2.gettext().trim().getbytes(); inetaddress address = inetaddress.getbyname(uitarget.getloginip(); datagrampacket data_pack = new datagrampacket(b, b.length,address, uitarget.getbindport(); datagramsocket mail_data = new datagramsocket(); mail_data.send(data_pack); jt1.append(commondata.curruser.getusername() + “说: “+ jt2.gettext().trim() + “n“); jt2.

温馨提示

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

评论

0/150

提交评论