基于C#的网络聊天软件的设计与实现论文.docx
- 文档编号:8802967
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:64
- 大小:565.99KB
基于C#的网络聊天软件的设计与实现论文.docx
《基于C#的网络聊天软件的设计与实现论文.docx》由会员分享,可在线阅读,更多相关《基于C#的网络聊天软件的设计与实现论文.docx(64页珍藏版)》请在冰豆网上搜索。
基于C#的网络聊天软件的设计与实现论文
(此文档为word格式,下载后您可任意编辑修改!
)
摘要
关键词:
网络聊天工具C#即时通信数据库人性化
Abstract
Keywords:
onlinechattoolC#instantaneouscommunicationdatabase
目录
第一章引言1
1.1系统开发背景1
1.2聊天软件的开发目标1
第二章开发环境与关键技术简介2
2.1C#简介2
2.3WinForms窗体设计技术5
2.4CS结构5
2.6SQLServer2005数据库简介6
第三章需求分析8
3.1可行性研究8
3.2用户需求8
3.3性能需求8
3.4系统功能需求9
第四章系统设计10
4.1系统功能结构10
4.2系统模块划分10
4.3系统整体流程图11
第五章详细设计12
5.1登录界面设计12
5.2注册界面设计15
5.3主界面设计19
5.4查找添加好友界面设计22
5.5聊天界面设计28
5.6个人设置界面设计33
5.7头像选择界面设计34
5.8系统消息界面设计35
结束语38
参考文献39
附录一40
附录二41
第一章引言
1.1系统开发背景
当今社会已进入信息时代,信息是当今世界最重要的资源之一,它与物质及能源一起构成了三大能源支柱。
信息高速公路是信息社会的基础设施,而互联网则是信息高速公路的重要组成部分。
在互联网相当普及的今天,你们对网络的依赖越来越大,越来越离不开网络,网络聊天更是成为了人们的“家常便饭”。
通过网络聊天工具,人们足不出户就可进行闲聊甚至工作会谈,极大地方便了人们的日常生活与工作需求。
常用的网络聊天工具主要是QQ与MSN。
MSN主要用于国际,而国内的主流网络聊天工具是QQ。
QQ有着非常良好的操作界面,和强大的通信功能,集娱乐、生活和工作于一身。
随着技术的进步,QQ不仅可以通过宽带网在PC上使用,通过手机也可以实现与好友、同事通信。
而无论是QQ还是MSN,都存在一个很大的问题——广告。
每次登陆后时不时会弹出一些广告窗口,绝大多数网友都对此感觉厌烦。
因此在本次论文的激励下,我决定设计一个类似QQ并且无垃圾信息的网络聊天工具,此外也希望通过本次论文能更好地学习与掌握网络软件编程知识。
1.2聊天软件的开发目标
第二章开发环境与关键技术简介
2.1C#简介
C#最引人入胜的地方是它和Java的不同,而不是相似的地方:
中间代码
微软在用户选择何时MSIL应该编译成机器码的时候是留了很大的余地。
微软公司很小心的声称MSIL不是解释性的,而是被编译成了机器码。
它也明白许多,如果不是大多数的话,程序员认为Java程序要不可避免的比C编写的任何东西都要慢。
而这种实现方式决定了基于MSIL的程序(指的是用C#,VisualBasic,"ManagedC++"--C++的一个符合CLS的版本--等语言编写的程序)将在性能上超过"解释性的"Java代码。
当然,这一点还需要得到事实证明,因为C#和其他生成MSIL的编译器还没有发布。
但是JavaJIT编译器的普遍存在使得Java和C#在性能上相对相同。
象"C#是编译语言而Java是解释性的,"之类的声明只是商业技巧。
Java的中间代码和MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码。
命名空间中的申明
当你创建一个程序的时候,你在一个命名空间里创建了一个或多个类。
同在这个命名空间里(在类的外面)你还有可能声明接口,枚举类型和结构体。
必须使用using关键字来引用其他命名空间的内容。
基本的数据类型
C#拥有比C,C++或者Java更广泛的数据类型。
这些类型是bool,byte,ubyte,short,ushort,int,uint,long,ulong,float,double,和decimal。
象Java一样,所有这些类型都有一个固定的大小。
又象C和C++一样,每个数据类型都有有符号和无符号两种类型。
与Java相同的是,一个字符变量包含的是一个16位的Unicode字符。
C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10进制数字。
两个基本类
一个名叫object的类是所有其他类的基类。
而一个名叫string的类也象object一样是这个语言的一部分。
作为语言的一部分存在意味着编译器有可能使用它,无论何时你在程序中写入一句带引号的字符串,编译器会创建一个string对象来保存它。
参数传递
方法可以被声明接受可变数目的参数。
缺省的参数传递方法是对基本数据类型进行值传递。
ref关键字可以用来强迫一个变量通过引用传递,这使得一个变量可以接受一个返回值。
out关键字也能声明引用传递过程,与ref不同的地方是,它指明这个参数并不需要初始值。
与COM的集成
代理和反馈
一个代理对象包括了访问一个特定对象的特定方法所需的信息。
只要把它当成一个聪明的方法指针就行了。
代理对象可以被移动到另一个地方,然后可以通过访问它来对已存在的方法进行类型安全的调用。
一个反馈方法是代理的特例。
event关键字用在将在事件发生的时候被当成代理调用的方法声明。
●提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在Internet上分布,或者是在远程执行的。
●提供一个将软件部署和版本控制冲突最小化的代码执行环境。
●提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。
●提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。
●使开发人员的经验在面对类型大不相同的应用程序(如基于Windows的应用程序和基于Web的应用程序)时保持一致。
2.3WinForms窗体设计技术
2.4CS结构
CS(ClientServer)结构,即大家熟知的客户机和服务器结构。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
目前大多数应用软件系统都是ClientServer形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和ClientServer应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发展方向。
CS结构是当前数据库应用程序中极为流行的一种方式。
尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。
另外它的服务器端还可以将信息集中起来,任何客户机都可以通过访问服务器而获得所需的信息。
ClientServer模型最终可归结为一种“请求应答”关系。
一个请求总是首先被客户发出,然后服务器总是被动地接收请求,返回客户需要的结果。
在客户发出一个请求之前,服务进程一直处于休眠状态。
一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答,如图2-1所示。
图2-1客户机服务器通信结构示图
2.6SQLServer2005数据库简介
SQLServer2005是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理。
SQLServer2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
SQLServer2005数据引擎是本企业数据管理解决方案的核心。
此外SQLServer2005结合了分析、报表、集成和通知功能。
这使您的企业可以构建和部署经济有效的BI解决方案,帮助您的团队通过记分卡、Dashboard、Webservices和移动设备将数据应用推向业务的各个领域。
SQLServer2005通过在可伸缩性、数据集成、开发工具和强大的分析等方面的革新更好的确立了微软在BI领域的领导地位。
SQLServer2005能够把关键的信息及时的传递到组织内员工的手中,从而实现了可伸缩的商业智能。
从CEO到信息工作者,员工可以快速的、容易的处理数据,以更快更好的做出决策。
SQLServer2005全面的集成、分析和报表功能使企业能够提高他们已有应用的价值,即便这些应用是在不同的平台上。
商业智能增强体现在以下几个方面:
端到端的集成BI平台
集成服务
分析服务
报表服务
MicrosoftOfficeSystem的集成
本网络聊天软件的开发环境主要使用SQLServer2005的开发版。
SQLServer2005DeveloperEdition(32位和64位)
DeveloperEdition使开发人员可以在SQLServer上生成任何类型的应用程序。
它包括SQLServer2005EnterpriseEdition的所有功能,但有许可限制,只能用于开发和测试系统,而不能用作生产服务器。
DeveloperEdition是独立软件供应商(ISV)、咨询人员、系统集成商、解决方案供应商以及创建和测试应用程序的企业开发人员的理想选择。
DeveloperEdition可以根据生产需要升级至SQLServer2005EnterpriseEdition。
第三章需求分析
3.1可行性研究
本软件只做开发学习使用,所以暂且不考虑经济成本及盈利问题。
开发所需要的平台已经搭建好,并做好了充分的前期准备工作,其次因为本程序的平台将基于WINDOWS,将要使用网络通信技术,而WINDOWS有完善成熟的网络通信接口,以及与C#开发环境的严密契合能力,加之相类似的更大规模的网络聊天工具产品也已有例在先,所以这个程序的开发在技术上是完全可行的。
3.2用户需求
随着互联网的普及,网络聊天工具已经成为了人们日常生活中不可缺少的一部分。
根据人们对聊天工具的需求,主要可以概括为以下几点:
1、操作简单方便、界面简洁美观;
2、能够注册新用户;
3、拥有熟悉的聊天界面;
4、能够查找添加好友;
5、能够进行个人设置;
6、系统运行稳定、安全可靠。
3.3性能需求
首先要求程序要完全可靠,可以应付各种由于系统问题产生的错误,比如初始网络失败等。
要求提前设想到类似的尽可能多的可能发生的事件,做出相应的应对措施,并向用户提交简单易懂清晰明白的提示信息。
程序要有良好的容错性,当用户进行非法操作时或者系统本身出现问题时要能以最好的方式退出程序,避免发生程序假死现象。
开发文档要有好的易理解性,如果系统又要交由别人接手开发,或者自己由于种种原因需要进行二次开发,那么要保证以后能够清晰的理解整个系统的设计思路以及实现细节。
要求程序对所运行之系统的硬件条件要求尽可能低,运行时内存占用尽可能小,响应速度要尽可能快。
并且不发生内存泄漏之类影响系统运行的错误事件。
并且要求易于维护及扩展。
所以应该采用模块化开发,各个模块之间不要有太多的耦合,以免维护困难。
3.4系统功能需求
这个程序要实现的功能如下:
(1)程序启动之后就能直接进入登陆界面,输入错误时会提示。
(2)登陆界面有注册新用户选项,点击进入注册界面。
(3)注册成功后会提示自动生成的QQ号码。
(4)登陆后进入主界面,用户可以添加好友,可以直接查找,也可以按条件查找,还可以查看所有用户。
(5)当双击列表中某个用户头像的时候,要弹出聊天对话框,可以在其中编辑要发送的聊天信息,并进行发送。
(6)聊天界面要人性化,下面是发送框,上面对方发来的上一条聊天记录。
(7)可以修改自己的个人资料,也可以更换头像。
第四章系统设计
4.1系统功能结构
图4-1系统功能结构
4.2系统模块划分
登录模块:
实现用户登录功能。
在没有账号的情况下可以选择进入注册新用户界面。
注册模块:
实现注册新用户功能。
注册信息包括必填基本资料与选填资料。
主模块:
实现列表功能。
列表包括好友列表与陌生人列表。
通过主界面可以进行聊天功能,也可以打开查找添加好友功能与个人设置功能等。
聊天模块:
实现发送消息与接收消息功能。
通过公共的数据库交换信息,消息的发送和读取都是通过操作数据库来完成的。
在程序中采用定时扫描数据库的方式来查找未读消息。
也能实现删除好友功能。
查找添加好友模块:
实现查找好友功能与添加好友功能。
主要方法有精确查找、按条件查找,与查看所有用户。
个人设置模块:
实现修改个人资料。
更换头像模块:
实现更换用户头像。
系统消息模块:
实现添加好友信息的读取。
4.3系统整体流程图
该网络聊天工具系统整体流程图如图4-2所示:
图4-2系统整体流程图
第五章详细设计
5.1登录界面设计
当用户运行程序时,首先进入的是登录界面,如图5-1所示:
图5-1登录界面
如果没有账号,则单击“注册新用户”标签,可以打开注册界面;
如果有已注册的账号,则在输入账号与密码后,点击“登录”按钮,可以打开主界面。
如果输入有误,则出现图5-2所示界面:
图5-2输入错误
程序也不允许在账号或密码处输入空格字符,如有此情况,则会出现图5-3与图5-4所示界面:
图5-3未输入账号
图5-4未输入密码
当点击“登录”按钮时,则触发登录按钮事件,其处理流程图如图5-5所示:
图5-5登录事件流程图
其中登录按钮的代码实现如下:
登录按钮事件处理
privatevoidbtnLogin_Click(objectsender,EventArgse)
{
boolerror=false;标志在执行数据库操作的过程中是否出错
如果输入验证成功,就验证身份,并转到相应的窗体
if(ValidateInput())
{
intnum=0;数据库操作结果
try
{
查询用的sql语句
stringsql=string.Format("SELECTCOUNT(*)FROMUsersWHEREId={0}ANDLoginPwd='{1}'",
int.Parse(txtLoginId.Text.Trim()),txtLoginPwd.Text.Trim());
创建Command对象
SqlCommandcommand=newSqlCommand(sql,DBHelper.connection);
DBHelper.connection.Open();打开数据库连接
num=Convert.ToInt32(command.ExecuteScalar());
}
catch(Exceptionex)
{
error=true;
}
finally
{
DBHelper.connection.Close();关闭数据库连接
}
if(!
error&&(num==1))验证通过
{
设置登录的用户号码
UserHelper.loginId=int.Parse(txtLoginId.Text.Trim());
创建主窗体
MainFormmainForm=newMainForm();
mainForm.Show();显示窗体
this.Visible=false;当前窗体不可见
}
else
{
MessageBox.Show("输入的用户名或密码有误!
","登录提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
用户输入验证
privateboolValidateInput()
{
验证用户输入
if(txtLoginId.Text.Trim()=="")
{
MessageBox.Show("请输入登录的号码","登录提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
txtLoginId.Focus();
returnfalse;
}
elseif(txtLoginPwd.Text.Trim()=="")
{
MessageBox.Show("请输入密码","登录提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
txtLoginPwd.Focus();
returnfalse;
}
returntrue;
}
5.2注册界面设计
当在登录界面点击“注册新用户”标签时,将打开注册界面,如图5-6所示:
图5-6注册界面
其中基本资料为必填资料,详细资料为选填资料。
在用户输入完资料后,点击“确认注册”按钮进行注册。
其间会对相关的输入进行检查,如果输入不符合规范,则不允许注册,不会向数据库插入记录,并会提示错误原因。
如果输入正确,则向数据库插入一条用户记录,在数据库中自动生成一个新的登录号码(Users表的Id字段),以消息框的形式告诉用户申请成功的号码。
其流程图如图5-7所示:
图5-7注册界面流程图
其中确认注册按钮的代码实现如下:
点击注册,向数据库添加记录
privatevoidbtnRegist_Click(objectsender,EventArgse)
{
输入验证通过,就插入记录到数据库
if(ValidateInput())
{
intmyQQNum=0;QQ号码
stringmessage;弹出的消息
stringsex=rdoMale.Checked?
rdoMale.Text:
rdoFemale.Text;获得选中的性别
stringsql="";查询用的SQL语句
intstarId;星座Id
intbloodTypeId;血型Id
boolerror=false;操作数据库是否出错
根据星座和血型的选择来分情况确定SQL语句
if(cboStar.Text!
=""&&cboBloodType.Text!
="")
{
获得星座的Id
starId=GetStarId();
获得血型的Id
bloodTypeId=GetBloodType();
sql=string.Format("INSERTINTOUsers(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);
}
elseif(cboStar.Text!
=""&&cboBloodType.Text=="")
{
获得星座的Id
starId=GetStarId();
sql=string.Format("INSERTINTOUsers(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);
}
elseif(cboStar.Text==""&&cboBloodType.Text!
="")
{
获得血型的Id
bloodTypeId=GetBloodType();
sql=string.Format("INSERTINTOUsers(LoginPwd,NickName,Sex,Age,Name,BloodTypeId)values('{0}','{1}','{2}',{3},'{4}',{5})",
txtLoginPwd.Text.Trim(),txtNickName.Text.Trim(),sex,int.Parse(txtAge.Text.Trim()),txtName.Text.Trim(),bloodTypeId);
}
else
{
sql=string.Format("INSERTINTOUsers(LoginPwd,NickName,Sex,Age,Name)values('{0}','{1}','{2}',{3},'{4}')",
txtLoginPwd.Text.Trim(),txtNickName.Text.Trim(),sex,int.Parse(txtAge.Text.Trim()),txtName.Text.Trim());
}
try
{
创建Command对象
SqlCommandcommand=newSqlCommand(sql,DBHelper.connection);
DBHelper.connection.Open();打开数据库连接
intresult=command.ExecuteNonQuery();执行插入命令
if(result==1)
{
commandmandText=sql;重新指定Command对象的SQL语句
myQQNum=Convert.ToInt32(command.ExecuteScalar());强制类型转换会出错
message=string.Format("注册成功!
你的MyQQ号码是{0}",myQQNum);
}
else
{
message="注册失败,请重试!
";
}
}
catch(Exceptionex)
{
error=true;
message="服务器出现意外错误!
请稍候再试!
";
}
finally
{
DBHelper.connection.Close();关闭数据库连接
}
显示注册结果
if(error)
{
MessageBox.Show(message,"注册失败",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 C# 网络 聊天 软件 设计 实现 论文
![提示](https://static.bdocx.com/images/bang_tan.gif)