C语言实现登录注册

这是一个用纯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

  • 263
    点赞
  • 1553
    收藏
    觉得还不错? 一键收藏
  • 100
    评论
C语言可以通过使用数据结构和文件操作来实现注册登录功能。下面是一个简单的示例: 1. 首先,我们可以定义一个结构体来表示用户数据,包括用户名和密码: ```c typedef struct { char username[20]; char password[20]; } User; ``` 2. 接下来,我们可以定义几个函数来实现注册和登录功能。首先是注册函数: ```c #include <stdio.h> // 注册函数 void registerUser() { User user; printf("请输入用户名:"); scanf("%s", user.username); printf("请输入密码:"); scanf("%s", user.password); // 将用户数据保存到文件 FILE* file = fopen("users.txt", "a"); fwrite(&user, sizeof(User), 1, file); fclose(file); printf("注册成功!\n"); } ``` 3. 然后是登录函数: ```c #include <stdio.h> #include <string.h> // 登录函数 void loginUser() { User user; printf("请输入用户名:"); scanf("%s", user.username); printf("请输入密码:"); scanf("%s", user.password); // 从文件中读取用户数据 FILE* file = fopen("users.txt", "r"); if (file == NULL) { printf("用户文件不存在!\n"); return; } int found = 0; while(fread(&user, sizeof(User), 1, file)) { if (strcmp(user.username, username) == 0 && strcmp(user.password, password) == 0) { printf("登录成功!\n"); found = 1; break; } } if (!found) { printf("用户名或密码错误!\n"); } fclose(file); } ``` 4. 最后,我们可以编写一个主函数来调用注册和登录函数: ```c #include <stdio.h> int main() { int choice; printf("1. 注册\n"); printf("2. 登录\n"); printf("请选择功能:"); scanf("%d", &choice); switch (choice) { case 1: registerUser(); break; case 2: loginUser(); break; default: printf("无效的选择!\n"); } return 0; } ``` 以上是一个使用C语言实现简单注册登录功能的示例。请注意,此示例仅作演示用途,实际应用中可能需要更复杂的逻辑和安全性考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 100
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值