Java版QQ项目详细设计之:概述

2012-03-16 10:40 wangchangshuai0010 wangchangshuai0010的博客

前两天在博客上,发了一篇博文,概述了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,维护管理数据库死锁问题和维护数据库内数据的一致性等。

本系列博文仅提供设计思路,及少量伪码,详细代码:

Java QQ项目详细设计之:登录模块

2012-03-16 10:45 wangchangshuai0010 wangchangshuai0010的博客

今天继续将java qq项目的详细设计,今天讲一下qq的登录模块,包括客户端登录模块发送请求和服务器接收请求并处理后返回结果的过程,以流程图的方式讲述一下。

AD:

今天继续将java qq项目的详细设计,今天讲一下qq的登录模块,包括客户端登录模块发送请求和服务器接收请求并处理后返回结果的过程,以流程图的方式讲述一下

客户端方面登录模块:

对在飞Q登录信息界面中输入的各项信息进行初步检验。若发现错误,输入数据全部清空,以让用户重新输入一次。若未发现错误,转入主界面。其中的错误种类有:

1.输入数据不匹配

帐号 数据库没有该帐号

密码 与对应账号的密码不匹配

2 输入数据不能为空

if (账号为空)

{

请输入账号再登陆

}

else if (账号长度小于6或对于20)

{

请输入正确的账号,账号可以位数字或Email地址。

}

else if (密码为空)

{

请输入密码后再登陆

}

else

{

通知服务器 账号为:xxx 密码为:xxx的请求登陆

}

服务器方面:

接收数据并存入loginpot中

判断接收的密码和服务器中的密码是否相同,相同则返回登录成功,并发送一系列信息(见下),不相同则返回登录失败,有相同的帐号登录的话,会向第一个客户端发送kill指令,当确认第一个客户端下线之后,第二个客户端就可以登录了

本系列博文仅提供设计思路,及少量伪码,详细代码:

Java QQ项目详细设计之:申请模块

2012-03-16 10:52 wangchangshuai0010 wangchangshuai0010的博客

今天继续讲java qq项目的详细设计,今天讲一下qq的登录模块,包括客户端登录模块发送请求和服务器接收请求并处理后返回结果的过程,以流程图的方式讲述一下。

AD:

今天继续讲java qq项目的详细设计,今天讲一下qq的登录模块,包括客户端登录模块发送请求和服务器接收请求并处理后返回结果的过程,以流程图的方式讲述一下。

申请模块(客户端):

对在qq申请信息界面中输入的各项信息进行账号申请。若发现错误,输入数据全部清空,以让用户重新输入一次。若未发现错误,转入账号申请成功界面。

伪码如下:

if(昵称为空)

{

请输入昵称

}

elseif(密码格式错误(小于6或大于20))

{

密码必须6-20个字符!

密码框清空,重新输入

}

elseif(两次密码输入不匹配)

{

两次密码输入不一致

密码框清空,重新输入

}

else

{

获取注册信息

点击新用户注册,向服务器传输注册信息

}

客户端的流程图:

申请模块(客户端):

将用户发送过来的申请信息写入临时变量对象中并存入数据库中

在数据库中建立如下信息

在main数据库的各表中插入申请的号码

在users 数据库中建立该帐号的档案,包括好友列表、添加好友验证表、历史记录表等等

服务器端流程:

本系列博文仅提供设计思路,及少量伪码,详细代码:

Java QQ项目详细设计之:安全模块

2012-03-20 13:20 wangchangshuai0010 wangchangshuai0010的博客

今天继续讲java qq项目的详细设计,今天讲一下qq的安全模块,包括客户端安全模块和服务器接收请求并处理后返回结果以及两者协作的过程,以流程图的方式讲述一下。

AD:

今天继续讲java qq项目的详细设计,今天讲一下qq的安全模块,包括客户端安全模块和服务器接收请求并处理后返回结果以及两者协作的过程,以流程图的方式讲述一下

客户端的安全模块流程及伪码如下:

对在飞Q安全界面中,分为“安全概述”,“常见欺诈”,“修改密码”,“修改密保”;

<1> 安全概述

安全概述 概述了你当前飞Q的安全状况

if(设置密保并且密码等级为良好以上)

{

安全状况良好请继续保持良好的习惯

可立即完成设置密码

}

elseif(设置密保并且密码等级为中等以下)

{

安全状况存在隐患请定期修改密码

立即完成设置密码

}

else

{

安全状况危险请立刻设置密保问题

立即完成设置密保

}

<2> 常见欺诈

常见的集中欺诈方式:钓鱼网址,视频欺诈,中奖欺诈,冒充好友欺诈;

<3> 修改密码

修改密码之前请确保设置密保;

如果没有设置密保问题,请先设置密保问题,以确保该账户的安全性。如果设置了密保问题,请先输入原密保问题,核对用户身份。密保正确才可以修改,如果错误,对不起,不能修改密码。

