【IO进程线程】使用标准IO函数完成用户的登录和注册

 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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值