栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

2021.10.02超详细实现过程-Linux 环境下的简易聊天室,采用CS模型,实现多客户端之间的稳定数据传输。(添加好友,删除好友、屏蔽好友、查看好友列表(针对数据库的操作))

2021.10.02超详细实现过程-Linux 环境下的简易聊天室,采用CS模型,实现多客户端之间的稳定数据传输。(添加好友,删除好友、屏蔽好友、查看好友列表(针对数据库的操作))

这次主要对加好友、删除好友、屏蔽好友、查看好友列表功能(单纯的基于数据库操作),并且也对之前的代码做了部分的改动,为中间涉及全局变量问题。

对之前的改动(主要):

其中对结构体进行了改动和结构体全局变量的定义

typedef struct {
	char name[21];
	char account[11];
	char password[17];
}Usr,pUsr;
Usr USR={
	.name={0},
	.account={0},
	.password={0}
};
//对USR成员赋值后立即求其长度
int len_nm=0;
int len_ac=0;
int len_ps=0;

对数据库操作定义几个全局变量

MYSQL mysql;
MYSQL *pmysql=NULL;
MYSQL_RES *res=NULL;
MYSQL_ROW fetchrow=NULL;//这个变量为mysql_fetch_row设定
int row=0;//这个变量为mysq_num_rows()设定
unsigned int num_fields=0;//这个变量为mysql_num_fields设定
char slc[1024]="";  //全局变量用来存放查询语句的字符串

对登录函数 int Login()的改动

int Login()
{
	char ac[11]={0};
	char ps[17]={0};
	char tmpac[11]={0};
	char slc[1024]="select * from usr where(account='";
	printf("你已进入登陆系统n");
	printf("请输入你的账号n");
	scanf("%s",ac);
	strncpy(tmpac,ac,strlen(ac));
	strncat(slc,tmpac,strlen(tmpac));
	printf("请输入你的密码n");
	scanf("%s",ps);
	strcat(slc,"' AND password='");
	strncat(slc,ps,strlen(ps));
	strcat(slc,"')");
	int ret=mysql_real_query(&mysql,slc,strlen(slc));

	printf("%sn",slc);
	res=mysql_store_result(&mysql);
	int row=mysql_num_rows(res);
	mysql_free_result(res);
	if(row==1)
	{
		unsigned long *lenths=0;
		unsigned int i=0;
		//num_fields = mysql_num_fields(result);
		fetchrow=mysql_fetch_row(res);
		len_nm=strlen(fetchrow[0]);
		len_ac=strlen(fetchrow[1]);
		len_ps=strlen(fetchrow[2]);
		strncpy(USR.name,fetchrow[0],strlen(fetchrow[0])); //修改当前程序用户信息,以便后续使用
		strncpy(USR.account,fetchrow[1],strlen(fetchrow[1]));
		//printf("USR.account:%sn",USR.account);
		strncpy(USR.password,fetchrow[2],strlen(fetchrow[2]));
		Loggingstatus=1;
		printf("登陆成功n");
		return 0;	
	}
	else
	{
		printf("登陆失败n");
	}


}

接下来就是新增功能的具体函数了

添加好友功能

int AddFriend()
{
	char ac[11]={0};
	char slc1[1024]="select account from usr where account='";
	//printf("%sn",slc1);
	printf("你已进入添加好友功能n请输入你要添加好友的账号:n");
	//printf("%sn",slc1);
	scanf("%s",ac);
	strncat(slc1,ac,strlen(ac));
	//printf("%sn",slc1);
	strcat(slc1,"'");
	//printf("%sn",slc1);
	int ret=mysql_real_query(&mysql,slc1,strlen(slc1));//查看数据库用户列表有没有这个用户的账号
	res=mysql_store_result(&mysql);
	row=mysql_num_rows(res);
	mysql_free_result(res);
	if(row==1)//如果查询出来一行,说明有这个用户,
	{	
		char slc2[1024]="select friends from ";
		strncat(slc2,USR.name,len_nm);
		strncat(slc2,USR.account,len_ac);
		strcat(slc2," where friends='");
		strncat(slc2,ac,strlen(ac));
		strcat(slc2,"'");
		//printf("%sn",slc2);
		ret=mysql_real_query(&mysql,slc2,strlen(slc2));//继续查看是否已经是自己的好友
		if(ret==0)
		{
			res=mysql_store_result(&mysql);
			printf("sdasdadsn");
			row=mysql_num_rows(res);
			mysql_free_result(res);
		}
		if(row==0)//如果不是自己的好友
		{
              char slc3[1024]="insert into ";
			strncat(slc3,USR.name,len_nm);
			strncat(slc3,USR.account,len_ac);
			strcat(slc3,"(friends) values('");
			strncat(slc3,ac,strlen(ac));
			strcat(slc3,"')");
			ret=mysql_real_query(&mysql,slc3,strlen(slc3));//将该用户添加到(单向)好友列表中
			res=mysql_store_result(&mysql);
			printf("saaan");
			//row=mysql_num_rows(res);
			mysql_free_result(res);
			printf("%sn",slc3);
			if(ret!=0)
			{
				perror("mysql_real_query");
				return -1;
			}
			if(ret==0)
			{
				printf("添加好友成功n");
				return 1;
			}
		}
		else if(row>0)//如果说自己的好友则提示已经是自己的(单向)好友,不用继续添加
		{
			printf("已存在该好友,不可继续添加n");
			return 0;

		}
		else
		{
			printf("插入如失败n");
			return -1;
		}


	}
	else
	{
		printf("不存在该用户账号n");
		return -1;
	}


}

