仿QQ聊天系统的数据库设计与实现_第1页
仿QQ聊天系统的数据库设计与实现_第2页
仿QQ聊天系统的数据库设计与实现_第3页
仿QQ聊天系统的数据库设计与实现_第4页
仿QQ聊天系统的数据库设计与实现_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、胡逸苫昆仿QQ聊天系统的数据库设计与实现第1页共39页1引言数据库课程设计是指对丁一个给定的应用环境,构造设计优化的数据库逻辑模式和物 理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足用户的 应用需求。信息管理要求是指在数据库中应该存储和管理哪些数据对象;数据操作要求是 指对数据对象要进行哪些操作,如查询、加入、删除、修改、统计等操作。数据库课程设 计的目标是为了用户和各种应用系统提供一个信息基础设施和高效率的运行环境。高效率 的运行环境包括:数据库的存取效率、数据库存储空间的利用率、数据库系统运行管理的 效率都是高的。本次课程设计的目的是把所学的数据库的知识应用到实践

2、中去。现今知识 已越来越受到人们的重视,仿QQ聊天系统是参考腾讯公司发布的腾讯QQ,主要运用数 据库知识和C#将其初步实现1。1.1课题背景现在的信息越来越发达,很多人都在使用QQ作为聊天工具,现根据腾讯公司的QQ聊天系统制造届丁自己的聊天工具,表面上看上去是仿QQ聊天系统,其实等到时机成熟 可以换成别的名字,相信在不远的将来在老师和同学们的帮助下,再借助互联网,我们一 定可以打造出届丁自己的聊天系统。当然系统存在着很多不足,需要老师的指点和帮助。1.2系统需求分析QQ聊天系统是大家广泛喜欢经常应用到CS应用程序软件2,而现在仿QQ聊天系统 开发工具,是本人对其程序的深感兴趣,不但可以了解从中

3、的业务,而且还可以加强学习, 以及对知识的回顾。同时也是尽快测试此聊天程序,以便和同学进行用自己的工具来交流 聊天,由丁好奇心促使和同学们一起来探讨此程序的开发,这样增强同学们之间的相互交 流,相互学习。该系统届丁应用程序,需要对数据的处理,比如聊天信息要既是反馈给对方,故对数据 的及时更新要求较高,保证数据的真实性.该系统在任何操作系统下都可以运行,但必须装 有SQL2000数据库。胡逸苫昆仿QQ聊天系统的数据库设计与实现第2页共39页2关键技术简介2.1 SQL Server2000SQL Server 2000是Microsoft公司2000年推出的SQL Server数据库管理系统的版

4、 本。它是一个杰出的数据库平台,可用丁大型联机事务处理、数据仓库、以及电子商务等。 特点:真正的客户机/服务器体系结构,图形化用户界面,丰富的编程接口工具。SQLServer与Windows NT完全集成,具有很好的伸缩性,支持Web技术。SQL Server提供数 据仓库功能3。2.2C#简介C#是从C和C+派生来的一种简单、现代、面向对象和类型安全的编程语言。C#是 用丁创建运行在.NET公共语言运行库上的应用程序的语言之一,它从C语言和C+语言 演化而来,是Microsoft专门使用.NET平台而创建的,并且考虑了其他语言的许多有点。由丁语法简单,使用C#开发应用程序比C+程序相对简单。

5、但是,C#也是一种强大 的语言,在C+中能完成的任务在C#中同样也能完成。C#勺代码要比C+略长些,这是 因为C#是一种类型安全的语言(与C+不同),虽然C#的代码略长但其代码更健壮,调试 也比较简单。C#是唯一为.NET Framework而设计的语言,是移植到其他操作系统上的.NET版本中 使用的主要语言,能使用.NET Framework代码库提供的每种功能。反之,如果要使用VB.NET等语言尽可能与其以前的语言类似,而且仍然遵循CLR,这些语言就不能完全支 持.NET代码库的某些功能。C#可以创建Windows应用程序,Web应用程序,Web服务这 几种常见的应用程序4。具体实现如下:

