这次主要对加好友、删除好友、屏蔽好友、查看好友列表功能(单纯的基于数据库操作),并且也对之前的代码做了部分的改动,为中间涉及全局变量问题。
对之前的改动(主要):
其中对结构体进行了改动和结构体全局变量的定义
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");
}
}



