多人网络聊天室的设计与实现_第1页
多人网络聊天室的设计与实现_第2页
多人网络聊天室的设计与实现_第3页
多人网络聊天室的设计与实现_第4页
多人网络聊天室的设计与实现_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

PAGEIIIPAGEI本科毕业论文(设计)论文题目:多人网络聊天室的设计与实现学生姓名:学号:专业:班级:指导教师:完成日期:2010年5月18日多人网络聊天室的设计与实现内容摘要随着网络的逐渐普及,以及网络技术的不段发展,人们通过网络进行交流的方式变得多样化。网络聊天室便是其中之一。本设计使用C++作为开发语言,以其MFC进行前台界面设计,采用C/S结构进行设计,使用Socket技术进行消息传输,利用Access为后台数据库,并以ADO数据库访问技术实现对数据库的各种管理操作。所完成的网络聊天室具有多人同时聊天、两人私聊、发送表情及动作、显示用户列表等功能。同时,为了方便管理用户信息,设计了用户注册登陆功能以及用户清理功能。并且,加入了分屏、清屏、屏蔽的辅助功能,增加了聊天室的操作性。本论文共分六个部分,各部分内容安排如下:第一部分,简要的介绍了本设计的内容和现状,并介绍了本文的组织结构;第二部分,主要介绍了本系统的开发环境,并对使用到的一些技术进行了简要的介绍;第三部分,主要分析了系统应该达到的目标以及实现本系统的一些要求;第四部分,主要分析了系统相关数据库各表的设计与实现;第五部分,是系统详细设计包括系统结构分析、主要工作流程各模块功能详细介绍和关键代码分析;第六部分是系统的运行与测试,描述系统的具体运行与测试过程等。关键词:聊天室数据库C++MFCC/SSocket

TheDesignandImplementationofMultiuserChattingRoomOnlineAbstractWiththeincreasingpopularityofthenetwork,aswellasnetworktechnologyfordeveloping,peoplecommunicateacrossthenetworkbecomediversified.Internetchatroomsisoneofthem.IusedC++asthedevelopmentlanguageofmysoftware,withitsMFCtofrontinterfacedesign,usedC/Sstructure,usedSockettechnologyformessagetransport,useAccessdesignbackgrounddatabase,andusetheADOdatabaseaccesstechnologytomanagethedatabase.Thecompletednetworkchatroomhasallthefunctionsofthepopularchatrooms,includingmanypeoplechatatthesametime,privatechatbetweentwopeople,inremarkstobeabletosendexpressionsandacts,itcanalsodisplaytheuserlist.Atthesametime,inordertomakeiteasiertomanageusers'information,designedtheuserregistered/loginfunction,usercleanupfunction.Andaddingauxiliaryfunctions,includessplit-screen,cleanup-screenandshielding,whichincreasedthechatroomoperability.Thispaperisdividedintosixparts,eachpartarrangedasfollows:thefirstpart,abriefdescriptionofthisdesign'scontentsandstatus,anddescribestheorganizationalstructureofthispaper;thesecondpart,introducesthesystemdevelopmentenvironment,andabriefintroductionofsometechnologiesbeenused;thethirdpart,themainanalysisis,thesystemshouldmeettheobjectivesandimplementsomeoftherequirementsofthissystem;thefourthpart,themainanalysisis,thesystem'srelateddatabase'stablestothedesignandimplementation;thepartfive,issystemdetaileddesign,includingsystemstructuralanalysis,themainworkflow'seachfunctionmodules'detailsandkeycodeanalysis;thesixthpart,isrunandtestsystem,describesthesystem'soperationandtestingprocesses,andsoon.Keywords:ChattingRoomDataBaseC/SC++MFCSocketPAGE36目录序言 1一、 绪论 2(一)概述 2(二)选题背景 2(三)系统内容与目标 3(四)本文的组织结构 3二、 系统开发环境和关键技术 4(一)开发环境 41.硬件环境 42.软件环境 4(二)关键技术 41.VisualC++概述 42.MFC简介 53.C/S模式简介 54.MFCSocket编程 65.ADO技术 86.Access数据库简介 9三、 系统总体设计 10(一)可行性分析 101.技术可行性 102.管理可行性 103.经济可行性 104.运行可行性 10(二)需求分析 101.对功能的需求规定 112.对性能的需求规定 123.数据库需求分析 124.故障处理要求 135.日常维护要求 13(三)功能概述 14(四)运行环境 14(五)系统总体设计方案 14(六)数据字典 151.User——用户信息表 152.Manager——管理员信息表 153.UserLog——用户登录信息表 154.Room——个人聊天室信息表 155.Msg——离线消息表 156.Report——举报处理信息表 15四、 系统数据库设计 16(一)系统数据库设计流程 16(二)系统数据库逻辑结构设计 171.用户信息表 172.管理员信息表 173.登录信息表 184.个人聊天室信息表 185.离线消息表 186.举报处理信息表 19(三)建立数据库连接 191.设置数据源 192.添加ADO控件 193.测试 19五、 系统详细设计 20(一)系统概要设计 201.系统设计方案 202.系统结构分析 203.系统流程分析 21(二)系统功能详细设计 221.新用户注册模块 222.登录模块 223.服务器端 224.客户端 23(三)系统关键代码分析 241.服务器端 242.客户端 27六、 系统的运行与测试 29(一)系统的运行 291.服务器端界面 292.客户端界面 29(二)系统的测试 301.开启服务器 302.用户登录 303.用户聊天 314.服务器监听 325.清理门户 32七、 结束语 34致谢 35参考文献 36序言在传统生活里,人们利用写信、电话等方式联络,但此类方式周期缓慢,呆板且不可靠。在这个信息极其发达的时代,随后我们可以用来进行信息交流的方法日益增多,比如电报、电话、电子邮件、OICQ等通讯手段,但是这些或者不方便或者有局限性或者有费用的问题。近年来计算机技术的快速发展,特别是计算机网络的发展,越来越深刻的改变了人们生活的方方面面,使得人们能以更低廉的价格,开发出更方便、更实用的网络工具。各种在线服务系统,更是深刻的影响了人们的联系和交流方式,使得人们可以在远隔千里之遥随时通讯。过去的种种陈旧的联系方式,已经不能满足现代生活的需要。网络聊天室凭借其友好的外观、强大的功能、使用的便利、联系的及时等特点博得现代人的青睐,其应用的市场十分广阔。本系统使用的是C/SC/S结构:即Client/Server(C/S结构:即Client/Server(客户端/服务器)结构,就是只安装维护一个服务器(Server),而客户端使用客户端软件(Client)运行。本文主要介绍了所应用到的技术的基础知识,并探讨了建立聊天室的设计思想、方法及设计过程,详细地分析了各个模块的功能及实现方法。本文所实现的聊天室具有良好的人机交互界面、合理的数据库结构可以实现发言、自动显示所在聊天室的成员、管理员对该聊天室进行管理等交互功能,经过测试调试,证明可实际应用。

