JAVA 仿QQ聊天程序(附源码)

第一次通过java编写完了一个模拟QQ的C/S软件【开心,感觉用C#写C/S要舒服的多啊,哈哈哈…】,项目是通过三层架构编写,由于对JavaJDBC不是很熟悉,所有数据交换写的是真的垃圾啊,软件还是存在一些问题的,比如文件传输,由于没有采用线程,软件打开一次只能传输一次,还有就是要先发送端点击发送后才能,点击接受不然接受不到数据…软件还是挺不错【自夸一下狗头】,其他的问题就不说了,自己去看源码吧…

一:三层架构简要分析

DAL----数据访问层
BLL-----业务逻辑层
UI-------表示层
(注:三层通过实体对象进行数据传递)
JAVA 仿QQ聊天程序(附源码)_第1张图片

二:三层架构命名规范

JAVA 仿QQ聊天程序(附源码)_第2张图片

三:项目搭建:QQ项目

1:com.cqgy.qq[程序入口]
客服端:Client
客服端接口:SetparametersFrameClient
接口界面:
JAVA 仿QQ聊天程序(附源码)_第3张图片
服务端:Server
服务端接口:SetparametersFrameServer
接口界面:
JAVA 仿QQ聊天程序(附源码)_第4张图片
2:UI表示层
JAVA 仿QQ聊天程序(附源码)_第5张图片
com.cqgy.ui
登入界面:LoginFrame;注册界面:RegistrationFrame;找回密码界面:RetrievePasswordFrame;
JAVA 仿QQ聊天程序(附源码)_第6张图片
JAVA 仿QQ聊天程序(附源码)_第7张图片
JAVA 仿QQ聊天程序(附源码)_第8张图片
聊天界面:ChatFrameTest;主界面:MainFrame;自动登入加载页面:
JAVA 仿QQ聊天程序(附源码)_第9张图片
JAVA 仿QQ聊天程序(附源码)_第10张图片
JAVA 仿QQ聊天程序(附源码)_第11张图片
AddFriendsFrame:添加好友删除好友,查询好友;FriendsInfo Frame: 用户信息界面
JAVA 仿QQ聊天程序(附源码)_第12张图片
JAVA 仿QQ聊天程序(附源码)_第13张图片
JAVA 仿QQ聊天程序(附源码)_第14张图片
3:BLL:业务逻辑层
com.cqgy.method
在这里插入图片描述
用户操作业务逻辑层:UserDao
【感觉业务很多实属扯蛋,都是为了交作业狗头**】**
业务1:登入功能;
业务2:注册功能;
业务3:查询所有用户消息;
业务4:按照主键查询;
业务5:查询是否为好友;
业务6:查询用户登入状态;
业务7:修改用户密码;
业务8:更改用户名;
业务9:删除好友;
业务10:查询好友列表;
业务11:保存账号和密码;
业务12:保存登入界面上的单选按钮状态;
业务13:读取账号和密码;
业务14:添加好友
4:DAL:数据访问层
Com.cqgy.db
在这里插入图片描述
DBHelper:对数据库基本操作【增删改查,带参增删改查,存储过程,事务】
注:由于对java数据库不是很熟悉,这里我直接创建UserDB类来对数据进行处理,处理方式不是很恰当,很多地方出现重复较多可以通过复用技术进一步优化,但是更好的办法还是通过DBHelper对数据进行处理更符合三层架构的思想。
UserDB:对业务层涉及到数据交互部分进行数据方法的提供,比如业务1实现添加数据,UserDB直接提供一个添加数据的方法,业务层直接执行即可,不接触数据交互部分。
5:Entity:实体对象
Com.cqgy.bean
在这里插入图片描述
对实体对象进行封装,更有利于访问实体对象.

6:Common:常用操作
com.cqgy.ui.commmon
JAVA 仿QQ聊天程序(附源码)_第15张图片
将经常使用的方法进行封装到一个类中,避免代码重复书写,这里主要是文件的读取写入和验证码的生成,错误日志的写入。
7:Com.cqgy.util:工具类
对数据进行验证等工具方法。
在这里插入图片描述

