C语言猜拳游戏代码及分析
void alter(game_t *p,int *count,int *my){
intchose=0;
while(TRUE){
chose=0;
alter_menu();
printf("请选择:");
scanf("%d",&chose);
fflush_in();
switch(chose){
case1: //改密
if(alter_pass(p,my)==0)
printf("修改密码成功");
else
printf("修改密码失败");
break;
case2: //注销
if(del(p,count,my)==0){
printf("注销成功");
log_ctrl(p,count,my); //功能控制函数
}
else
printf("注销失败");
break;
case3: //返回
return;
break;
default:
printf("输入错误,请重新输入");
}
}
}
//注销用户 0-成功 1-失败
int del(game_t *p,int *count,int *my){
charpass[30]=" ";
inti=0,chose=0;
printf("密码:");
fgets(pass,30,stdin);
pass[strlen(pass)-1]= ;
if(!(strcmp(p[*my].password,pass))==0){
printf("密码输入错误");
return1;
}
printf("是否注销?1.是 2.否");
printf("请选择:");
scanf("%d",&chose);
fflush_in();
if(chose==1){
for(i=*my;i<*count-1;i++){
strcpy(p[i].name,p[i+1].name);
strcpy(p[i].password,p[i+1].password);
p[i].money=p[i+1].money;
p[i].times=p[i+1].times;
p[i].win=p[i+1].win;
}
}
else
return1;
*count-=1;
return0;
}
//修改密码 0-成功 1-失败
int alter_pass(game_t *p,int *my){
charpass[30]=" ",pass2[30]=" ";
intchose=0;
printf("密码:");
fgets(pass,30,stdin);
pass[strlen(pass)-1]= ;
if(!(strcmp(p[*my].password,pass))==0){
printf("密码输入错误");
return1;
}
printf("提示:密码长度为6-28位");
printf("输入新密码:");
fgets(pass,30,stdin);
pass[strlen(pass)-1]= ;
printf("确认新密码:");
fgets(pass2,30,stdin);
pass2[strlen(pass2)-1]= ;
if(strcmp(pass,pass2)!=0){
printf("两次输入密码不一样");
return1;
}
if(strcmp(p[*my].password,pass)==0){
printf("新密码与原密码相同");
return1;
}
printf("是否改密?1.是 2.否");
printf("请选择:");
scanf("%d",&chose);
fflush_in();
if(chose==1)
strcpy(p[*my].password,pass);
else
return1;
return0;
}
//修改函数菜单
void alter_menu(){
printf("1.修改密码 2.注销 3.返回");
}
//充值函数
int pay(game_t *p,int *my){
inti=0;
doublemoney=0;
charpass[30]=" ";
charstr[10]=" ",str2[10]=" ";
printf("请输入金额:");
scanf("%lf",&money);
fflush_in();
if(money<=0.0)
return1;
//验证码
for(i=0;i<5;i++){
srand((unsigned)time(NULL)+i);
str[i]="0123456789abcdefghihklmnopqrstuvwxyz"[rand()%36];
}
printf("充值密码:%s",str);
printf("");
printf("请输入充值密码:");
fgets(str2,10,stdin);
str2[strlen(str2)-1]= ;
if(strcmp(str,str2)!=0){
printf("充值密码输入错误");
return1;
}
printf("密码:");
fgets(pass,30,stdin);
pass[strlen(pass)-1]= ;
if(!(strcmp(p[*my].password,pass))==0)
return1;
p[*my].money+=money;
return0;
}
//查看函数
void look(game_t *p,int *count,int *my){
intchose=0;
while(TRUE){
chose=0;
look_menu();
printf("请选择:");
scanf("%d",&chose);
fflush_in();
switch(chose){
case1: //个人
look_my(p,my);
break;
case2: //所有
look_all(p,count);
break;
case3: //返回
return;
break;
default:
printf("输入错误,请重新输入");
}
}
}
//查看所有
void look_all(game_t *p,int *count){
inti=0; //i表示游戏次数
intj=0; //j表示胜利次数
intk=0;
printf("用户 金额 胜率 ");
for(k=0;k<*count;k++){
i=p[k].times;
j=p[k].win;
printf("%s %.2f %.2lf%% ",p[k].name,
p[k].money,i==0?0:(double)j/i*100);
}
}
//查看个人
void look_my(game_t *p,int *my){
inti=0; //i表示游戏次数
intj=0; //j表示胜利次数
i=p[*my].times;
j=p[*my].win;
printf("用户名:%s",p[*my].name);
printf("密 码:%s",p[*my].password);
printf("金 额:%.2lf",p[*my].money);
printf("胜 率:%.2lf%%",i==0?0:(double)j/i*100);
}
//查看菜单
void look_menu(){
printf("1.个人 2.所有 3.返回");
}
//功能菜单函数
void ctrl_menu(){
printf("1.查看 2.游戏 3.充值 4.修改 5.排序 6.返回");
}
//登录控制函数
void log_ctrl(game_t *p,int *count,int*my){
intchose=0,chose2=0;
while(TRUE){
chose=0;
chose2=0;
log_menu();
printf("请选择:");
scanf("%d",&chose);
fflush_in();
switch(chose){
case1: //登录
if(log_in(p,count,my)==1)
printf("登录失败");
else{
printf("登录成功");
ctrl(p,count,my);
}
break;
case2: //注册
if(add_user(p,count)==1)
printf("注册失败");
else
printf("恭喜您,注册成功");
break;
case3: //退出
printf("是否退出?1.是 2.否");
printf("请选择:");
scanf("%d",&chose2);
fflush_in();
if(chose2==1){
if(exit_save(p,count)==0)
printf("信息保存成功");
else
printf("信息保存失败");
exit(0);
}
else
log_ctrl(p,count,my);
break;
default:
printf("输入错误,请重新输入");
}
}
}
//登录函数 0-成功 1-失败
int log_in(game_t *p,int *count,int *my){
inti=0,flag=0;
charname[30]=" ",pass[30]=" ";