




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MyQQ聊天工具一、需求描述某公司出于网络安全考虑,不允许使用QQ、MSN等网络聊天工具,为了提高员工间间的沟通效率,公司决定开发一套内部使用的实时聊天工具MyQQ。项目调研期间,通过与该公司领导的面谈,并做出总结和归纳之后,他们需要软件具备以下功能:1用户注册要使用本聊天工具,必须具备一个MyQQ号码,通过注册功能填写昵称、年龄、性别、密码,由系统自动生成一个MyQQ号码,号码从10000开始,依次递增。注册时,真实姓名、星座、血型作为选填资料。2用户登录要使用本系统必须先登录。登录的时候需要输入正确的MyQQ号码和密码。3个人信息编辑用户登录后,可以修改自己的个人信息。个人信息分为两部分:个人资料和安全设置。1)个人资料个人资料包括用户号码(不可修改)、用户昵称、性别、真实姓名、年龄、星座、血型。其中星座、血型需要提供列表进行选择。2)安全设置安全设置是身份验证条件设置。身份验证条件包括3个:允许任何人加我为好友,需要身份验证才能加我为好友,不允许任何人加我为好友。用户注册后默认的是允许任何人加我为好友。4查找/添加好友1)查找好友查找分为通过QQ号码查找和昵称查找。2)添加好友在查找的结果中选择一个用户,可以添加他为自己的好友。要求不能添加自己为好友,已经是好友的不能重复添加。5聊天双击好友的qq号码,弹出聊天窗口,即可进行聊天。6其他要求1)建议使用的技术本软件使用WinForms+ADO.NET技术来实现。2)数据库使用 SQL Server 2005 数据库。二、开发环境开发工具:Visual Studio 2008、SQL Server 2005。三、需求分析1使用 SQL Server 设计数据库表(1)Users:用户表。(2)Friends:好友表。(3)Star:星座表。(4)BloodType:血型表。(5)FriendshipPolicy:好友策略表。(6)Messages:消息表。(7)MessageType:消息类型表。2主要功能分析1)注册与登录(1)添加新用户,生成MyQQ号码。(2)验证用户的合法性,实现登录。2)好友管理(1)查找并添加好友。(2)显示好友列表。(3)删除好友。3)个人设置(1)修改个人基本资料。(2)修改安全设置,包括身份验证等。3主要界面分析(1)注册界面。(2)登录界面。(3)登录后的主界面。(4)查找/添加好友界面。(5)聊天界面。(6)个人资料设置界面。4辅助类分析(1)DBHelperSQL类:包括数据库连接字符串、数据库连接对象两个静态字段。(2)DbHelpClass 类:包括当前登录用户MyQQ号码一个静态公有字段。四、设计表结构 (1)表5-4各窗体文件的命名及说明窗体名称说明Login.cs登录窗体application.cs注册窗体MyQQ.cs登录后的主窗体search.cs查找/添加好友窗体Chat.cs聊天窗体information.cs个人信息窗体delete.cs查找/删除原有的好友窗体搭建好项目框架的解决方案如图5.4所示。图5.4搭建好框架的解决方案(2)用户表Users用来存放用户的基本信息、安全设置信息。各字段及说明见表5-6。表5-6Users表设计列名数据类型允许空说明IdInt否主键,自增长,标识种子为10000,表示用户的MyQQ号码LoginPwdvarchar(50)否用户的登录密码UserStatevarchar(50)否用户状态:在线、离线、隐身等,作为扩展功能时使用FriendshipPolicyIdint否外键,对应FriendshipPolicy表中的Id,表示好友策略,当别人添加自己为好友时,是否允许,是否需要验证等NickNamevarchar(50)否用户昵称FaceIdint是用户头像的索引Sexvarchar(50)否性别,有两个值:男、女Ageint否年龄Namevarchar(50)是真实姓名StarIdint是外键,对应Star表中的Id,表示星座BloodTypeIdint是外键,对应BloodType表中的Id,表示血型(3)好友表Friends用来存放用户之间的好友关系,一对好友关系存为一条记录。各字段及说明见表5-7。表5-7Friends 表设计列名数据类型允许空说明Idint否主键,自增HostIdint否好友关系中,主人的号码FriendIdint否好友关系中,好友的号码(4)好友权限表FriendshipPolicy用来存放几种好友权限,在本项目中只作为存放基础数据用。各字段及说明见表5-8。表5-8FriendshipPolicy表设计列名数据类型允许空说明Idint否主键,自增FriendshipPolicyvarchar(50)否好友权限的描述FriendshipPolicy表中的数据如图5.5所示。图5.5FriendshipPolicy表的数据(5)星座表Star用于存放12个星座的名称和编号,是基础数据表。各字段及说明见表5-9。表5-9Star表设计列名数据类型允许空说明Idint否主键,自增Starvarchar(50)否星座名称(6)血型表BloodType用于存放4种血型的名称和编号,是基础数据表。各字段及说明见表5-10。表5-10BloodType表设计列名数据类型允许空说明IdInt否主键,自增BloodTypevarchar(50)否血型名称(7)消息表Messages用于存放聊天消息、添加好友请求消息。各字段及说明见表5-11。表5-11Messages表设计列名数据类型允许空说明Idint否主键,自增FromUserIdint否发消息的用户号码ToUserIdint否收消息的用户号码Messagevarchar(50)是消息内容MessageTypeIdint否外键,对应MessageType表中的Id表示消息类型MessageStateint否消息状态MessageTimedatatime否消息发送的时间,由数据库自动生成(8)消息类型表MessageType用于存放消息的类型描述和编号,在本项目中只作为存放基础数据用。各字段及说明见表5-12。表5-12MessageType表设计列名数据类型允许空说明IdInt否主键,自增MessageTypevarchar(50)否消息类型MessageType表的数据如图5.6所示。图5.6MessageType表的数据五、界面的实现及代码1、设计注册窗体界面,实现用户注册功能,如图5.7所示。图5.7注册窗体界面效果(1)使用Command 对象的 ExecuteNonQuery() 方法向 Users 数据表中插入一条记录。(2)将新插入的记录在 Users 表中自动生成的 Id值取出,作为用户的 MyQQ号码。获取自动生成的Id值的关键代码如下:/ 此处省略执行插入前的代码cmd.CommandText = insert into users (NickName,Age,Sex,LoginPwd,Name,StarId,BloodTypeId) values ( + nicheng + , + age + , + sex + , + password + + textBox5.Text + , + comboBox1.SelectedValue + , + comboBox2.SelectedValue+ ); / 执行查询语句 int number = int.Parse(dr1Id.ToString(); / 向Users 表中插入一个用户 if (number != 0) MessageBox.Show(恭喜您注册成功!您的MyQQ号码为 + number + 请牢记您的号码和密码!, 系统消息, MessageBoxButtons.OK, MessageBoxIcon.Asterisk); / 省略关闭数据库的代码(3)昵称、年龄、性别、密码都为不能为空。存取信息代码如下: if (textBox1.Text = ) MessageBox.Show(请输入您的昵称, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox1.Focus(); else if (textBox3.Text = ) MessageBox.Show(请输入您的登录密码, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox2.Focus(); else if (textBox3.Text != textBox4.Text) MessageBox.Show(两次密码输入不一致,请重新输入!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox3.Focus(); else bool Age = IsNumber(age.ToString(); if (Age = false) MessageBox.Show(年龄必须为数字!, 系统提示, MessageBoxButtons.OK, MessageBoxIcon.Warning); textBox2.Clear(); textBox2.Focus(); (4)输入的年龄必须是数字。参考代码如下:/判断年龄是否是数字的方法 private bool IsNumber(string str) bool resault = true; for (int i = 0; i str.Length; i+) if (char.IsNumber(str, i) resault = true; else resault = false; return resault; 2、设计登录后的主窗体,显示“我的好友”列表,如图5.8所示。图5.8登录后的主窗体(1)窗体的下方是工具条控件listview。(2) 使用listview在窗体上添加好友列表的代码:label1.Text = DbHelpClass.loginid;/获取登陆的人的qq号 string sql = select FriendId from Friends where HostId=+Common.UserID+; DataSet ds = DbHelperSQL.Query(sql); for (int i = 0; i ds.Tables0.Rows.Count; i+) listView1.Items.Add(ds.Tables0.Rowsi0.ToString(); 3、设计登录窗体实现用户登录功能,如图5.9所示。图5.9登录窗体(1)首先要进行输入验证,然后读取Users表,判断是否存在此用户。(2)验证成功后显示登录后的主窗体,登录后的主窗体由组员B完成。(3)“申请号码”和“忘记密码”是两个带链接的标签(LinkLabel),单击“申请号码”链接,打开注册窗体,处理它的LinkClicked事件。“忘记密码”功能暂不要求实现,学员可以作为扩展功能在课下完成。(4)登陆的账号和密码必须符合要求。代码如下:if (ds.Tables0.Rows.Count = 0) MessageBox.Show(您输入的qq号不存在,请重新输入!); textBox1.Clear(); textBox1.Focus(); else string Id = ds.Tables0.Rows00.ToString(); string LoginPwd = ds.Tables0.Rows01.ToString(); conn.Close(); if (zhanghao = & mima = ) MessageBox.Show(请输入账号和密码!); else if (Id = zhanghao) if (LoginPwd = mima) Common.UserID = Id; MyQQ ss = new MyQQ(); this.Visible = false; DbHelpClass.loginid = textBox1.Text.ToString(); ss.Show(); else MessageBox.Show(密码输入错误,请重新输入!); else MessageBox.Show(您输入的用户不存在,请确认!); 4、完成查找/添加好友窗体。负责窗体的界面设计、“查找”按钮、“加为好友”和“关闭”按钮的功能。在查找条件里面输入要查找的好友的昵称或者账号,点击“查找”按钮,界面显示出查找的好友。界面如图5.10所示。查找后的界面如图5.11所示。添加好友成功如图5.12所示图5.10 查找所有人图5.11 查找结果图5.12 添加好友成功(1)我们在查找好友窗口里同时实现了查找好友和添加好友的功能。参考代码如下: if(textBox1.Text = & textBox2.Text = ) MessageBox.Show(请输入昵称或账号!); /输入qq号查找好友 if (textBox1.Text=& textBox2.Text != ) string sql = select NickName,Id from Users where Id= + textBox2.Text + ; DataSet ds = DbHelperSQL.Query(sql); if (ds.Tables0.Rows.Count = 0) label3.Text = 没有你要找的人!; else label3.Text = ds.Tables0.Rows00.ToString(); label4.Text = ds.Tables0.Rows01.ToString(); /输入昵称查找好友 if (textBox1.Text != &textBox2.Text=) string sql = select NickName,Id from Users where NickName= + textBox1.Text + ; DataSet ds = DbHelperSQL.Query(sql); if (ds.Tables0.Rows.Count = 0) label3.Text = 没有你要找的人!; else label3.Text = ds.Tables0.Rows00.ToString(); label4.Text = ds.Tables0.Rows01.ToString(); /输入昵称和qq号查找好友 if (textBox1.Text != & textBox2.Text != ) string sql = select NickName,Id from Users where NickName= + textBox1.Text + and Id=+textBox2.Text+; DataSet ds = DbHelperSQL.Query(sql); if (ds.Tables0.Rows.Count = 0) label5.Visible = false; label6.Visible = false; label4.Visible = false; label3.Text = 没有你要找的人!; else label3.Text = ds.Tables0.Rows00.ToString(); label4.Text = ds.Tables0.Rows01.ToString(); conn.Close(); private void button1_Click(object sender, EventArgs e) string HostId = DbHelpClass.loginid; if (label3.Text = | label4.Text = ) MessageBox.Show(选择你要添加的人!); else SqlConnection conn = new SqlConnection(); conn.ConnectionString = Data Source=.SQLEXPRESS;AttachDbFilename=E:winformQQwinformQQMyQQ.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = insert into Friends (HostId,FriendId) values ( + HostId + , + label4.Text + ); SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); conn.Close(); MessageBox.Show(添加好友成功!); DbHelpClass.friendid = label4.Text; (2)添加好友功能实现的过程。如图5.13所示。 图5.13 实现过程6、设计并实现聊天窗体的功能。聊天窗口 如图5.14所示。图5.14聊天窗体(1)为了确定要显示哪个好友发来的消息,在窗体中增加一个friendId字段,代表发送消息的好友的号码。(2)操作数据库的Messages表。窗体中显示的消息要有3个判断:第一,发送者是指定的好友(friendId),接收者是当前用户(DbHelpClass.loginid);第二,判断消息类型是不是好友的聊天消息(聊天消息的MessageType为1)。/ 读取消息的SQL语句string message = textBox1.Text.ToString(); string FromUserId = DbHelpClass.loginid; SqlConnection conn = new SqlConnection(); conn.ConnectionString = Data Source=.SQLEXPRESS;AttachDbFilename=E:winformQQwinformQQMyQQ.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True; conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = insert into Messages (MessageTypeId,FromUserId,ToUserId,Message,MessageTime) values (1, + FromUserId + , + common_user + , + message + , + DateTime.Now.AddSeconds(0) + ); SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); string sql = select top 1 Message,MessageTime,FromUserId from Messages order by MessageTime desc; DataSet ds = DbHelperSQL.Query(sql); listBox1.Items.Add(ds.Tables0.Rows02.ToString()+ +ds.Tables0.Rows01.ToString();/显示发消息的人的qq号和发送时间 listBox1.Items.Add(ds.Tables0.Rows00.ToString();/显示发送的消息7、设计个人信息窗体,并将个人信息显示在窗体上。窗体 如图5.15,自动添加信息在界面,如图5.16所示。图5.15个人信息窗体图5.16个人信息窗体(1)操作数据库的Users表。(2)用户号码是不可编辑的,通过设置文本框的ReadOnly属性实现。(3)姓名、星座、血型不是必填项,可能为空。(4)个人信息修改好后存放到Users表里面。在界面显
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地铁工程宣传方案(3篇)
- 安全教育课件培训学时
- 学习任务群在高中语文课堂中的应用
- 农业无人机租赁服务平台在2025年的市场定位与品牌建设策略
- 猎人笔记课件
- 地下管廊工程方案(3篇)
- 犬咬伤的护理
- 安全教育培训馆课件
- 矿业会计面试题及答案
- 口腔考编面试题库及答案
- 变压器试验收费标准
- 竣 工 验 收 证 书(施管表2)
- 2023学年完整公开课版法兰克王国
- 整理黑龙江基准地价与标定地价早
- CPK工具表的模板
- 中国画发展史
- 客户基本信息调查表实用文档
- 19-雾在哪里ppt市公开课金奖市赛课一等奖课件
- 城镇道路工程施工与质量验收规范
- GB/T 11270.2-2002超硬磨料制品金刚石圆锯片第2部分:烧结锯片
- 金融统计分析教材课件
评论
0/150
提交评论