6、1:首先根据对其业务逻辑的分析极其全面整合,加之我们所熟悉的QQ聊天技术。第一应该做的是界面,界面的美化程度直接反映着用户对此软件喜欢程度,所以借助了互联 网搜索了一些好看的图片;2:对界面的设计,这里所用到的就是C#里布局控件,精心的布局,这一点众所周之C#里丰富的控件为我们提供了方便,这样做就可以尽可能的让用户用起来比较舒服;3:各个窗体画好后,接下来自然就是业务逻辑层的代码书写了,由丁学习不够精, 所以在书写代码方便并没有用到三层技术,但是本人对该系统考虑的比较全面,一些错误 和异常都可以将其打印出来书写代码比较规范,不管从类的书写,还是一些命名都非常规范;C#里提供丰富的控件库,本来就

7、可以自动生成一些代码,对业务逻辑比较明朗,对方 法和类之间的命名比较规范,书写代码自然比较快,出错率比较少;方法就是增删改查, 最后结合数据库技术完成业务逻辑。胡逸苫昆仿QQ聊天系统的数据库设计与实现第3页共39页3数据库概念结构设计3.1构思E-R图原则原则1:能独立存在的事物,例如人、物、事、活动、事项等等,在其有多个基本项 描述的特性需要关注时,就应把它作为实体。根据原则1,分析本系统中的实体主要有用户、星座、信息类型、聊天信息、好友策 略、好友和血型。原则2:两个或多个实体间的关联与结合,如主管、从届、组成、占有、作用、配合、 协同等等,当需要予以关注时,应作为联系。联系通常是某类行为

8、动作,E-R图关注的是其状态与结果而非其过程。根据原则2,对本系统问的实体之间的关联进行分析,用户与星座、血型、好友策略之 间有组成与被组成的关系;在这里解释一下所谓的好友策略,我们在聊天时,别人可能会加 我们为好友,我们可以不通过系统的提示,自动允许,这是一种策略。另外一种策略就是别 人要加我们为好友时,先通过系统信息请求我们是否同意。此外,QQ消息和消息类型之间 也有组成与被组成的关系。原则3:实体的届性是实体的本质特征。实体应有标识届性,并指定其中一个作为主 标识。联系的届性是联系的结果或状态。届性具有如下几个特点:非多值性、非复合性、 非导出性。实体的届性还应有非关联性。根据原则3,分

9、析本系统中的实体届性。QQ用户的届性包括QQ号(标识届性)、QQ密码、用户昵称、用户真实姓名、性别和年龄等 ;星座的届性包括星座的编号(标识届性) 和名称;血型的届性包括血型编号(标识届性)和名称;好友策略的届性包括策略编号(标识 届性)和策略名称;消息类型包括消息类型编号(标识届性)和消息类型名称;QQ消息的届 性包括消息记录编号(标识届性)、消息记录名称、消息接受状态和接发消息的时间原则4:所有基本项在同一E-R图中作为届性要在仅在一个地方出现5。3.2设计E-R图根据构思E-R图的原则联系本系统的需求分析,将数据库中所涉及的各个实体与它们 各自的届性以及各个实体之间的关联用E-R图的形式

10、表现出来,实体用方形表示,届性用 椭圆表示,关联关系用没有箭头的直线连接,具体如下图3.1所示:胡逸苫昆仿QQ聊天系统的数据库设计与实现第4页共39页3.3 E-R图向关系模型转换原则(1)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模 式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的 届性均转换为关系的届性,每个实体的码均是关系的候选码。如果与某一端实体对应的关 系模式合并,则需要在改关系模式的届性中加入另一个关系模式的码和联系本身的届性。(2)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并 如果转换为一个独

11、立的关系模式,则与该联系相连的各实体的码以及联系本身的届性均转 换为关系的届性,而关系的码为n端实体的码。(3)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的届 性均转换为关系_别_JQQ密码QQ号用户MM组成N组成组成组成NN好友策略图3.1 QQ系统E-R图M胡逸苫昆仿QQ聊天系统的数据库设计与实现第5页共39页的届性,各实体的码组成关系的码或关系码的一部分。(4) 3个或3个以上实体间的一个多元联系可以转换为一个关系模式。与该联系相连的 各实体的码以及联系本身的届性均转换为关系的届性,各实体的码组成关系的码或关系码 的一部分。(5)具有相同码的关系模式可合并6。

