基于QT的局域网通讯聊天室系统设计与实现_第1页
基于QT的局域网通讯聊天室系统设计与实现_第2页
基于QT的局域网通讯聊天室系统设计与实现_第3页
基于QT的局域网通讯聊天室系统设计与实现_第4页
基于QT的局域网通讯聊天室系统设计与实现_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

AbstractPAGEIIIABSTRACTABSTRACTScienceandtechnologyintheincreasinglyupgrades,networktransmissiontoolisvaried,rich,andintheseaofthescienceandtechnology,thecommunicationsoftwareseemstohavebecomemoreimportant,itisthebridgeofcommunicationbetweenpeople,itcanhelppeopletobetterfinishthework,facilitatecommunication,maketheworkefficiencygreatlyimproved,sothatthepersonisunabletoleavethenetwork,withoutcommunication.Current,chattoolsaremany,suchasQQ,WeChat,thereisalsoachatfunction,theseareallneedtoprovideaccesstotheInternetenvironmentcanchat,andthesecommonchattoolsforenterprisestaff,butthesetoolshavetoomanyotherentertainmentfunctions,willaffecttheenterprisestaff'sworkefficiency,inordertoprovidetheefficiencyoftheenterprisestaff,butalsototheneedsofthestafftobeabletotimelycommunication,designanddevelopalocalareanetwork(LAN)basedonQTtechnologyintegratingwordsandsendthefileofchatsoftware.ThisdesignisbasedonthetechnologyofQTandc++achievedsendtextmessages,transferfiles,andotherfunctions,inordertobeabletohavegoodscalabilityandmaintainability,usingQTCreatorchatsoftwareapplicationdevelopment,usingtheSQLitedatabasefordatastoragemanagement,afterthevalidationtest,thesystemrealizedthefunctionofchatting,achievedthedesignpurpose.Keywords:Chat;QT;C++泰山学院学士学位论文(设计)目录第1章绪论 11.1开发背景 11.2国内外研究现状 11.3研究目标和方法 21.4主要研究内容 3第2章相关技术简介 42.1QT开发环境概述 42.1.1QT特点 42.1.2QT类库 52.1.3QT对象通讯机制 62.2编译调试工具简介 7第3章可行性分析 93.1经济可行性 93.2技术可行性 93.3操作可行性 93.4法律方面可行性分析 9第4章需求分析 114.1需求分析 114.1.1功能需求分析 114.1.2性能需求分析 114.2系统用例分析 124.3类与对象模型 13第5章系统设计 145.1总体结构 145.2系统流程设计 145.2.1事件跟踪图设计 145.2.2状态图设计 155.2.3系统数据流图设计 155.3数据库设计 17第6章系统实现 186.1系统主界面模块 186.2聊天室模块 226.3发送接收文件模块 27第7章系统测试 297.1软件测试的概念和原则 297.2测试的过程 297.3系统的运行环境 307.4系统维护 307.5系统存在的不足 30结束语 31参考文献 32致谢 33绪论开发背景企业内部各部门以及部门内的人员工作,往往是无法离开沟通和交流,而以往的沟通方式都是传真或者是公司内部电话,这种方式的沟通虽然非常直接,但是有着很多的缺点,效率低,并且相对麻烦。如今,网络发达,网上的资源更是庞大,工作中资源的交流以及输入输出都离不开网络,传统方式将默默的被淘汰,而以计算机科技将会代替之。网络上的沟通有着许多的优势,便捷性好,部署简单,方便公司管理。因此,公司有一套用于内部信息交流的系统非常重要。系统拥有着公司邮箱,集体视频会议,点对点沟通等功能,而项目的研究在国内外都还算成熟,典型的项目例如微软的Lync,腾讯的RTX等。现今的通讯工具往往是即使信息交互,这种功能的出现大力的推动着公司企业的发展,能使公司人员之间的交流,便捷化,高效化。企业人员相互交换信息,加强公司内部的合作性,促进资源的流动。但是一般的高性能即时通讯工具收费都狠高,使得公司内部无法普及。这样的话一项具备方便,快捷,安全的局域网聊天系统就尤为的重要,本设计开发的局域网语音聊天软件适用于企业内部使用,既充分利用了网络资源,又保证了内部信息的安全。本工具才用的是C/S架构,软件由客户端及服务器两部分组成,所使用的程序语言为C/C++,数据的存储主要是SQLite数据表。服务器用于后台处理数据,客户端面向用户,其用着美观的界面以及良好的人机交互效果。国内外研究现状即时通信软件最早出自于芬兰的IRC,时间大概是1988年间。后来以色列的Mirabilis公司带着他的软件冲击着这个通讯市场,那就是ICQ,这款软件就是当年腾讯所模范的”老师“,当然不仅仅是腾讯,早些年是美国的AOL公司开发的instantMessenger,以及雅虎公司开发的YahooMessenger以及操作系统龙头老大微软开发的MSNMessenger等纷纷效仿。目前即时通信工具己经风靡全世界,IBM公司的Sametime[7],和微软公司的MSN最为风行。现在最为成熟的企业通讯交流工具是Sametime,其是用Notes语言来开发的,软件的界面是用JAVA语言来实现的,但是这款软件的售价非常的高昂,一般的中小型企业是无法接受的。如今国内市场的高效通讯软件有很多,最为显著的就是QQ,米聊,淘宝旺旺这些。但是流行的即时聊天软件是以QQ为龙头老大。腾讯QQ坐拥着大量的用户,而成功的背后必然是科技技术及运营手段的领先,我们只看科技方面,QQ拥有着大量的软件功能,它可以在移动端聊天通讯,可以创立多个聊天室,网络邮箱,点对点的文件传输等功能。不仅仅是这些基础的功能,腾讯QQ更是可以在线请求语音通话以及面对面视频功能,它是一款极其强大的即时通讯软件。虽说国内有着像QQ这样强大的通讯软件,但是国内的通讯软件市场依旧是短缺且杂乱,很多大的企业要付着高昂的代价使用一些高端的企业内通讯软体,而这些代价无疑是给企业的运维添加着成本,而假如去使用非正规渠道的软件,又可背上其他昂贵的版权纠纷。研究目标和方法首先要明确研究步骤,第一步要进行对项目的需求分析,明确本次项目的基本功能,然后就是展开对研究的调查,收集研究文献,了解更多的技术内容,其次就是对项目可行性的研究和扩展。其中,项目所需的开发环境和技术支持:项目是关于网络聊天软件,该项目应用与WINDOW系统,主要采用C/S结构进行开发,使系统更加独立清晰化,能进行局部实时刷新。本系统前台使用windows系统下的QT集成开发环境进行开发,采用C++语言进行代码编写,C++语言是面向对象的语言,其功能强大和灵活。本系统后台使用SQLite数据库实现数据库管理。主要研究内容本系统主要是满足于聊天室管理的基本需要,主要需求是文字聊天、文件发送等主要功能。在界面上力求做到美观、大方。操作方面尽量避免由于会员操作不当带来系统的出错现象。对数据库操作的性能需要做到优化,数据库过大将会影响运行速度。研究的具体工作如下:(1)绪论部分:大体的介绍项目研究意义,以及国内国外对类似项目研究的情况,以及项目的研究手段。(2)相关技术:该部分是讲解介绍项目所用工具和技术的理论。(3)需求分析:解析项目的所需完成的功能及性能分析。(4)系统设计:介绍项目软件总的设计流程和步骤,其中包括用例图的绘制以及项目数据库的分析。(5)详细设计:主要包括聊天室管理系统界面设计和代码实现等(6)系统测试:利用软件测试的方法来观测项目设计是否符合需求。(7)总结:总结本文开发过程以及希望存在的问题及改进的地方等。

