第二部分:功能需求以及大体思路

一:功能需求:

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通信功能(二)的更多相关文章

  1. 简单的实现QQ通信功能(四)

    第四部分:主界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)上面显示自己信息用一个PictureBox和两个Label,用来显示自己的头像和昵称备注名. (2)下面用了 ...

  2. 简单的实现QQ通信功能(三)

    第三部分:登陆界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)仿照QQ的登陆界面,右上角放了三个Label,用来做关闭.最小化和设置,使用了它们的Click事件当做按钮 ...

  3. 简单的实现QQ通信功能(五)

    第五部分:聊天界面的设计及代码 一:效果图及界面设计 1. 效果图: 2. 界面设计: (1)左上角显示朋友的头像和“某某正在和某某聊天”. (2)中间的聊天窗口用了一个ListView,视图用详细信 ...

  4. 简单的实现QQ通信功能(一)

    第一部分:数据库的设计,数据集的建立 一:数据库的设计: 1.用户表:包含用户名.密码.昵称.性别.备注.状态.头像代号和最后登录时间. 2.朋友关系表:自增长列为主键列,用户名和好友名,还有朋友的状 ...

  5. 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能

    说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...

  6. QQ通信原理及QQ是怎么穿透内网进行通信的? (转)

    原:http://f543711700.iteye.com/blog/978044#bc2344608 QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~ ...

  7. QQ通信机制(转)

    下面有4个基本的问答: 问题一:为什么只要可以连上互联网的计算机都可以用QQ相互建立通信,而不需要固定IP?也就是这个QQ用户端是怎样找到另一个QQ用户的,而用户在每次使用时他可能用的是不同的计算机, ...

  8. QQ通信原理及QQ是怎么穿透内网进行通信的?

    http://blog.csdn.net/frank_good/article/details/51160027 ******************************************* ...

  9. QQ通信原理

    转载自http://blog.csdn.net/li_xiao_ming/article/details/8106857 下面有4个基本的问答: 问题一:为什么只要可以连上互联网的计算机都可以用QQ相 ...

随机推荐

  1. Linux下搭建BT服务器

    P2P(Peer to Peer 即对等网络)就是在这种背景下提出的一种网络技术,P2P可以简单地定义为通过直接交换信息,共享计算机资源和服务,对等计算机兼有客户机和服务器的功能.在这种网络中所有的节 ...

  2. 提取WORD中的所有InlineShape图片并保存成文件

    InlineShape表示的类型其实不只是图片,还包括OLE, ACTIVE X等. 下面是MSDN中的定义:Represents an object in the text layer of a d ...

  3. POJ 2570

    思路:floyd + 位运算.map[i][j]的二进制位前26位表示i到j路径里面字母a-z的存在情况,为1说明该字母存在,为0不存在. #include<iostream> #incl ...

  4. 【转】centos 6.4 samba 安装配置

    关掉防火墙     service iptables stop  chkconfig iptables off (永久关闭防火墙) 关闭SELinux vi /etc/sysconfig/selinu ...

  5. [HZWER]藏妹子之处

    问题描述 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同一 ...

  6. ssh,telnet远程AIX以及数据传输问题

    (1)telnet远程 输入:telnet 目标IP 输入用户名,密码 进入远程机器 (2)AIX默认安装ftp,使用ftp传输数据 ftp 目标IP地址 输入用户名,密码(远程服务器的) 或者输入f ...

  7. node系列2

    文件操作 NodeJS能够操作文件.小至文件查找,大至代码编译,几乎没有一个前端工具不操作文件.换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具,本章将介绍与之 ...

  8. vlookup使用案例

    http://www.360doc.com/content/13/1119/20/9842991_330586745.shtml

  9. HIbernate学习笔记(一) 了解hibernate并搭建环境建立第一个hello world程序

    Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装,Java程序员可以使用面向对象的编程思维来操纵数据库,它通过对象属性和数据库表字段之间的映射关系,将对象 ...

  10. UVa11404 - Palindromic Subsequence(区间DP+打印路径)

    题目大意 给定一个字符串,要求你删除尽量少的字符,使得原字符串变为最长回文串,并把回文串输出,如果答案有多种,则输出字典序最小的 题解 有两种解法,第一种是把字符串逆序,然后求两个字符串的LCS,并记 ...