12、根据这5项实体间的联系将上述E-R图转换为关系模型QQ消息(消息记录编号、消息、消息接受状态、发消息时间)此为消息实体对应的关系模式,该关系模式已包含了联系“组成”所对应的关系模式。消息类型(消息类型编号、消息类型名称)此为消息类型实体对应的关系模式,该关系模式已包含了联系“组成”所对应的关系模式 用户(QQ号、QQ密码、昵称、真实姓名、年龄、性别)此为用户实体对应的关系模式,该关系模式已包含了联系“组成”所对应的关系模式。星座(星座编号、星座名称)此为星座实体对应的关系模式,该关系模式已包含了联系“组成”所对应的关系模式。血型(血型编号、血型名称)此为血型实体对应的关系模式,该关系模式已包含

13、了联系“组成”所对应的关系模式。好友策略(好友策略编号、好友策略名称)此为好友策略实体对应的关系模式,该关系模式已包含了联系“组成”所对应的关系模式胡逸苫昆仿QQ聊天系统的数据库设计与实现第6页共39页4数据库逻辑结构设计4.1数据库需求分析针对自己所要设计的仿QQ聊天系统的需求,设计如下所示的数据项和数据结构:用户表:QQ号码、QQ密码、加好友的方式编号、昵称、QQ头像编号、性别、年龄、实姓名、星座编号、血型编号 星座表:星座编号、星座名称 信息类型表:信息类型编号、信息类型 聊天信息表:聊天信息表记录编号、发送信息者QQ号、收到信息者QQ号、发送信息、信息类型编号、信息状态、发送时间 好友

14、策略表:加好友的方式编号、加好友的方式设置好友表:表添加记录、发送者的QQ、好友的QQ而数据的流向直接反映给数据库,并将此信息保存在数据库,从而比较正确的设计出数据库。血型表:血型编号、血型以上内容如图4.1所示:胡逸苫昆仿QQ聊天系统的数据库设计与实现第7页共39页4.2数据库初步关系框架User(用户表)(QQ号码、QC码、加好友的方式编号、昵称、QQ头像编号、性别、年龄、 真实姓名、星座编号、血型编号)Star(星座表)(星座编号、星座名称)MessageType言息类型表)(信息类型编号、信息类型)Messages(聊天信息表)(聊天信息表记录编号、发送信息者Q0、收到信息者QQ发 送

15、信息、信息类型编号、信息状态、发送时间)FriendshipPolicy(好友策略表)(加好友的方式编号、加好友的方式设置) Friends(好友表)(表添加记录、发送者的QQ好友的QQ)BloodType(血型表)(血型编号、血型)4.3数据库关系模式优化该系统的数据库设计是满足数据库设计的第三范式。在设计数据库的时候例如对本数 据库中任意一个表,例如用户表;在关系模式R中的每一个具体关系r中,如果每个届性值 都是不可再分的最小数据单位, 则称R是第一范式的关系。例如QQ号码,用户昵称,用户真实姓名,年龄(一个人可能 只有一个用户昵称,一个QQ号码,用户的编号,一个姓名,电话号码,)如果一是

16、重复存储用户的QQ号码和姓名。这样,关键字只能是用户的编号。很显然这种方法是不可取的;如果用户的QQ号码是关键字,电话号码分为单位电话和住宅电话两个届性。所以说: 用户表中的列是不可再分的 (即列的原子性) , 则可以说明该表满足第一范式!如果关系模式R(U ,F)中的所有非主届性都完全依赖丁任意一个候选关键字,则称关系R是届丁第二范式的。还拿出上面所说的用户表,例如每个用户都自己的详细信息(即,例如qq的头像编号, 血型,星座,)那么我们可以简单的举几个例子就可以很简单的看出;a.数据冗余,假设同一种血型由50个学生都一样,那么血型就重复了50次。b.更新异常,若调整了某种血型,相应的元组血