屏蔽好友功能

int ShieldFrd()//屏蔽好友,与添加好友类似,将需要被屏蔽的人添加到自己的屏蔽列表中
{
	printf("你已进入设置添加屏蔽好友功能n,请输入好友账号n");
	char ac[11]={0};
	scanf("%s",ac);
	char slc[1024]="select friends from ";
	strncat(slc,USR.name,len_nm);
	strncat(slc,USR.account,len_ac);
	strcat(slc," where friends='");
	strncat(slc,ac,strlen(ac));
	strcat(slc,"'");
	int ret=mysql_real_query(&mysql,slc,strlen(slc));//继续查看是否已经是自己的好友
	res=mysql_store_result(&mysql);
	row=mysql_num_rows(res);
	mysql_free_result(res);

	if((ret==0)&&(row>0))//如果是自己的好友就可以进入屏蔽操作
	{


		char slc3[1024]="update ";
		strncat(slc3,USR.name,len_nm);
		strncat(slc3,USR.account,len_ac);
		strcat(slc3," set shieldfriends='");
		strncat(slc3,ac,strlen(ac));
		strcat(slc3,"' where friends='");
		strncat(slc3,ac,strlen(ac));
		strcat(slc3,"'");
		ret=mysql_real_query(&mysql,slc3,strlen(slc3));//将该用户添加到屏蔽好友列表中
		res=mysql_store_result(&mysql);
		//row=mysql_num_rows(res);
		mysql_free_result(res);
		if(ret!=0)
		{
			perror("mysql_real_query");
			return -1;
		}
		if(ret==0)
		{
			printf("屏蔽好友成功n");
			return 1;
		}
	}
	else if((ret==0)&&(row==0))//如果不是自己好友列表中不存在
	{
		printf("该账号不是自己好友或者不存在,无法屏蔽n");
		return 0;

	}
	else
	{
		printf("屏蔽失败n");
		return -1;
	}

}	

删除好友功能

int DeleteFrd()//删除好友,
{
	printf("你已进入删除好友功能n,请输入好友账号n");
	char ac[11]={0};
	scanf("%s",ac);
	char slc[1024]="select friends from ";
	strncat(slc,USR.name,len_nm);
	strncat(slc,USR.account,len_ac);
	strcat(slc," where friends='");
	strncat(slc,ac,strlen(ac));
	strcat(slc,"'");
	int ret=mysql_real_query(&mysql,slc,strlen(slc));//查看是否已经是自己的好友
	res=mysql_store_result(&mysql);
	row=mysql_num_rows(res);
	mysql_free_result(res);
	if((ret==0)&&(row>0))//如果是自己的好友就可以进入删除操作
	{


		char slc3[1024]="delete from ";
		strncat(slc3,USR.name,len_nm);
		strncat(slc3,USR.account,len_ac);
		strcat(slc3," where friends='");
		strncat(slc3,ac,strlen(ac));
		strcat(slc3,"'");
		printf("%sn",slc3);
		ret=mysql_real_query(&mysql,slc3,strlen(slc3));//将被删除用户信息从登陆用户中全部删除
		res=mysql_store_result(&mysql);
		mysql_free_result(res);
		if(ret!=0)
		{
			perror("mysql_real_query");
			return -1;
		}
		if(ret==0)
		{
			printf("删除好友成功n");
			return 1;
		}
	}
	else if((ret==0)&&(row==0))//如果好友列表不存在该好友
	{
		printf("该账号不是自己好友或者不存在,无法删除n");
		return 0;
	}
	else
	{
		printf("删除失败n");
		return -1;
	}

}

展示好友列表

int ShowFriends()
{
	printf("以下为好友列表和屏蔽好友列表的的账号信息:n");
	char slc[1024]="select friends,shieldfriends from ";
	strncat(slc,USR.name,len_nm);
	strncat(slc,USR.account,len_ac);
	mysql_real_query(&mysql,slc,strlen(slc));
	res=mysql_store_result(&mysql);
	row=mysql_num_rows(res);
	//num_fields=mysql_num_fields(res);
	while((fetchrow =mysql_fetch_row(res)))
	{
		unsigned long *lengths;
		lengths=mysql_fetch_lengths(res);
		for(int i=0;i<2;i++)//只需要打印前两列friends和shieldfriends
		{
			printf("%-20s",fetchrow[i]? fetchrow[i] : "NULL");
		}
		printf("n");



	}



}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285853.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号