绪论概述网络聊天室是即时聊天工具,本系统的聊天信息采用服务器转发方式,当前在线的用户都可以接收到,也实现了两人间的私聊功能。系统包括服务器程序和客户端程序,服务器包括聊天信息即时转发,发送通知,数据备份等功能。客户端具有登陆,注册,修改个人信息,聊天等功能。本文从理论和实践两个角度出发,给出了聊天室主要功能的分析与设计,并对聊天室与VC++技术进行了较为深入的探讨。本文首先介绍了聊天室系统所使用到的一些关键技术,接着介绍了该系统的设计思路和需求分析,然后是对系统的具体介绍,包括系统中创建的数据库以及系统的具体功能介绍。选题背景聊天室是当今广泛应用的一种网络服务,它为广大网民提供了一种方便快捷的沟通方式,在线聊天是上网的重要活动之一。第十六次CNNIC调查结果显示:在网络用户经常使用的网络服务/功能调查中,网上聊天(聊天室、QQ、ICQ等)占被调查人群的42.6%,处于第四位,作为操作简便也是出现最早的网上聊天方式,聊天室聊天又是其中最普及的一种。目前聊天室市场竞争比较激烈,基本上各大门户网站都有聊天室,如新浪聊天室、网易聊天室、搜狐聊天室,也有一些专门的聊天室网站,如碧聊。现阶段聊天室主要分为三类:基于Web的文本方式的聊天室、三维语音视频聊天室和复合聊天室。年轻人是聊天室的主要需求人群。除了沟通交流、结识新朋友外,学术性聊天室也非常受到欢迎和关注,而高度娱乐化聊天室则仍然是聊天室发展的主要方向,它的需求人群巨大。从需求时间上看,聊天室在时间上没有约束,可以24小时提供服务。随着网络技术和数据库管理系统的发展,C/S体系结构在软件的开发中越来越受到人们的认可。因为这种结构的应用软件充分的发挥了网络的作用和数据库的优势。同时,Microsoft公司的VisualC++编程开发环境,已经成为各国程序员开发系统和应用程序的首选工具。这是由于它有功能强大,支持面向对象,模块化和代码可以重写等特点,可以大大提高软件和系统的效率。网络的飞速发展使得网络应用程序开发显的越来越重要,但是网络应用程序开发和传统的开发思想和实现上有很大区别。Microsoft公司的VisualC++编程开发环境在进行网络应用程序开发方面有以下几个特点:开发出的应用程序占有资源少、开发人员有灵活多变的开发方式、如果使用VC的MFC类库则可以使用开发人员从很大程度上简化开发过程、可使用应用程序有很强的扩展性。基于网络编程的日益流行和重要,以及VisualC++对网络编程所提供的全面技术支持,我决定采用VisualC++作为我毕业设计网络聊天工具的前端开发环境。而后端数据库采用Microsoft公司的Access2003。系统内容与目标随着网络的飞速发展,为了适应网络的发展和充分利用网络的价值,一种基于网络的通信工具就被开发出来——聊天室系统。它是一个即时通信软件,以方便局域网内部用户或广域网用户之间的通信联系,并且大大的降低了通信费用。本课题主要研究的是多人网络聊天室软件,此软件分为管理者系统、使用者聊天系统以及登录注册系统,包括服务器端和客户端,目标是能够成功实现用户在客户端与服务器端的文字信息传递,使消息能即时准确的发送给客户端,保障用户的通信是即时且安全的,创建一个健康的沟通环境。主要研究内容有:熟悉C++的语法规则和VC的实际操作,探索在系统开发平台下利用Socket技术、多线程开发技术、TCP、UDP协议等进行C/S模式的多人网络聊天软件的实际开发与实现。相关技术知识的介绍可行性分析需求分析概要设计和功能设计具体运行及测试结果分析、展望及总结相关技术知识的介绍可行性分析需求分析概要设计和功能设计具体运行及测试结果分析、展望及总结数据库设计图1-1组织结构图