相关技术简介QT开发环境概述QT特点可移植性QT是跨平台的C++应用程序框架,它既可以在LINUX上使用开发,也可以满足WINDOWS上开发的需求,增强代码的可移植性。国际化国际化指的是一种地区语言开发的项目软件能够简便的给其他地区使用,而QT是支持代码本地化的,用户所编写的UI界面的文本是可以通过翻译表来转化为本地文本语言。Qt有着强大的linguist界面工具,它可以很方便的让开发代码翻译为本地语言,这个工具实现了软件的国际化。面向对象QT所用语言是c/c++,其本身就是这语言的应用框架,该语言是面向对象来设计软件的。QT有着独特的功能模块设计,以及良好的UI体验,让用户无需知道组件功能可以方便使用,Qt特有的signal和slot机制,所谓槽函数机制来实现通信和信息传递。可用户化的外观Qt有着多种主题外观,不管是在WINDOWS或者是LINUX上的外观其都可以支持用户在界面上改变运行的时间或者是界面的互换。独有的SignalSlot机制QT用于着一种强大的事件处理机制,那就是SignalSloT机制,在WINDOWS系统中,软件通过事件的循环以及消息的传递机制来实现软件图像的实现,对象的操作处理也是由此解决的。在QT里,SLOT就好比是事件函数也叫槽,Signal就是所谓的事件,而这两者的链接就是靠的connect。这种调用方式非常的安全可靠,它允许代码的回调实现,这使得QT成为真正的编程软件。开发程序的方便性QTDesigner是QT的一种可视化的代码开发工具,其功能强大有些类似于Windows中的VS++,它两都有个共同点,就是可以直接向自己的项目增加各种各样的部件,开发人员无需再去按部就班的编写程序,就这么个特点就是别的软件无法比拟的。这无疑证实着QT开发程序的简便,而且QT有着链接互联网的开发帮助文档,这个文档包含着像LINUX中的man啊,以及本身的QTManual.这些文档对初学者或者是专业人员都是非常有用且方便的。强大的功能QT其功能的强大是多方面的,它拥有着非常优秀的界面UI设计功能,它能利用现有的部件开发应用界面;以及其还包含大量的接口函数,数量大概有个300左右的C++的类;并且QT具备了强大的绘画功能,不管是2D或者3D图像都可以实现,它能够再任意的显示绘画设备中设计图像界面。QT类库Qt类库大致可以分为三个部分:控件,框架和工具。控件QT内部控件涵盖了环境控件和主窗口控件和标准对话框,各种的GUI控件,联网式的用户帮助文档。环境控件大致的功能就是为QT开发的应用程序提供着大量的全局服务的对象,其中包含了一些系统性的设置和所谓的国际化标准。比如QTranslator可以用于翻译各式的国际语言,Qapplication能够管理GUI程序的控制流。主窗口控件提供了程序的UI界面框架,主要的例子就是QMainWindow,其主管着程序的主窗口界面,它允许用户向界面添加各式各样的控件及工具,如QToolBars,QDockWidgets。标准对话框就是QT用于简化程序开发所配置了一系列的经典对话框,其主要有5中标准的对话框,如QFileDialog,QcolorDialog,QFotDialog,QinputDialog,QMessageBox。QFileDialog可用于选择打开文件,选择目录及远程网络文件。QcolorDialog可以让用户选择对话框颜色,QFontDialog是字体对话框选择字体,QinputDialog可输入单行文字,整数,还有浮点数。QMessageBox用于提示用户,它包含了提示对话框,确认对话框,警告用户对话框等。框架QT框架部分就是涵盖了一些不可视的类和对象,也就是一些对象模型和抽象的控件,还有用于对图像绘画及拖动的外观控件。QObject就是对象模型,其是QT框架的基础,也是QT整体的核心类,它是QT对象的基类。它主要的功能就是提供了最特殊的机制-Singalslot机制。像绘画方面就是QBrush,简单的来说这个类就是一个基础性的图形对象,主要是用于填充一些简单的几何图形。而拖动拖放操作就是靠的QDragObject类,它涵盖了鼠标移动的事件,可以进行一系列的拖动,放下操作。而颜色方面就是QColor类,它是基于RGB字符来创建图像及文本色彩的。工具QT工具指的是与DATE日期以及链表相关等数据结构,它和GUI有本质的区别甚至可以说是不相干的。最基础的工具就是我们常见的数据结构,其中就包括链表,队列和数组,以及堆栈等数据结构。工具所涵盖的类就有QArray,QimageIO,QFile,QDate等。分开来讲就是,QArray控制图像编码,QimageIO就是对图像像素级操作,QFile就是对文件操作。QT对象通讯机制QT的通讯机制可以简单的分为内部通讯和外部通讯,这个机制是非常关键的,它是对象程序开发设计的关键内容,能够很好的实现内外的信息资源的交互。QT的通讯机制是独特的,也就是(signal-slot)机制,也叫做信号槽机制,它与MFC处理时间的环节很类似,重点就是软件的消息映射和时间的循环。我们可以把SINAL就是信号比作事件,而SLOT就是我们事件触发的槽也就是槽函数。这两者的链接靠的是connect。这种独特的机制打破了传统,不再是复杂且容易崩溃的,而是非常简洁和高效。上面总结来说是QT内部的对象通信,下面我们分析下QT与外部设备的通讯,讲到这个就不得不提socket套接字,它能够将外部设备与QT应用程序紧紧相连,当QT应用程序启动时,程序会调用函数启动服务器,而服务器就会通过套接字与外部输入设备进行连接。连接成功后软件会进入事件循环中,事件处理程序会通过select函数来观察内部文件资源的变化及流动,并对套接字进行实时的监听。这里的文件资源变化就是对数据输出的体现。当事件处理结束后,应用程序会将事件反馈给外部设备,这就完成了QT与外部设备的通讯。编译调试工具简介GCC编译工具简介GCC也就是GNU编译器套件,它涵盖了多种编程语言,如C,C++,java,Objective-C等等,它还包括了许多语言的库。而我们所讲的GCC是GNU的编译器,这款编译器被很多UNIX类操作系统所使用,如LINUX和MACOSX等,它们都把它作为标准的编译器,当然我们在WINDOW系统也可以使用它,它是一款非常自由的软件。基本用法如下所示:说到用法我们先要理解GCC的编译过程:预处理:这里编译器会做很多操作,如删除define定义,讲所有的宏定义展开,删除所有开发人员的注释等,这里最重要的操作就是对#include的处理,这是预编译指令,这里会将不断递归查找文件内的.h文件,生成.i文件编译:这个步骤会对代码进行扫描,对语义和语法的分析,将程序源代码优化,然后生成目标代码.s文件。汇编:这里汇编器将.s汇编代码编译成机器语言指令,生成目标.o文件链接:链接器将程序所用的库函数进行相连接,生成可执行文件。而这里就涉及到了GCC编译器的用法没步操作的指令都是不一样的下面就编译器的基本用法:一步到位的写法:gccxxx.c-oxxx独立进行分布编译就是:gcc-Exxx.c-oxxx.i-E:对代码进行预处理gcc-sxxx.i-oxxx.s-S:对源代码进行预处理并且编译gcc-cxxx.s-oxxx.o-C:不做链接的编译gccxxx.o-oxxxGDB调试工具简介GDB是linux内的程序调试工具,它好比与WINDOW下的IDE,但是还是有很大的不同,WINDOW非常优秀且美观的图形界面,而GDB就不一样了,它是完全是由代码来执行的,那我们为什么要用GDB呢,因为它足够的强大,它的命令行模式非常的自由,而且快捷,而IDE启动往往是非常的缓慢,这也是因为GDB它所占用的资源非常的少,并且免费以及是开源的。