四:相关功能的实现讲解

1.自动登入功能
[主窗体]
JAVA 仿QQ聊天程序(附源码)_第16张图片
在这里插入图片描述
JAVA 仿QQ聊天程序(附源码)_第17张图片
【自动登入窗体】
JAVA 仿QQ聊天程序(附源码)_第18张图片
JAVA 仿QQ聊天程序(附源码)_第19张图片

2.用户是否在线功能
【数据访问层】
JAVA 仿QQ聊天程序(附源码)_第20张图片
【业务层】
JAVA 仿QQ聊天程序(附源码)_第21张图片
【UI表示层】
在这里插入图片描述
3.注册功能
【数据访问层】
JAVA 仿QQ聊天程序(附源码)_第22张图片
【业务逻辑层】
JAVA 仿QQ聊天程序(附源码)_第23张图片

【UI表示层】
(1):数据验证部分
JAVA 仿QQ聊天程序(附源码)_第24张图片
(2):初始化实体对象
在这里插入图片描述
(3):实现登入业务
JAVA 仿QQ聊天程序(附源码)_第25张图片
4.找回密码功能
【数据访问层】
JAVA 仿QQ聊天程序(附源码)_第26张图片
【业务逻辑层】
JAVA 仿QQ聊天程序(附源码)_第27张图片
【UI表示层】
(1)数据验证
JAVA 仿QQ聊天程序(附源码)_第28张图片
(2)封装对象
JAVA 仿QQ聊天程序(附源码)_第29张图片
(3)实现业务
JAVA 仿QQ聊天程序(附源码)_第30张图片

[5.查询用户信息功能;6.搜索功能;7.添加好友;8.删除好友;9.修改好友信息;10.聊天功能;5,6,7,8,9,10:功能和前面基本一致,Ui表示层实现业务,业务逻辑层提供业务,数据传输层提供业务对数据的操作方法]。

【调试】
搜索功能—搜索出来的用户不同可操作的信息也不同
JAVA 仿QQ聊天程序(附源码)_第31张图片

JAVA 仿QQ聊天程序(附源码)_第32张图片

