




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I第1章绪论1.1研究现状和背景人们通常所说的聊天软件,是一种可以进行文字传输、文件传输的工具,其在因特网上被广泛使用。即时通讯软件通常可以分为两种类型,一种是基于服务器的,另一种是基于P2P的。随着信息化的飞速发展,互联网已成为影响人类生存和发展的一大要素。互联网技术对于人类社会生产及生活的全面渗透使得网络聊天工具成为了于人而言一种不可或缺的工具。相较于传统聊天方式,应用网络聊天工具不仅见长于较低的成本,且在速度及方便性等方面同样有着突出性优势。REF_Ref10265\w\h[1]即时通讯工具能够显著提高效率和生产力,许多企业也认识到了即时通讯工具的优势,利用LAN来提供服务,在有效进行沟通的过程中快速地执行,借此提高了日常工作中的协同性和反映快捷程度。当前市面上也已经出现了QQ、微信等聊天工具,但是它们在便捷性之外,娱乐、广告、游戏等扩展功能越来越多,在吸引用户注意的同时,软件也愈发臃肿,网络上对于追求纯净聊天工具的呼声越来越高。因此,有必要开发一款专注于信息交流的即时通讯软件。1.2研究目标论文叙述的是一款基于Java的在线聊天软件,主要用于用户和用户间的交流。首先用户要能够注册并登录软件,用户在登录软件之后可以通过账号查找好进行添加,用户与好友间能够发送、接收信息,并且信息将被保存于服务器中。用户能够设置自己的资料卡,完善个人信息,也可以查看好友资料卡了解好友的信息。除了与好友聊天外用户还能够创建或加入群聊与更多用户实现聊天。1.3论文组织架构本文的结构安排如下:第1章:绪论,介绍本文的研究现状及背景、研究目标和本文的结构安排。第2章:介绍程序的开发环境和相关技术工具。第3章:系统分析,详细介绍了系统开发的可行性,从技术、经济操作、法律方面等介绍,也介绍了系统开发需求性从功能需求、非功能需求介绍。第4章:系统设计,对该系统做相应设计,包括功能模块设计和数据库设计。第5章:系统实现,对该系统的各个功能模块功能进行实现。第6章:系统测试,对该系统主要功能模块进行测试,并展示了测试结果。结论:对系统的设计和实现进行总结,并对今后的发展进行展望。第2章相关理论和技术2.1Java简介Java在诞生之初只是一门面向对象的语言,但如今Java已经是世界上使用最广泛的编程语言之一。Java开始被用于开发从Web应用程序到移动应用程序再到批处理应用程序的所有内容。Java不仅具有广泛的适用性,其在安全方面的也有很好的表现,能有效的降低病毒对于程序的影响。Java语言是静态面向对象编程语言的代表,它将面向对象理论进行了完善的实施,让程序员可以用不同的思维方法来进行某些复杂的编程。Java十分简洁,Java在语言学习上比C++更简单;Java语言能够跨平台,只需要编译一次,代码便可在任何平台运行,JVM屏蔽了底层操作系统的差异;Java源代码编写后需要进行一次编译将源代码编译为字节码,因此它的运行速度很快;Java程序运行于JVM中,因此它的安全性也较强;Java具有动态性,其类信息在JVM加载时会先进行初始化。2.2MySQL MySQL是一种以C和C++为基础的、由各种编译程序实现的、具有很高可移植能力的数据库。它既能支持各种操作系统,又能为各种编程语言提供相应的应用接口。其从算法上对SQL语句进行了改进,使SQL语句的运行性能得到了极大的提升,同时也使SQL语句的运行速度得到了极大的提升。MySQL小巧,查询速度快,并且是免费开源的,在本次开发中已经可以满足要求,因此在本次开发中选择了MySQL数据库进行数据的储存。2.3Socket介绍Socket是一种被用来将通讯的两人联系在一起的技术,它能够在他们之间搭建一座通讯的桥梁,从而实现讯息的传输。然后在服务器端开启对应的端口号,等待客户机接入。具体地说:在本系统的运作过程中,首先要开启服务器,才能开启服务器的连线,并侦听服务器的连线,随后等待其它使用者的连线。在收到其它使用者的连结讯息时,这个使用者就会得到对应的连结码连结到服务端,进而在服务器和客户端间建立通讯通道,可以使用写入Socket来进行彼此之间的通信。如果有新的客户机请求来进行链接,服务器端本身就需要得到一个新的端口号,来进行被占据的老的端口号的侦听工作。以方便对新的客户端请求做出响应,以此实现多客户的服务功能,让多个客户可以以服务器为中介,来进行简单、高效的通讯。Socket程序的工作过程:1、建立Socket连接:进行通信的一方需要连接另一方时,先对对方的IP地址和端口号进行确认,在确认完成后将会发送连接请求,等待对方回应确认是否接受自己的连接请求。2、数据通信:数据通信指的是在已经建立的连接通道上进行信息传输的过程。3、关闭:在信息传输完成之后,为了让其他客户端的连接更顺畅,需要拆除之前所建立的连接通道来释放被占用的内存。Socket信息交互原理图如图2.1所示:图2.1Socket信息交互图第3章系统分析3.1可行性分析程序的可行性分析在设计过程中是十分重要的,完善的分析能够节约许多在程序开发中的成本,为开发的道路扫清不必要的障碍。因此需要对系统分别进行技术可行性、经济可行性、操作可行性等方面进行全面的分析。3.1.1技术可行性目前,网络技术还在快速地发展着,它已经与各种企业和个人密不可分。与此同时,网络技术的发展也越来越完善,各种以网络技术为基础的即时通讯平台也逐渐地成为了企业公司、部门单位用来提升工作效率的一种良好工具。另外,即时通讯软件的开发已经拥有了许多成功的实例,在技术方面开发它的并不高,且开发该软件所需要的开发软件获取较为简单,在开发过程中没有什么压力,因此成功开发是可行的。(1)系统软件开发系统:能够支持eclipse或IDEA运行的各类系统均可开发软件:myeclipse或者eclipseWebServer:JBoss、Weblogic或者tomcat(2)开发语言Java是一种简单易用并且具有很强的能力的技术,因为其具有跨平台的特性,所以在开发语言中占据着很大的优势,不仅包括了C++语言中ObjectOriented的特性,还对C中十分复杂的指针、多继承等特征进行了优化。与此同时,还添加了垃圾回收的机制,从而大大简化了程序员的开发过程,并能够及时的释放出存储空间,让开发者不再浪费时间和精力在优化空间释放上。3.1.2经济可行性基于Java的在线聊天APP开发需要使用的工具能够直接在各个官网免费下载,不需要其他的经济支出;研发方面,本系统由本人自行开发,通过所学的知识以及互联网完成,并无其它经济支出。这样,在即时通讯软件的开发期间,所耗费的资源就不会很难供给与维护了。从软件价值角度来看,在软件设计成功后,它可以给使用者带来方便,同时它还可以给开发初学者带来一定的借鉴价值,因此,从上述两个角度来看,这一点是可以实现的。3.1.3操作可行性本系统利用C/S结构、Java语言技术、JavaSwing和Mysql数据库等技术,使本系统更加有效与稳定,使系统设计的更加简单、易操作。这次设计的网络聊天APP就是其中最基础的一款应用。本软件只要打开客户端即可进入,操作简单方便,便于使用者使用。3.1.4法律可行性基于Java的在线聊天APP是由个人独立开发的项目,不存在版权等法律纠纷。另外就是本项目的立题没有不良引导,意在帮助人们更方便快捷的沟通,对社会有益的,不存在违法违规等情况。因此本项目在法律上是完全可行的。3.2需求分析对软件未来要实现的功能的假设,也就是需求分析的过程,需要对用户的需求和目的进行确定,然后对目标展开分析,并给出解决方案。综合考量在这其中有什么是必须要完成的,有什么是不能完成的,什么内容要注重用户体验,什么内容要注重可用性。因此,在开发该软件前,对其进行需求分析就显得尤为重要。主要的难点有:供需交流的困难,动态变化的需求,以及后续的系统维护和维修。这对于一个软件的寿命来说是非常关键的,需求分析的成果常常可以控制一个项目的整体发展趋势,因此,在项目的开发中,有必要进行需求分析。3.2.1功能需求分析应用程序的主要工作是实现用户和用户间的信息交流。用户首次使用只需通过填写相应的信息来完成账号的注册,接着就能使用账号和密码登录客户端使用程序。用户能够通过修改资料卡详细自己的个人信息,也能通过账号查找用户添加好友,用户间能够消息和传输文件,也能够建立群聊实现一对多的信息沟通。用户只需要安装该应用程序就能够在自己的电脑上使用并完成相应操作。数据库为应用程序实现信息储存和交换,以上就是在线聊天APP的大体功能。3.2.2非功能需求分析(1)系统的安全性信息的安全性一直是一个不容置疑的问题,因此为了保证信息的安全性,必须对信息进行多重加密。数据的一致性和完整性也是任何一个系统都要确保的,因此,在系统中生成的数据都要被定时地核实和检查。另外,也要做好数据的备份,以防出现系统突发故障或者当机而造成的数据损失。为了保证该系统能够安全、有效地、长久地运转,其需要建立起与之对应的网络防火墙,与此同时还需要做好对数据进行加密工作。一个好的系统还需要有能够支持其运行的环境,因此,必须也要考虑到硬件的问题。(2)系统的响应时间对一个软件而言,反应速度是评价软件性能的一项关键因素,因此,在保证软件功能的前提下,有必要进一步提升反应速度,从各方面来减少信息传递的间隔,使在用户进行登陆与实时聊天时,不可以因为等待而感到厌烦。(3)系统的易维护和易用性聊天系统是为用户提供的,而用户可能并不熟悉该系统中的各项设定,因此在遇到紧急情况时,他们的反应速度会比较慢。因此在这个时候,就需要要求开发人员为其提供一个具有良好的人机交互界面和各类提示信息。这样,使用者就可以更好地了解这个系统,并且可以更好地解决一些使用过程中的简单问题。由于这个聊天系统是要进行长时间的运作,作为开发者,必须要对用户在平时工作过程中可能出现的一些滥用和误用进行处理,在面对这种情况的时候,开发者必须要让这个系统能够自动地做出相应的紧急措施应对,或是给予用户一定的提醒和引导。(4)系统的先进性Socket技术已经很完善了,Socket技术在用作网络通信的时候也是十分受欢迎的。此外,本系统采用的是跨平台的Java技术,因此它对多种操作系统具有很好的兼容性。3.3系统流程图3.3.1客户端流程图分析客户端流程图如图3.1所示图3.1客户端流程图3.3.2服务器端流程图分析服务器流程图如图3.2所示。图3.2服务器流程图第4章系统设计4.1系统设计这个即时通讯系统采取的是C/S结构,它包括了两个部分,一个是服务器端,一个是客户端,服务器端可以在启动后监听客户端的信息的传递,还可以进行对客户端的各种监视,而客户端可以利用一个合理的接口,让用户在使用的时候可以更加便捷地进行通信。在这两个方面,本应用程序进行了具体的功能设计。其中,服务器端的功能是为了监听和监视客户端,同时也是为了对已注册的用户进行实时监视,而客户端的功能则是为了给用户提供这个软件的账户的申请和进入到操作界面进行操作的过程。其中功能包括个人资料卡的修改以及对于聊天好友和群聊的添加与管理等等。程序的功能图如图4.1所示:图4.1程序功能层次图4.2数据库概念设计数据库是该即时通讯系统的必不可少的结构之一,数据库模块主要负责对用户账号信息和个人资料卡信息的存储,进行信息处理的各个环节都是基于数据库的,因此可以实现对各类数据的安全、完整的存储,并进行合理的使用。(1)用户资料实体图图4.2用户资料实体图(2)群聊资料实体图图4.3群聊资料实体图好友实体图图4.4好友实体图(4)群聊实体图图4.5群聊实体图4.3数据库逻辑设计数据库的逻辑结构设计是把上一阶段的实体图结构转化成数据库系统中对应的逻辑结构,其中,数据库模块的作用是保存用户账户信息和个人资料卡信息。(1)用户表users“用户表users”用来记录注册的用户信息。用户表的结构如表4.6所示。表4.6基本信息表字段名称类型长度字段说明主键idbirght主键主键usernumvarchar20账号signvarchar100签名namevarchar30昵称sexvarchar20性别addressvarchar50地址birthvarchar10生日agevarchar5年龄nativeplacevarchar50故乡iconvarchar10头像(2)好友表friend“好友表friend”是用来建立好友关系信息。好友表的结构如表4.7所示。表4.7好友表字段名称类型长度字段说明主键idbright主键主键usernumvarchar20用户账号friendnumvarchar20好友账号群聊信息表makegroup“群聊信息表makegroup”是用来群聊信息。群聊表的结构如表4.8所示。表4.8群聊信息表字段名称类型长度字段说明主键idbigint主键主键groupnamevarchar30群名称groupnumvarchar20群号announcementvarchar100群公告(4)群聊表group“群聊表group”是用来记录用户和群聊关系的信息。群聊表的结构如表4.9所示。表4.9群聊表字段名称类型长度字段说明主键idbigint11主键主键usernumvarchar30用户账号groupnumvarchar30群聊账号第5章系统实现该系统采用套接字技术,以MySQL为基础,建立了一套完整的信息传输渠道。只需使用IDEA或eclipse来进行程序的开发。在基于Java的在线聊天APP的设计过程中,由于数据的复杂性并不高,使用MySQL数据库就可以被开发并运行,已经达到了需要,所以将MySQL数据库用作数据的承载。5.1系统运行环境和运行工具操作系统:windows系统数据库:MySQL8.0以上运行工具:eclipse4.4WebServer:JBoss或者tomcatJDK版本:JDK1.85.2启动服务器用户使用程序需要有服务器作为支撑,管理员需要事先打开服务器。在保证数据库被启动的前提下,管理员通过运行相应的文件,即可启动服务器,打开服务器后会显示相应的服务器界面,在这个界面可以对已经登录的用户进行监控。服务器界面如图5.1所示。图5.1服务器界面5.3聊天监控在用户发送信息时,发送的信息会显示在服务器界面下方框体中,管理员能够以此对用户的聊天信息进行监控。监控框体如图5.2所示。图5.2监控框体5.4账号注册登录如果用户是首次使用程序,在点击注册用户时会将界面变换为用户注册界面,用户注册需要输入昵称、账号、密码和个人签名,并需要再次确认密码,账号为用户自己设定,不可重复。注册中的人脸登录是可选选项,如果账号在注册时录入了人脸图像,则能在登录时直接使用人脸识别进行登录。用户注册界面如图5.3所示。图5.3角色注册在用户输入的账号并未被注册过且输入的信息符合规范后,弹出小窗口提示其注册成功。提示注册成功窗口如图5.4所示。图5.4提示注册成功实现该功能的关键代码如下: @IgnoreAuth @PostMapping(value="/login") publicRlogin(Stringusername,Stringpassword,Stringcaptcha,HttpServletRequestrequest){ UsersEntityuser=userService.selectOne(newEntityWrapper<UsersEntity>().eq("username",username)); if(user==null||!user.getPassword().equals(password)){ returnR.error("账号或密码不正确"); } Stringtoken=tokenService.generateToken(user.getId(),username,"users",user.getRole()); returnR.ok().put("token",token); } @IgnoreAuth @PostMapping(value="/register") publicRregister(@RequestBodyUsersEntityuser){ if(userService.selectOne(newEntityWrapper<UsersEntity>().eq("username",user.getUsername()))!=null){ returnR.error("用户已存在"); }userService.insert(user);returnR.ok();}在用户登录页面中,用户必须先键入自己的帐号和密码,然后点击登录按钮才能登录,如果帐号和密码键入正确,就可以直接进入首页。首先确定帐号和密码已经被键入到栏中。如果没有键入帐号或口令,则会提醒使用者帐号或密码未输入。在输入帐号和口令之后,该程序将账号密码信息传送至服务器,并在服务器上对该帐号和密码进行验证,如果输入的帐号和密码是准确的,则会进入主界面。如果使用者输入的帐号密码不准确,系统将显示“帐号或口令有误”。用户登录界面如图5.5所示:图5.5用户登录实现该功能的关键代码如下。publicstaticvoidlogin(Stringqq,Stringpass,Stringip,intport)throwsException{Sockettotry2=newSocket(ip,port);DataOutputStreamout2=newDataOutputStream(totry2.getOutputStream());DataInputStreamin2=newDataInputStream(totry2.getInputStream());out2.writeUTF(qq);out2.writeUTF(pass);switch(in2.readUTF()){case"false":JOptionPane.showMessageDialog(newJLabel(),"账号或密码错误!","提示",JOptionPane.INFORMATION_MESSAGE);totry2.close();break;case"true":newperson(totry2,in2.readUTF(),qq,ip,port,pass);break;case"onlyone":JOptionPane.showMessageDialog(newJLabel(),"账号已经登录!","提示",JOptionPane.INFORMATION_MESSAGE);totry2.close();break;default:JOptionPane.showMessageDialog(newJLabel(),"无法连接服务器!","提示",JOptionPane.INFORMATION_MESSAGE);totry2.close();break;}}如果用户在注册账号时录入了人脸图像,还可以使用人脸识别进行登录,点击人脸识别按钮后程序将会打开摄像头,通过AI对捕捉到的人脸和录入图像的相似度进行评分,评分合格则可成功登录相应账号。人脸识别界面如图5.6所示。图5.6人脸识别实现该功能的关键代码如下。publicstaticvoidfacelogin2(Stringpath,Stringip,intport){Stringfacepath="d:\\"+path+".png";Stringlog=Sample.FaceSearch(facepath);intscoreweizhi=log.indexOf("score");if(scoreweizhi>0){Stringsc=log.substring(scoreweizhi+8,scoreweizhi+10);intsc2=Integer.parseInt(sc);intscorecontrol=70;if(sc2>=scorecontrol){intuseridweizhi=log.indexOf("user_id");Stringuserid=log.substring(useridweizhi+11);System.out.println("userid"+userid);Stringqq=userid.substring(userid.indexOf("ct")+2,userid.indexOf("PASS"));Stringpass=userid.substring(userid.indexOf("PASS")+4,userid.indexOf("\"",userid.indexOf("PASS")+4));try{login(chat,pass,ip,port);System.out.println("截取密码:"+pass);}catch(Exceptione){e.printStackTrace();}}else{intwz;Stringerr=log.substring(wz=log.indexOf("score"),log.indexOf(",",wz));JOptionPane.showMessageDialog(newJLabel(),"评分低于"+scorecontrol+"\n"+"得分:"+err,"提示",JOptionPane.INFORMATION_MESSAGE);}}else{intwz;Stringerr=log.substring(wz=log.indexOf("error_msg"),log.indexOf(",",wz));JOptionPane.showMessageDialog(newJLabel(),"识别失败\n"+err,"提示",JOptionPane.INFORMATION_MESSAGE);System.out.println("识别失败\n"+err);System.exit(0);}}用户在成功登录后进入用户主界面,在这之后便可自行添加好友和加入群聊。主界面如图5.7所示。图5.7用户主界面5.5添加好友群聊用户通过输入账号或者群号添加好友或群聊,在用户输入相应的账号后,程序会将账号信息送至服务器,判断账号输入是否正确和是否添加过该好友或群聊,在符合要求后将该账号和添加账号建立联系,实现添加好友跟群聊。在添加成功后,将会提示好友或群聊添加成功,并且好友和群聊会显示在相应列表中。添加界面如图5.8所示,添加成功界面如图5.9所示。
图5.8添加好友界面图5.9添加成功界面实现该功能的重要代码如下。if(qqhao.length()>0){out.writeUTF("%%%");Stringaddsql="insertintoQQfriend(qqid,friend)"+"values("+myqq+","+qqhao+");";Stringaddsql2="insertintoQQfriend(qqid,friend)"+"values("+qqhao+","+myqq+");";Stringchasql="selectqqid"+"fromQQpersoninfo"+"whereqqid="+qqhao+";";out.writeUTF(chasql);if(in.readUTF().equals("成功")){cli.close();Socketcli2=newSocket(ip,port);DataOutputStreamout2=newDataOutputStream(cli2.getOutputStream());DataInputStreamin2=newDataInputStream(cli2.getInputStream());out2.writeUTF("%%%");out2.writeUTF(addsql+addsql2);if(in2.readUTF().equals("成功"))JOptionPane.showMessageDialog(qq,"好友添加成功","提示",JOptionPane.INFORMATION_MESSAGE);cli2.close();}else{JOptionPane.showMessageDialog(qq,"用户不存在","提示",JOptionPane.INFORMATION_MESSAGE);}}5.6创建群聊点击创建群聊跳转创建群聊界面,输入群昵称和群号即可完成创建群聊。创建群聊界面界面如图5.10所示。图5.10创建群聊界面实现该功能的重要代码如下。try{cli=newSocket(ip,port);out=newDataOutputStream(cli.getOutputStream());in=newDataInputStream(cli.getInputStream());}catch(UnknownHostExceptione1){e1.printStackTrace();}catch(IOExceptione1){e1.printStackTrace();}try{Stringsql1="insert"+"intoQQquninfo(qid,qgonggao,qname,qowner,qtx)values("+qid.getText()+",'"+gg.getText()+"','"+qname.getText()+"',"+myqq+","+icontxt.getText()+")"+";";Stringsql2="insert"+"intoQQqunmember(qid,qmember)values("+qid.getText()+","+myqq+")"+";";out.writeUTF("%%%");out.writeUTF(sql1+sql2);if(in.readUTF().equals("成功")){JOptionPane.showMessageDialog(gg,"创建成功!","提示",JOptionPane.INFORMATION_MESSAGE);}else{JOptionPane.showMessageDialog(gg,"创建失败","提示",JOptionPane.INFORMATION_MESSAGE);}5.7好友列表和群聊列表添加好友和群聊后,好友会显示在好友列表界面,群聊会显示在群聊列表界面。程序通过循环读取好友连接信息和群聊连接信息更新对应的列表。好友列表界面和群聊列表界面如图5.11所示。
图5.11好友列表和群聊列表实现该功能的重要代码如下。publicvoidhuaone(Stringname,Stringicon,Stringqqid,String[]oneinfo){Filedir=newFile(".//chatrecord");Filemydir=newFile(".//chatrecord//#"+myqq);if(!dir.exists()){dir.mkdirs();}if(!mydir.exists()){mydir.mkdirs();}Stringrecordpath=".//chatrecord//#"+myqq+"//#"+qqid+"#"+myqq+".txt";Filemyrecord=newFile(recordpath);if(!myrecord.exists()){try{myrecord.createNewFile();}catch(IOExceptione){e.printStackTrace();}}5.8消息发送点击好友或群聊头像进行即时通讯,在聊天框体内输入文字,点击发送,对方即可收到消息。服务器通过接听指定端口是否有客户端发送链接请求,在调用方法接收请求建立链接,通过IO流进行服务器端和客户端的信息交流,再将信息发送给另一个指定客户端,以此完成信息。此后用户的聊天记录都将被保存于服务器中,在重新登录后不会清除。消息发送如图5.12所示。图5.12消息发送实现该功能的重要代码如下。privateStringreceive(){Stringstr="";try{str=dis.readUTF();}catch(IOExceptione){flag=false;CloseUtil.CloseAll(dis,dos);Server.list.remove(this);}returnstr;}privatevoidsend(Stringstr){try{if(str!=null&&str.length()!=0){dos.writeUTF(str);dos.flush();}}catch(Exceptionexception){flag=false;CloseUtil.CloseAll(dos,dis);Server.list.remove(this);}}5.9文件传输点击发送文件可选择文件进行发送,使用IO字节流进行传输,能够发送各种图片、音频、视频、文档等各类格式文件。文件发送成功后,点击窗口左边下载文件即可选择磁盘保存文件。文件传输如图5.13所示。图5.13文件传输实现该功能的重要代码如下。publicstaticbyte[]file2ByteArr(Filefile){FileInputStreamfis=null;ByteArrayOutputStreambos=newByteArrayOutputStream(1000);try{fis=newFileInputStream(file);byte[]b=newbyte[1000];intn;while((n=fis.read(b))!=-1){bos.write(b,0,n);}byte[]data=bos.toByteArray();returndata;}catch(Exceptione){returnnull;}finally{if(fis!=null){try{fis.close();}catch(IOExceptione){e.printStackTrace();}}try{bos.close();}catch(IOExceptione){e.printStackTrace();}}}5.10更改个人资料卡在用户登录成功之后,用户可以点击主界面中的个人头像,将会弹出一个个人资料卡的窗口,用户可以通过点击相应内容修改个人资料,然后可以选择修改新信息到服务器上。在将信息发送到服务器之前,将会先对信息进行格式判断。当用户在修改的个人资料卡成功后,用户的头像,昵称,个性签名等将会在主界面中改变,如未修改成功,将不会改变。个人资料卡修改界面如图5.14所示。图5.14个人资料卡修改实现该功能的重要代码如下。try{Stringsql1="updateQQpersoninfo"+"setqqname='"+name.getText()+"'"+"whereqqid="+myqq+";";Stringsql2="updateQQpersoninfo"+"setqqqianming='"+qm.getText()+"'"+"whereqqid="+myqq+";";Stringsql3="updateQQpersoninfo"+"setqqpassword='"+pass.getText()+"'"+"whereqqid="+myqq+";";Stringsql4="updateQQpersoninfo"+"setqqicon='"+icontxt.getText()+"'"+"whereqqid="+myqq+";";Stringsql5="updateQQpersoninfo"+"setbak1='"+bak1.getText()+"'"+",bak2='"+bak2.getText()+"'"+",bak3='"+bak3.getText()+"'"+",bak4='"+bak4.getText()+"'"+",bak5='"+bak5.getText()+"'"+",bak6='"+bak6.getText()+"'"+"whereqqid="+myqq+";";out.writeUTF("%%%");out.writeUTF(sql1+sql2+sql3+sql4+sql5);if(in.readUTF().equals("成功")){JOptionPane.showMessageDialog(qm,"修改成功!","提示",JOptionPane.INFORMATION_MESSAGE);}else{JOptionPane.showMessageDialog(qm,"修改失败","提示",JOptionPane.INFORMATION_MESSAGE);}5.11查看资料卡在主界面右键好友头像出现右键菜单,点击查看资料即可查看好友或群聊资料。操作界面如图5.15所示;好友资料卡界面如图5.16所示;群聊资料卡界面如图5.17所示。图5.15右键操作界面图5.16好友资料卡图5.17群聊资料卡5.12删除好友和群聊在主界面右键点击头像,出现右键菜单栏,选择点击“退出群”或“删除好友”即可对群聊和好友进行删除,删除成功后提示“已经删除好友”或“已经退出群”,并重构好友列表和群聊列表。界面如图5.18所示。图5.18删除好友提示实现该功能的重要代码如下。try{cli=newSocket(ip,port);DataOutputStreamout=newDataOutputStream(cli.getOutputStream());DataInputStreamin=newDataInputStream(cli.getInputStream());out.writeUTF("%%%");Stringsql1="delete"+"fromqqfriend"+"whereqqid="+myqq+"andfriend="+qq+";";Stringsql2="delete"+"fromqqfriend"+"whereqqid="+qq+"andfriend="+myqq+";";out.writeUTF(sql1+sql2);Stringflag=in.readUTF();if(flag.equals("成功")){JOptionPane.showMessageDialog(look,"已经删除好友","提示",JOptionPane.INFORMATION_MESSAGE);}}第6章系统测试在一个软件的发展中,其中一个重要的环节就是测试。在开发过程中,程序难免会有缺陷,所以要去寻找和处理那些缺陷,这就是系统测试所要实现的目标。编程人员在完成某个功能模块的设计之后,通常要对该软件进行一系列的测试,也就是所谓的“单元测试”。当一个完整的应用软件被开发出来以后,还需要对这个软件进行全面的功能测试,从而找到这个软件中的漏洞。软件测试的意义就是,它的第一个目的就是保证软件的品质,第二个目的就是对功能能否达到自己的期望,进行一种测验,最后再对会不会出现与期望的不一样的结果。黑盒测试是测试系统整体功能的一种手段,TESTERS首先从用户的角度来看待黑盒,比较符合预期的功能测试用例,并帮助识别系统中存在的问题。黑盒测试主要采用位移分析和阈值分析。系统错误经常发生在输入和输出值边界上,概率比内部高得多,因此阈值分析进一步确定了系统的稳定性和可靠性,在确定输入和输出范围后选择操作系统阈值来测试系统。6.1测试步骤单元、集成和核实测试为系统测试的主要三步骤。(1)单元测试是测试系统的最小功能模块。对该模块进行性能检测,以判定其性能与所定义的性能要求是否相符。(2)集成测试是模块安装后的完整系统,能够对组件间的界面、通讯进行检测,并对与设计有关的编程结构进行验证。(3)核实测试是是为了确保系统配置的正确性,对用户进行分析时所需的数据进行确认,以确定用户所需的数据是否与所需数据一致。6.2测试预期结果在即时通讯系统中,初步预估目标应是:服务器能够正常启动。用户能够注册账号。用户能够登录账号。用户能够添加好友和群聊。用户能够发送文件。6.3测试用例程序的功能测试预期需要结合实际数据经行检测,再将得到的结果与预期结果进行比较。将结果对比分析。若所得到的结果与期望的有出入,则测试失败。如果运行结果与期望的一致,则测试通过。6.3.1服务器启动测试启动服务器是运行程序的首要步骤,能够启动成功则是通过。如表6.1所示。表6.1服务器启动测试表测试编号测试目的操作步骤预期结果实际结果001服务器启动未连接数据库启动失败启动失败002服务器启动无网络连接启动失败启动失败003服务器启动已连接数据库及网络启动成功启动成功6.3.2注册测试用例用户在注册时填写的信息符合规范则可注册成功。如表6.2所示。表6.2注册测试用例表测试编号测试目的操作步骤预期结果实际结果001注册测试不填写任何数据注册失败注册失败002注册测试不填写个性签名注册成功注册成功003注册测试输入两次密码不一致注册失败注册失败004注册测试头像超过限制注册失败注册失败005注册测试不填写昵称注册失败注册失败006注册测试个性签名过长注册失败注册失败007注册测试填写正确内容注册成功注册成功008注册测试不录入人脸登录注册成功注册成功6.3.3登录测试用例用户通过输入正确的账号密码登录账号。如表6.3所示。表6.3登录测试用例表测试编号测试目的操作步骤预期结果实际结果001登录测试输入正确的用户名和密码登录成功登录成功002登录测试不输入内容登录失败登录失败003登录测试未输入密码登录失败登录失败004登录测试未输入账号登录失败登录失败005登录测试输入错误的密码登录失败登录失败6.3.4添加好友测试用例用户在添加好友时,需要输入正确的好友账号。如表6.4所示。表6.4添加好友测试用例表测试编号测试目的操作步骤预期结果实际结果001添加好友测试输入正确的好友账号添加成功添加成功002添加好友测试输入错误的好友账号添加失败添加失败003添加好友测试添加已添加过的好友添加失败添加成功6.3.5添加群聊测试用例用户在添加群聊时,需要输入正确的群聊账号。如表6.5所示。表6.5添加群聊测试用例表测试编号测试目的操作步骤预期结果实际结果001添加群聊测试输入正确的群号添加成功添加成功续表6.5添加群聊测试用例表测试编号测试目的操作步骤预期结果实际结果002添加群聊测试输入错误的群号添加失败添加失败003添加群聊测试添加已添加的群聊添加失败添加失败6.3.6发送文件测试用例用户在聊天时可以发送各类格式的文件。如表6.6所示。表6.6发送文件测试用例表测试编号测试目的操作步骤预期结果实际结果001发送文件测试发送png格式文件发送成功发送成功002发送文件测试发送mp4格式文件发送成功发送成功003发送文件测试发送mp3格式文件发送成功发送成功004发送文件测试发送doc格式文件发送成功发送成功005发送文件测试发送psd格式文件发送成功发送成功6.4测试结论经过使用多个测试用例对系统的部分功能进行了全面测试,整个系统在测试过程中,不管是从系统的功能上、还是从系统的使用上,基本上都能达到当初预计的结果。结论通过数个月的学习与努力,终于完成了本次毕业设计题目的设计和实现。本文通过对开发基于Java的在线聊天APP相关技术的研究,针对目前市面上常用的即时通讯软件进行分析,解决它们被广大用户诟病的问题。随着社会的快速发展,传统的信息交流方式已经不能满足人们的日常需求,而现今人们的生活也已经无法离开即时通讯软件。本次设计摒弃了大多数聊天软件臃肿的设计,在界面设计上简洁美观,操作上简单方便,实现了一对一以及一对多高效、快捷、简洁的信息交流,同样解放了用户使用软件的内存压力和储存压力。本系统仍然有许多不足之处,本次设计虽然已经完成了一款即时通讯系统的重要功能,但由于技术限制尚不能完成视频聊天和语音聊天功能,仅仅是能使用文字交流和文件传输,在日常使用这方面尚显不足,所使用的JavaSwing在界面设计精美度上不如其他技术,后期仍需要一定的优化,在接下来的工作中仍需巩固技能,提高水平,使系统其趋于完善。参考文献[1]欧阳桂秀.基于Java和MySQL的数据库管理系统的设计与实现[J].信息记录材料,2022,23(09):240-242.[2]苏碧霞.探析JavaSwing工具包在图形用户界面设计中的应用[J].信息与电脑,2019(10):151-152.[3]张丹丹.浅析JavaSwing组件窗体设计[J].电脑知识与技术,2020,16(21):160-161.[4]王素苹.一种基于JavaSwing的网络聊天室的设计与实现[J].现代计算机(专业版),2020(20):64-67.[5]张丹丹.浅析使用模型参数构造JavaSwing组件[J].电脑知识与技术,2020,16(26):214-215.[6]金澜.MySQL索引是如何形成的[J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025呼和浩特赛罕区文投旅游发展有限公司招聘12人笔试参考题库附带答案详解
- 2025年上半年安徽蚌埠怀远县招募机关事业单位就业见习人员45人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年安徽蚌埠五河县县统计局融媒体中心招聘12人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年安徽省阜阳市颍上县江店孜镇人民政府招聘6人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年安徽省淮北市烈山区政府购买岗招聘148人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年安徽安庆岳西县事业单位招聘工作人员49人易考易错模拟试题(共500题)试卷后附参考答案
- 2025国家电网有限公司直流技术中心高校毕业生招聘(第一批)笔试参考题库附带答案详解
- 2024年水路旅客运输服务项目资金筹措计划书代可行性研究报告
- 2025年上半年宁波市北仑区市场监督管理局招考编外用工易考易错模拟试题(共500题)试卷后附参考答案
- 【2025】甘肃鑫海工贸有限责任公司招聘笔试考点考试试题及答案
- 兽医检验测试题(附参考答案)
- 蜜柚种植基地新建项目可行性研究报告
- 雾化吸入疗法合理用药专家共识(2024版)解读
- (2024)江西省公务员考试《行测》真题卷及答案解析
- CSB事故案例专栏丨BP德克萨斯州炼油厂火灾爆炸事故
- 社会管理和公共服务标准化试点实施细则范文(2篇)
- 结直肠肛管疾病(共105张课件)
- 第三单元 音乐与民族-说唱 课件-2024-2025学年高中音乐粤教花城版(2019)必修音乐鉴赏
- 数字艺术微喷印画产业深度调研及未来发展现状趋势
- 2024-2030年中国菜籽油行业供需趋势及投资潜力分析报告权威版
- 黑龙江省哈尔滨工业大学附属中学2024-2025学年八年级上学期期中考试地理试题(含答案)
评论
0/150
提交评论