【高级Java开发】类QQ聊天工具的设计与实现(代码已上传)

news2025/1/18 11:49:18

1、要求

类QQ聊天工具的设计与实现,要求如下:

  1. 用户可注册并通过密码录登。

  1. 用户可通过查找添加自己的好友。

  1. 用户可通过好友列表选择好友并与之对话。

  1. 需实现聊天记录查看功能。

  1. 界面美观大方,交互设计尽量参考QQ。

  1. 代码结构合理,可复用性高。能够合理的综合运用课程中的讲授的技术。

  1. 支持图片发送及文件传送,相应需要具备文件的保存(加分)。

  1. 在此基础上可以增加其它合理功能(加分)。

2、功能描述

1.用户登录:未注册用户需先设置id号(10位数字)及密码(8-12位数字或字母)进行注册后登录;已注册用户可以通过id号以及密码进行登录,在登录后可以添加好友与好友进行聊天。

2.添加好友:登录进入QQ后在联系人界面可以选择添加好友,通过搜索好友的id号向好友发送申请添加好友请求,好友接受申请后则添加好友成功。

3.选择好友进行对话:登录QQ后在联系人界面或者消息界面均可选择好友与之进行对话。

4.发送图片:进入聊天界面后,点击图片按钮选择想要发送的图片,可发送图片给好友。

5.查看聊天记录:在消息界面显示与好友最后一句聊天记录,进入与好友的聊天界面后可查看与好友之间的聊天记录。

6.换头像昵称:对已注册用户的头像和昵称进行修改。

3、类QQ聊天工具的总体设计

3.1、聊天工具聊天的主要流程

根据功能描述,本系统主要实现注册账号、QQ好友的添加和聊天功能的实现:本系统通过JDBC(数据库连接),实现了查询和更新数据库中数据的方法;通过HTML、CSS,JS实现QQ聊天页面的设计;通过JSP实现动态页面的设计,通过WebSocket解决服务器主动给客户端发消息的难题。系统的功能特点如下:

  1. 页面模块化:系统界面的设计使用模块化处理,如把页面的登录、注册、聊天等界面做成单独的文件,在其它页面设计中需要时把其它页面的相应内容包括进去了,这样有利于页面风格比较统一以及开发系统的效率。

  1. 数据库的自动更新:在创建用户信息时,将自动创建相应的数据库,使得系统得以自动更新。

  1. 功能较完善:功能方面包括QQ的注册、登录、好友请求发送,添加好友、发送、接收信息(图片)等,较为完整的实现了QQ聊天工具的部分功能。

因此此QQ聊天工具的主要数据结构设计图如下:

图3.1 数据结构设计图[1]

3.2、数据库设计

3.2.1、 E-R图

根据功能描述以及数据结构设计图,可以画出类QQ聊天工具的E-R图[2]如下图所示:

图3-2 E-R图

绘制出E-R图之后,可以进行数据库设计了,首先创建一个名为qqchat的数据库,包含用户表user,头像表imgs,用户名表usernames,离线消息表messagenotes_offlone,消息表messagenotes。

3.2.2、 数据库中表的结构[3]

1.用户表user

此表主要用于来存储注册用户而生成的用户信息,包括用的id以及用户设置的密码,主键设置为id。

表一user表

字段名

字段类型

长度

是否为null

说明

备注

id

varchar

10

id账号

password

vaechar

12

密码

2. 头像表imgs

这个表用来存放QQ用户的头像,包括id号和图片路径,其中id为主键。表二imgs表

字段名

字段类型

长度

NULL

说明

备注

id

varchar

10

id号

img_path

varchar

100

图片路径

3. 用户名表usernames

这个表用来存储已创建的用户,包括id号和用户名,其中id为主键。

表三usernames表

字段名

字段类型

长度

NULL

说明

备注

id

varchar

10

id号

username

varchar

10

用户名

4. 离线消息表 messagenotes_offline

这个表用来存储离线后发送、接收信息双方的id、信息以及发送的日期,其中num为主键。

表四messagenotes_offline表

字段名

字段类型

长度

NULL

说明

备注

num

integer

message

varchar

100

信息

send_id

varchar

10

发送id号

receive_id

varchar

10

接收id号

msg_date

varchar

19

发送日期