17、型值都要更新,有可能会出现血型的不c.插入异常,如果科学家研究出来一种新的血型,由丁没人选修,没有qq号作为关键 字,只能等有人选修才能申请qq和录入血型成功。d.删除异常,如果qq管理员要删除过期的qq或者是很久没有人用的qq,从当前数据库 删除选修记录。那么刚要申请qq号的人,则申请的qq号和个人的血型都无法保存。原因是:血型都要依赖丁血型的编号。胡逸苫昆仿QQ聊天系统的数据库设计与实现第8页共39页解决方法:分成两个关系模式分别在用户表血型编号,和血型表中的血型编号建立关系, 即需要时再进行自然联接,恢复了原来的关系7。所以说综合上面所叙述,此数据库满足第二范式。如果关系模式R (U ,

18、 F)中的所有非主届性对任何候选关键字都不存在传递信赖,则称关 系R是届丁第三范式的。仍然按照上面的例子来说明,即例如每个用户都自己的详细信息(即,例如qq的头像编 号,血型,星座,)如果只按照qq作为关键字,没有部分依赖的问题,肯定是2NF。但这关系肯定有大量的 冗余,有关用户届性将重复存储,插入,删除和修改时也将产生类似以上例的情况。原因:关系中存在传递依赖造成的。假如要插入星座中的白马座,显然它不届丁12星座,这样插入很显然是不会成功的,关键是用户星座的编号和星座表中的编号相互联系起来 的,也就是函数决定是通过传递依赖。解决目地:每个关系模式中不能留有传递依赖。这样就满足了第三范式!这样

19、做的目的就是:规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小,便丁插入、删除和更新原则:遵从概念单一化”一事一地”原则,即一个关系模式描述一个实体或实体间的一种 联系。规范的实质就是概念的单一化8。就是增加系统的稳定性以及系统的成本和后期的 维护。方法:将关系模式投影分解成两个或两个以上的关系模式。要求:分解后的关系模式集合应当与原关系模式 ”等价,即经过自然联接可以恢复原关系 而不丢失信息,并保持届性问合理的联系。从而在建立数据逻辑时能够更加活晰明白避免数据的冗杂, 降低了出错的可能性使得 该系统更加可靠。通过上面的数据库关系优化之后我们就可以很简单的写出逻辑关系。胡逸服仿QQ聊天

20、系统的数据库设计与实现第 1 9页共39页4.4具体逻辑模式设计表4.1用户表Users字段字段类型字段描述IdintQQ号码(主键)LoginPwdvarcharQQ密码FriendshipPolicyldint加为好友的方式编号NickNamevarchar昵称FaceIdintQQ头像的编号Sexvarchar性别Ageint年龄Namevarchar真实姓名StarIdint生座编亏BloodTypeIdint血型编号表4.2星座表Star字段字段类型字段描述Idint星座编号(主键)Starvarchar星座名称表4.3信息类型表MessageType字段字段类型字段描述Idint信

21、息类型编号(主键)MessageTypevarchar信息的类型表4.4聊天信息表Messages字段字段类型字段描述Idint聊天信息表记录编号(主 键)FromUserIdint发送信息者QQ号(夕卜键)胡逸煽仿QQ聊天系统的数据库设计与实现第11页共39页续表4.4ToUserIdint收到信息者的QQ号(外键)Messagevarchar发送的信息MessageTypeIdint信息的类型编号MessageStateint信息的状态(被接收到为1)MessageTimedatetime发送的时间表4.5好友策略表FriendshipPolicy字段字段类型字段描述Idint加为好友的方

22、式编号(主 键)FriendshipPolicyvarchar加为好友的方式的设置表4.6好友表Friends字段字段类型字段描述Idint好友表表添加的记录(主 键)HostIdint发送者的QQ(外键)FriendIdint好友的QQ(外键)表4.7血型表BloodType字段字段类型字段描述Idint血型编号(主键)BloodTypevarchar血型4.5数据库设计表在上述每张表中,第一个数据都作为自己所在表的主键,而在表与表之间也有主外键 关系存在,对用户表和星座表来说,星座表是主键表,用户表是外键表;对用户表和血型 表来说,血型表是主键表,用户表是外键表;对用户表和好友策略表来说,

