简单的实现QQ通信功能(二)
第二部分:功能需求以及大体思路
一:功能需求:
1. 角色:登录用户。
2. 登录:
(1)检查用户名和密码是否正确,正确登录成功,否则提醒用户名或密码错误。
(2)登录时可以选择登录状态,送入数据库。
(3)记录登录时间,送入数据库。
3. 登录成功之后显示所有的好友信息:
(1)分类列出所有好友的信息(带头像)。
(2)如果有未读的信息,则给提示。
(3)来新消息提醒。
4. 主界面功能:
(1)显示登录者自己的信息。
(2)可以修改自己的状态。
(3)最小化之后在右下角显示小图标,双击小图标主窗体恢复正常显示。
5. 双击某个好友,能够交互聊天:
(1)能够发送信息。
(2)能够了及时显示当前好友发来的信息。
(3)其它朋友发来的新消息,则给予提示。
(4)聊天窗口左上角显示朋友的信息(含头像)。
6. 关闭主界面(退出)时改变自己的状态。
7. 需要的界面:
(1)登录界面
(2)QQ主界面
(3)聊天窗口
二:大体思路
1. 在应用程序的主入口点造一个登录界面:Login delu = new Login();
然后将登录界面作为一个主窗口下的对话框打开delu.ShowDialog();
如果关闭主界面则所有的副窗体都将关闭,所以登录界面作为一个副对话框打开。
2. 在登录界面里要求输入用户名和密码,用户点击登录的时候用这两个数据去查询数据库,根据返回的table.Rows.Count来判断是否匹配,如果匹配登录成功,更改状态。
3. 登录成功之后将登录者的UserName赋给Uid,将DialogResult设置为OK。在应用程序的主入口点判断一下,如果OK运行主界面,将登录者的Uid传到主界面。
if(delu.ShowDialog()== DialogResult.OK)
{
Application.Run(new MainForm(delu.Uid));
}
4. 在主界面重载构造函数来接收传过来的登录者的名字,用其名字去查询朋友信息,显示在朋友列表里面,在将自己的信息显示在上面。
这里在加载朋友信息的时候用到了一个自定义控件来显示朋友信息。用时钟来查询是否有朋友发来的未读消息,将其提醒,朋友上线提醒。
5. 双击朋友头像的时候弹出聊天窗体,在聊天窗体重载构造函数将朋友的信息和自己的信息传到聊天窗体。
6. 在聊天窗口用时钟来查询对面发来的信息,显示出来,将自己发送的信息显示并且送到数据库,如果消息显示在聊天界面则将消息状态改为已读。
打开聊天窗口,再来此朋友的信息则不进行声音和头像抖动提醒,只会在聊天里面显示,关闭则恢复。
7. 关闭主界面,将登陆者的状态再次改为离线。
简单的实现QQ通信功能(二)的更多相关文章
- 简单的实现QQ通信功能(四)
第四部分:主界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)上面显示自己信息用一个PictureBox和两个Label,用来显示自己的头像和昵称备注名. (2)下面用了 ...
- 简单的实现QQ通信功能(三)
第三部分:登陆界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)仿照QQ的登陆界面,右上角放了三个Label,用来做关闭.最小化和设置,使用了它们的Click事件当做按钮 ...
- 简单的实现QQ通信功能(五)
第五部分:聊天界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)左上角显示朋友的头像和“某某正在和某某聊天”. (2)中间的聊天窗口用了一个ListView,视图用详细信 ...
- 简单的实现QQ通信功能(一)
第一部分:数据库的设计,数据集的建立 一:数据库的设计: 1.用户表:包含用户名.密码.昵称.性别.备注.状态.头像代号和最后登录时间. 2.朋友关系表:自增长列为主键列,用户名和好友名,还有朋友的状 ...
- 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能
说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...
- QQ通信原理及QQ是怎么穿透内网进行通信的? (转)
原:http://f543711700.iteye.com/blog/978044#bc2344608 QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~ ...
- QQ通信机制(转)
下面有4个基本的问答: 问题一:为什么只要可以连上互联网的计算机都可以用QQ相互建立通信,而不需要固定IP?也就是这个QQ用户端是怎样找到另一个QQ用户的,而用户在每次使用时他可能用的是不同的计算机, ...
- QQ通信原理及QQ是怎么穿透内网进行通信的?
http://blog.csdn.net/frank_good/article/details/51160027 ******************************************* ...
- QQ通信原理
转载自http://blog.csdn.net/li_xiao_ming/article/details/8106857 下面有4个基本的问答: 问题一:为什么只要可以连上互联网的计算机都可以用QQ相 ...
随机推荐
- ArrayList和LinkedList
ArrayListArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变.这样就带来 ...
- CodeForces 1
A- Theatre Square Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- [HDU 4549] M斐波那契数列
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Sub ...
- log4net面面观之Repository
转:http://itrust.cnblogs.com/archive/2006/07/17/452895.html 上回说道:Repository可以说成基于一个log4net配置节创建的log4n ...
- 转载-smarty教程(基本语法)
转自:http://hi.baidu.com/qxxgvpdtzhbckpr/item/681049160d7be60db98a1aec 1.smarty的配置 首先,使用smarty第一件 ...
- [Stephen]Android的adb无法启动
1.程序中运行收入cmd,打开dos命令窗口,在窗口中依次运行abd kill-server和 adb start-server 尝试重启adb服务 2.如果依然启动失败 dos命令窗口中键入 ...
- Linux中link,unlink,close,fclose详解
每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数. 当通过shell的touch命令或者在程序中open一个带有O_CR ...
- CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理
简记: CGAffineTransformMake(a,b,c,d,tx,ty) ad缩放bc旋转tx,ty位移,基础的2D矩阵 公式 x=ax+cy+tx y=bx+dy+ty 1.矩阵的基本 ...
- 在VirtualBox中安装了Ubuntu后,Ubuntu的屏幕分辨率非常小,操作非常不便。通过安装VirtualBox提供的“增强功能组件”,-摘自网络
在VirtualBox中安装了Ubuntu后,Ubuntu的屏幕分辨率非常小,操作非常不便.通过安装VirtualBox提供的“增强功能组件”,可以解决这一问题,并且使用非常方便. 一.环境 | En ...
- A Tour of Go Arrays
The type [n]T is an array of n values of type T. The expression var a [10]int declares a variable a ...