5. 消息表messagenotes

这个表用来存储发送、接收信息双方的id、信息以及发送的日期,其中num为主键。

表五messagenotes表

字段名

字段类型

长度

NULL

说明

备注

num

integer

message

varchar

100

信息

send_id

varchar

10

发送id号

receive_id

varchar

10

接收id号

msg_date

varchar

19

发送日期

3.3 类设计及类调用时序

本款类QQ聊天系统主要设计了User、friend、OneMessage、OneMessageBox、ProfilePhoto、JDBC、WSChat等类,类与类之间有相应的关系,以下为此类QQ聊天工具里的一些重要的调用时序图:

图3-3 类调用时序图

各类的UML类图[4]:

图3-4 JDBC UML类图

图3-5 User UML类图

图3-6 friend UML类图

图3-7 ProfilePhoto UML类图

图3-8 OneMessage UML类图

图3-9 OneMessageBox UML类图

图3-10 chatLog UML类图

图3-11 dealCVS UML类图

图3-12 friendList UML类图

图3-13 friendList UML类图

图3-14 NewFriendApply UML类图

图3-15 register UML类图

图3-16 UploadImageOrName UML类图

图3-17 WSChat UML类图

3.4、页面设计及说明

登陆页面

登陆页面可以跳转到注册页面实现新用户注册,登陆页面通过正则表达式[5]判断对登陆用户进行第一步判断,成功则进一步在数据库判断是否存在该用户,存在则登陆成功,否则失败。

图3-17 登陆页面

注册页面

注册页面可以跳转到登陆页面,实现新用户的注册,使用正则表达式判断用户输入是否符合格式,符合格式在数据库中判断是否用户名重复,重复则不能注册用户,不重复则成功注册用户,同时跳转到登陆页面。

图3-18 注册界面

消息页面

新用户的消息页面刚开始没有消息,当用户好友或者用户本身给好友发消息后便在消息页面显示消息框(图3-19界面),当有消息框的时候,点击消息框可进入好友聊天界面,与好友畅聊。

图3-19 消息界面

联系人页面

联系人页面默认没有好友(图3-20),当用户添加好友成功后显示图8-2界面。点击某一个好友框也可以进入到聊天界面与该好友畅聊。

图3-20 联系人界面

聊天页面

每次打开聊天界面都会发送ajax请求[6]读取近日的5条聊天记录。当用户点击发送后会首先判断内容是否为空文本,是则不发送,不是则发送。点击图片按钮选择图片可以发送图片。点击最上方的返回按钮(左边的符号)可以退回到消息页面,点击最上方的聊天记录按钮(右边的符号)可以查看聊天记录。

图3-21 聊天界面

聊天记录页面

点击聊天记录页面会发送ajax请求到后端,返回序列化对象。点击上方的返回按钮可以退回到聊天页面。

图3-22 聊天记录界面

添加好友页面

点击取消则退出该页面,点击确定首先进行判断输入的id号是否符合注册时的id号,符合则发送成功。

图3-23 添加好友界面

同意好友申请页面

默认没有好友申请(图3-24界面),如果他人给你发了好有申请则显示图12-2界面。点击同意则在双方页面上都显示对应的好友,点击拒绝则消失,点击确定退出该页面。

图3-24 同意好友申请界面

图3-25 同意好友申请界面

换头像和昵称页面

点击头像可以进行换头像或者换名字,点击提交后会进行正则判断,若名字符合规范则成功否则不成功,点击取消则退出该页面。

图3-26 换头像和昵称界面

4、进一步迭代的方向

4.1可添加功能

  1. 可添加QQ空间、QQ邮箱等功能.

2、在登陆界面可添加记住密码,找回密码,自动登录以及扫码登录等功能模块。

具体实现:找回密码可以在注册时添加可作为主码的属性,通过查询该属性即可找回密码。

而自动登录以及记住密码可通过cookie实现。

2、好友分组

具体实现:只需在数据库中新建一个数据库存放分组状况,在展现时先访问该数据库,通过该数据库的情况进行显示。

  1. 特别关心

具体实现:在数据库中新建一个数据库存放特别关心的情况。

4.2可优化方向

1、访问受阻