系统开发环境和关键技术开发环境开发多人网络聊天室软件,要求开发设备完备,机器性能稳定,操作系统选择适当,开发平台安装正确,程序可在尽可能多的平台上顺利运行,所需运行机器配置尽可能低。本次软件开发选择的硬件环境及软件环境如下:硬件环境处理器:InetlPentiumPⅣ(InetlPentiumPⅢ以上)内存:512MB(256MB以上)网络:局域网、广域网均可软件环境操作系统:WindowsXP(Windows2000以上)开发平台:MicrosoftVisualC++6.0开发语言:C++关键技术VisualC++概述VisualC++简介VC++基于C/C++语言,主要由MFC组成,是与系统联系非常紧密的编程工具,它兼有高级语言和低级语言的双重特性,功能强大,使用灵活,执行效率高。VisualC++的发展过程从20世纪70年代第一次提出面向对象的概念开始,到现在面向对象已发展成为一种比较成熟的编程思想。通过面向对象思想,可以将现实世界直接映射到面向对象解空间,从而为系统的设计和开发带来革命性的影响。VisualC++是一个典型的面向对象程序的设计语言,它也是目前为止功能最强、最受欢迎、应用最广泛、高效的Windows应用程序开发工具,它是在C语言基础之上发展起来的,是C语言的超集。VisualC++的特点VisualC++是功能最为强大的可视化开发工具,它不仅支持传统的软件开发方法,更重要的是它能支持面向对象、可视化的开发风格。因此VisualC++又称作是一个集成开发工具,它提供了软件代码自动生成和可视化的资源编辑功能。VisualC++具有的优点:提供了面向对象的应用程序框架MFC(MicrosoftFoundationClass),简化了程序员的编程工作,提高了模块的可重用性;提供了基于CASE技术的可视化软件的自动生成和维护工具AppWizard、ClassWizard、VisualStudio、WizardBar等,实现了直观、可视的程序设计风格,方便的编辑和管理各种类,维护程序的源代码;封装了Windows的API函数、USER、KERNEL、GDI函数,从而简化了编程时创建、维护窗口的许多复杂的工作[1]。MFC简介MFC是微软基础类库(MicrosoftFoundationClasses)的简称,是微软公司实现的一个C++类库,主要封装了大部分的WindowsAPIAPI:即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行。函数。VC++是微软公司开发的C/C++的集成开发环境,所谓集成开发环境,就是说利用它你可以编辑,编译,调试,而不是使用多种工具轮换操作,灵活性较大。MFC使用“Afx”作为所有的全局函数的前缀,“afx”作为全局变量的前缀[2]API:即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行。MFC除了是一个类库以外,还是Microsoft提供的用于在C++环境下编写应用程序的一个框架和引擎,在VC++里新建一个MFC的工程,开发环境会自动产生许多文件。同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以在代码中看不到原本的SDK编程中的消息循环等等东西,因为MFC框架已经将其封装好了,这样程序员就可以专心的考虑程序的逻辑,而无需考虑这些每次编程都要重复的东西。MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在Windows中实现内部处理的类,如数据库的管理类等。C/S模式简介即Client/Server(客户机/服务器)模式。分为客户机和服务器两层,客户机具有一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件较适于在用户数目不多的局域网内进行使用。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源[3]。C/S结构的优点能充分发挥客户端PC的处理能力,应用服务器运行数据负荷较轻。最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。数据的储存管理功能较为透明。在C/S体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。C/S结构的缺点高昂的维护成本且投资大。传统的C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件。MFCSocket编程WindowsSockets简介关闭套接字sclosesocket(s)建立连接关闭套接字sclosesocket(s)建立连接创建套接字s1=socket(…)将套接字和服务器端主机连接connect(s,…)建立套接字s=socket(…)接受连接,并且得到新的套接字s2s2=accept(s1,…)将本地地址与s1相连接bind(s1,…)监听来自客户方的连接listen(s1,…)在套接字s上读写数据,直到数据交换完Send(s,…)recv(s,…)在套接字s2上读写数据,直到数据交换完recv(s2,…)send(s2,…)关闭套接字s2colsesocket(s2)传输数据关闭套接字s1closesocket(s1)客户端服务器端图2-1MFCSocket编程机制WindowsSocketsAPI是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的BerkeleySocket接口(套接字)[4]。客户端//进行监听sockSrvr.Listen()客户端//进行监听sockSrvr.Listen();//构造文件对象CSockFilefile(&sockClient);//构造CArchive对象CArchive.arIn(file,CArchive::load)服务器端//构造一个CSockect对象sockectCSockectsockClient;//生成sockectsockClient.Create();//构造一个CSockect对象sockectCSockectsockSrvr;//生成sockectsockSrvr.Create(nPort);//构造新的sockectSockSrvr.Accept(sockRecv)//构造文件对象CSockFilefile(&sockRecv)//使用CArchive传送数据arIndwValue;//使用CArchive传送数据arIndwValue;//构造CArchive对象CArchive.arIn(file,CArchive::load)//实现链接sockClient.Connect(strAddr.nPort)客户端图2-2MFC对CSockect的封装客户端Socket有三类:第一种是SOCK_STREAM(流式),提供面向连接的可靠的通信服务,比如telnet,http。第二种是SOCK_DGRAM(数据报),提供无连接不可靠的通信,比如UDP。第三种是SOCK_RAW(原始),主要用于协议的开发和测试,支持通信底层操作,比如对IP和ICMP的直接访问。应用程序调用WindowsSockets的API实现相互之间的通讯。WindowsSockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。MFCSocket编程机制MFCSocket编程机制如上图2.1所示。CSocket类编程模型MFC对Socket的封装采用的步骤如上图2.2所示。ADO技术ADO基本常识ADO(ActiveXDataObject)是Microsoft数据库应用程序开发的新接口,是建立在OLEDB之上的高层数据库访问技术,提供了简单易用的访问各种数据资源(包括关系型和非关系型),是相对比较新的数据库访问技术。ADO接口的工作原理ADO连接数据库应用程序需要进行以下步骤:初始化COM库,利用预编译#import引入ADO库定义文件。在应用程序的初始化函数中对COM库进行初始化。以下两种方法都可以,但是初始化是必须的,一定要加。BOOLCAdoTestApp::InitInstance()//方法1::CoInitialize(NULL);/*方法2if(!AfxOleInit()){AfxMessageBox("COMError!");returnFALSE;}*/…}用Connection对象连接数据库_ConnectionPtrm_pConnection;m_pConnection.CreateInstance(_uuidof(Connection));m_pConnection–Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\DocumentsandSettings\Administrator\Desktop\chatroom\chatserver\chat.mdb;","","",-1);其中_ConnectionPtr是一个接口,类似于ODBC中的CDatabase类,首先创建一个该接口,接着打开某个指定的数据源,即完成数据库的连接。与RecordsetPtr,_CommandPtr接口一起来执行任务。因其使用方便,故也叫做智能指针[5]。利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。使用完毕后关闭连接释放对象。Access数据库简介本系统数据库使用微软Access数据库。Access是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS),是Office系列应用软件之一。Access提供了表、查询、窗体、报表、页、宏、模块7种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务。Access是一种关系型数据库管理系统,其主要特点如下:存储方式单一Access管理的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb)的数据库文件种,便于用户的操作和管理。面向对象Access是一个面向对象的开发工具,利用面向对象的方式将数据库系统中的各种功能对象化,将数据库管理的各种功能封装在各类对象中。通过对象的方法、属性完成数据库的操作和管理,极大地简化了用户的开发工作。界面友好、易操作集成环境、处理多种数据信息Access支持ODBC(开发数据库互连,OpenDataBaseConnectivity)利用Access强大的DDE(动态数据交换)和OLE(对象的联接和嵌入)特性,可以在一个数据表中嵌入位图、声音、Excel表格、Word文档,还可以建立动态的数据库报表和窗体等。