if(三个密保问题有空)

{

对不起,密保问题回答不能为空!

没填写的须不完整

}

else

{

向服务器获取对应密保问题的答案

If(回答错误)

{

提示:对不起,密保问题回答不能正确

全部清空,重新输入

}

else

{

修改密码

输入旧密码

if(输入的旧密码正确)

{

if(新密码为空)

{

提示:密码不能为空

}

elseif(两次密码输入不一致)

{

提示:两次密码输入不一致

}

elseif(两次密码输入一致并且不空)

{

向服务器发送该账号的新密码

}

}

else

{

提示:密码有误,请重新输入

}

}

}

<4> 修改密保

如果没有设置密保问题,设置密保问题。

如果设置了密保问题,请先输入原密保问题,核对用户身份。密保正确才可以修改,如果错误,对不起,不能修改密保。

if(没有设置密保)

{

选择密保问题回答

If(选择的密保问题重复)

{

提示:选择的密保问题重复

重新选择密保问题

}

Elseif(修改密保时验证密保问题为空)

{

提示:修改密保时验证密保问题为空

}

Else

{

服务器发送该账号的新密保问题和新密保问题对应的答案

}

}

else

{

已经设置设置密保

向服务器获取对应密保问题的答案

输入密保问题答案(用户)

If(回答错误)

{

提示:对不起,密保问题回答不能正确

全部清空,重新输入

}

else

{

修改密保

选择密保问题回答

If(选择的密保问题重复)

{

提示:选择的密保问题重复

重新选择密保问题

}

Elseif(修改密保时验证密保问题为空)

{

提示:修改密保时验证密保问题为空

}

Else

{

服务器发送该账号的新密保问题和新密保问题对应的答案

}

}

}

流程图如下:

服务器的安全模块分为以下几个子模块:

设置密保模块

判断是否设置密保模块

判断密保答案是否正确模块

修改密保模块

修改密码模块

找回密码

服务器端的流程伪码如下:

1、设置密保模块

用户发送修改好友昵称信息包,服务器解析成基本数据,在数据库中找到该用户的的信息,将密保问题和答案写入该用户的数据库中,假如已有密保问题则转到重设密保模块

2、判断是否设置密保模块

用户发送请求后,服务器解析出数据,在数据库中找到该好友,查看该好友是否设置密保,

If(设置了密保)

返回密保问题

Elseif(没有设置密保)

发送回去没有设置密保的标识

3、判断密保答案是否正确模块

用户发送给服务器密保答案信息,服务器解析出相应的数据,从数据库中查找该用户的信息,得到密保问题和答案,进行判断三个问题是否全部回答对

If(三个密保问题全回答对)

向该用户客户端发送验证成功的消息

Else(三个问题不全对或全不对)

向该用户客户端发送验证失败信息

4、修改密保模块

这里说明一下,修改密保的模块是在验证密保答案正确的前提下才能进入的,所以此模块仅仅是覆盖掉该用户的,特此声明,呵呵,声明有点晚了。。

没有复杂逻辑判断,思路如下:

用户发送给服务器新密保信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写此人的密保问题和答案,然后子线程接收。

5、修改密码模块

声明如7.4所示,不再重复

思路如下:

用户发送给服务器新密码信息,服务器解析出相应的数据,从数据库中查找该用户,在数据库中重写此人的密码,同时将新设置的密码加入内存中用户密码hashmap中,然后子线程接收。

6、找回密码

找回密码其实和重设密保有什么相识的地方,都是先验证信息密保信息是否正确,然后根据正确与否做出相应的处理

用户发送请求后,服务器解析出数据,在数据库中找到该好友,查看该好友是否设置密保,

If(设置了密保)

返回密保问题

。。。

判断接受的密保答案是否正确

If(三个问题都回答正确)

{

返回验证成功信息,通知客户端转入重设密码模块

}

Else

{

返回验证失败信息

}

Elseif(没有设置密保)

发送回去没有设置密保的标识,通知该用户由于没有设置密码,通过此方法不能找回密码。

服务器的安全模块各子模块流程图如下:

1、设置密保模块

2、判断是否设置密保模块

3、判断密保答案是否正确模块

4、修改密保模块

5、修改密码模块

6、找回密码

本系列博文仅提供设计思路,及少量伪码,详细代码:

组操作模块

由于基本的几个组操作有很多相似之处,所以将几个组操作划为一个模块,设计思路如下:

用户发送组操作 信息包,服务器解析出基本数据和命令,判断要进行的组操作是什么操作,然后进行相应的操作,具体设计思路如下:

If(组操作命令为增加组)

{

在users数据库中找到此用户的groupsList表,在此表中添加相应的组

}

Else if(组操作为删除组)

{

1、在users数据库中找到此用户的friendsList表,把相应组的 好友的组属性改为 我的好友 ,即将要删除组中的好友放到我的好友 中,而不是直接将他们删除,

2、在users数据库中找到此用户的groupsList表,在此表中删 除相应的组

}