在进行离线添加与聊天时经常出现访问受阻,http500的报错。查询发现可能与idea中项目缓存和浏览器缓存相关,可以优化缓存情况。

2、后端数据库过多

每次新建一个账户都会多多个数据表,重构数据库进行优化

3、图片读取效率低下

有极小概率出现图片读取失败的情况。

5、引用文献

[1]樊莉丽. 软件工程的流程图设计与逻辑应用[J]. 产业与科技论坛, 2014(11):2.

[2]牛荣, 陈纪龙, 杜义君. 数据库设计中ER模型设计的一些基本问题探讨[J]. 信息技术与信息化, 2019(7):4.

[3]李延惺, 刘著国, 殷利建,等. 一种基于JDBC数据库连接技术的WEB框架平台软件的自动搭建方法和系统:, CN111026389A[P]. 2020.

[4]李建东. 论基于UML的需求分析[J]. 电脑编程技巧与维护, 2020(9):2.

[5]赵书慧. 正则表达式在JSP登录页面中的应用[J]. 才智(10期):73.

[6]唐小玲. 基于AJAX异步交互技术的门户网站构建[J]. 电脑知识与技术:学术版, 2021, 17(32):2.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/161825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openGauss2.0.0之Java简单测试Sequence

openGauss2.0.0之Java测试Sequence一、实验环境二、实验目标二、实验步骤一、实验环境 项目Value操作系统openEuler服务器华为云弹性云服务器ECS 1 台 2核心 4GB内存数据库openGauss2.0.0 单机部署 二、实验目标 目标 学习openGauss2.0.0的序列的使用,熟悉JDBC编程方…

(10)QWidget的使用(one)

目录 QWidget的大小和位置 获取QWidget的大小和位置 设置QWidget的大小和位置 设置窗口固定大小 限定窗口的大小 坐标系统转换 内容边距 鼠标指针 鼠标指针的形状 自定义光标的使用 获取和设置光标的坐标 QWidget类是所有可视控件的基类,控件是用户界面…

【C进阶】内存函数

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

Spring知识点记录

Spring知识点1. Spring简介&#xff08;此章略过&#xff09;1.1 Spring概述1.2 Spring家族1.3 Spring Framework2. IOC2.1 IOC容器2.2 基于XML管理bean2.2.1 入门案例&#xff08;ioc容器的整体思路&#xff09;2.2.2 获取bean的三种方式2.2.3 依赖注入2.2.3.1 setter注入2.2.…

指针数组与数组指针---傻傻分不清楚?

目录1.指针数组2.数组指针1.指针数组 什么是指针数组呢&#xff1f; 我们通过以前学过的数组进行类比&#xff1a; 整形数组是存放整形的数组字符数组是存放字符的数组所以&#xff0c;指针数组是存放指针(地址)的数组 整形数组的书写形式是int arr[10]&#xff0c;字符指针…

uniapp兼容小程序和H5遇见的坑

目录 一、报错 vue service.requestcomponentinfo:typeerror:cannot read property matches undefined H5不兼容uni-app的image标签 小程序externalClasses不兼容h5 H5不兼容van-picker和van-datetime-picker 一、报错 vue service.requestcomponentinfo:typeerror:cannot r…

【C语言进阶】 一篇带你掌握字符串和内存函数

目录一&#xff1a;strlen模拟实现&#xff1a;二&#xff1a;strcpy模拟实现&#xff1a;三&#xff1a;strcat模拟实现&#xff1a;四&#xff1a;strcmp模拟实现&#xff1a;五&#xff1a;strncpy模拟实现&#xff1a;六&#xff1a;strncat模拟实现&#xff1a;七&#xf…

如何正确地连接PLC与7种设备的输入输出线路

正确地连接输入和输出线路&#xff0c;是保证PLC可靠工作的前提。想要正确地连接PLC与7种设备的输入输出线路&#xff0c;就需注意以下几个方面&#xff1a;1.PLC与主令电器类设备的连接下图是PLC与按钮、行程开关、转换开关等主令电器类输入设备的接线示意图。图中的PLC为直流…

3、运算符

目录 一、算数运算符 二、关系运算符 三、逻辑运算符 一、算数运算符 MATLAB中的算术运算符有加、减、乘、除、点乘、点除等&#xff0c;其运算法则表&#xff1a; 示例1&#xff1a;数值与矩阵的算术运算 Aeye(2)Bones(2)CA*BDA.*B 运行结果&#xff1a; 此外&#xff0…