系统总体设计可行性分析可行性分析(FeasibilityAnalysis)也称可行性研究,是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,以避免投资失误,保证新系统开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决[6]。本系统的可行性分析包括以下几方面内容:技术可行性本系统采用了当前流行的C、C++和MFC等语言进行开发,借助VisualC++搭建框架,因此,系统的软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。管理可行性本系统操作简单,对于计算机技术的要求较低,阅读本系统自带的使用说明并进行实际操作后都可以顺利使用。本应用程序只要能够打字,其他操作非常简单,所有操作都是基于电脑上。经济可行性本系统开发经费相对较少,在经济上是可以接受的,并且本系统实施后可以改变人们的联系方式,有助于更多的人去了解计算机和网络,推动网络技术的全国化。现在,计算机的价格已经十分低廉,性能却有了长足的进步,普及率越来越高,参与的人也越来越多,系统的市场潜力巨大,主要表现有以下几个方面:目前会使用计算机并且会上网的人基本上都使用过聊天工具;人们对于一种安全可靠、隐私能够得到保护的沟通的需求越来越高;网络在国内的普及率越来越高;电脑的普及率越来越高,直接促使硬件上的成熟;系统投入少,回报快等等。所以,本系统在经济上是可行的。运行可行性本系统经过精心设计、开发,比较紧凑,项目并不巨大,所以对软硬的要求并不高,运行投入也相对较少,目前普通的电脑都能够满足运行条件,本系统在运行上是可行的。需求分析本程序是利用WinSocket实现的一个网络聊天室。它需要一个主机做服务器,可以和很多客户端进行通信,从而把来自不同的客户的聊天信息转交到所有其他的客户端。系统整体界面美观、大方,操作简单容易上手,各项功能比较完备,是一个利用Client/Server结构的并可以多人同时在线的聊天室。对功能的需求规定该聊天程序分为用户登录、新用户注册、客户端以及服务器端四个部分。用户登录实现功能已注册用户的用户名密码检验。正确,管理员跳转到服务器窗口,普通用户和游客跳转到客户端窗口;错误,返回重新填写。点击注册,跳转到新用户注册窗口。新用户注册实现功能选择用户身份:注册用户、游客、管理员。检查用户名和昵称是否已存在,提示。检查密码与确认密码是否一致。可选设个性化信息。选择密码保护问题,填写密码保护问题答案。注册成功跳转到登录窗口。客户端实现功能显示在线成员列表,并及时更新。游客仅能在大厅的公共区进行聊天,不能进行私聊和加入个人聊天室等的操作。显示个人聊天室列表,并及时更新。成员上下线提示。显示好友列表、黑名单列表。通过用户名或昵称查询用户的个人信息,并加为好友。删除好友。将某成员拉入黑名单。创建个人聊天室,可设置个人聊天室密码。查看个人聊天室状态信息。加入/离开某个人聊天室。向所有在线成员发送和接收消息,消息显示在大厅公共区或个人聊天室公共区。向某一个在线成员发送和接收消息,消息显示在大厅私聊区或个人聊天室私聊区。可选择显示与某个成员或所有成员的聊天信息。私聊区可收起/展开,并可调整私聊区区域大小。用户可设置字体颜色、大小等属性,可发送表情、动作等。保存聊天记录。查询个人登录信息。使用户及时发现帐号异常登录情况。修改个人个性化资料。修改密码。回答密码保护问题,找回密码。发送和接收离线消息。举报发布不良信息的用户。服务器端实现功能开启、停止服务器。配置服务器。管理公告栏。发布广播消息。显示个人聊天室列表及聊天室成员列表。查看个人聊天室状态信息。显示大厅公共区聊天信息。接收用户举报信息。和某个用户私聊。通过昵称查找用户,查看、删除用户信息,踢出用户。查看在线用户列表,踢出不文明用户。为离线用户保存离线消息。保存聊天记录。对性能的需求规定精度要求数据传输过程中不能发生事务中断情况,则保持事务的完整性。时间特性要求响应时间:1s更新处理时间:2s数据的转换和传送时间:1s灵活性要求运行环境的变化:该软件适用于Windows平台系列。同其他软件的接口的变化:本软件在XP系统VC++6.0基础上开发。精度和有效时限的变化:该软件运行于Win32平台,在有效时限范围内,数据精度取决于开发平台的限制[7]。数据库需求分析数据库需要建立6个表,其分别完成的功能有:用户信息表保存用户个人信息,完成用户信息的增、删、改、查功能;验证用户名、昵称是否存在;验证用户名、密码是否正确。管理员信息表保存管理员信息,完成管理员信息的增、删、改功能;验证管理员用户名、密码是否正确。登录信息表保存用户的登录时间、登录状态以及在线时长的记录,完成增、删、查询的功能。个人聊天室信息表保存个人聊天室状态信息,完成添加、更新、查询、删除信息的功能。离线消息表保存离线用户的离线消息,完成添加、删除的功能。举报处理信息表保存用户的举报信息,完成添加举报信息、更改处理状态的功能。故障处理要求对于逻辑错误诸如数据计算错误等,维护开发人员可在用户界定的时间范围内修改。故障查明和记录初步归类和支持故障查明和记录初步归类和支持终止故障处理维护请求维护请求负责解除故障并跟踪监督控制和协商解决过程解决故障和恢复运行故障调查和分析图3-1 故障处理方案图日常维护要求服务器的管理需求服务器管理员要做好日常维护工作,具体工作主要是:配置和管理服务器,维护聊天室的正常运转与秩序,管理本地和远程式客户端等。服务器的网络环境、运行状态、参数设置等情况也是需要管理员时刻关注的。用户行为的管理需求网络用户是聊天室的参与者,只有保证每个网络用户的行为是安全的,才能确保系统不被破坏,不受病毒侵害。需要管理员对用户的客户端操作行为进行有效控制,从而保证终端系统的程序运行是稳定、健康的,有利于形成良好的网络聊天室环境。IP地址的管理需求IP地址管理是网络聊天室能够保持稳定运行的关键。如果IP地管理不当,很容易出现IP地址冲突,就会导致合法的IP地址用户不能正常使用。同时管理员通过对IP地址合法性的确认,保证连接到服务器的客户端都是合法的,防止有恶意目的的访客接入造成用户私密信息的泄露。功能概述利用MFC进行前台界面设计,采用C/S结构,使用WinSock技术进行消息传输,利用Access设计后台数据库,以ADO数据库访问技术实现对数据库的各种管理操作,实现多人网络聊天室的各种基本功能。(详见P15对功能的需求规定)运行环境为保证系统运行的效率和可靠性,对软硬件配置有一定要求。本系统运行要求如下:软件环境操作系统:Windows2000/XP或者Windows98数据库:Access2003硬件环境PU:PII以上内存:128M以上网络:局域网、广域网均可业务逻辑层数据访问层数据库系统总体设计方案业务逻辑层数据访问层数据库图3-2 系统总体设计方案图本系统在整体上可以划分为数据库、数据访问层和业务逻辑层。(1)数据库是系统最底层,存储系统的所有数据。(2)数据访问层建立在数据库之上,应用程序通过该层访问数据库。数据访问层封存数据库的选择、添加、更新和删除等操作,同时还为业务逻辑层提供访问数据库的接口或函数等。该层直接与数据库相关联,同时又为业务逻辑层服务,关系着系统的成败[8]。(3)业务逻辑层包括用户注册、用户管理、用户聊天、管理员控制等逻辑,一般由客户端和服务器端实现系统登录注册窗口、聊天窗口、管理窗口等。数据字典User——用户信息表名称:用户信息表描述:存储用户注册信息定义:用户信息表=ID+用户名+昵称+密码+性别+年龄+所在地+E-Mail+自我介绍说明:通过注册添加用户信息。Manager——管理员信息表名称:管理员信息表描述:存储管理员信息定义:管理员信息表=ID+用户名+密码说明:仅用来保存服务器端管理员信息,只能直接在数据库中添加。UserLog——用户登录信息表名称:用户登录信息表描述:存储用户登录信息定义:用户登录信息表=ID+用户名+IP地址+登录时间+登录状态+在线时长Room——个人聊天室信息表名称:个人聊天室信息表描述:存储个人聊天室状态信息定义:个人聊天室信息表=ID+房间号+房主用户名+房主昵称+聊天室名称+密码+人数Msg——离线消息表名称:离线消息表描述:存储用户离线后接收到的消息定义:离线消息表=ID+用户名+发言人昵称+发言时间+发言内容Report——举报处理信息表名称:举报处理信息表描述:存储举报信息的处理状态定义:举报处理信息表=ID+用户名+昵称+被举报人昵称+处理状态

