前言
感慨——听说往后改革了,不知道以后的学弟学妹能不能用得到这篇讲解。
这部分代码也是我借鉴网上一位大佬的(原文找不到了,电脑刷过机,可能在有些地方会误人子弟),在经过我的大面积修改后,保存了原文的布局格式,将其中的函数重写,以更贴近学校题目的要求,并在最后获得了“优秀”的好成绩,自认为还行,发到网上,分享给大家。
csdn渠道(充了VIP或有积分的支持一下,我有的时候也馋学长学姐分享到csdn的资料)
见开头
百度网盘渠道
链接:https://pan.baidu.com/s/1RNGJ0ZHhM5XimDCqFNAgaw
提取码:45ab
至于我的答辩讲解视频
。。。只能说视频里有太多暴露个人学号姓名的地方了,而我又没刻意学过视频剪辑
在我完成这部分课设有以下几个我认为的几个难点及解决办法
1.把mysql连上VS——csdn搜ODBC的连接办法(我找了好几个,忙活了一上午才成功了一个)
2.数据库交互语言的学习——这里推荐一本叫《MySQL必知必会》的小绿书(微信读书里可以买到)
3.用代码沟通数据库——其实方法有很多也是因你使用的平台而异,建议直接搜
4.数据库可视化方便操作——这里推荐navicat(B站搜有免费资源)
5.socket通信——在这里我认为只需要把它的格式弄懂,然后把要发送的内容整个打包成字符串发过去就行了
6.多线程,即一个服务器连多个客户端——通过简单学习thread即可实现
正文
在整体架构上运用C/S结构,构建两个程序,一个服务器,一个客户端,服务器端作为后台支持,不提供任何与黑白窗口的交互,只负责从数据库中读取数据。数据存储方面,使用MYSQL数据库和通过ODBC连接VS与数据库,通过特定语句进行数据库的读写。在二人通信和客户端与服务器连接方面,使用多线程技术,能让多个客户端连接服务区并能让不同客户端通过服务器进行沟通来实现通信。在沟通方面,使用网络编程技术,使用socket通信技术使得此程序能在不同主机上完成相应功能。在具体类设计上,设置sql_qjh和user_qjh两个基类,这俩个基类下分设qq,wx,wb三个子类完成具体的功能。在文件设计上对每个程序都设计了相关的总头文件(用来包含一些公共的信息)和将socket通信封装成一个类,使其在使用时更加便捷。
1.用户基本信息
用户基本信息存在数据库中
通过socket通信basic函数
储存在客户端实例化的类中
不同微x平台通过数据库中的all_users进行关联
2.好友与群的设计
在我这此编程的设计上,我模仿qq本身,在本质上好友与群并没有区别
就好比此图,在我们平时使用时,好友与群并没有什么区别一样,在数据库中都用同一个表进行存储,
在好友和群管理(以QQ为例)上主要运用qq_qjh类和qq_sql_qjh类中几个对应的函数
好友:
(1).修改备注
客户端代码:
服务器代码:
通过SQL语句修改数据库,返回修改成功信号。
(2).推荐好友
在推荐好友的部分客户端实现比较简洁了,不需要额外写入信息
服务器端就较为复杂,需要进行多次查询(先查名字,再通过名字查相应的表,再通过表中的ID信息,查all_users中的QQ号及QQ名字)
(3).增加好友:
添加好友在服务器端就是直接加,A表中加B的数据,同时B表中加A的数据
(4)查看好友信息
通过查询数据库实现,以查询一些深层次的信息,比如说出生日期等等。
(5)查看好友列表
在登录过程中,我就将一些基本的数据导入客户端所在的类,方便查询,好友列表就在其中。
(6)注册
在开始登录时输入no转入注册界面,再输入相关信息,打包发送给服务器,服务器处理(创建表,在all_qq_users添加相关信息)。
服务器数据库实现:
(7).实现多平台无法同时登录
在一个账号登录时会将log_in置1
此时其他账号再登录时就会发现登录不了。
群:
(1).群的创建
通过查询数据库的信息按递增顺序给群ID
(2).群添加成员
有两种方式,一是主动加入,这时候要经过管理员审查(修改此人的权限),二是推荐,也要经过审查(在微信和微博里主动加入功能删去,只能推荐)
主动加入
这时给的权限为-2,代表申请加入阶段;
推荐:
可以看到给的权限也是-2;
(3).删除群成员:
删除群成员时也要看相关权限
如果在服务器读取完后发现权限不够,即会返回权限不够信号。
(4).查询群成员的信息
查询群成员时通过服务器访问数据库,读信息。
(5).管理群(即修改群成员的权限)
针对不同群成员给出不同回应,修改的权限能力也不同。在微信与微博里,则没有0——管理员
(6).查看群列表
直接读取类中相关 的数据。与查看好友列表类似
3.多线程技术
此技术主要服务于CS架构和通信两个点,此两点都与网络通信通信有关,所以相关代码和解释见网络通信通信。
4.数据库代替文件操作
在储存数据方面,我选择使用MYSQL数据库来进行数据的读写,并选择使用ODBC接口使我可以在VS中对MYSQL执行相关命令进行操作,并包装成一个类,
利用构造和析取进行相关连接操作
一小部分数据库命令操作:
5.网络通信编程
首先是包装的socket类展示
客户端:
服务器:
在聊天这个功能上,我认为我尽我所能在最大程度上还原了通信系统,首先在服务器方面,使用thread多线程函数将每一个连接的客户端放到后台运行,
这样就实现一个服务器连多个客户端,实现多客户端依靠服务器通信,而在客户端方面,首先是相关数据的检验
然后再次运用多线程技术,将接受函数放到后台
实现发送和接受两不误
写入发送部分:
这时候,服务器就只需要将接受到的消息在不同线程中传递就行了
总结
GitHub上有很多比我逻辑更清楚,函数更优秀的学长的分享,我的很多地方只是简单重复无意义的判断,并且有很多bug,欢迎大家对我代码内容的讨论与指正。