《计算机科学与技术毕业论文-企业QQ系统设计.doc》由会员分享,可在线阅读,更多相关《计算机科学与技术毕业论文-企业QQ系统设计.doc(45页珍藏版)》请在三一文库上搜索。
1、装订线安徽工业大学工商学院 毕业设计(论文)说明书安徽工业大学工商学院毕业设计(论文)说明书专 业 计算机科学与技术 班 级 计0842班 姓 名 学 号 指导教师 *老师 二 一二 年 五 月 三十 日40目录摘要IVAbstractV1.绪论11.1 开发背景11.2 目的11.3 开发环境与开发工具11.3.1 Visual Studio 2008简介11.3.2 SQL Server 2005 简介22.企业QQ系统42.1 系统分析42.1.1 需求分析42.2 系统设计42.2.1 系统目标42.2.2 系统功能结构42.2.3 系统业务流程图52.2.4 系统编码规范62.3 系
2、统运行环境62.4 数据库与数据表设计72.4.1 数据库分析72.4.2 数据表慨念设计72.5 创建项目82.6 公共类库设计102.6.1 UDPSocket控件102.6.2 Publec_Class 类142.6.3 ClassForm类142.6.4 ClassMsg 类142.6.5 ClassOptionData 类142.6.6 ClassSerialiZers类142.6.7 ClassUserInfo 类152.6.8 ClassUsers 类152.6.9 cVideo 类152.7 客户端注册模块设计152.7.1 设计客户端注册窗体152.7.2 注册信息发送到服务
3、器端162.7.3 将注册星系写入到INI文件中162.8 客户端登录模块设计172.8.1 设计客户端登录窗体172.8.2 判断注册的INI文件是否存在182.8.3 登录功能的实现182.8.4 将登录信息发送到服务器端192.9 客户端QQ模块设计202.9.1设计客户端QQ窗体202.9.2 加载注册用户列表212.10 客户端消息发送模块设计242.10.1 设计客户端消息发送窗体252.10.2 消息发送功能的实现262.10.3 在线视频功能的实现262.11 服务端控制台模块设计272.11.1 设计服务器控制台窗体282.11.2 开始服务功能的实现282.11.3 显示用
4、户信息及在线状态292.12 运行项目332.13 开发技巧与难点分析352.14 UDP协议35结论37致谢39参考文献40摘要我的毕业设计所开发的是企业QQ系统,这个工具有利于企业员工的信息交流。实现企业局域网通讯的目的就是使企业员工之间的信息交流更加省时、方便,充分提高企业的办公效率。这个工具可以使局域网内部人员实现聊天,图片传输,视频等功能。它无需连入国际互联网,设计选用Microsoft Visual Studio 2008开发环境和Microsoft SQL Server 2005数据库。本系统采用客户端/服务器模式,该程序主要采用VS的UDPsocket 控件,来实现客户端和服务
5、器端之间的通信。本文主要介绍服务器与客户端工具的分析,设计与实现。 关键词:局域网,客户端,服务器端,UDPsocket ,UDP协议AbstractMy graduation project is developed the enterprise QQ system, this tool is conducive to the exchange of information of the employees. The purpose of the enterprise LAN communication is to make the exchange of information betwe
6、en employees more saving time convenient and to fully enhance the efficiency of the office of the enterprise. This tool can be internal LAN chat, image transmission, video and other functions. It does not need to connect to the Internet, the design uses the Microsoft Visual Studio 2008 development e
7、nvironment and Microsoft SQL Server 2005 database. The system uses a client / server mode, the program using VS of the UDPsocket controls, to achieve the communication between client and server side. This paper describes the analysis, design and implementation of server and client tools.Keywords: LA
8、N, client-side, Server-side, UDPsocket, UDP protocol1. 绪论1.1 开发背景在一些中小企业(或是学校)中,为了便于职工之间的交流,或是工作信息的传递,局域网企业QQ系统的开发显得十分重要。根据企业的内部结构,开发一个符合本企业工作流程的QQ系统,可以帮助企业快速搭建内部即时通信系统,大幅度提高企业的工作效率,使上级与下级之间的交流更加方便。1.2 目的 现在,企业、机关、学校都建立起了自己的局域网,在局域网,虽然可以通过文件共享的方式进行通讯,但单单使用这种方式,是非常不方便的,首先,在局域网里的网上邻居里,只能看到机器名,不清楚对方是谁,
9、也不知道对方机器里有什么资源可以共享,而且,当局域网的机器很多时,这种方式更加麻烦。于是,就想到做一个在局域网里的即时通讯软件,在局域网里,我们可以通过它,实现在局域网里方便的联络,消息的发布,自己共享内容的简介等。在企业建立的局域网里,这软件可以起到方便员工之间的相互联络,这样,不用上Internet,可以节省资源。1.3 开发环境与开发工具1.3.1 Visual Studio 2008简介 Microsoft Visual Studio 2008是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,代号“Orcas”,是对Visual Studio 2
10、005一次及时、全面的升级。VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效开发Windows应用程序。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时Visual Studio 2008支持项目模板、调试器和部署程序。Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。Visual Studio 2008有以下版本:Visual Studio 2008 Standard Ed
11、ition Visual Studio Team System 2008 Architecture Edition Visual Studio Team System 2008 Database Edition Visual Studio Team System 2008 Development Edition Visual Studio Team System 2008 Team Suite Visual Studio Team System 2008 Test Edition Visual Studio Team System 2008 Test Load Agent本系统采用的是Visu
12、al Studio 2008 Standard Edition版本。 1.3.2 SQL Server 2005 简介SQL Server 是一个关系数据库管理系统。它最初是由Microsoft Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本。在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。Sybase 则较专注于SQL Server在U
13、NIX 操作系统上的应SQL Server安装界面用。SQL Server 各个版本:1. SQL Server 2005 Enterprise Edition(32 位和 64 位) Enterprise Edition 达到了支持超大型企业进行联机事务处理 (OLTP)、高度复杂的数据分析、数据仓库系统和网站所需的性能水平。Enterprise Edition 的全面商业智能和分析能力及其高可用性功能(如故障转移群集),使它可以处理大多数关键业务的企业工作负荷。Enterprise Edition 是最全面的 SQL Server 版本,是超大型企业的理想选择,能够满足最复杂的要求。该版本
14、还推出了一种适用于 32 位或 64 位平台的 120 天 Evaluation Edition。 2. SQL Server 2005 Standard Edition(32 位和 64 位) Standard Edition 是适合中小型企业的数据管理和分析平台。它包括电子商务、数据仓库和业务流解决方案所需的基本功能。Standard Edition 的集成商业智能和高可用性功能可以为企业提供支持其运营所需的基本功能。Standard Edition 是需要全面的数据管理和分析平台的中小型企业的理想选择。 3. SQL Server 2005 Workgroup Edition(仅适用于
15、32 位) 对于那些需要在大小和用户数量上没有限制的数据库的小型企业,Workgroup Edition 是理想的数据管理解决方案。Workgroup Edition 可以用作前端 Web 服务器,也可以用于部门或分支机构的运营。它包括 SQL Server 产品系列的核心数据库功能,并且可以轻松地升级至 Standard Edition 或 Enterprise Edition。Workgroup Edition 是理想的入门级数据库,具有可靠、功能强大且易于管理的特点。 4. SQL Server 2005 Developer Edition(32 位和 64 位) Developer E
16、dition 使开发人员可以在 SQL Server 上生成任何类型的应用程序。它包括 SQL Server 2005 Enterprise Edition 的所有功能,但有许可限制,只能用于开发和测试系统,而不能用作生产服务器。Developer Edition 是独立软件供应商 (ISV)、咨询人员、系统集成商、解决方案供应商以及创建和测试应用程序的企业开发人员的理想选择。Developer Edition 可以根据生产需要升级至 SQL Server 2005 Enterprise Edition。 5. SQL Server 2005 Express Edition(仅适用于 32 位
17、) SQL Server Express 是一个免费、易用且便于管理的数据库。SQL Server Express 与 Microsoft Visual Studio 2005 集成在一起,可以轻松开发功能丰富、存储安全、可快速部署的数据驱动应用程序。SQL Server Express 是免费的,可以再分发(受制于协议),还可以起到客户端数据库以及基本服务器数据库的作用。SQL Server Express 是低端 ISV、低端服务器用户、创建 Web 应用程序的非专业开发人员以及创建客户端应用程序的编程爱好者的理想选择。 2. 企业QQ系统2.1 系统分析2.1.1 需求分析随着中、小企业
18、的不断发展,在企业内部实现局域网的通信已经成为一种趋势。企业QQ系统就是一个非常好的局域网通信软件,它可以再职工不移动位置的情况下进行在线聊天及视频连接,还可以随时在网络中进行多人得对话和网络会议,从而大大方便了企业内部职工的交流,提高了工作效率。 2.2 系统设计2.2.1 系统目标根据企业的要求,制定企业QQ系统目标如下。操作方便简单、界面简洁美观。每个客户只能注册一次。可以在局域网中实现文字及大图片的传输。可以实现局域网视频。可以实现多用户的信息通信。系统运行稳定、安全可靠。2.2.2 系统功能结构 根据企业QQ系统的特点,可以将其分为客户端和服务端两个部分进行设计。客户端主要用于注册、
19、登录和信息登的发送等;服务端主要用于显示在线人员的状态,以及作为客户端向远程客户端发送信息的一个中转站。企业QQ系统的功能结构如图2.1所示。企业QQ系统客户端服务器端用户注册信息传递服务器窗体QQ窗体用户登录 图 2.1 企业QQ系统功能结构图2.2.3 系统业务流程图企业QQ系统的业务流程图如图2.2所示。客户端是否注册登录登录验证QQ窗体发送窗体否 服务器ip端口号用户名密码服务器端远程客户端服务器(记录所有注册用户)UDP协议QQ窗体发送窗体一Y Y N 发消息Y N 发消息 发消息使用同一个UDP协议图2.2 企业QQ系统的业务流程图2.2.4 系统编码规范开发程序时,往往会有多人参
20、与,为了使程序的结构与代码风格标准化,便于每个参与开发的人员尽可能直观地查看和理解其他人编写的代码,需要在编译之前制定一套统一的编码规范。下面对本系统中比较特殊的编码规范进行说明。(1)窗体命名规范名称”。其中窗体名称最好是英文形式的窗体说明,以便于开发者通过窗体ID就知道该窗体的作用,比如QQ客户端登录窗体,ID名为F_Login。在窗体中调用其他窗体时,必须对调用的窗体进行引用,其引用的变量名为“Frm+窗体名称”。如QQ客户端登录窗体的引用名为FrmLogin。(2)数据库命名规范数据库命名以字母“db”开头(小写),后面加数据库相关英文单词的缩写,比如企业QQ系统的数据库命名为db_M
21、yQQ。(3)各控件命名规范本系统中用到的主要Windows控件的命名规范如表2.1所示。 表2.1控件命名控件命名规范TextBoxtext_Butttonbutton_Rich TextBoxrich_Panelpanel_ListViewLV_ToolStriptool_2.3 系统运行环境本系统的程序运行环境具体如下。系统开发平台:Microsoft Visual Studio 2008。系统开发语言:C#。数据库管理软件:Microsoft SQL Server 2005。运行平台:Windows 7/ Windows xp。运行环境:Microsoft .NET Framework
22、 SDK v3.5。分辨率:最佳效果 1024*768像素。2.4 数据库与数据表设计2.4.1 数据库分析企业QQ系统的服务器端主要记录注册人员的信息。为了使读者可以根据本系统开发一个完整的企业QQ系统,也就是可以在数据库中记录所有人员的聊天信息,本系统使用Micrisoft SQL Server 2005 作为后台数据库,数据库命名为db_MyQQ,其中合格包括一张数据表,用于存储当前已注册的人员信息,详细信息如图 2.3所示。图 2.3 企业QQ系统中用到的数据表2.4.2 数据表慨念设计在QQ用户登录时,我ile可以再服务端返回所有注册用户的信息,需要在服务端的数据库中创建一个用户注册
23、表,用于记录注册用户的IP地址、在线状态、用户名及密码等信息。用户注册包的实体E-R图如图 2.4所示。用户注册表(tb_GurreneyUser)服务器ip编号端口号标识密码用户名图2.4 用户注册表的实体E-R图根据图26.5所示的E-R图创建一个表-tb_CurreneyUser,用来保存注册用户的IP地址、在线状态、用户名及密码等信息,该表的结构如图表2.2所示。表 2.2 用户注册表字段名数据类型主键否描述IDint是自动编号IPvarchar(20)否用户IPPortint否用户端口号Namevarchar(20)否用户名称PassWordvarchar(20)否用户密码intin
24、t否在线标识2.5 创建项目 在Visual Studo 20008 开发环境中创建MyQQ项目的具体步骤如下:(1) 选择“开始”/“所有程序”/ Microsoft Visual Studio 2008/ Microsoft Visual Studio 2008命令,如图2.5所示。 图2.5 选择Microsoft Visual Studio 2008命令(2) 打开Visual Studio 2008开发环境,在菜单栏中选择“文件”/“新建”/“项目”命令,打开如图2.6所示的“新建项目”对话框。在“项目类型”列表中选择Visual C#节点;在右侧的“Visual Studio 已安
25、装的模版”列表中选择“Windows 窗体应用程序”选项;在“名称”文本中输入项目名称时,这里输入“MyQQ”;在“位置”下拉列表框中选择存放项目文件的目标地址;然后取消选中的“创建解决方案的目录”复选框,单击“确认”按钮,即可创建一个空白的MyQQ解决方案。图2.6 “新建项目”对话框(3)创建完 MyQQ 解决方案之后,为了方便以后的开发工作和规范系统的整体架构,可以把系统中可能用到的项目现创建出来。在解决方案中创建项目非常简单,只需要选中当前解决方案,单击鼠标右键,在弹出的快捷菜单中选择“添加”/“新建项目”命令即可。(4)按照以上步骤,一次创建企业QQ系统中用到的项目,创建完成后的效果
26、图如图2.8所示。图2.8 项目组织结构图2.6 公共类库设计开发项目时,可以将数据库的相关操作以及对一些控件的位置、遍历等封装在自定义类中,以便在开发程序时调用,这样可以提高代码的重用性。开发企业QQ时,可以UDP协议封装成一个控件,或是将局域网中发送或接受信息的功能封装成类,为了便于客户端和服务端的同时调用,可以将UDP控件和自定义类存储在一个类库中,下面对公共类库中的UDP协议控件及重要的类进行详细讲解。2.6.1 UDPSocket控件 该控件将UDP协议中的IP地址和端口号以控件的属性形式进行设置,并自定义一个DataArrival事件,用于对主机的端口号进行监听,以获取远程计算机发
27、来的信息。首先在自定义控件上定义localHost、localPort、Ative属性以及DataArrival事件,其中,LocalHost属性用于设置服务器端的IP地址;LocalPort属性用于设置端口号;Ative属性是bool型,DataArrival可以控制端口号时否处于监听状态;事件为托管事件,用来对消息进行监听。代码省略。下面对UDPSocket控件中的自定义方法进行详细介绍。1. OpenSocket和CloseSocket方法这连个方法分别用于打开和关闭UDP协议端口号的监听功能,并在监听关闭后,关闭用于接收消息的子线程。代码如下:private void OpenSock
28、et() Listener(); private void CloseSocket() if (UDP_Server != null) UDP_Server.Close(); if (thdUdp != null) Thread.Sleep(30); thdUdp.Abort(); 2. Listener 方法该方法用于实现主机端口号的监听功能,其主要是在线程序打开时,将 GetUDPData方法接收的消息船体给线程的委托。代码如下: protected void Listener() /监听 ServerEndPoint = new IPEndPoint(IPAddress.Any,loca
29、lPort); /将IP地址和端口号以网络端点存储 if (UDP_Server != null) UDP_Server.Close(); UDP_Server = new UdpClient(localPort); /创建一个新的端口号 UDP_Server.Client.ReceiveBufferSize = 1000000000; /接收缓冲区大小 UDP_Server.Client.SendBufferSize = 1000000000; /发送缓冲区大小 try thdUdp = new Thread(new ThreadStart(GetUDPData); /创建一个线程 thdU
30、dp.Start(); /执行当前线程 catch (Exception e) MessageBox.Show(e.ToString(); /显示线程的错误信息 3. GetUDPData 方法该方法用于获取远程消息时,将消息转发个UDPSocket控件的DataArrial事件,然后通过该事件将消息发送给远程客户端。代码如下:private void GetUDPData() /获取当前接收的消息 while (active) try byte Data = UDP_Server.Receive(ref ServerEndPoint); /将获取的远程消息转换成二进制流 if (DataAr
31、rival != null) DataArrival(Data, ServerEndPoint.Address, ServerEndPoint.Port); Thread.Sleep(0); catch 4. Sand方法该方法用于将主机获取的信息,通过IP地址和端口号发送给远程客户端。代码如下:public void Send(System.Net.IPAddress Host, int Port, byte Data) try IPEndPoint server = new IPEndPoint(Host, Port); UDP_Server.Send(Data, Data.Length,
32、 server); catch (Exception e) MessageBox.Show(e.ToString(); 自定义控件UDPSocket的“属性”窗口和“事件”窗口分别如图2.9和图2.10所示。图2.9 UDPSocket控件的“属性”窗口图2.10 UDPSocket控件的“事件”窗口2.6.2 Publec_Class 类 该类用于记录服务器端和客户端的基本信息,并通过自定义方法MyHostIP获取服务端的所有IP地址,通过自定义方法 Get_Windows 目录。2.6.3 ClassForm类该类将获取的窗体在InnerList列表中进行添加和移除操作,并可以通过指定的索
33、引号在列表中查找相应的窗体。 2.6.4 ClassMsg 类 该类主要是用枚举型的元素指定 消息发送的命令、消息类型和消息发送的状态等,并用Serializable属性对该类进行序列化。当序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保对象吧被序列化多次。2.6.5 ClassOptionData 类该类将服务器端对数据库的操作进行了封装,通过对该类中各方法的调用,可以对数据表进行添加、修改及读取等操作。下满对个各方法进行详细说明。1.ExSQL方法该方法通过SQLStr参数所传递的SQL语句,对指定数据表进行查询,并返回记录个数。2.ExSQLReDr方法该方法通过SQLStr参数
34、所传递的SQL语句,对指定数据表进行查询,并将查找到的数据信息以SqlDataReader对象的形式返回。代码如下:2.6.6 ClassSerialiZers类该类主要时用SerializeBinary和DeSerializeBinary方法在客户端发送或接受信息时,将对象序列化或反序列化成二进制流。下面对这两个方法进行详细说明。1.SerializeBinary方法该方法用于在客户端发送信息时,将发送的对象序列化成二进制流,并返回序列化后的二进制流,因为Socket只能以二进制流的形式进行传输。代码如下:2.DeSerializeBinary方法该方法用于在客户端接收信息时,将二进制流反序
35、列化为对象,并返序列化后的对象,以便在指定的控件上显示接受信息。2.6.7 ClassUserInfo 类该类用于记录当前QQ用户的编号、IP地址、端口号、用户名和密码等,并将其序列化。2.6.8 ClassUsers 类该类主要用于将服务器端所有注册的用户信息存储到Base类的InnerList列表中,这样当用户注册或登录时,便可以将该列表中的信息群发给当前在线所有用户,以改变QQ窗体中的显示状态。2.6.9 cVideo 类该类主要用于通过视频API函数打开已安装的视频设备,并将视频所拍摄的照片保存到指定的路径。2.7 客户端注册模块设计注册模块主要用于在客户端用户第一次使用企业QQ系统时
36、,对当前用户进行注册,并将注册的信息发给服务器端进行记录。客户端注册窗体运行结果如图2.11所示。图2.11 客户端注册窗体2.7.1 设计客户端注册窗体新建一个Windows窗体,命名为F_SerSetup.cs,主要用于实现用户的注册功能。F_SerSetup 窗体用到的主要控件如表2.3所示。 表 2.3 客户端注册窗体用到的主要控件控件类型控件ID主要属性设置用途 text_IPBorderStyle属性设置为Fixed-Single输入服务器iptext_IP5BorderStyle属性设置为Fixed-SingleText属性设置为11000输入端口号text_Name无输入用户名
37、text_PassW-ordPassWordChar属性设置为“*”输入密码text_PassW-ord2PassWordChar属性设置为“*”输入确认密码Botton_OKText属性设置为“确定”执行当前窗体Botton_Clo-seText属性设置为“取消”关闭当前窗体udpSocket1LocalHost属性设置为127.0.0.1,LocalPort属性设置为11001使用UDP协议连接服务端2.7.2 注册信息发送到服务器端在输入完注册信息后,单击“确定”按钮,通过自定义控件udpSocket的Send方法,将注册信息以二进制流的形式发送给服务端。 2.7.3 将注册星系写入到I
38、NI文件中自定义一个DataArrival事件进行一步执行,以便获取客户端所返回的消息。当返回的时注册成功消息时,创建一个INI文件,并写入客户的IP地址、端口号和用户名称,关闭注册窗体。在定义控件udpSocket1的DataArrival事件中,利用托管调用DataArrival自定义方法,并在该控件的线程上用指定的参数对其进行异步托管。实现代码如下:private void udpSocket1_DataArrival(byte Data, IPAddress Ip, int Port) DataArrivaldelegateoutdelegate=new DataArrivaldele
39、gate(DataArrival); this.BeginInvoke(outdelegate, new object Data, Ip, Port ); 2.8 客户端登录模块设计登录模主要时将用户名和密码发送到服务器端,的那个服务器有该用户时,将返回一个登录成功的消息,通过判断该消息,关闭登录窗体,进入QQ窗体。客户端登录窗体如图2.12所示。图 2.12 客户端登录窗体2.8.1 设计客户端登录窗体 新建一个Windows窗体,命名为F_Login.cs,并将其FormBorderStyle属性设置为None。该窗体主要用来实现客户端的登录功能。F_Login 窗体用到的主要控件如表2.
40、4所示。 表2.4 客户端登录窗体用到的主要控件控件类型控件ID主要属性设置用途Text_Name无输入用户名Text_PassWordPassWordChar属性设置为“*”输入用户密码Botton_QQLogonText属性设置为“登录”执行登录操作Botton_QQCloseText属性设置为“取消”关闭当前窗体udpSocket1LocalHost属性设置为192.168.1.8Local属性设置为11003使用UDP协议连接服务端2.8.2 判断注册的INI文件是否存在登录窗体加载时,首先在Windouws系统目录中查找Server.ini文件,如果该文件不存在,调用注册窗体;否则,
41、在INI文件中读取服务器的IP地址和端口号。实现代码省略。2.8.3 登录功能的实现输入用户名和密码,单击窗体中的“登录”按钮,该按钮将通过登录窗体加载时所获得服务器IP和端口号,将用户名和密码以二进制流的形式发送给服务器端,以判断是否能够成功登录。代码如下:private void button_QQLogon_Click(object sender, EventArgs e) if(Publec_Class.ServerPort != & Publec_Class.ServerIP != ) /当读取到服务器的IP和端口号时 RegisterMsg registermsg = new RegisterMsg(); registermsg.UserName = text_Name.Text; registermsg.PassWord = text_PassWord.Text;byte registerData = new ClassSerializers().SerializeBinary(registermsg).ToArray(); ClassMsg msg = new ClassMsg(); msg.sendKind = SendKind.SendCommand; msg.msgCommand = MsgCommand
链接地址:https://www.31doc.com/p-3969049.html