25.数组指针取*,指针和函数的关系,指针作为函数的参数

数组指针取* 数组指针取*&#xff0c;并不是取值的意思&#xff0c;而是指针的类型发生变化&#xff1b; 一维数组指针取*&#xff0c;结果为它指向的一维数组第0个元素的地址&#xff0c;它们还是指向同一个地方。二维数组指针取*&#xff0c;结果为一维数组指针&#xff0c…

Excel实战 第1章 数据处理

目录1 数据规范2. 导入数据3. 数据清洗3.1 重复数据处理3.2 缺失数据处理3.3 空格数据处理1 数据规范 2. 导入数据 3. 数据清洗 3.1 重复数据处理 数据透视表法&#xff08;首选&#xff09; 选中A、B两列&#xff0c;点击【插入】–》【数据透视表】 把号码拉到【行】&…

LeetCode 207. 课程表

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 207. 课程表&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode 207. …

图表控件LightningChart.NET 系列教程(六):许可证管理介绍(下)

LightningChart.NET SDK 是一款高性能数据可视化插件工具&#xff0c;由数据可视化软件组件和工具类组成&#xff0c;可支持基于 Windows 的用户界面框架&#xff08;Windows Presentation Foundation&#xff09;、Windows 通用应用平台&#xff08;Universal Windows Platfor…

Docker面试题(史上最全 + 持续更新)

专题37&#xff1a;Docker面试题&#xff08;史上最全、定期更新&#xff09; 本文版本说明&#xff1a;V26 《尼恩面试宝典》升级的规划为&#xff1a; 后续基本上&#xff0c;每一个月&#xff0c;都会发布一次&#xff0c;最新版本&#xff0c;可以联系构师尼恩获取&…

VALL-E:Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers

文章目录NLP中Bert的进展历史word embeddingELMOGPTBertAudioLM: a Language Modeling Approach to Audio Generationabstractintrorelated workVALL-E:Neural Codec Language Models are Zero-Shot Text to Speech Synthesizersabstractspeech quantizationtraining:condition…

程序的机器级表示part2——访问信息

目录 1. 整数寄存器 2. 操作数指示符与寻址模式 3. 数据传送指令 4. 压入和弹出栈数据 1. 整数寄存器 一个x86-64的CPU包含一组16个存储64位值的通用目的寄存器(general-purpose registers) 整型寄存器x86-64的CPU是64位的&#xff0c;因此相应的寄存器长度与机器字长(数据…

基于matlab实现的水果识别系统+源码+代码注释

水果识别 摘要&#xff1a; 本项目针对多种常见水果混合的图像&#xff0c;利用 Matlab 软件&#xff0c;对水果的识别进行研究。根据水果和背景的差别选取阈值&#xff0c;对去噪增强对比度后的图像进行二值化处理。再对图像进行边缘检测&#xff0c;选定连通区域&#xff0…

仅需一个注解,实现springboot项目中的隐私数据脱敏

文章参考&#xff1a; 仅是为了方便查看&#xff0c;因此在此记录一下​​​​​​​ 目录 1. 创建隐私数据类型枚举&#xff1a;PrivacyTypeEnum 2. 创建自定义隐私注解&#xff1a;PrivacyEncrypt 3. 创建自定义序列化器&#xff1a;PrivacySerializer 4. 隐私数据隐藏工…

高德地图开发之地图配置及vue上初始化创建地图

开门见山地说&#xff0c;现如今地图相关的开发业务在工作中越来越常见&#xff0c;目前市面上主流的地图开发还是以百度和高德为主&#xff0c;今天就来讲一下高德地图的配置和在vue上的初始化创建&#xff0c;帮助大家更好更快的了解高德地图开发相关的内容。 一. 注册地图 …

Python协程的四种实现方式

今天继续给大家介绍Python关知识&#xff0c;本文主要内容是Python协程的四种实现方式。 一、yield关键字实现方式 以yield关键字方式实现协程代码如下所示&#xff1a; def fun1():yield 1yield from fun2()yield 2def fun2():yield 3yield 4f1fun1() for item in f1:print…