系统数据库设计系统数据库设计流程数据库需要建立6个表:用户信息表、登录信息表个人聊天室信息表、离线消息表和举报信息处理表。1LogMsgRoom1LogMsgRoomUserIDUserNamePasswordCityAgeSexNameEmailIDUserNameIPLogTimeIDUserNameMessageTimeFromNameIntroduceTimeStatusNumRoomNumPasswordRoomNameIDUserName1ownownn1ownnown11ReportnIDUserNameNameName2StatusName图4-1 数据库E-R图系统数据库逻辑结构设计根据数据库的需求分析和结构设计将数据库的概念结构转化为数据库的逻辑结构[9]:用户信息(用户名、密码、身份、昵称、性别、年龄、所在地、邮箱、自我介绍)管理员信息(用户名、密码)登录信息(用户名、IP地址、登录时间、登录状态、在线时长)个人聊天室信息(房间号、房主用户名、房主昵称、聊天室名称、密码、人数)离线消息(用户名、发言人昵称、发言时间、发言内容)举报处理信息(用户名、昵称、被举报人昵称、处理状态)本设计数据库采用Access数据库,由以上设计可以看出,系统用到6个数据表:User数据表、Manager数据表、Log数据表、Room数据表、Msg数据表和Report数据表。用户信息表User数据表的结构如表4-1所示:表4-1 用户信息表字段名称数据类型可否为空说明ID(主键)自动编号NOTNULL编号UserName文本NOTNULL用户名Password文本NOTNULL密码Identity是/否NOTNULL身份Name文本NOTNULL昵称Sex是/否NOTNULL性别Age数字NULL年龄City文本NULL所在地Email文本NULL电子邮箱Introduce文本NULL自我介绍管理员信息表Manager数据表的结构如表4-2所示:表4-2 管理员信息表字段名称数据类型可否为空说明ID(主键)自动编号NOTNULL编号UserName文本NOTNULL用户名Password文本NOTNULL密码登录信息表Log数据表的结构如表4-3所示:表4-3 登录信息表字段名称字段类型可否为空说明ID(主键)自动编号NOTNULL编号UserName文本NOTNULL用户名IP文本NOTNULLIP地址LogTime日期/时间NOTNULL登录时间Status文本NOTNULL登录状态Time数字NOTNULL在线时长个人聊天室信息表Room数据表的结构如表4-4所示:表4-4 个人聊天室信息表字段名称字段类型可否为空说明ID(主键)自动编号NOTNULL编号RoomNum数字NOTNULL房间号UserName文本NOTNULL房主用户名Name文本NOTNULL房主昵称RoomName文本NOTNULL聊天室名称Passwrd文本NULL密码Num数字NOTNULL人数离线消息表Msg数据表的结构如表4-5所示:表4-5 离线消息表字段名称字段类型可否为空说明ID(主键)自动编号NOTNULL编号UserName文本NOTNULL用户名FromName文本NOTNULL发言人昵称Time日期/时间NOTNULL发言时间Message文本NOTNULL发言内容举报处理信息表Report数据表的结构如表4-6所示:表4-6 举报处理信息表字段名称字段类型可否为空说明ID(主键)自动编号NOTNULL编号UserName文本NOTNULL用户名Name文本NOTNULL昵称Name2文本NOTNULL被举报人昵称Status文本NOTNULL处理状态建立数据库连接设置数据源控制面板->管理工具->odbc数据源管理器->用户dsn->添加->选择DriverdoMircrosoftAcess(*mdb)->单击完成。在弹出的对话框中输入要添加的数据源名:chat,点击选择,弹出“选定数据库”对话框,选择存放mdb文件的驱动器和路径,再选中mdb文件,确定。确定后返回到“ODBC数据源管理器”,新添加的数据源chat显示在用户数据源列表中[10]。添加ADO控件将ADO控件添加到工具栏在工程->添加工程->conpoentsandcontrols\RegisteredActiveXControls选择MicrosoftADODataControl6.0(SP6)(OLEDB)点击INSERT,确定。将ADO控件添加到相应的对话框在对话框中添加ADO控件,按右键选择属性,在通用菜单中双击第三个生成按钮,在提供程序中选择驱动程序MircrosoftJet4.0OLEDBProvider按下一步在数据库名称中选择数据库的路径(放在工程中)[11]。测试测试成功,在工程中会生成数据库源文件。