可行性分析该项目研究的可行性分析将从经济可行性,和技术可行性以及操作可行性等方面进行可行性分析。经济可行性该项目用的开发软件及工具都是开源且免费的,所以自身在项目开发时所投入的成本很低,无非最多的就是投入自身的时间和经历,除去这些该项目的开发损耗可以忽略,而这款软件或许能够降低企业的成本,增强企业员工的工作效率,因此该项目在经济方面是可行的。技术可行性现阶段网络科技的发展已经很成熟了,在技术方面,早在九几年就有技术大神对此类项目进行研究和开发,所以站在巨人的肩膀上会非常的轻松。尤其是该项目所使用的语言C/C++是非常成熟的语言,完全可以满足项目软件的开发,而计算机系统方面,也是能够支持软件的运行。数据库方面,我们所用到的SQListe也是非常便捷的,所以在技术方面也是可行的。操作可行性操作可行性主要就是指的用户使用软件的舒适程度,其包含着上手的难易程度,以及灵活性,如何使得软件操作灵活,便于后期的扩张与开发和可视性的实现都是标准。而随着社会发展,计算机的普及,一般有过大学教育的人都能熟练操作计算机,因此,在这种意义上,开发本系统也是可行的。法律方面可行性分析项目软件由我个人所完成,是尊守法律规定的情况下,自主的进行项目的研究和开发,所以是不可能有侵犯他人权利的行为。因此该网站从法律上来说是可行的。通过上述的四大可行性分析,我们这款聊天软件系统是不管在经济方面还是技术开发的方面上都是可行的。

