吉林大学软件学院大二上c++课设(黑白框模拟QQ通信——数据库,CS架构,多线程,socket通信)

前言

感慨——听说往后改革了,不知道以后的学弟学妹能不能用得到这篇讲解。

这部分代码也是我借鉴网上一位大佬的(原文找不到了,电脑刷过机,可能在有些地方会误人子弟),在经过我的大面积修改后,保存了原文的布局格式,将其中的函数重写,以更贴近学校题目的要求,并在最后获得了“优秀”的好成绩,自认为还行,发到网上,分享给大家。

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,欢迎大家对我代码内容的讨论与指正。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
2018年软件学院C++计目的: 1、熟悉利用面向对象的方法以及C++的编程思想来完成系统的计; 2、锻炼学生在计的过程中,建立清晰的类层次,应用继承和多态等面向对象的编程思想; 3、通过本计,加深对面向对象程序程所学知识的理解,熟练掌握和巩固C++语言的基本知识和语法规范,深刻体会面向对象的编程思想,掌握使用面向对象程序计语言C++,学会编写结构清晰、风格良好的C++语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。 计题目:模拟即时通信系统实现 一、题目描述 基于社交的即时通信是腾*公司的主要业务,先后有QQ、微信、微博等服务,可能还将继续推出微商、微唱、微走、微笑等产品。这些软件既可以独立提供服务,又互相辉映关联。腾*公司希望对各系统进行整合形成统一的立体社交软件平台。现请完成该平台的计并实现。要求如下: 1、用户基本信息: 号码ID,昵称,出生时间,T龄(号码申请时间)、所在地、好友列表、群列表。 微博与QQ共享ID,微信采用独立ID,但是可以与QQ号码绑定对应。其他微X产品也分为这两种情况。 2、好友管理 (1)实现各功能好友信息的添加、修改、删除、查询的功能。 (2)可以查询微X 之间各自共同好友。如微信可以添加QQ推荐好友。 3、群管理 (1)定每个微X功能已有1001、1002、1003、1004、1005、1006等群号。 (2)加入群、退出群、挨T、查询群成员等。 (3)不同微X之间群的理念不同,比如:QQ群可以申请加入,而微信群则只能推荐加入;QQ群允许置临时讨论组(子群),微信群则不允许;QQ群有以群主为核心的管理员制度,而微信群仅有群主为特权账号。 4、开通管理 用户可以选择自己开通该平台的N个微X服务。 5、登录管理 各微X之间只要有一个服务登录,则其它服务简单确认后视为自动登录。 6、功能展示要求(main函数) (1)计约定。开通服务情况、群成员信息和好友信息可以预先保存到文件中,在系统启动时将这些信息加载到内存中; (2)一个服务登录后,本人开通的其它所有服务均进入开通状态。 (3)服务之间可以依据本人开通的任意另外一个服务的好友添加好友。 (4)展示一个服务当前群的特色功能;在群成员数据不受伤害的前提下,动态变换为其他类型群的管理特色。 (5)实现QQ的点对点的TCP通信的收发功能。(选做)提示: a)需要加载ws2_32.lib静态库,打开头文件winsock.h。 b)百度IP地址、端口等概念; c)百度socket编程,关注bind、listen、accept、connect、send、receive等函数用法。 二、技术层次要求及说明 1、基本层次。 完成上述功能要求,所采用技术不限,比如采用纯面向过程思想实现; 2、支持对象层次。 正确完成了类的切割,利用对象技术实现。 (1)容器类主要包括:例如,微X成员管理。 (2)其它主要类包括:例如,微X信息、群信息、好友信息。 3、抽象、封装层次 采用了继承或者组合实现复用,对数据成员提供了必要的接口保护; (1)抽象出了基础类,并被其它功能复用; (2)如好友维护、群信息维护等操作均应该提供接口形式; 4、面向对象层次 支持多态功能,支持依据计原则的优化。 好友管理、群管理等; 5、优化提高层次 (1)提供简便菜单,以1、2等数字区分几类功能,并允许返回菜单; (2)I/O操作支持。基本功能中,已有定信息,在初始化时候可以固化在程序代码中,也可以存放在文件中,每次容器实例化时读入,析构时写回文件中,以实现断电保存。 (3)可扩展性支持,需要考虑群、好友等与主要服务之间的关系; (4)灵活性支持。群的管理模式动态可变; (5)程序有必要的注释; (6)可以采用UML工具画出简单类图 (7)为防止不诚信行为,要求类的计均以独立文件存在,且所有的类名称后面应有自己的姓名缩写,如张三计的QQ信息类名称:TencentZhS。 三、计步骤(参考 ): 在清楚上述系统功能要处理是什么的基础上,考虑用如下方式来计 1、确定所需的类及其相互间的关系。 (1)要从问题中归纳出一个概念或实体,从这些概念或实体出发建立相应的类。 (2)尽量使类小而简单,以使其看起来容易理解。 (3)充分利用封装以增加类的可靠性,以便使用时保证更加可靠。 (4)通过继承建立类族,以方便使用多态性。 2、确定每个类的实现。 (1)考虑类的对象应该如何构造和析构。 (2)考虑类的成员函数的建立。 (3)综合考虑各个类在命名和功能方面有哪些共性。 3、细化有关的类,描述他们之间的相互关系,即类关系和对象关系。 4、描述本系统的界面,通过分别定义成员的不同属性,为抽象和实现提供分离的接口。 四、计工具 1、计工具:建议使用.net 系列中的C++ 编译器,但不局限于此。 2、不提倡使用MFC和可视化开发技术。 五、计报告 (报告的具体格式附后) 六、考核方式 1、在计结束前的最后一天检查程序并接受质疑。 2、检查程序前须提交计报告(按提交报告的先后顺序检查程序)。 七、考核标准: 参照5个技术层次划分。 八、计后作业(不考核) 引入可视化计,在本计基础上实现可视化QQ即时通信功能,包括: 多人聊天;聊天记录查询。需要涉及知识如下: 1、网络通信编程; 2、可视化编程; 3、多线程编程; 4、数据库编程;
吉大软件C模拟即时通信系统实现的目标是基于C语言实现一个简单的即时通信系统。该系统需要包含客户端和服务器两个部分,并且能够实现用户之间的实时聊天和文件传输功能。 首先,该系统的客户端部分需要具备用户注册、登录、添加好友、发送消息、接收消息和发送文件的功能。用户注册时需要输入用户名和密码,并将其保存到服务器中。用户登录成功后,可以添加好友并发送消息或文件。发送消息时,客户端需要将消息内容发送至服务器,服务器再将其转发给接收方客户端。发送文件时,需要将文件内容分块发送给服务器,服务器再将其转发给接收方客户端。 其次,该系统的服务器部分需要实现用户管理和消息转发的功能。服务器需要保存用户的注册信息,并在用户登录时进行账号和密码验证。服务器还需要维护用户的好友列表,以便用户添加好友和查找在线好友。当用户发送消息时,服务器需要根据接收方的用户名找到对应的客户端并转发消息。当用户发送文件时,服务器需要保存文件内容并将其转发给接收方客户端。 在实现这个系统时,可以借助C语言中的套接字编程和线程编程技术来实现客户端与服务器之间的通信和并发处理。通过创建多个线程,服务器可以同时处理多个客户端的请求。并且,可以使用C语言中的文件操作函数来实现文件的读写和传输。 总之,吉大软件C模拟即时通信系统的实现需要通过客户端和服务器两个部分来实现用户之间的实时聊天和文件传输功能。通过使用C语言中的套接字编程和线程编程技术,能够很好地完成这一任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值