11.文件传输功能
【注:】文件传输功能未采用线程方式,所以程序运行一次只可传输一次文件
【发送端】
(1)文件可以通过拖拽的方式获取文件全路径(接受端有讲解)
通过start进行发送
JAVA 仿QQ聊天程序(附源码)_第33张图片
(2)当有接受端进行了解了才能进行下一步操作不然会一直阻塞accept()中
在这里插入图片描述
(3)通过流的方式发送数据
JAVA 仿QQ聊天程序(附源码)_第34张图片
(4)更新count标识(接受端有讲解
JAVA 仿QQ聊天程序(附源码)_第35张图片
【接受端】
(1)选择保存路径
这里通过拖拽的方式获取文件保存路径,也可以直接复制路径
声明路径变量
在这里插入图片描述
事件监听
JAVA 仿QQ聊天程序(附源码)_第36张图片
实现事件逻辑
JAVA 仿QQ聊天程序(附源码)_第37张图片
(2)用户点击接受后获取数据(这里要发送端发送数据后才能进行接受不然会产生异常)
JAVA 仿QQ聊天程序(附源码)_第38张图片
处理该目录下的文件名是否重复,重复在文件名后加(i)形式
JAVA 仿QQ聊天程序(附源码)_第39张图片
获取发送端的数据
在这里插入图片描述
如果未接受到数据,将会一直停留在这里,进度条显示进度
在这里插入图片描述
由于程序启动一次只能传输一次,所以这里加入count标志count=0表示未使用count=1表示已经使用
在这里插入图片描述
【调试】
JAVA 仿QQ聊天程序(附源码)_第40张图片
12:图片传输功能(具体代码操作请查阅源码)
JAVA 仿QQ聊天程序(附源码)_第41张图片

五:QQ项目部署

(1):数据库部署
在配置文件中配置自己数据库一致的参数
JAVA 仿QQ聊天程序(附源码)_第42张图片
(2)在mysql5.6中加入数据库

Mysql8.0版本需要将配置文件中 driver=com.mysql.jdbc.Driver
修改为driver=com.mysql.cj.jdbc.Driver

(3)在数据库中创建数据库和表格并添加数据

------创建表结构和数据库

/* 创建数据库 */
CREATE DATABASE  IF NOT EXISTS  qq;
use qq;
/* 用户表 */
CREATE TABLE IF NOT EXISTS user (
    user_id varchar(80) not null,   	 /* 用户Id  */
    user_pwd varchar(25)  not null,	 /* 用户密码 */
    user_name varchar(80) not null,  	 /* 用户名 */
    user_icon varchar(100) not null, 	 /* 用户头像 */
    state   int(2) not null,
    PRIMARY KEY (user_id)
);

/* 用户好友表Id1和Id2互为好友 */
CREATE TABLE IF NOT EXISTS friend (
    user_id1 varchar(80) not null,   	 /* 用户Id1  */
    user_id2 varchar(80) not null,   	 /* 用户Id2  */
PRIMARY KEY (user_id1, user_id2)
);

-------添加数据

use qq;

/* 用户表数据 */
INSERT INTO user VALUES('111','123', '关东升','28',0);
INSERT INTO user VALUES('222','123', '赵1', '30',0);
INSERT INTO user VALUES('333','123', '赵2', '52',0);
INSERT INTO user VALUES('888','123', '赵3', '53',0);

/* 用户好友表Id1和Id2互为好友 */
INSERT INTO friend VALUES('111','222');
INSERT INTO friend VALUES('111','333');
INSERT INTO friend VALUES('888','111');
INSERT INTO friend VALUES('222','333');

【注意:插入数据时如果出现了以下错误】 14:00:58 INSERT INTO user VALUES(‘111’,‘123’,
‘关东升’,‘28’,0) Error Code: 1366. Incorrect string value:
‘\xE5\x85\xB3\xE4\xB8\x9C…’ for column ‘user_name’ at row 1 0.000
sec

在数据库中输入:

alter table user convert to character set utf8;    
alter table friend convert to character set utf8;  

然后再执行添加数据操作:

use qq;
/* 用户表数据 */
INSERT INTO user VALUES('111','123', '关东升','28',0);
INSERT INTO user VALUES('222','123', '赵1', '30',0);
INSERT INTO user VALUES('333','123', '赵2', '52',0);
INSERT INTO user VALUES('888','123', '赵3', '53',0);

/* 用户好友表Id1和Id2互为好友 */
INSERT INTO friend VALUES('111','222');
INSERT INTO friend VALUES('111','333');
INSERT INTO friend VALUES('888','111');
INSERT INTO friend VALUES('222','333');

(3)启动服务端接口
JAVA 仿QQ聊天程序(附源码)_第43张图片
输入端口号,然后点击设置
JAVA 仿QQ聊天程序(附源码)_第44张图片

(4)启动客服端,设置IP并点击设置
在这里插入图片描述
JAVA 仿QQ聊天程序(附源码)_第45张图片

(5)程序运行
JAVA 仿QQ聊天程序(附源码)_第46张图片

六:软件效果预览

JAVA 仿QQ聊天程序(附源码)_第47张图片
JAVA 仿QQ聊天程序(附源码)_第48张图片

JAVA 仿QQ聊天程序(附源码)_第49张图片

七:下载链接

链接: https://pan.baidu.com/s/14BaDEJ9F0Tk8ToG0PmQl4Q
提取码:w5ae
JAVA 仿QQ聊天程序(附源码)_第50张图片
JAVA 仿QQ聊天程序(附源码)_第51张图片

你可能感兴趣的:(Java基础,java,Socket访QQ,Java,C/S开发)