C语言实现登录注册

本文介绍了一个用纯C语言实现的登录、注册和忘记密码功能的系统。通过定义结构体存储用户信息,并使用文件操作进行数据的读写。文章详细展示了代码实现过程,包括创建用户文件、注册账号、登录验证及找回密码等功能。
摘要由CSDN通过智能技术生成

这是一个用纯C语言和文件操作实现的系统的登录、注册和忘记密码功能。可以用于c语言大作业的登录系统。下面分享一下具体的代码。
首先定义一个结构体来存放用户的注册信息,账号密码等。

typedef struct The_users   //typedef 可以定义结构体别名
{
    char id[11]; //账号 
    char pwd[20]; //密码 
    char name[15];//姓名为字符串 
    char sex; //性别为单个字符
	long phone; //电话号码为长整型 
}users;

然后写一个函数用来创建储存用户账号密码的文件。

/*创建储存用户账号密码的文件*/ 
void Create_File()
{
    FILE *fp;
    if ((fp = fopen("users.txt","rb"))==NULL)                 /*如果此文件不存在*/
    {
        if ((fp = fopen("users.txt","wb+"))==NULL)
        {
            printf("无法建立文件!\n");
            exit(0);
            
        }
    }
}

注册:将存放用户的信息的结构体直接存入文件中,每次存入分配该结构体大小的空间,然后该用户的信息就可以按结构体整体来读取。还加入了一些错误提示,如果输入错误就提示重新输入。

/*注册账号*/ 
void registers()  //按结构体的大小,一次写入或者读入1个结构体大小
     {    
         users a,b;//结构体 The_users 重命名定义
         FILE *fp;
         char temp[20];
         int count = 0;
         printf("欢迎来到注册界面!\n");
         Sleep(1000);
         fp = fopen("users.txt","r");
         
         fread(&b, sizeof(struct The_users), 1, fp); //读入一个结构体字符块 到b
          printf("请输入账号\n");
         scanf("%s",&a.id);
         
         
         while (1)
         {    
             if (strcmp(a.id, b.id)) /*如果两串不相等*/
             {
                 if (!feof(fp))    /*如果未到文件尾*/                                
                     
                     
                 {
                     fread(&b, sizeof(struct The_users), 1, fp);
                 }
                 else
                     break;
             }
             else

             {   
                 printf("此用户名已存在!请重新注册!\n"); 
                 Sleep(1000);
                 fclose(fp);
                 return;      
             }
         }
         printf("请输入姓名:\n");
         scanf("%s",&a.name);
         printf("请输入性别(f(女)/m(男)):\n");
         scanf(" %c",&a.sex);
         do{
         	if(a.sex != 'f' && a.sex != 'm'){
			 	printf("性别输入错误!请重新输入!\n");
		        scanf("%c",&a.sex);
			 }
		 }while(a.sex != 'f' && a.sex != 'm');
		 getchar();
         printf("请输入电话号码:\n");
         scanf("%ld",&a.phone);
         printf("请输入密码\n");
         scanf(" %s",&a.pwd);
         printf("请确认密码\n");
         scanf(" %s",&temp);
		 do{
         	if(!strcmp(a.pwd,temp)){
         		fp = fopen("users.txt","a");
		         fwrite(&a, sizeof(struct The_users), 1, fp);
		         printf("账号注册成功,请登录!\n"); 
		         Sleep(500);
		         fclose(fp);
				 return;
			 }else{
			 	printf("两次密码不匹配!请重新输入!\n");
		         scanf("%s",&a.pwd);
		         printf("请确认密码\n");
		         scanf("%s",&temp);
			 }
		 }while(1);
     }

登录:先输入账号和密码。然后按账号从文件中读取,如果账号匹配就读取密码,如果密码也匹配就登录成功,否则重新输入密码。

/*登录系统*/ 
void  Input_login()
{
    users a,b;//定义结构体The_users别名
    
    FILE *fp;
    printf("欢迎来到登录界面!\n");
         Sleep(1000);
    fp = fopen("users.txt","r");
    
    fread(&b, sizeof(struct The_users), 1, fp); //读入一个结构体字符块 写入b
    printf("请输入账号\n");
    scanf("%s",&a.id);   
    
             while (1)
           {   
	           if (strcmp(a.id, b.id)==0)         //如果有此用户名
	           {
	               break;       
	           }
	           
	           else 
	           {
	               if (!feof(fp))  //如果文件没有读完                            
	            
	               {
	                   fread(&b, sizeof(struct The_users), 1, fp);
	               }
	               
	               else
	               {
	                   printf("此用户名不存在,请重新输入!\n");
					   Sleep(500); 
	                   fclose(fp);  
					   return;              
	               }
	           }
       }
       printf("请输入密码\n");
       	scanf("%s",&a.pwd); 
    do{   
	       
		if (strcmp(a.pwd, b.pwd)==0)            /*如果密码匹配*/
	           
	       {  
	          fclose(fp);
	          printf("登录成功,欢迎使用!");
	          Sleep(500);
	          return;
	          }
	       else  
	       {    printf("密码不正确!请重新输入密码\n");
	       		scanf("%s",&a.pwd);         
	       }
	}while(strcmp(a.pwd, b.pwd)==0);
       
}

找回密码:根据输入的账号获取该账号的结构体信息,然后与其他信息进行匹配,如果全部匹配成功,则显示该账号的密码。

/*找回密码*/
 
void reback()  //按结构体的大小,一次写入或者读入1个结构体大小
     {    
         users a,b;//结构体 The_users 重命名定义
         FILE *fp;
         char temp[20];
         int count = 0;
         printf("欢迎来到找回密码界面!\n");
         Sleep(1000);
         fp = fopen("users.txt","r");
    
    	fread(&b, sizeof(struct The_users), 1, fp); //读入一个结构体字符块 写入b
    	printf("请输入账号\n");
    	scanf("%s",&a.id);   
    
             while (1)
           {   
	           if (strcmp(a.id, b.id)==0)         //如果有此用户名
	           {
	               break;       
	           }
	           
	           else 
	           {
	               if (!feof(fp))  //如果文件没有读完                            
	            
	               {
	                   fread(&b, sizeof(struct The_users), 1, fp);
	               }
	               
	               else
	               {
	                   printf("此用户名不存在,请重新输入!\n");
					   Sleep(500); 
	                   fclose(fp);  
					   return;              
	               }
	           }
       }
         printf("请输入姓名:\n");
         scanf("%s",&a.name);
         do{
         	if(strcmp(a.name,b.name)){
			 	printf("姓名输入错误!请重新输入!\n");
		        scanf("%s",&a.name);
			 }
		 }while(strcmp(a.name,b.name));
         printf("请输入电话号码:\n");
         scanf("%ld",&a.phone);
         do{
         	if(a.phone != b.phone){
			 	printf("电话号码输入错误!请重新输入!\n");
		        scanf("%ld",&a.phone);
			 }
		 }while(a.phone != b.phone);
        printf("您的密码是:%s",b.pwd);
        Sleep(3000);
}

欢迎访问我的博客网站:http://jie12366.xyz:8081

评论 100
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值