需求分析需求分析功能需求分析本局域网聊天室需要完成如下功能:(1)软件的最基本功能就是用户之间的信息传递。(2)用户使用客户端进行文件传输,会先通过服务器的链接转发来实现文件的传输功能。(3)实时的显示用户主机列表即好友列表。及时实现在线用户主机的检查更新和维护。(4)在C/S模式中,客户端和服务器是相互分不开的。如果客户端启用后,首先查看服务端是否在线,如果在线则客户端进行顺利登录,如果不在线,提示登陆失败,点击确认退出登陆的客户端。在聊天的过程中,服务端会一直进行监听确认是否有客户端退出系统;如果监听不到某一个客户端的CS,则认为服务器已经下线,就需要提示用户并建议其退出,一段时间后如果客户端没有响应,则自动退出。性能需求分析数据精确度输入数据长度适中,类型准确。时间特性当用户发送消息或文件时,系统能够及时进行相应。适用性聊天软件可在LINUX或者WINDOWS平台使用,本次主要是针对WINDOWS用户开发。故障处理性本系统采用的SQLite数据库具备完整的数据备份与还原功能,可对数据的丢失进行及时的处理,而且可以通过查看数据库的日志,无论系统何时、何地出现故障都便于查找。系统用例分析使用UML所提供的用例图可以很好的分析用户的需求,方便自己做需求分析,其非常强调系统的完整性,对开发人员开发系统时帮助很大,有利于系统开发的完整。用例图图符如下表4-1所示:表4-1用例图图符可视化图符名称描述系统系统边界,用例放其中用例用例图中的用例执行者描述与系统功能有关的外部实体,可以是用户,也可以是外部系统关联连接执行者和用例用户发送信息,及用户接收服务器转发信息的功能用例图如下:信息功能用例:图4-1文字消息功能用例图用户的发送文件,服务器接受文件,用户拒绝文件传输的功能用例图如下:文件传输功能用例图:图4-2文件传输功能用例图类与对象模型类与对象的分析时,主要是主重结构以及功能上的理解,要定义好成员属性创建好功能模块。类与对象模型如图4-3所示。图4-3聊天软件类与对象模型图

系统设计系统设计就是系统性的分析结果,这个过程是非常抽象的。主要的任务就是结合用户所反馈的需求进行逻辑性质的方案转换,要利用系统科学的思想去设计最为满足客户需求的草案,为下一个阶段打好基础,对项目的实施提供了多方面的数据反馈。总体结构根据聊天室管理系统的需求及总体的设计,本系统采用QT技术,采用的是C/S结构。本系统的总体结构图如下图5-1所示:图5-1系统总体结构图系统流程设计事件跟踪图设计用户通过客户端,打开聊天窗口,可发送语音聊天请求,对方可以接受或者拒绝聊天请求。用户也可发送文件,聊天信息,随后可自行关闭窗口结束聊天。事件跟踪图如图5-2所示:图5-2事件跟踪图状态图设计用户登录时将经过服务器的身份验证,通过数据表合适信息,失败的话显示错误信息,然后退出,成功即可发起聊天。状态图如图5-3所示:图5-3状态图系统数据流图设计数据流图它能够真实的描述出软件数据的输入和输出,它是一种非常强有力的逻辑模型。先将信息传输的数据流程图分为0层数据流图和1层数据流图。0层数据流图如图5-4所示:图5-4顶层数据流图系统的顶层至少初略的概括了系统内外部数据传输的状况,为了更清晰地表达数据加工过程,进一步对它进行细化,从而得到1层数据流图,如图5-5所示:图5-5聊天一层数据流程图一层数据流对服务器数据处理并不清晰,为了更好的服务器的数据控制和处理,制作了聊天软件二层数据流程图,来展示服务器处理用户信息传递,如发送图片,发送文件等,如图5-6所示。图5-6局域网语音聊天二层数据流程图数据库设计建立用于存储用户地址信息的用户表,以便服务器识别主机信息:表5-1用户表序号字段名称数据类型备注1hostName用户主机名称varchar(50)主键2hostAddress主机地址varchar(50)非空3macAddress主机硬件地址varchar(50)非空4userName登录名varchar(50)可空5remark个人描述信息varchar(50)非空建立存储用户消息信息表,用于服务器消息的转发:表5-2消息信息表序号字段名称数据类型备注1idIDint主键,非空2userName用户名varchar(50)非空3hostName主机名varchar(50)非空4hostAddress主机地址varchar(50)非空5macAddress主机硬件地址varchar(50)非空6localUserName当前用户名varchar(50)非空7localHostName当前主机名varchar(50)非空8localHostAddress当前主机地址varchar(50)非空9localMacAddress当前主机硬件地址varchar(50)非空10type类型varchar(50)非空11messageType消息类型varchar(50)非空12messageText消息内容varchar(500)非空13sendTime发送时间datetime非空14receiveTime接收时间datetime非空建立用于存储用户发送消息报文表:表5-3消息报文表序号字段名称数据类型备注1seq包序号long主键,非空2userName用户名varchar(50)非空3hostName主机名varchar(50)非空4head消息头varchar(100)非空5data消息正文text非空

