Java版QQ项目详细设计之:概述
前两天在博客上,发了一篇博文,概述了java qq设计中的几个重要的问题,及其解决方案,有的人求源代码,其实得到源代码也未必能看懂的详细结构,原因之一就是代码太多,二是鄙人的代码编写水平很有 限,所以为方便那些拿到代码的朋友的阅读,特此连载详细设计思路、详细设计图、及伪代码。
AD:
前两天在博客上,发了一篇博文,概述了java qq设计中的几个重要的问题,及其解决方案,有的人求源代码,其实得到源代码也未必能看懂的详细结构,原因之一就是代码太多,二是鄙人的代码编写水平很有 限,所以为方便那些拿到代码的朋友的阅读,特此连载详细设计思路、详细设计图、及伪代码。
今天第一部分写一下概述,今后几天会连续更新出来其他的。重申:代码水平有限,肯定会有设计不周及小bug的地方,请大家提提建议或意见,勿拍板砖,谢谢
(一)接口
一、外部接口
1、用户界面
在用户界面部分,根据需求分析的结果,用户需要一个用户友善界面。在界面设计上,应做到简单明了,易于操作,并且要注意到界面的布局,应突出的显示 重要以及出错信息。外观上也要做到合理化,考虑到用户多对WINDOW 风格较熟悉,应尽量向这一方向靠拢。在设计语言上,已决定使用 Java se进行编程,在界面上可使用Java2 se 所提供的可视化组件,向WINDOWS 风格靠近。 其中服务器程序界面要做到操作简单,易于管理。在设计上采用下拉式菜单方式,在出错显示上可调用Java2 se 库中的错误提示函数。
总的来说,系统的用户界面应作到可靠性、简单性、易学习和使用
2、软件接口
服务器程序可使用Java2 se 提供的对 SQL SERVER 的接口,进行对数据库的所有访问。服务器程序上可使用SQL SERVER 的对数据库的备分命令,以做到对数据的保存。在网络软件接口方面,使用一种无差错的传输协议,采用滑动窗口方式对数据进行网络传输及接收。
3、硬件接口
在输入方面,对于键盘、鼠标的输入,可用Java2 se的标准输入/输出,对输入进行处理。
在输出方面,打印机的连接及使用,也可用Java2 se的标准输入/输出对其进行处理。在网络传输部分,在网络硬件部分,为了实现高速传输,将使用高速ATM。
二、内部接口
内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。具体参数的结构将在下面数据结构设计的内容中说明。接口传递的信息将是以数据结构封装了的数据,以参数传递或返回值的形式在各模块间传输。
(二)运行设计
一、运行模块的组合
客户机程序在有输入时启动接收数据模块,通过各模块之间的调用,读入并对输入进行格式化。
在接收数据模块得到充分的数据时,将调用网络传输模块,将数据通过网络送到服务器,并等待接收服务器返回的信息。接收到返回信息后随即调用数据输出模块,对信息进行处理,产生相应的输出。
服务器程序的接收网络数据模块必须始终处于活动状态。接收到数据后,调用数据处理/查询模块对数据库进行访问,完成后调用网络发送模块,将信息返回客户机。
运行控制运行控制将严格按照各模块间函数调用关系来实现。在各事务中心模块中,需对运行控制进行正确的判断,选择正确的运行控制路径。
在网络传方面,客户机在发送数据后,将等待服务器的确认收到信号,收到后,再次等待服务器发送回答数据,然后对数据进行确认。服务器在接到数据后发送确认信号,在对数据处理、访问数据库后,将返回信息送回客户机,并等待确认。
二、出错处理设计
1、出错处理对策
所有的客户机及服务器都必须安装不间断电源以防止停电或电压不稳造成的数据丢失的损失。若真断电时,客户机上将不会有太大的影响,主要是服务器上:在断电后恢复过程可采用 SQL SERVER 的日志文件,对其进行ROLLBACK 处理,对数据进行恢复。
在网络传输方面,可考虑建立一条成本较低的后备网络,以保证当主网络断路时数据的通信。
在硬件方面要选择较可靠、稳定的服务器机种,保证系统运行时的可靠性。
2、安全保密设计
不好意思,这一方面做的最差,可以说为了进度,几乎完全没考虑,请拿到源代码的朋友完善一下,完善后可以分享一下
3、维护设计
维护方面主要为对服务器上的数据库数据进行维护。可使用 SQL SERVER 的数据库维护功能机制。例如,定期为数据库进行Backup,维护管理数据库死锁问题和维护数据库内数据的一致性等。
本系列博文仅提供设计思路,及少量伪码,详细代码:
http://down.51cto.com/data/353289
原文链接:http://wangchangshuai0010.iteye.com/blog/1450308
Java QQ项目详细设计之:登录模块
今天继续将java qq项目的详细设计,今天讲一下qq的登录模块,包括客户端登录模块发送请求和服务器接收请求并处理后返回结果的过程,以流程图的方式讲述一下。
AD:
今天继续将java qq项目的详细设计,今天讲一下qq的登录模块,包括客户端登录模块发送请求和服务器接收请求并处理后返回结果的过程,以流程图的方式讲述一下
客户端方面登录模块:
对在飞Q登录信息界面中输入的各项信息进行初步检验。若发现错误,输入数据全部清空,以让用户重新输入一次。若未发现错误,转入主界面。其中的错误种类有:
1.输入数据不匹配
帐号 数据库没有该帐号
密码 与对应账号的密码不匹配
2 输入数据不能为空
if (账号为空)
{
请输入账号再登陆
}
else if (账号长度小于6或对于20)
{
请输入正确的账号,账号可以位数字或Email地址。
}
else if (密码为空)
{
请输入密码后再登陆
}
else
{
通知服务器 账号为:xxx 密码为:xxx的请求登陆
}
服务器方面:
接收数据并存入loginpot中
判断接收的密码和服务器中的密码是否相同,相同则返回登录成功,并发送一系列信息(见下),不相同则返回登录失败,有相同的帐号登录的话,会向第一个客户端发送kill指令,当确认第一个客户端下线之后,第二个客户端就可以登录了
本系列博文仅提供设计思路,及少量伪码,详细代码:
http://down.51cto.com/data/353289
原文链接:http://wangchangshuai0010.iteye.com/blog/1451064
Java QQ项目详细设计之:申请模块
今天继续讲java qq项目的详细设计,今天讲一下qq的登录模块,包括客户端登录模块发送请求和服务器接收请求并处理后返回结果的过程,以流程图的方式讲述一下。
AD:
今天继续讲java qq项目的详细设计,今天讲一下qq的登录模块,包括客户端登录模块发送请求和服务器接收请求并处理后返回结果的过程,以流程图的方式讲述一下。
申请模块(客户端):
对在qq申请信息界面中输入的各项信息进行账号申请。若发现错误,输入数据全部清空,以让用户重新输入一次。若未发现错误,转入账号申请成功界面。
伪码如下:
- if (昵称为空)
- {
- 请输入昵称
- }
- else if (密码格式错误(小于6或大于20))
- {
- 密码必须6-20个字符!
- 密码框清空,重新输入
- }
- else if (两次密码输入不匹配)
- {
- 两次密码输入不一致
- 密码框清空,重新输入
- }
- else
- {
- 获取注册信息
- 点击新用户注册,向服务器传输注册信息
- }
客户端的流程图:
申请模块(客户端):
将用户发送过来的申请信息写入临时变量对象中并存入数据库中
在数据库中建立如下信息
在main数据库的各表中插入申请的号码
在users 数据库中建立该帐号的档案,包括好友列表、添加好友验证表、历史记录表等等
服务器端流程:
本系列博文仅提供设计思路,及少量伪码,详细代码:
http://down.51cto.com/data/353289
原文链接:http://wangchangshuai0010.iteye.com/blog/1455074
Java QQ项目详细设计之:安全模块
今天继续讲java qq项目的详细设计,今天讲一下qq的安全模块,包括客户端安全模块和服务器接收请求并处理后返回结果以及两者协作的过程,以流程图的方式讲述一下。
AD:
今天继续讲java qq项目的详细设计,今天讲一下qq的安全模块,包括客户端安全模块和服务器接收请求并处理后返回结果以及两者协作的过程,以流程图的方式讲述一下
客户端的安全模块流程及伪码如下:
- 对在飞Q安全界面中,分为“安全概述”,“常见欺诈”,“修改密码”,“修改密保”;
- <1> 安全概述
- 安全概述 概述了你当前飞Q的安全状况
- if (设置密保并且密码等级为良好以上)
- {
- 安全状况良好请继续保持良好的习惯
- 可立即完成设置密码
- }
- else if (设置密保并且密码等级为中等以下)
- {
- 安全状况存在隐患请定期修改密码
- 立即完成设置密码
- }
- else
- {
- 安全状况危险请立刻设置密保问题
- 立即完成设置密保
- }
- <2> 常见欺诈
- 常见的集中欺诈方式:钓鱼网址,视频欺诈,中奖欺诈,冒充好友欺诈;
- <3> 修改密码
- 修改密码之前请确保设置密保;
- 如果没有设置密保问题,请先设置密保问题,以确保该账户的安全性。如果设置了密保问题,请先输入原密保问题,核对用户身份。密保正确才可以修改,如果错误,对不起,不能修改密码。
- if(三个密保问题有空)
- {
- 对不起,密保问题回答不能为空!
- 没填写的须不完整
- }
- else
- {
- 向服务器获取对应密保问题的答案
- If(回答错误)
- {
- 提示:对不起,密保问题回答不能正确
- 全部清空,重新输入
- }
- else
- {
- 修改密码
- 输入旧密码
- if (输入的旧密码正确)
- {
- if (新密码为空)
- {
- 提示:密码不能为空
- }
- else if (两次密码输入不一致)
- {
- 提示:两次密码输入不一致
- }
- else if (两次密码输入一致并且不空)
- {
- 向服务器发送该账号的新密码
- }
- }
- else
- {
- 提示:密码有误,请重新输入
- }
- }
- }
- <4> 修改密保
- 如果没有设置密保问题,设置密保问题。
- 如果设置了密保问题,请先输入原密保问题,核对用户身份。密保正确才可以修改,如果错误,对不起,不能修改密保。
- if(没有设置密保)
- {
- 选择密保问题回答
- If(选择的密保问题重复)
- {
- 提示:选择的密保问题重复
- 重新选择密保问题
- }
- Else if(修改密保时验证密保问题为空)
- {
- 提示:修改密保时验证密保问题为空
- }
- Else
- {
- 服务器发送该账号的新密保问题和新密保问题对应的答案
- }
- }
- else
- {
- 已经设置设置密保
- 向服务器获取对应密保问题的答案
- 输入密保问题答案(用户)
- If(回答错误)
- {
- 提示:对不起,密保问题回答不能正确
- 全部清空,重新输入
- }
- else
- {
- 修改密保
- 选择密保问题回答
- If(选择的密保问题重复)
- {
- 提示:选择的密保问题重复
- 重新选择密保问题
- }
- Else if(修改密保时验证密保问题为空)
- {
- 提示:修改密保时验证密保问题为空
- }
- Else
- {
- 服务器发送该账号的新密保问题和新密保问题对应的答案
- }
- }
- }
流程图如下:
服务器的安全模块分为以下几个子模块:
- 设置密保模块
- 判断是否设置密保模块
- 判断密保答案是否正确模块
- 修改密保模块
- 修改密码模块
- 找回密码
服务器端的流程伪码如下:
- 1、设置密保模块
- 用户发送修改好友昵称信息包,服务器解析成基本数据,在数据库中找到该用户的的信息,将密保问题和答案写入该用户的数据库中,假如已有密保问题则转到重设密保模块
- 2、判断是否设置密保模块
- 用户发送请求后,服务器解析出数据,在数据库中找到该好友,查看该好友是否设置密保,
- If(设置了密保)
- {
- 返回密保问题
- }
- Else if(没有设置密保)
- {
- 发送回去没有设置密保的标识
- }
- 3、判断密保答案是否正确模块
- 用户发送给服务器密保答案信息,服务器解析出相应的数据,从数据库中查找该用户的信息,得到密保问题和答案,进行判断三个问题是否全部回答对
- If(三个密保问题全回答对)
- {
- 向该用户客户端发送验证成功的消息
- }
- Else(三个问题不全对或全不对)
- {
- 向该用户客户端发送验证失败信息
- }
- 4、修改密保模块
- 这里说明一下,修改密保的模块是在验证密保答案正确的前提下才能进入的,所以此模块仅仅是覆盖掉该用户的,特此声明,呵呵,声明有点晚了。。
- 没有复杂逻辑判断,思路如下:
- 用户发送给服务器新密保信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写此人的密保问题和答案,然后子线程接收。
- 5、修改密码模块
- 声明如7.4所示,不再重复
- 思路如下:
- 用户发送给服务器新密码信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写此人的密码,同时将新设置的密码加入内存中用户密码hashmap中,然后子线程接收。
- 6、找回密码
- 找回密码其实和重设密保有什么相识的地方,都是先验证信息密保信息是否正确,然后根据正确与否做出相应的处理
- 用户发送请求后,服务器解析出数据,在数据库中找到该好友,查看该好友是否设置密保,
- If(设置了密保)
- {
- 返回密保问题
- 。。。
- 判断接受的密保答案是否正确
- If(三个问题都回答正确)
- {
- 返回验证成功信息,通知客户端转入重设密码模块
- }
- Else
- {
- 返回验证失败信息
- }
- }
- Else if(没有设置密保)
- {
- 发送回去没有设置密保的标识,通知该用户由于没有设置密码,通过此方法不能找回密码。
- }
服务器的安全模块各子模块流程图如下:
1、设置密保模块
2、判断是否设置密保模块
3、判断密保答案是否正确模块
4、修改密保模块
5、修改密码模块
6、找回密码
本系列博文仅提供设计思路,及少量伪码,详细代码:
http://down.51cto.com/data/353289
原文链接:http://blog.csdn.net/wangchangshuai0010/article/details/7372373
组操作模块
由于基本的几个组操作有很多相似之处,所以将几个组操作划为一个模块,设计思路如下:
用户发送组操作 信息包,服务器解析出基本数据和命令,判断要进行的组操作是什么操作,然后进行相应的操作,具体设计思路如下:
If(组操作命令为增加组)
{
在users数据库中找到此用户的groupsList表,在此表中添加相应的组
}
Else if(组操作为删除组)
{
1、在users数据库中找到此用户的friendsList表,把相应组的 好友的组属性改为 我的好友 ,即将要删除组中的好友放到我的好友 中,而不是直接将他们删除,
2、在users数据库中找到此用户的groupsList表,在此表中删 除相应的组
}
Else if(组操作为修改组的名称)
{
1、在users数据库中找到此用户的friendsList表,把相应组的 好友的组属性改为 要修改的组名
2、在users数据库中找到此用户的groupsList表,在此表中删 找到相应的组,修改此组的名称为要修改的名称
}
下面是图示:
转载于:https://blog.51cto.com/lxuyong/1049290