23、好友策略表是胡逸服仿QQ聊天系统的数据库设计与实现第 1 2页共39页主键表,用户表是外键表;对聊天信息表和信息类型表来说,信息类型表是主键表,聊天 信息表是外键表。表4.8设计表Users表4.9设计表BloodType数据类型数据类型长度长度允许空允许空| |int45。表4.10设计表Friends表4.11设计表FriendshipPolicy列名列名数据类型数据类型长度长度允许空允许空,inC4FriendshipPoli cy varchar50表4.12设计表Messages列名列名数据类型数据类型长度长度允许空允许空Uint4FromUserldint4ToUserldint4

24、Messagev&rchar50ZRlesm君业君业Typeld int4int4datelime8表4.13设计表MessageType表4.4设计表Star胡逸服仿QQ聊天系统的数据库设计与实现第 1 3页共39页4.6关系图图4.2关系图胡逸服仿QQ聊天系统的数据库设计与实现第 1 4页共39页5程序实现5. 1界面和系统设计该界面用户可以申请号码,然后注册自己的基本信息,若注册成功就可得到一个QQ号码,并根据此号码加上自己在注册基本资料时注册的密码就可以实现用户的登录,具体 操作见下列各图5.1到图5.14所示:图5.1用户登录运行界面具体实现:在Visual Studio.N