系统实现系统主界面模块软件的主界面就是显示出用户的在线情况,让用户可以清晰的观察好友的在线情况,以及用户的好友分类情况。系统主界面如所示6-1所示。图6.1系统界面系统主界面的实现代码如下:dialog_Widget::dialog_Widget(QStringLocalHostName,QStringIp,QStringmes,QWidget*parent):QWidget(parent),ui(newUi::dialog_Widget){ui->setupUi(this);this->setWindowIcon(QIcon(":img/qq.ico"));QPalettepalette_main;palette_main.setBrush(QPalette::Background,QBrush(QPixmap(":img/blue_BG.jpg")));this->setPalette(palette_main);this->setAutoFillBackground(true);setWindowFlags(Qt::FramelessWindowHint);QBitmapbmp(this->size());bmp.fill();QPainterp(&bmp);//p.setPen(Qt::NoPen);//p.setBrush(Qt::black);p.setRenderHint(QPainter::Antialiasing);//抗锯齿//p.drawRoundedRect(bmp.rect(),20,20);//四个角都是圆弧//只要上边角圆弧intarcR=10;//弧度QRectrect=this->rect();QPainterPathpath;//逆时针path.moveTo(arcR,0);path.arcTo(0,0,arcR*2,arcR*2,90.0f,90.0f);path.lineTo(0,rect.height());path.lineTo(rect.width(),rect.height());path.lineTo(rect.width(),arcR);path.arcTo(rect.width()-arcR*2,0,arcR*2,arcR*2,0.0f,90.0f);path.lineTo(arcR,0);p.drawPath(path);p.fillPath(path,QBrush(Qt::red));//arm和windows平台没有这行代码将显示一个透明的空空的框setMask(bmp);//==========实现上边角圆弧==========//this->resize(500,500);//this->setFixedSize(535,530);//this->setWindowFlags(Qt::FramelessWindowHint);ui->toolW->setFixedHeight(40);QPalettepalette;palette.setBrush(QPalette::Window,QBrush(QColor(250,255,240,150)));ui->dialog_W->setPalette(palette);ui->dialog_W->setAutoFillBackground(true);IP_addr=Ip;user_name=LocalHostName;//qDebug()<<"IPdialog"<<Ip<<endl;TcpSocket=newQTcpSocket(this);TcpServer=newQTcpServer(this);//新的客户端和服务器clientConnection=newQTcpSocket();loading();QStringIcon_path=":img/n6.png";//默认头像ui->Head_label->setPixmap(Icon_path);ui->Head_label->setFixedSize(40,40);versionText=newQLabel;versionText->setText(LocalHostName);//加载用户名btnMin=newsysButton("sys_button_min.png",tr("最小化"));connect(btnMin,SIGNAL(clicked()),this,SLOT(showMin()));btnMax=newsysButton("sys_button_max.png",tr("最大化"));btnClose=newsysButton("sys_button_close.png",tr("关闭"));connect(btnClose,SIGNAL(clicked()),this,SLOT(close()));UdpSocket=newQUdpSocket;if(!UdpSocket->bind(public_port,QUdpSocket::ShareAddress|QUdpSocket::ReuseAddressHint)){QMessageBox::critical(0,QString::fromUtf8("错误"),QString::fromUtf8("本地端口连接错误"));exit(1);}connect(UdpSocket,SIGNAL(readyRead()),this,SLOT(msg_recive()));//UDP接受消息ui->mainLayout->addWidget(versionText/*,0,Qt::AlignVCenter*/);versionText->setContentsMargins(0,0,0,0);ui->mainLayout->addStretch();ui->mainLayout->addWidget(btnMin);ui->mainLayout->addWidget(btnClose);ui->mainLayout->setSpacing(0);ui->mainLayout->setContentsMargins(0,0,0,0);QVBoxLayout*DG_mainLayout=newQVBoxLayout(this);//DG_mainLayout->setContentsMargins(0,0,0,0);DG_mainLayout->addLayout(ui->mainLayout);DG_mainLayout->addWidget(ui->toolW);DG_mainLayout->addWidget(ui->dialog_W);TcpSocket->connectToHost(QHostAddress::LocalHost,45454);//连接对方作为服务器...连接不上总是超时FUCK、换成本地连接之后出现connectionrefused//connect(TcpSocket,SIGNAL(readyRead()),this,SLOT(msg_recive()));//监听服务端发送的数据消息由服务端发送?connect(ui->closeButton,SIGNAL(clicked()),this,SLOT(close_button_slot()));//两个按钮的信号槽...}聊天室模块局域网聊天室界面。在聊天室窗口用户可以发送、接收信息、保存聊天记录以及发送接收文件等,如图6-2所示。图6-2聊天室窗口实现代码如下://接收信息voiddialog_Widget::msg_recive(){while(UdpSocket->hasPendingDatagrams()){QByteArraydatagram;datagram.resize(UdpSocket->pendingDatagramSize());UdpSocket->readDatagram(datagram.data(),datagram.size());QDataStreamin(&datagram,QIODevice::ReadOnly);in.setVersion(QDataStream::Qt_4_6);QStringsize_name;QStringsize_msg;QStringsend_name;QStringsend_ip;QStringsize_ip;QStringmy_ip=get_myIp();inttype;in>>type;switch(type){caseMessage:{in>>size_name>>size_msg>>size_ip>>send_name>>send_ip;if((size_ip==my_ip)&&(send_ip==IP_addr))//如果收到的信息里面包含的IP地址==我的IP地址就是说明发给我的,{QStringtime=QDateTime::currentDateTime().toString("hh:mm:ss");ui->MSG_show->setTextColor(Qt::blue);ui->MSG_show->setCurrentFont(QFont("TimesNewRoman",12));ui->MSG_show->append("["+send_name+"]"+time);ui->MSG_show->append(size_msg);QSoundplayer("E:\msg.wav");player.play();}break;caseShake:{QSoundplayer("E:msg.wav");player.play();//发出好友上线提示音shaking();QStringRPG="【系统提示】:对方给您发送了窗口抖动";ui->MSG_show->setTextColor(Qt::gray);ui->MSG_show->append(RPG);break;}}default:{break;}}}}//发送消息voiddialog_Widget::send_msg(MessageTypetype){//TcpSocket->abort();//取消已有的连接switch(type){caseMessage:{if(ui->MSG_Edit->toPlainText()==""){QMessageBox::warning(0,tr("警告"),tr("发送内容不能为空"),QMessageBox::Ok);return;}QStringmy_name=get_myName();QStringmsg_send=getMessage();QStringsend_my_ip=get_myIp();QStringtime=QDateTime::currentDateTime().toString("hh:mm:ss");ui->MSG_show->setTextColor(Qt::green);ui->MSG_show->setCurrentFont(QFont("TimesNewRoman",12));ui->MSG_show->append("["+my_name+"]"+time);ui->MSG_show->append(msg_send);QByteArraydata;QDataStreamout(&data,QIODevice::WriteOnly);out<<type<<user_name<<msg_send<<IP_addr<<my_name<<send_my_ip;//IP_addr是接受方的IP,send_myIp是发送方的ip//qDebug()<<"IPsend"<<IP_addr<<endl;UdpSocket->writeDatagram(data,QHostAddress::Broadcast,public_port);//这样就把名字和消息发送走了?UdpSocket->writeDatagram(data,QHostAddress::Broadcast,SHAREPORT);break;}caseShake:{QStringmy_name=get_myName();QStringsend_my_ip=get_myIp();QByteArraydata;QDataStreamout(&data,QIODevice::WriteOnly);out<<type<<user_name<<IP_addr<<my_name<<send_my_ip;UdpSocket->writeDatagram(data,QHostAddress::Broadcast,public_port);//这样就把名字和消息发送走了?UdpSocket->writeDatagram(data,QHostAddress::Broadcast,SHAREPORT);}default:break;}}//保存聊天记录voiddialog_Widget::on_save()//保存聊天记录{if(ui->MSG_show->document()->isEmpty())QMessageBox::warning(0,tr("警告"),tr("聊天记录为空,无法保存!"),QMessageBox::Ok);else{//获得文件名QStringfileName=QFileDialog::getSaveFileName(this,tr("保存聊天记录"),tr("聊天记录"),tr("文本(*.txt);;AllFile(*.*)"));if(!fileName.isEmpty())saveFile(fileName);}}发送接收文件模块实现代码如下://接收文件voidWidget::hasPendingFile(QStringuserName,QStringserverAddress,//接收文件QStringclientAddress,QStringfileName){QStringipAddress=getIP();if(ipAddress==clientAddress){intbtn=QMessageBox::information(this,tr("接受文件"),tr("来自%1(%2)的文件:%3,是否接收?").arg(userName).arg(serverAddress).arg(fileName),QMessageBox::Yes,QMessageBox::No);if(btn==QMessageBox::Yes){QStringname=QFileDialog::getSaveFileName(0,tr("保存文件"),fileName);if(!name.isEmpty()){TcpClient*client=newTcpClient(this);client->setFileName(name);client->setHostAddress(QHostAddress(serverAddress));client->show();}}else{sendMessage(all_file_refuse,serverAddress);}}}//发送文件voidWidget::on_send_clicked()//发送{sendMessage(all_msg);}voidWidget::on_sendfile_clicked(){if(ui->tableWidget->selectedItems().isEmpty()){QMessageBox::warning(0,tr("选择用户"),tr("请先从用户列表选择要传送的用户!"),QMessageBox::Ok);return;}server->show();server->initServer();}

系统测试软件测试的概念和原则软件测试就是在软件投入运行前,对软件的需求分析,设计规格说明和编码的最终复审,是保证软件质量的关键步骤。如果要给软件测试下定义,可以这样将,软件测试是为了发现错误而执行程序的过程[8]。进行软件测试应该遵循的基本原则[9]有:对于相对复杂的产品或系统来说,Zero-Bug是一种理想,Good-Enough是我们的原则。Good-Enough原则就是一种权衡投入/产出比的原则,不充分的测试是不负责任的,过分的测试是一种资源的浪费,同样也是一种不负责任的表现。我们操作的困难在于,如何界定什么样的测试是不充分的,什么样的测试是过分的。目前状况唯一可用的答案是:制定最低通过标准和测试内容,然后具体问题具体分析。测试的过程系统测试的方法可以分为人工测试和机器测试两种。在该网站中,本人采取的是人工测试。每做完一个功能模块,都会进行相应的功能模块测试,以便保证每个模块都能尽量的减少错误的发生。(1)客户端进入模块的测试程序成功运行后,出现自己的信息,程序运行自己就可以实现登录,这个已经成功完成,因此本次测试成功。(2)文本聊天模块的测试用户进入聊天,选择好友,可以为好友发送信息,也可以接收到用户发送的信息。经过以上操作的测试,用户可以正常聊天,这些操作均已成功完成,因此本次测试成功。(3)发送、接收文件模块的测试用户选择好友,点击文件,出现发送窗口,待发送成功后,好友就可以收到发送的文件,并可以保存。经过以上操作的测试,用户可以正常发送和接收文件,这些操作均已成功完成,因此本次测试成功。系统的运行环境本聊天室管理系统的开发环境如下:开发语言环境:QT。运行平台:在Windows7、Windows10中运行。系统维护聊天室管理系统维护的任务是修改系统在使用过程中发现的隐含错误,扩充在使用过程中用户提出的新的功能及性能要求,其目的是维护软件系统的。正常运作。本文设计的聊天室管理系统主要是系统软件和代码的维护,只有定期进行系统维护,系统才能延长其生命周期,长期的运行下去。系统存在的不足在功能方面,系统设计的功能较为简单,未实现视频聊天、对信息安全加密等功能。同时,在聊天室管理系统的界面设计美观方面,设计得比较简单,美观性还不高,还有待进一步学习和提高。

结束语每一个成功的项目往往离不开对项目的整体分析和解剖,做好系统分析是成功的第一步,这个阶段让开发者能更好的去完成功能需求,做好对系统的功能分析才能保证着项目的顺利完成,不然的话项目在开发过程会发生大量的错误以及复杂的功能故障问题,可能到了结束阶段还无法完成相应的任务。因此按照老师的要求我们先写了毕业设计任务书,将设计目标及预计实现的功能填入任务书中,同时将实现的功能模块的工作任务顺序写下来,明确今后的设计任务,使得我们的设计及时的完成。本文所设计的聊天室管理系统软件,主要功能是能够完成服务器与客户端之间的连接,并完成客户端用户之间的聊天通讯,软件主要包括以下几个功能:发送文字消息、发送抖动、传输文件等功能。项目功能的完成让我解决了之前许多无法解决的问题,如何做到让客户端与服务器链接后,使数据高效的传输,完成用户与用户之间一对一,点对点的信息传输。以及服务器即时发现新客户端的链接,并告诉客户端新用户的链接。

参考文献[1]BjarneStroustrup.THEC++PROGRAMMINGLANGUAGE[M].HigherEducationPressPearsonEducation,2002[2][美]WalterSavitch著,周靖译.C++面向对象程序设计[M]——基础、数据结构与编程思想.清华大学出版社,2004[3]陈文宇,张松梅编著.C++语言教程[M].电子科技大学出版社,2004[4]谭浩强编著.C++程序设计[M].清华大学出版社,2004[5].掌握标准C++的类(电子版)[M].化境编程界[6]陈英,梁建武.Linux基础及应用教程[M].水利水电出版社,2008,29-42[7]丁林松,黄丽琴.Qt4图形设计与嵌入式开发[M].人民邮电出版社,2009,45-69[8]金西,黄汪.嵌入式Linux技术及其应用[M].计算机应用,2000,20(7):5-6[9]倪继利.Qt以及linux操作系统窗口设计[M].电子工业出版社,2006,45-152[10]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,200611[11]王子强,刘海燕,李媛州.Linux下图形用户界面程序的开发与实现[M].计算机应用与软件,2005[12]谢春,陶烨,瞿坦.基于嵌入式Linux系统的多进程图形用户界面GUI系统研究[M].工业控制计算机,2003,5:28-29

致谢大学的4年日子就这么过去了,时光飞逝,时间往往是不会等人的,现在往往会觉得自己所学知识还不够,但毕业就在眼前,再多的遗憾还阻挡不了大学生涯的结束,社会的压力如大山一般有时会压的自己喘不过气来。毕业设计的结束,也意味着自己不在是学校的学生,而是社会上的小白,大学学习过程中还有那些知识没有掌握,在实习期知识需要我们进入深入研究。毕业设计让我学会了很多,研究了很多自己没有尝试的领域,让自己学会如何去解决问题,让自己习惯烦恼,让自己更加的适应社会的工作生活。毕业设计能够如期的完成,首先我要衷心感谢我的老师对我的帮助和支持,各位老师对我设计过程中的帮助和指导使我受益颇多,以及在这方面给予我很多帮助的同学朋友,在此一并表示感谢!因为我们的知识是有限的,所以本文将不可避免的会出现一些错误和不足之处,还请老师指正。

HYPERLINK电脑快捷知识大全编辑本段一、常见用法F1显示当前程序或者windows的帮助内容。F2当你选中一个文件的话,这意味着“重命名”F3当你在桌面上的时候是打开“查找:所有文件”对话框F10或ALT激活当前程序的菜单栏windows键或CTRL+ESC打开开始菜单CTRL+ALT+DELETE在win9x中打开关闭程序对话框DELETE删除被选择的选择项目,如果是文件,将被放入回收站SHIFT+DELETE删除被选择的选择项目,如果是文件,将被直接删除而不是放入回收站CTRL+N新建一个新的文件CTRL+O打开“打开文件”对话框CTRL+P打开“打印”对话框CTRL+S保存当前操作的文件CTRL+X剪切被选择的项目到剪贴板CTRL+INSERT或CTRL+C复制被选择的项目到剪贴板SHIFT+INSERT或CTRL+V粘贴剪贴板中的内容到当前位置ALT+BACKSPACE或CTRL+Z撤销上一步的操作ALT+SHIFT+BACKSPACE重做上一步被撤销的操作Windows键+L锁屏键Windows键+M最小化所有被打开的窗口。Windows键+SHIFT+M重新将恢复上一项操作前窗口的大小和位置Windows键+E打开资源管理器Windows键+F打开“查找:所有文件”对话框Windows键+R打开“运行”对话框Windows键+BREAK打开“系统属性”对话框Windows键+CTRL+F打开“查找:计算机”对话框SHIFT+F10或鼠标右击打开当前活动项目的快捷菜单SHIFT在放入CD的时候按下不放,可以跳过自动播放CD。在打开word的时候按下不放,可以跳过自启动的宏ALT+F4关闭当前应用程序ALT+SPACEBAR打开程序最左上角的菜单ALT+TAB切换当前程序ALT+ESC切换当前程序ALT+ENTER将windows下运行的MSDOS窗口在窗口和全屏幕状态间切换PRINTSCREEN将当前屏幕以图象方式拷贝到剪贴板ALT+PRINTSCREEN将当前活动程序窗口以图象方式拷贝到剪贴板CTRL+F4关闭当前应用程序中的当前文本(如word中)CTRL+F6切换到当前应用程序中的下一个文本(加shift可以跳到前一个窗口)在IE中:ALT+RIGHTARROW显示前一页(前进键)ALT+LEFTARROW显示后一页(后退键)CTRL+TAB在页面上的各框架中切换(加shift反向)F5刷新CTRL+F5强行刷新目的快捷键激活程序中的菜单栏F10执行菜单上相应的命令ALT+菜单上带下划线的字母关闭多文档界面程序中的当前窗口CTRL+F4关闭当前窗口或退出程序ALT+F4复制CTRL+C剪切CTRL+X删除DELETE显示所选对话框项目的帮助F1显示当前窗口的系统菜单ALT+空格键显示所选项目的快捷菜单SHIFT+F10显示“开始”菜单CTRL+ESC显示多文档界面程序的系统菜单ALT+连字号(-)粘贴CTRL+V切换到上次使用的窗口或者按住ALT然后重复按TAB,切换到另一个窗口ALT+TAB撤消CTRL+Z编辑本段二、使用“Windows资源管理器”的快捷键目的快捷键如果当前选择展开了,要折叠或者选择父文件夹左箭头折叠所选的文件夹NUMLOCK+负号(-)如果当前选择折叠了,要展开或者选择第一个子文件夹右箭头展开当前选择下的所有文件夹NUMLOCK+*展开所选的文件夹NUMLOCK+加号(+)在左右窗格间切换F6编辑本段三、使用WINDOWS键可以使用Microsoft自然键盘或含有Windows徽标键的其他任何兼容键盘的以下快捷键。目的快捷键在任务栏上的按钮间循环WINDOWS+TAB显示“查找:所有文件”WINDOWS+F显示“查找:计算机”CTRL+WINDOWS+F显示“帮助”WINDOWS+F1显示“运行”命令WINDOWS+R显示“开始”菜单WINDOWS显示“系统属性”对话框WINDOWS+BREAK显示“Windows资源管理器”WINDOWS+E最小化或还原所有窗口WINDOWS+D撤消最小化所有窗口SHIFT+WINDOWS+M编辑本段四、“我的电脑”和“资源管理器”的快捷键目的快捷键关闭所选文件夹及其所有父文件夹按住SHIFT键再单击“关闭按钮(仅适用于“我的电脑”)向后移动到上一个视图ALT+左箭头向前移动到上一个视图ALT+右箭头查看上一级文件夹BACKSPACE编辑本段五、使用对话框中的快捷键目的快捷键取消当前任务ESC如果当前控件是个按钮,要单击该按钮或者如果当前控件是个复选框,要选择或清除该复选框或者如果当前控件是个选项按钮,要单击该选项空格键单击相应的命令ALT+带下划线的字母单击所选按钮ENTER在选项上向后移动SHIFT+TAB在选项卡上向后移动CTRL+SHIFT+TAB在选项上向前移动TAB在选项卡上向前移动CTRL+TAB如果在“另存为”或“打开”对话框中选择了某文件夹,要打开上一级文件夹BACKSPACE在“另存为”或“打开”对话框中打开“保存到”或“查阅”F4刷新“另存为”或“打开”对话框F5编辑本段六、桌面、我的电脑和“资源管理器”快捷键选择项目时,可以使用以下快捷键。目的快捷键插入光盘时不用“自动播放”功能按住SHIFT插入CD-ROM复制文件按住CTRL拖动文件创建快捷方式按住CTRL+SHIFT拖动文件立即删除某项目而不将其放入SHIFT+DELETE“回收站”显示“查找:所有文件”F3显示项目的快捷菜单APPLICATION键刷新窗口的内容F5重命名项目F2选择所有项目CTRL+A查看项目的属性ALT+ENTER或ALT+双击可将APPLICATION键用于Microsoft自然键盘或含有APPLICATION键的其他兼容键编辑本段七、Microsoft放大程序的快捷键这里运用Windows徽标键和其他键的组合。快捷键目的Windows徽标+PRINTSCREEN将屏幕复制到剪贴板(包括鼠标光标)Windows徽标+SCROLLLOCK将屏幕复制到剪贴板(不包括鼠标光标)Windows徽标+PAGEUP切换反色。Windows徽标+PAGEDOWN切换跟随鼠标光标Windows徽标+向上箭头增加放大率Windows徽标+向下箭头减小放大率编辑本段八、使用辅助选项快捷键目的快捷键切换筛选键开关右SHIFT八秒切换高对比度开关左ALT+左SHIFT+PRINTSCREEN切换鼠标键开关左ALT+左SHIFT+NUMLOCK切换粘滞键开关SHIFT键五次切换切换键开关NUMLOCK五秒QQ快捷键,玩QQ更方便Alt+S快速回复Alt+C关闭当前窗口Alt+H打开聊天记录Alt+T更改消息模式Ait+J打开聊天纪录Ctrl+A全选当前对话框里的内容Ctrl+FQQ里直接显示字体设置工具条Ctrl+J输入框里回车(跟回车一个效果)Ctrl+M输入框里回车(跟回车一个效果)Ctrl+L对输入框里当前行的文字左对齐Ctrl+R对输入框里当前行的文字右对齐Ctrl+E对输入框里当前行的文字居中Ctrl+V在qq对话框里实行粘贴Ctrl+Z清空/恢复输入框里的文字Ctrl+回车快速回复这个可能是聊QQ时最常用到的了Ctrl+Alt+Z快速提取消息Ctrl+Alt+A捕捉屏幕最常用的快捷键F5刷新DELETE删除TAB改变焦点CTRL+C复制CTRL+X剪切CTRL+V粘贴CTRL+A全选CTRL+Z撤销CTRL+S保存ALT+F4关闭CTRL+Y恢复ALT+TAB切换CTRL+F5强制刷新CTRL+W关闭CTRL+F查找SHIFT+DELETE永久删除CTRL+ALT+DEL任务管理SHIFT+TAB-反向切换CTRL+空格--中英文输入切换CTRL+Shift输入法切换CTRL+ESC--开始菜单CTRL+ALT+ZQQ快速提取消息CTRL+ALT+AQQ截图工具CTRL+ENTERQQ发消息Alt+1保存当前表单Alt+2保存为通用表单Alt+A展开收藏夹列表资源管理器END显示当前窗口的底端HOME显示当前窗口的顶端NU

温馨提示

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

评论

0/150

提交评论