1 实现登录功能
自定义一个usr.txt,先手动输入其账户密码。
格式:账户 密码
例:
zhangsan 12345
lisi abcde
wangwu abc123
需求如下:
1. 从终端获取账户密码,与文件中的账户密码比较;
2. 若终端输入的账户不存在,则输出账户不存在;
3. 若终端输入的账户存在,但是密码不正确,则输出密码错误;
4. 若账户密码均正确,则输出登录成功。
方法一
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
char get_usrname[20]="";
char get_usrpass[20]="";
printf("请输入账号:");
scanf("%s",get_usrname);
printf("请输入密码:");
scanf("%s",get_usrpass);
FILE* fp=fopen("./usr.txt","r");
if(NULL == fopen)
{
perror("fopen");
return -1;
}
char file_name[20];
char file_pass[20];
int flag=0;
while(1)
{
if(fscanf(fp,"%s %s",file_name,file_pass)==EOF)//从终端读取账号密码
{
flag=1;
break;
}
if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)!=0)
{
printf("密码错误!\n");
break;
}
if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)==0)
{
printf("登录成功!\n");
break;
}
}
if(flag==1)
{
printf("该用户不存在!\n");
}
fclose(fp);
return 0;
}
方法二
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char get_name[20] = "", get_passwd[20] = "";
char file_name[20] = "", file_passwd[20] = "";
//从终端获取账户密码
printf("请输入账户和密码>>> ");
scanf("%s %s", get_name, get_passwd);
//以读的方式打开文件
FILE* fp = fopen("./usr.txt", "r");
if(NULL == fp)
{
perror("fopen");
return -1;
}
//循环读取文件的一行:账户 密码
while(1)
{
//将字符串清空
bzero(file_name, sizeof(file_name));
bzero(file_passwd, sizeof(file_passwd));
if(fscanf(fp, "%s %s", file_name, file_passwd) == EOF)
{
printf("%s 用户不存在\n", get_name);
break;
}
// printf("%s %s\n", file_name, file_passwd);
//与终端获取到的账户密码比较
if(strcmp(file_name, get_name) != 0) //若账户名不相同,则去获取下一个账户密码
continue;
if(strcmp(file_passwd, get_passwd) != 0)
{
printf("%s 密码错误\n", get_name);
}
else
{
printf("%s 用户登录成功\n", get_name);
}
break; //若账户相同,则不需要继续往后比较其他用户了
}
//关闭文件
fclose(fp);
return 0;
}
2 实现注册功能
注册的账户密码存储在上一题的文件中。
需求:不能重复注册。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int log_on();
int regist();
int main(int argc, const char *argv[])
{
/*
一、实现登录功能。自定义一个usr.txt,手动输入账户密码,格式如下:账户 密码
例如: zhangsan 12345
lisi abcde
wangwu abc123
需求如下:
1.从终端获取账户密码,与文件中的账户密码比较
2.若终端输入的账户不存在,则输出账户不存在
3.若终端输入的账户存在,但是密码不正确,则输出密码错误
4.若账户密码均正确,则输出登录成功
二、附加题
实现注册功能,注册的账户密码存储在上一题的文件中。需求:不能重复注册。
*/
int choose;
printf("请选择是注册用户(1)还是登录用户(2):");
scanf("%d",&choose);
if(choose!=1&&choose!=2)
{
printf("选择失败!\n");
return 0;
}
//注册
else if(choose==1)
{
regist();
}
//登录
else
{
log_on();
}
return 0;
}
int log_on()
{
char get_usrname[20]="";
char get_usrpass[20]="";
printf("请输入账号:");
scanf("%s",get_usrname);
printf("请输入密码:");
scanf("%s",get_usrpass);
FILE* fp=fopen("./usr.txt","r");
if(NULL == fopen)
{
perror("fopen");
return -1;
}
char file_name[20];
char file_pass[20];
int flag=0;
while(1)
{
if(fscanf(fp,"%s %s",file_name,file_pass)==EOF)//从终端读取账号密码
{
flag=1;
break;
}
if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)!=0)
{
printf("密码错误!\n");
int b=0;
printf("请问是否要再次登录(0/1):");
scanf("%d",&b);
if(b==1)
{
log_on();
}
break;
}
if(strcmp(file_name,get_usrname)==0 && strcmp(file_pass,get_usrpass)==0)
{
printf("登录成功!\n");
break;
}
}
if(flag==1)
{
printf("该用户不存在!\n");
int b=0;
printf("请选择是否要注册(0/1):");
scanf("%d",&b);
if(b==1)
{
regist();
}
}
fclose(fp);
return 0;
}
int regist()
{
char get_usrname[20];
char get_usrpass[20];
printf("请输入注册账户:");
scanf("%s",get_usrname);
printf("请输入注册密码:");
scanf("%s",get_usrpass);
FILE* fp=fopen("./usr.txt","r");
char file_name[20];
char file_pass[20];
int flag=0;
while(1)
{
if(fscanf(fp,"%s %s",file_name,file_pass)==EOF)
{
flag=1;
break;
}
if(strcmp(get_usrname,file_name)==0)
{
printf("用户已存在!\n");
int b=0;
printf("请问是否直接选择登录(0/1):");
scanf("%d",&b);
if(b==1)
{
log_on();
}
break;
}
}
if(flag==1)
{
fclose(fp);
fp=fopen("./usr.txt","a+");
fprintf(fp,"%s %s",get_usrname,get_usrpass);
fputc(10,fp);
printf("注册成功!\n");
}
fclose(fp);
}