Else if(组操作为修改组的名称)

{

1、在users数据库中找到此用户的friendsList表,把相应组的 好友的组属性改为 要修改的组名

2、在users数据库中找到此用户的groupsList表,在此表中删 找到相应的组,修改此组的名称为要修改的名称

}

下面是图示:

java qq项目_Java版QQ项目相关推荐

  1. 【源码+教程】Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发

    今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~课程详细讲解了一个桌球游戏的编写思路和流程,即使你刚学Java没多久,也可以跟随该教程视频完成属于你自己的桌球游戏!同时,还可以加深和 ...

  2. java仿qq思路_java仿QQ聊天软件OIM艰辛之路(开源项目)

    既然QQ能仿ICQ, 咱java也来个仿QQ. 在我刚学完java后,就想做点什么项目锻炼下自己的技能.凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了. 然后他想让我也 ...

  3. java英语介绍_java,英文介绍项目.doc

    java,英文介绍项目 java,英文介绍项目 篇一:Java开发常见英文 Java基础常见英语词汇(共70个) Author:ZW OO: object-oriented ,面向对象OOP: obj ...

  4. java基础小项目_java基础小项目练习之1----3天做出飞机大战

    Shoot射击游戏第一天 一.关键问题(理论): 1.简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系 2.简述Hero类构造 ...

  5. java发送qq邮箱_Java 发送QQ邮箱邮件

    如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成: props.put("mail.smtp.auth", "true" ...

  6. java区块链_JAVA区块链项目实战

    课程介绍 全国首套,基于java的区块链实战教程.目的是让更多的java编程者了解区块链,掌握区块链开发. 1.区块链理论:以node.js例子区块链原理有深刻理解: 2.区块链java实战:深刻理解 ...

  7. qq农场android版,qq农场手机版

    QQ农场华丽登场,它与PC端QQ农场数据同步,延续了PC端QQ农场大部分的功能,并在此基础上有着更多可以适应Android终端产品的特性,操作更便捷.体验更流畅.游戏趣味性的模拟了作物的成长过程,所以 ...

  8. 手机qq2.0 for android,QQ农场手机版|QQ农场for Android 2.02 官方安装版_手机游戏 www.qqtn.com...

    QQ农场2.0 for Android延续了PC端QQ农场大部分的功能, 并在此基础上有着更多可以适应Android终端产品的特性, 操作更便捷.体验更流畅.PC端的农场玩倦了?觉得鼠标操作徒然无味? ...

  9. android qq校验,安卓版QQ更新已可注销:需手机验证完成 不可恢复

    供图/视觉中国 安卓版已结清资产QQ号可注销 本报讯(记者  温婧)昨天,安卓版QQ更新7.9.9版本,正式推出注销功能. 北青报记者了解到,目前只有手机端QQ7.9.9及以上版本提供注销功能.用户可 ...

最新文章

  1. 使用pytorch将数据集分成一份一份的
  2. MNN编译android
  3. core sync是什么软件_什么是Quick Sync Video
  4. vue中computed和methods区别
  5. PYTHON-迭代器,xxx生成式
  6. 前端学习(2027)vue之电商管理系统电商系统之实现省--市联动
  7. 前端基础3-1——JavaScript
  8. 一日之计在于晨,早起挑战万元大奖!
  9. 批量统计多个PPTX文件中幻灯片总数量
  10. python教程视频哪个好-Python入门视频哪个好?
  11. c定义一个整型数组_滨州学院C语言作业讲解有序数组插入
  12. Microsoft SQL Server 2008 All-in-One Desk Reference For Dummies 读书笔记之六
  13. 文字处理技术:布局的核心是行布局,难点是换行算法
  14. 苹果iCloud大调整:干掉1TB版本,2TB降价
  15. Directional Light,Ambient,Specular,光照感性认识...
  16. 计算KL散度与JS散度的MATLAB程序
  17. TransCAD实用技术梗概
  18. 正则表达式 正则表达式语法
  19. 拥有微软Windows CE的实时系统
  20. jpush android 离线推送,JPush极光推送3分钟搞定Android Push

热门文章

  1. Python老司机手把手带你写爬虫,整站下载妹子图,一次爽个够!
  2. UESTC 758-P酱的冒险旅途【BFS】
  3. 前端学习——JavaScript抽屉,手风琴,购物车特效案例
  4. Android项目刮刮奖详解(二)
  5. 叶酸修饰碳量子点C-dots-FA|石墨烯掺杂硫化铅PbS量子点|石墨烯-PbS胶体量子点
  6. 29.CSRF及SSRF漏洞案例讲解
  7. linux系统grep命令匹配关键字前后几行内容
  8. js缓存接口数据并设置有效时间
  9. 铨顺宏RFID:错综复杂的地下管道用RFID标签能完成管理吗?
  10. 学习3D视觉,圈子很重要!