系统详细设计系统概要设计系统设计方案多人网络聊天室系统的服务器端与客户端通过socket技术进行消息的传递与接收,遵循C/S模式进行设计。系统结构分析修改个人资料修改密码查看登录信息注销账号修改个人资料修改密码查看登录信息注销账号停止服务器配置服务器更新公告栏内容清理门户查找用户资料开启服务器设置字体样式发送公共/私聊消息好友、黑名单发送动作/表情显示离线消息显示公共/私聊消息创建个人聊天室查看用户资料举报不良用户多人网络聊天室系统新用户注册系统登录系统服务器端客户端服务器管理公告栏管理用户管理聊天内容显示在线用户列表显示聊天内容发送聊天内容显示个人资料管理辅助功能系统流程分析多人网络聊天室系统的总体流程由用户登录开始,通过验证身份后,管理员可进入服务器端进行设置、监听和管理;普通用户可进入客户端进行聊天交流,同时在线用户列表刷新。对于新用户需要先进行注册方可登录。总体流程简图如下所示:进入服务器端进行管理开始普通用户注册新用户用户登录进入服务器端进行管理开始普通用户注册新用户用户登录新用户进入客户端进行聊天是否退出否是实现思想多人网络聊天室是以服务器提供服务端连接响应,接受来自客户端的聊天信息,并且根据客户端的要求把这些信息转发到另外一个或多个聊天客户中。使用者通过客户端程序登录到服务器,建立和维护与服务器端的连接,向服务器发送本客户的聊天内容,同时从服务器接受对方的响应,这样就可以与登录在同一服务器上的用户交谈[12]。这是一个面向连接的通信过程,因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。服务器端工作流程服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了[13]。客户端工作流程客户端程序只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。系统功能详细设计新用户注册模块对于首次登录聊天室的用户,需要注册其基本信息,其中用户名、密码和昵称是必填项,性别、年龄、所在地和邮箱是选填项。注册成功后信息存储到数据库相应表单中,跳转到登录窗口。登录模块已注册用户可使用用户名、密码进行登录,用户名、密码正确即可登录成功,跳转至客户端窗口。用户登录后,其登录信息自动被记录到数据库的相应表单中。登录模块身份栏默认为普通用户,管理员可选择身份为管理员,使用用户名、密码进行登录,登录成功后跳转至服务器窗口。服务器端服务器端的功能结构如下图所示:图5-3服务器功能模块图服务器管理模块管理员开启服务器,则客户端可顺利连接到服务器,服务器开始对客户端进行监听;配置服务器可重新配置服务器地址及端口号;停止服务器后,消息传递阻塞,客户端与服务器的连接断开,用户无法正常发送与接收消息,弹出提示信息。聊天内容显示模块服务器窗口可以显示当前在线用户的聊天信息,从而对聊天室的环境进行管理。用户管理模块当有用户破坏聊天室环境、从事不法事情或被多位用户举报时,若此用户为在线用户,则管理员可在在线用户列表中直接选中踢出;若此用户是离线状态,则管理员可以通过其昵称查找到其个人信息,从数据库中删除此人信息,将其“踢出”,维护聊天室的健康环境。公告栏管理模块管理员可以对公告栏的内容进行添加、修改、删除等的操作。客户端客户端的功能结构如下图所示:图5-4客户端功能模块图在线用户列表显示模块实现在线人数和在线用户的统计,并依次显示在线用户昵称。当单击某用户昵称时,发言对象即设置为该用户。当用户离开聊天室时,在线用户列表自动进行更新。聊天内容显示模块公告栏显示管理员公告;公共区显示在线用户的聊天内容,包括状态、动作、表情和消息等;私聊区显示用户与私聊对象间的聊天内容,仅私聊双方可见。聊天内容发送模块可设置消息字体的颜色、大小、类型等,可以发送系统设定的表情和动作,可以选择聊天对象,设置私聊或公开聊天。个人资料管理模块用户可进行修改个人资料、修改密码的操作,数据库中相应表单的内容随之自动更新。用户还可以查看自己的登录信息记录,从而及时发现异常登录情况。当忘记密码后,可通过回答注册时设置的密码保护问题来找回密码。辅助功能模块用户可对公共区或私聊区进行收缩和展开;可将公共区和聊天区的内容清空;用户可以查看其他在线用户的个人基本资料;可从个人聊天室列表选择查看聊天室信息并加入;可输入想要创建的聊天室名称创建聊天室,如果没有重复,则会直接进入自己的聊天室中;可把聊天记录以文本文件的方式保存到本地;用户可添加好友到好友列表,也可将其他用户拉入黑名单,当发现不良用户时可向管理员举报。系统关键代码分析服务器端CClientSocket类以CSocket类为基类,派生新类CClientSocket,用户创建客户Socket列表,实现将服务器接收的信息分发给所有连接至服务器的Socket[14]。CClientSocket类头文件实现如下:classCClientSocket:publicCSocket{……public: CClientSocket(CServerDoc*m_pDoc);public: intm_nMsgCount; CSocketFile*m_pFile; CArchive*m_pArchiveIn; CArchive*m_pArchiveOut; CServerDoc*m_pDoc; BOOLIsAborted(){returnm_pArchiveOut==NULL;} BOOLHasConnectionDropped(void);……public: voidInit(); voidAbort(); voidSendMsg(CMessage*pMsg); voidReceiveMsg(CMessage*pMsg);……};在构造函数中实现变量的初始化。使用ClassWizard在CClientSocket类中重载CSocket类的OnReceive函数,即将收到的消息转发给所有用户Socket。其中,CServerDoc类派生于CDocument类,用于实现向客户套接字发送和接收数据。CListeningSocket类以CSocket类为基类,派生新类CListeningSocket,用于实现服务器端的监听套接字。使用ClassWizard在CListeningSocket类中重载CSocket类的OnAccept函数,收到连接请求后,创建客户套接字,与客户端进行通信。开启/停止服务“启动服务”和“停止服务”按钮的响应函数的实现代码如下:VoidCChatRoomServerDlg::OnButtonStart(){ m_IDC_BUTTON_START.EnableWindow(FALSE); ListeningSocket.Create(4848); ListeningSocket.Listen(); m_IDC_BUTTON_STOP.EnableWindow(TRUE);}VoidCChatRoomServerDlg::OnButtonStop(){ m_IDC_BUTTON_STOP.EnableWindow(FALSE); ListeningSocket.Close(); m_IDC_BUTTON_START.EnableWindow(TRUE);}清理门户“清理门户”按钮的响应函数实现代码如下:voidCServerDoc::OnClean(){ CCleanDlgclean;CStringname; if(clean.DoModal()==IDOK){ if(clean.m_cleanname=="")return; CClientSocket*pSock; POSITIONpos,temp,posname; boolfound=false; for(posname=m_connectionList.GetHeadPosition();posname;) { pSock=(CClientSocket*)m_connectionList.GetNext(posname); if(pSock->name==clean.m_cleanname) found=true; } if(!found){ …… //无法踢出提示信息,返回 } //type为-7表示把人踢出站外,给每个人发一个通知,从在线列表里删除该人 CMessage*pMsg=newCMessage; for(pos=m_connectionList.GetHeadPosition();pos!=NULL;) { temp=pos; pSock=(CClientSocket*)m_connectionList.GetNext(pos); pMsg->m_bClose=FALSE; pMsg->type=-7; pMsg->from=clean.m_cleanname; SendMsg(pSock,pMsg); } //第二次通知该人,你已经被踢出了,同时关闭与它的Socket连接 for(pos=m_connectionList.GetHeadPosition();pos!=NULL;) { temp=pos; pSock=(CClientSocket*)m_connectionList.GetNext(pos); if(pSock->name==clean.m_cleanname) { …… m_connectionList.RemoveAt(temp); if(!pSock->IsAborted()) { pSock->ShutDown(); BYTEBuffer[50]; while(pSock->Receive(Buffer,50)>0); deletepSock; } …… //提示踢出用户消息 }} deletepMsg; }}客户端CChatSocket类以CSocket类为基类,派生新类CCahtSocket,实现从服务器接收消息,并显示在对话框中的列表框中。在CCahtSocket类的头文件中,声明相关成员变量和函数。使用ClassWizard在CChatSocket类中重载CSocket类的Receive函数,调用主对话框CChatClientDoc的成员函数ProcessPendingRead,来显示聊天信息[15]。用户登录游客在登录窗口中输入用户昵称和服务器地址,即可进入客户端使用聊天功能。功能实现代码如下:CLogin::CLogin(CWnd*pParent/*=NULL*/) :CDialog(CLogin::IDD,pParent){ …… //变量初始化 }voidCLogin::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLogin) DDX_CBString(pDX,IDC_IMAGE,m_strImage); DDX_CBString(pDX,IDC_NAME,m_strName); DDX_Text(pDX,IDC_SERVER,m_strServerIP); //}}AFX_DATA_MAP}发送消息在主对话框的“发送”按钮响应函数中,实现向服务器发送用户聊天信息,代码如下:voidCChatClientView::OnSend(){ CMainFrame*pFrame=(CMainFrame*)GetParent(); CComboBox*pTo=(CComboBox*)pFrame->m_wndSend.GetDlgItem(IDC_TO); CComboBox*pType=(CComboBox*)pFrame->m_wndSend.GetDlgItem(IDC_TYPE); CWnd*pText=pFrame->m_wndSend.GetDlgItem

温馨提示

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

评论

0/150

提交评论