25、ET2005的Windows应用程序里面,首先创建一个名为“MyQQ用户登录”的主窗体,然后按照需要的功能拖控件,如果用户名和密码为空:图5.2登录提示界面1MessageBoxShow(请输入登录的号码,”登录提示,MessageBoxButtonsOK,MessageBoxIconInformation);txtLoginId.Focus();如果密码有错:则由图5.3所示:胡逸服仿QQ聊天系统的数据库设计与实现第1 5页共39页图5.3登录提示界面2具体实现代码如下:MessageBoxShow(请输入密码,登录提示, MessageBoxButtonsOK,MessageBoxIcon

26、Information);如果用户名和密码都对:return false;return true;图5.4申请号码的运行界面创建“申请号码”主窗体,此窗体由三部分组成,具体操作同上,部分涉及数据库信息的代码如下:/查询星座用的sql语句仿QQ聊天系统的数据库设计与实现第 1 6 页共39页string sql = SELECT Star FROM Star;/修改查询语句,查询血型sql = SELECT BloodType FROM BloodType;/获得血型的IdbloodTypeId = GetBloodType();sql = string.Format(INSERT INTO U

27、sers (LoginPwd, NickName, Sex, Age,Name, StarId, BloodTypeId) values (0,1,2,3,4,5,6)” ,txtLoginPwd.Text.Trim(), txtNickName.Text.Trim(), sex,int.Parse(txtAge.Text.Trim(), txtName.Text.Trim(), starId, bloodTypeId); /获得星座的IdstarId = GetStarId();sql = string.Format(INSERT INTO Users (LoginPwd, NickName

28、, Sex, Age,Name, StarId) values (0,1,2,3,4, 5),txtLoginPwd.Text.Trim(), txtNickName.Text.Trim(), sex,int.Parse(txtAge.Text.Trim(), txtName.Text.Trim(),starId);图5.5登录后运行界面胡逸服仿QQ聊天系统的数据库设计与实现第1 7页共39页此界面具体功能未能实现。5. 2界面具体操作打开用户登录,申请号码注册:图5.6用户登录点击申请号码以后,注册自己的基本信息,包括昵称、年龄、性别、密码、真实姓名、星 座和血型。图5.7用户注册界面注册成

29、功后,将获得提示。如图5.8所示:胡逸服仿QQ聊天系统的数据库设计与实现第1 8页共39页图5.8注册成功提示注册成功以后,用申请的号码和自己的密码进行登录。如图5.9所示:图5.9用户登录界面如果用户名和密码有错则会:如图5.10所示:图5.10用户登录出错具体实现代码如下:MessageBoxShow(请输入密码,登录提示,MessageBoxButtonsOK,MessageBoxIconInformation);如果用户名和密码都对:return false;return true;胡逸服仿QQ聊天系统的数据库设计与实现第 1 9页共39页其效果图如图5.11所示:图5.11用户登录成

30、功后的主窗体好友列表-第三方控件运用了第三方SideBar/命名空间using Aptech.UI;/添加组sbFriends.AddGroup(我的好友);sbFriends.AddGroup(”陌生人);/添加项SbItem item = new SbItem(string)dataReaderNickName,sbFriends.Groups0.Items.Add(item);如果要添加好友的话:将通过三步来实现。a.查找如图5.12所示b.添加如图5.13所示c.反馈成功信息 如图5.14所示胡逸服仿QQ聊天系统的数据库设计与实现第2 0页共39页int friendshipPolic

31、yId = -1; /对方的好友策略图5.12查找好友图5.13好友歹0表图5.14加载好友已经存在/添加好友private void btnAdd_Click( object sender, EventArgs e)(胡逸服仿QQ聊天系统的数据库设计与实现第 2 1页共39页int friendId = GetSelectedFriendId(); /获得选中的好友的Id/是否有可添加的好友if (friendId = -1)(MessageBoxShow(请选择一个好友!,”提示”,MessageBoxButtonsOK,MessageBoxIconInformation);return;

32、elseif (friendId = UserHelper.loginId)(MessageBoxShowf不能加自己为好友!,提示,MessageBoxButtonsOK, MessageBoxIconInformation);return;elseif (HasAdded(friendId) /确认是否需要添加(是否已经是好友了)(MessageBoxShow(对方已在你的好友歹U表中!,”提示,MessageBoxButtonsOK, MessageBoxIconInformation);return;/确认对方能否被加为好友friendshipPolicyId = GetFriends

33、hipPolicyId(friendId);if (friendshipPolicyId = 3) / 3表示不允许任何人添加,在S2可以使用常量或 枚举(MessageBoxShowf对方不允许任何人加他为好友!,提示,MessageBoxButtonsOK, MessageBoxIconInformation);return;elseif (friendshipPolicyId = 2) / 2:表示需要身份验证int result = SendRequest(friendld); /发验证消息if (result = 1)胡逸服仿QQ聊天系统的数据库设计与实现第 2 2页共39页(Mes

34、sageBoxShow(对方需要身份验证才能被加为好友,已发出请求!,提示,MessageBoxButtonsOK, MessageBoxIconInformation);else(MessageBoxShow(添加失败,请稍候再试!,”提示,MessageBoxButtonsOK, MessageBoxIconWarning);elseif (friendshipPolicyId = 1)/ 1:表示允许任何人添加为好友(/执行添加操作int result = AddFriend(friendId);if (result = 1)(MessageBoxShow(添加成功,请刷新好友歹 0 表

35、!,”提示,MessageBoxButtonsOK, MessageBoxIconInformation);else (MessageBoxShow(添加失败,请稍候再试!,”提示,MessageBoxButtonsOK, MessageBoxIconWarning);结束语因个人能力有限,本课程设计的仿QQ聊天系统是一个不完善的系统,通过这次的锻 炼,让我深刻的意识到计算机科技的广泛性。同时,作为计算机专业的一名学生,把专业 课学好学精是我以后的学习目标。运用计算机知识来帮助社会解决难题也是我以后人生奋 斗的目标。因为这次是数据库的课程设计,所以重点还是体现在数据库的设计方面。同时 也因个人

36、能力有限,想做出更多的功能却实现不了,个人能力有待丁提高。胡逸服仿QQ聊天系统的数据库设计与实现第 2 3页共39页参考文献1面向对象的程序设计语言M陈志泊,王春玲.人民邮电出版社20022http:/ 任建华.活华大学出版社20075数据库系统概论M王珊,萨帅炫.高等教育出版社20066数据库系统概论M王珊,萨帅炫.高等教育出版社20067管理信息系统的发展方向及实现技术M张巨俭,甘仞初.计算机应用研究,机械工业 出版社20038中文版SQL Server 2000开发与管理应用实例M邹建人民邮电出版社2008胡逸服仿QQ聊天系统的数据库设计与实现第 2 4页共39页致谢在这次数据库的课程设

37、计中,因自己能力的问题曾遇到过不少问题,单靠我个人的努 力,彳艮难按时完成该课程设计。另外,还要感谢老师的指导和各位同学对我们的关怀、帮 助,为我们提供了良好的设计环境以及各方面的支持。另外,还要感谢个别同学对我的帮助和鼓励,是我对数据库有了更深一步的理解,锻 炼了自己。胡逸服仿QQ聊天系统的数据库设计与实现第 2 5页共39页附录:部分源代码MessageBox.Show(请输入登录的号码,登录提示, MessageBoxButtons.OK,MessageBoxIcon.Information);txtLoginId.Focus();如果密码有错:具体实现代码如下:MessageBox.S

38、how(请输入密码,登录提示, MessageBoxButtons.OK,MessageBoxIcon.Information);如果用户名和密码都对:return false;return true;创建“申请号码”主窗体,此窗体由三部分组成,具体操作同上,部分涉及数据库信息的代码如下:/查询星座用的sql语句string sql = SELECT Star FROM Star;/修改查询语句,查询血型sql = SELECT BloodType FROM BloodType;/获得血型的IdbloodTypeId = GetBloodType();sql = string.Format(I

39、NSERT INTO Users (LoginPwd, NickName, Sex, Age, Name,StarId, BloodTypeId) values (0,1,2,3,4,5,6)”,txtLoginPwd.Text.Trim(), txtNickName.Text.Trim(), sex,int.Parse(txtAge.Text.Trim(), txtName.Text.Trim(), starId, bloodTypeId);/获得星座的IdstarId = GetStarId();sql = string.Format(INSERT INTO Users (LoginPwd

40、, NickName, Sex, Age, Name,StarId) values (0,1,2,3,4, 5),胡逸服仿QQ聊天系统的数据库设计与实现第 2 6页共39页MessageBox.Show(对方不允许任何人加他为好友!,提示,txtLoginPwd.Text.Trim(), txtNickName.Text.Trim(), sex,int.Parse(txtAge.Text.Trim(), txtName.Text.Trim(),starId);/添加好友private void btnAdd_Click(object sender, EventArgs e)int friend

41、shipPolicyId = -1; /对方的好友策略int friendId = GetSelectedFriendId(); /获得选中的好友的Id/是否有可添加的好友if (friendId = -1)MessageBox.Show(请选择一个好友!,提示, MessageBoxButtons.OK,MessageBoxIcon.Information);return;else if (friendId = UserHelper.loginId)MessageBox.Show(不能加自己为好友!,提示, MessageBoxButtons.OK,MessageBoxIcon.Inform

42、ation);return;else if (HasAdded(friendId) /确认是否需要添加(是否已经是好友了)MessageBox.Show(对方已在你的好友列表中!,提示, MessageBoxButtons.OK,MessageBoxIcon.Information);return;/确认对方能否被加为好友friendshipPolicyId = GetFriendshipPolicyId(friendId);if (friendshipPolicyId = 3) / 3表示不允许任何人添加,在S2可以使用常量或枚举MessageBoxButtons.OK, MessageBo

43、xIcon.Information);return;胡逸服仿QQ聊天系统的数据库设计与实现第 2 7页共39页else if (friendshipPolicyId = 2) / 2:表示需要身份验证(int result = SendRequest(friendld); /发验证消息if (result = 1)(MessageBox.Show(对方需要身份验证才能被加为好友,已发出请求!,提示, MessageBoxButtons.OK, MessageBoxIcon.Information);else (MessageBox.Show(添加失败,请稍候再试!”,”提示, MessageB

44、oxButtons.OK,MessageBoxIcon.Warning);else if (friendshipPolicyId = 1) / 1:表示允许任何人添加为好友(/执行添加操作int result = AddFriend(friendId);if (result = 1)(MessageBox.Show(添加成功,请刷新好友列表!,提示,MessageBoxButtons.OK, MessageBoxIcon.Information);else(MessageBox.Show(添加失败,请稍候再试!,提示, MessageBoxButtons.OK,MessageBoxIcon.W

45、arning);胡逸服仿QQ聊天系统的数据库设计与实现第 2 8页共39页import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import .ServerSocket;import .Socket;public class MutiChatpublic static void main(String口args)MutiChat mc = ne

46、w MutiChat();mc.receive().start();mc.send().start();/*接收信息* return*/private Thread receive()return new Thread()public void run()ServerSocket server_socket = null;Socket sk = null;BufferedReader in = null;胡逸服仿QQ聊天系统的数据库设计与实现第 3 9页共39页try(server_socket = new ServerSocket(7777);sk = server_socket.accep

47、t();in = new BufferedReader(new InputStreamReader(sk .getInputStream();while (true)(String str = in.readLine();System.out.println(str); catch (Exception e)(e.printStackTrace();private Thread send()(return new Thread()(public void run()(Socket client_socket = null;胡逸服仿QQ聊天系统的数据库设计与实现第 3 1页共39页Buffere

48、dReader in = null;PrintWriter out = null;while (true)(try(client_socket = new Socket(”, 8888);in = new BufferedReader(new InputStreamReader(System.in);out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client_socket .getOutputStream(), true);while (true)(String str = in.readLin

49、e();out.println(str); catch (Exception e)(try(Thread.sleep(1000); catch (Exception ex)(ex.printStackTrace();胡逸服仿QQ聊天系统的数据库设计与实现第 3 2页共39页;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import .

50、ServerSocket;import .Socket;public class MutiChat2public static void main(String口args)MutiChat2 mc = new MutiChat2();mc.receive().start();mc.send().start();/*接收信息* return*/private Thread receive()return new Thread()(public void run()胡逸服仿QQ聊天系统的数据库设计与实现第 3 3页共39页(ServerSocket server_socket = null;Soc

51、ket sk = null;BufferedReader in = null;try(server_socket = new ServerSocket(8888);sk = server_socket.accept();in = new BufferedReader(new InputStreamReader(sk .getInputStream();while (true)(String str = in.readLine();System.out.println(str); catch (Exception e)(e.printStackTrace();private Thread sen

52、d()(return new Thread()(public void run()(胡逸服仿QQ聊天系统的数据库设计与实现第 3 4页共39页Socket client_socket = null;BufferedReader in = null;PrintWriter out = null;while (true)(try(client_socket = new Socket(”, 7777);in = new BufferedReader(new InputStreamReader(System.in);out = new PrintWriter(new Buffered

53、Writer(new OutputStreamWriter(client_socket .getOutputStream(), true);while (true)(String str = in.readLine();out.println(str); catch (Exception e)(try(Thread.sleep(1000); catch (Exception ex)(胡逸服仿QQ聊天系统的数据库设计与实现第 3 5页共39页ex.printStackTrace();;下面这个是可以带图形界面的Server :package ChatIV;import .*;import jav

54、a.io.*;import java.util.*;/广播聊天室服务端public class Server public static void main(String args)try ServerSocket ss = new ServerSocket(8186);/实现SocketList sockets = new ArrayList();/创建一个集合,保存文字消息while(true)Socket s = ss.accept();/监听8186sockets.add(s);/向集合中添加Socket的对象S,把听到的内容保存到集合中Thread t1 = new ChatThre

55、ad(s,sockets);/线程t1.start(); catch (IOException e) e.printStackTrace();胡逸服仿QQ聊天系统的数据库设计与实现第 3 6页共39页class ChatThread extends Thread(Socket s;List sockets;public ChatThread(Socket s,List sockets)(this.s=s;this.sockets=sockets;public void run()(try (BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream();/包装成字符流while(true)(String str = in.readLine();/读BufferedReaderfor(int i=0;isockets.size();i+)/利用For循环遍历集合Sockets2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论