简单的实现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相 ...
随机推荐
- PHP libxml RSHUTDOWN安全限制绕过漏洞(CVE-2012-1171)
漏洞版本: PHP PHP 5.5.x 漏洞描述: BUGTRAQ ID: 65673 CVE(CAN) ID: CVE-2012-1171 PHP是一种HTML内嵌式的语言. PHP 5.x版本内的 ...
- HelloXV1.77网络功能简介
HelloXV1.77的网络功能做了较大程度的加强,移植了业界广泛使用的lwIP协议栈,并做了很多优化工作,修正了其中的一些bug.同时,实现了一个network字符界面应用程序,可以对网络功能进行调 ...
- c语言main函数的参数argc,argv说明
main函数参数argc,argv说明 C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(i ...
- jquery的小插件(按钮抖动)——衍生QQ窗口抖动
1.抖动的按钮 效果预览:http://runjs.cn/detail/tyx8dbag <script type="text/javascript"> //shake ...
- asp.net 中Session的运用,及抛出错误“未将对象引用设置到对象的实例”
1. 页面载入后,必须要等到page_Load方法执行建立 page对象后才可以使用Session 2. 在.aspx和.cs文件中使用Session的区别 (1).aspx: Session[&qu ...
- NOIP 2015 子串
借鉴大神思路... #include<cstdio> #include<cstring> #include<cstdlib> #include<iostrea ...
- 如何通过Visual Studio发布Azure应用程序
发布 Azure 云服务 使用 Azure Tools for Visual Studio,可以直接从 Visual Studio 将云服务发布到 Azure. 在发布 Azure 云服务之前,必须已 ...
- 【Java基础】用LinkedList实现一个简单栈的功能
栈的基本功能 栈的最基本功能是保障后进先出,然后在此基础上可以对在栈中的对象进行弹入弹出,此外,在弹出时,如果栈为空,则会报错,所以还需要提供获取当前栈大小的方法. 构造存储对象Student /** ...
- HDU 1042 N!(高精度计算阶乘)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu3681--Prison Break(TSP+二分)
好难的一道题. 题意:一个机器人要逃出监狱,每走一步消耗一点电量,初始时电量是满的.给一个n*m(n,m<=15)的字符数组代表监狱,F代表起始点,G代表补充满电量,每个G只能补充一次,Y代表开 ...