《毕业设计(论文)基于C++的网络聊天软件的设计与实现.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于C++的网络聊天软件的设计与实现.doc(44页珍藏版)》请在三一办公上搜索。
1、摘 要作为除电视、报纸、广播之外的第四大媒体,互联网不仅成为人们获取新闻信息的主要来源,更成为了人们闲暇之余的一种休闲手段。随着互联网技术的发展,各种各样基于网络的应用也随之诞生,网络聊天工具便是其中的一种。本文采用Visual Studio 2008+SQL Server 2005开发环境,结合WinForms、ADO.NET等多种技术,实现了一个类似QQ的网络聊天工具,并在WINDOWS平台上加以了实现。通过C#语言进行网络编程,通过公共的数据库交换各种信息,实现了人性化的界面设计与功能设计。软件经过测试,满足现代人们即时通信的需求,达到预期的设计效果,对网络聊天工具的人性化设计具有一定的
2、现实意义,同时也为其他相关项目的设计提供了参考。关键词:网络聊天工具 C# 即时通信 数据库 人性化AbstractInternet is the fourth major media other than televisions, newspapers and broadcasting, acting not only as a major source of news information, it is also a means of recreation for people during their leisure. Along with the high-speed develop
3、ment of the Internet technology, various of applications which are based on network were born,one of them is online chat tool. This thesis develops a online chat tool which like QQ and based on the integration of various technologies such as WinForms, ADO.NET etc,and based on the adoption of Visual
4、Studio 2008+SQL Server 2005 development environment, then implement it on WINDOWS platform. It used C # language for network programming,and exchange different information through common database for the implemention of the humanized UI design and function design. After going through the tests, this
5、 online chat tool can achieve the projected design purpose of instantaneous communication needs of people in modern times, it also poses certain realistic significance to the humanization of online chat tool and provides as a reference to the design of other relevant projects.Key words: online chat
6、tool C# instantaneous communication database humanization 目 录第一章 引言11.1 系统开发背景11.2 聊天软件的开发目标1第二章 开发环境与关键技术简介22.1 C#简介22.2 .NET Framework简介42.3 WinForms窗体设计技术52.4 C/S结构52.5 ADO.NET技术62.6 SQL Server 2005数据库简介6第三章 需求分析83.1 可行性研究83.2 用户需求83.3 性能需求83.4 系统功能需求9第四章 系统设计104.1 系统功能结构104.2 系统模块划分104.3 系统整体流程图
7、11第五章 详细设计125.1 登录界面设计125.2 注册界面设计155.3 主界面设计195.4 查找/添加好友界面设计225.5 聊天界面设计285.6 个人设置界面设计335.7 头像选择界面设计345.8 系统消息界面设计35结束语38参考文献39附录一40附录二41第一章 引言1.1 系统开发背景当今社会已进入信息时代,信息是当今世界最重要的资源之一,它与物质及能源一起构成了三大能源支柱。信息高速公路是信息社会的基础设施,而互联网则是信息高速公路的重要组成部分。在互联网相当普及的今天,你们对网络的依赖越来越大,越来越离不开网络,网络聊天更是成为了人们的“家常便饭”。通过网络聊天工具
8、,人们足不出户就可进行闲聊甚至工作会谈,极大地方便了人们的日常生活与工作需求。常用的网络聊天工具主要是QQ与MSN。MSN主要用于国际,而国内的主流网络聊天工具是QQ。QQ有着非常良好的操作界面,和强大的通信功能,集娱乐、生活和工作于一身。随着技术的进步,QQ不仅可以通过宽带网在PC上使用,通过手机也可以实现与好友、同事通信。而无论是QQ还是MSN,都存在一个很大的问题广告。每次登陆后时不时会弹出一些广告窗口,绝大多数网友都对此感觉厌烦。因此在本次论文的激励下,我决定设计一个类似QQ并且无垃圾信息的网络聊天工具,此外也希望通过本次论文能更好地学习与掌握网络软件编程知识。1.2 聊天软件的开发目
9、标本论文的主要工作是设计一个类似QQ的网络即时聊天工具,主要是采用WinForms+ADO.NET技术实现。软件功能主要包括用户注册、用户登录、用户间聊天、查找/添加好友、个人设置等。客户端通过公共的数据库交换信息,消息的发送和读取都是通过操作数据库来完成的。在程序中采用定时扫描数据库的方式来查找未读消息。文章首先简介涉及的相关技术与基本知识,然后阐述本软件的功能,再具体分析软件各个模块的功能及具体实现方法。第二章 开发环境与关键技术简介2.1 C#简介C#(读作C Sharp)是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言, 是一种安全的、稳定的、简
10、单的、优雅的,由C和C+衍生出来的面向对象的编程语言。它在继承C和C+强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。C#看起来与Java有着惊人的相似;它包括了诸如单一继承,界面,与Java几乎同样的语法,和编译成中间代码再运行的过程.但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的, 而且它是微软公司.NET windows网络框架的主角。C#最引人入胜的地
11、方是它和Java的不同,而不是相似的地方:中间代码微软在用户选择何时MSIL应该编译成机器码的时候是留了很大的余地。微软公司很小心的声称MSIL不是解释性的,而是被编译成了机器码。它也明白许多,如果不是大多数的话,程序员认为Java程序要不可避免的比C编写的任何东西都要慢。而这种实现方式决定了基于MSIL的程序(指的是用C#,Visual Basic,Managed C+-C+的一个符合CLS的版本-等语言编写的程序)将在性能上超过解释性的Java代码。当然,这一点还需要得到事实证明,因为C#和其他生成MSIL的编译器还没有发布。但是Java JIT编译器的普遍存在使得Java和C#在性能上相
12、对相同。象C#是编译语言而Java是解释性的,之类的声明只是商业技巧。Java的中间代码和MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码。命名空间中的申明当你创建一个程序的时候,你在一个命名空间里创建了一个或多个类。同在这个命名空间里(在类的外面)你还有可能声明接口,枚举类型和结构体。必须使用using关键字来引用其他命名空间的内容。 基本的数据类型C#拥有比C,C+或者Java更广泛的数据类型。这些类型是bool,byte,ubyte,short,ushort,int,uint,long,ulong,float,double,和decimal。象Java一样,所有
13、这些类型都有一个固定的大小。又象C和C+一样,每个数据类型都有有符号和无符号两种类型。与Java相同的是,一个字符变量包含的是一个16位的Unicode字符。C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10进制数字。 两个基本类一个名叫object的类是所有其他类的基类。而一个名叫string的类也象object一样是这个语言的一部分。作为语言的一部分存在意味着编译器有可能使用它,无论何时你在程序中写入一句带引号的字符串,编译器会创建一个string对象来保存它。参数传递方法可以被声明接受可变数目的参数。缺省的参数传递方法是对基本数据类型进行值传递。ref关键字可以用
14、来强迫一个变量通过引用传递,这使得一个变量可以接受一个返回值。out关键字也能声明引用传递过程,与ref不同的地方是,它指明这个参数并不需要初始值。与COM的集成C#对Windows程序最大的卖点可能就是它与COM的无缝集成了,COM就是微软的Win32组件技术。实际上,最终有可能在任何.NET语言里编写COM客户和服务器端。C#编写的类可以子类化一个以存在的COM组件;生成的类也能被作为一个COM组件使用,然后又能使用,比方说,JScript语言子类化它从而得到第三个COM组件。这种现象的结果是导致了一个运行环境的产生,在这个环境里的组件是网络服务,可用用任何.NET语言子类化。代理和反馈一
15、个代理对象包括了访问一个特定对象的特定方法所需的信息。只要把它当成一个聪明的方法指针就行了。代理对象可以被移动到另一个地方,然后可以通过访问它来对已存在的方法进行类型安全的调用。一个反馈方法是代理的特例。event关键字用在将在事件发生的时候被当成代理调用的方法声明。2.2 .NET Framework简介.NET Framework是支持生成、运行下一代应用程序和XML Web Services的内部Windows组件,它简化了在高度分布式Internet环境中的应用程序开发,.NET Framework可实现的功能如下:l 提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行
16、,还是在本地执行但在 Internet 上分布,或者是在远程执行的。l 提供一个将软件部署和版本控制冲突最小化的代码执行环境。l 提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。l 提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。l 使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。l 按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。.NET Framework 具有两个主要组件:公共语言运行库和.NET Framework
17、类库。公共语言运行库是 .NET Framework 的基础。您可以将公共语言运行库看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。这类似于Java的虚拟机。事实上,代码管理的概念是公共语言运行库的基本原则。以公共语言运行库为目标的代码称为托管代码,而不以公共语言运行库为目标的代码称为非托管代码。.NET Framework 的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,您可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面 (GUI) 应用程序,也包
18、括基于 ASP.NET 所提供的最新创新的应用程序(如 Web 窗体和 XML Web services)。.NET Framework 可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。.NET Framework 不但提供若干个运行库宿主,而且还支持第三方运行库宿主的开发。2.3 WinForms窗体设计技术WinForm是.Net开发平台中对Windows Form的一种称谓。.Net 为开发WinForm的应用程序提供了丰富的Class Library(类库)。这些WinFrom 类库支持RAD(快速
19、应用程序开发),这些类库被封装在一个名称空间之中,这个名称空间就是System.Windows.Forms。在此名称空间中定义了许多类,在开发基于.Net的GUI应用程序的时候,就是通过继承和扩展这些类才使得我们的程序有着多样的用户界面。2.4 C/S结构C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Cl
20、ient/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。C/S结构是当前数据库应用程序中极为流行的一种方式。尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。另外它的服务器端还可以将信息集中起来,任何客户机都可以通过访问服务器而获得所需的信息。Client/Server模型最终可归结为一种“请求/应答”关系。一个请求总是首先被
21、客户发出,然后服务器总是被动地接收请求,返回客户需要的结果。在客户发出一个请求之前,服务进程一直处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答,如图2-1所示。图2-1 客户机服务器通信结构示图2.5 ADO.NET技术ADO.NET是一组用于和数据源进行交互的面向对象类库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数
22、据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来进行连接。 ADO.NET提供与数据源进行交互的相关的公共方法,但是对于不同的数据源采用一组不同的类库。这些类库称为Data Providers,并且通常是以与之交互的协议和数据源的类型来命名的。然而无论使用什么样的Data Provider,你将使用相似的对象与数据源进行交互。SqlConnection对象管理与数据源的连接。SqlCommand对象允许你与数据源交流并发送命令给它。为了对进行快速的只“向前”地读取数据,使用SqlDataReader。如果
23、想使用断开数据,使用DataSet并实现能进行读取或者写入数据源的SqlDataAdapter。2.6 SQL Server 2005数据库简介SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理。SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序 。SQL Server 2005 数据引擎是本企业数据管理解决方案的核心。此外 SQL Server 2005 结合了分析、报表、集成和通知功能。这使您的企业可以构建和部署经济有效的 BI
24、解决方案,帮助您的团队通过记分卡、Dashboard、Web services 和移动设备将数据应用推向业务的各个领域。与 Microsoft Visual Studio、Microsoft Office System 以及新的开发工具包(包括 Business Intelligence Development Studio)的紧密集成使 SQL Server 2005 与众不同。无论您是开发人员、数据库管理员、信息工作者还是决策者,SQL Server 2005 都可以为您提供创新的解决方案,帮助您从数据中更多地获益。SQL Server 2005 通过在可伸缩性、数据集成、开发工具和强大的
25、分析等方面的革新更好的确立了微软在BI领域的领导地位。SQL Server 2005 能够把关键的信息及时的传递到组织内员工的手中,从而实现了可伸缩的商业智能。从CEO 到信息工作者,员工可以快速的、容易的处理数据,以更快更好的做出决策。SQL Server 2005全面的集成、分析和报表功能使企业能够提高他们已有应用的价值,即便这些应用是在不同的平台上。 商业智能增强体现在以下几个方面: 端到端的集成BI平台 集成服务 分析服务 报表服务 Microsoft Office System的集成本网络聊天软件的开发环境主要使用SQL Server 2005的开发版。SQL Server 2005
26、 Developer Edition(32位和64 位) Developer Edition 使开发人员可以在SQL Server 上生成任何类型的应用程序。它包括 SQL Server 2005 Enterprise Edition 的所有功能,但有许可限制,只能用于开发和测试系统,而不能用作生产服务器。Developer Edition 是独立软件供应商(ISV)、咨询人员、系统集成商、解决方案供应商以及创建和测试应用程序的企业开发人员的理想选择。Developer Edition 可以根据生产需要升级至SQL Server 2005 Enterprise Edition。第三章 需求分析
27、3.1 可行性研究本软件只做开发学习使用,所以暂且不考虑经济成本及盈利问题。开发所需要的平台已经搭建好,并做好了充分的前期准备工作,其次因为本程序的平台将基于WINDOWS,将要使用网络通信技术,而WINDOWS有完善成熟的网络通信接口,以及与C#开发环境的严密契合能力,加之相类似的更大规模的网络聊天工具产品也已有例在先,所以这个程序的开发在技术上是完全可行的。3.2 用户需求随着互联网的普及,网络聊天工具已经成为了人们日常生活中不可缺少的一部分。根据人们对聊天工具的需求,主要可以概括为以下几点:1、 操作简单方便、界面简洁美观;2、 能够注册新用户;3、 拥有熟悉的聊天界面;4、 能够查找/
28、添加好友;5、 能够进行个人设置;6、 系统运行稳定、安全可靠。3.3 性能需求首先要求程序要完全可靠,可以应付各种由于系统问题产生的错误,比如初始网络失败等。要求提前设想到类似的尽可能多的可能发生的事件,做出相应的应对措施,并向用户提交简单易懂清晰明白的提示信息。程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,避免发生程序假死现象。开发文档要有好的易理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。要求程序对所运行之系统的硬件条件要求尽可能低,运行时内存占用尽可能小
29、,响应速度要尽可能快。并且不发生内存泄漏之类影响系统运行的错误事件。并且要求易于维护及扩展。所以应该采用模块化开发,各个模块之间不要有太多的耦合,以免维护困难。3.4 系统功能需求这个程序要实现的功能如下:(1) 程序启动之后就能直接进入登陆界面,输入错误时会提示。(2) 登陆界面有注册新用户选项,点击进入注册界面。(3) 注册成功后会提示自动生成的QQ号码。(4) 登陆后进入主界面,用户可以添加好友,可以直接查找,也可以按条件查找,还可以查看所有用户。(5)当双击列表中某个用户头像的时候,要弹出聊天对话框,可以在其中编辑要发送的聊天信息,并进行发送。(6)聊天界面要人性化,下面是发送框,上面
30、对方发来的上一条聊天记录。(7)可以修改自己的个人资料,也可以更换头像。第四章 系统设计4.1 系统功能结构基于C#的网络聊天软件更 换 头 像 个 人 设 置用 户 登 录好 友 列 表发 送 消 息 删 除 好 友 添 加 好 友接 收 消 息 查 找 好 友用 户 注 册图4-1 系统功能结构4.2 系统模块划分登录模块:实现用户登录功能。在没有账号的情况下可以选择进入注册新用户界面。注册模块:实现注册新用户功能。注册信息包括必填基本资料与选填资料。主模块:实现列表功能。列表包括好友列表与陌生人列表。通过主界面可以进行聊天功能,也可以打开查找/添加好友功能与个人设置功能等。聊天模块:实现
31、发送消息与接收消息功能。通过公共的数据库交换信息,消息的发送和读取都是通过操作数据库来完成的。在程序中采用定时扫描数据库的方式来查找未读消息。也能实现删除好友功能。查找/添加好友模块:实现查找好友功能与添加好友功能。主要方法有精确查找、按条件查找,与查看所有用户。个人设置模块:实现修改个人资料。更换头像模块:实现更换用户头像。系统消息模块:实现添加好友信息的读取。4.3 系统整体流程图该网络聊天工具系统整体流程图如图4-2所示:登录成功主界面聊天界面/个人设置界面/查找添加好友界面NYYNNY显示号码注册成功合法?输入检查注册登录验证输入登录数据已注册?用 户图4-2 系统整体流程图第五章 详
32、细设计5.1 登录界面设计当用户运行程序时,首先进入的是登录界面,如图5-1所示:图5-1 登录界面如果没有账号,则单击“注册新用户”标签,可以打开注册界面;如果有已注册的账号,则在输入账号与密码后,点击“登录”按钮,可以打开主界面。如果输入有误,则出现图5-2所示界面:图5-2 输入错误程序也不允许在账号或密码处输入空格字符,如有此情况,则会出现图5-3与图5-4所示界面:图 5-3 未输入账号图5-4 未输入密码当点击“登录”按钮时,则触发登录按钮事件,其处理流程图如图5-5所示:用 户输入登录数据扫描数据库中的Users表有该用户且密码正确?登录成功主界面YN图5-5 登录事件流程图其中
33、登录按钮的代码实现如下:/ 登录按钮事件处理 private void btnLogin_Click(object sender, EventArgs e) bool error = false; / 标志在执行数据库操作的过程中是否出错 / 如果输入验证成功,就验证身份,并转到相应的窗体 if (ValidateInput() int num = 0; / 数据库操作结果 try / 查询用的sql语句 string sql = string.Format(SELECT COUNT(*) FROM Users WHERE Id=0 AND LoginPwd = 1, int.Parse(tx
34、tLoginId.Text.Trim(), txtLoginPwd.Text.Trim(); / 创建Command 对象 SqlCommand command = new SqlCommand(sql, DBHelper.connection); DBHelper.connection.Open(); / 打开数据库连接 num = Convert.ToInt32(command.ExecuteScalar(); catch (Exception ex) error = true; Console.WriteLine(ex.Message); finally DBHelper.connect
35、ion.Close(); / 关闭数据库连接 if (!error & (num = 1) / 验证通过 / 设置登录的用户号码 UserHelper.loginId = int.Parse(txtLoginId.Text.Trim(); / 创建主窗体 MainForm mainForm = new MainForm(); mainForm.Show(); / 显示窗体 this.Visible = false; / 当前窗体不可见 else MessageBox.Show(输入的用户名或密码有误!, 登录提示, MessageBoxButtons.OK, MessageBoxIcon.Er
36、ror); / 用户输入验证 private bool ValidateInput() / 验证用户输入 if (txtLoginId.Text.Trim() = ) MessageBox.Show(请输入登录的号码, 登录提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtLoginId.Focus(); return false; else if (txtLoginPwd.Text.Trim() = ) MessageBox.Show(请输入密码, 登录提示, MessageBoxButtons.OK, MessageBoxI
37、con.Information); txtLoginPwd.Focus(); return false; return true; 5.2 注册界面设计当在登录界面点击“注册新用户”标签时,将打开注册界面,如图5-6所示:图5-6 注册界面其中基本资料为必填资料,详细资料为选填资料。在用户输入完资料后,点击“确认注册”按钮进行注册。其间会对相关的输入进行检查,如果输入不符合规范,则不允许注册,不会向数据库插入记录,并会提示错误原因。如果输入正确,则向数据库插入一条用户记录,在数据库中自动生成一个新的登录号码(Users表的Id字段),以消息框的形式告诉用户申请成功的号码。其流程图如图5-7所示
38、:NY用户返回登录界面注册成功并显示号码向数据库中添加记录合法?提示不合法原因检查合法性输入注册信息自动添加星座选项与血型选项打开注册界面图5-7 注册界面流程图其中确认注册按钮的代码实现如下:/ 点击注册,向数据库添加记录 private void btnRegist_Click(object sender, EventArgs e) / 输入验证通过,就插入记录到数据库 if (ValidateInput() int myQQNum = 0; / QQ号码 string message; / 弹出的消息 string sex = rdoMale.Checked ? rdoMale.Text
39、 : rdoFemale.Text; / 获得选中的性别 string sql = ; / 查询用的SQL语句 int starId; / 星座Id int bloodTypeId; / 血型Id bool error = false; / 操作数据库是否出错 / 根据星座和血型的选择来分情况确定SQL语句 if (cboStar.Text != & cboBloodType.Text != ) / 获得星座的Id starId = GetStarId(); / 获得血型的Id bloodTypeId = GetBloodType(); sql = string.Format(INSERT I
40、NTO 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); else if (cboStar.Text != & cboBloodType.Text = ) / 获得星座的Id starId = GetStarId();
41、 sql = string.Format(INSERT INTO Users (LoginPwd, NickName, 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); else if (cboStar.Text = & cboBloodType.Text != ) / 获得血型的Id bloodTypeId = GetBloodType();