C语言实现登录注册和忘记密码功能

 更新时间:2020年12月28日 10:12:57   作者:monkey-jie  
这篇文章主要为大家详细介绍了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);
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++实现“隐藏实现,开放接口”的方案

    C++实现“隐藏实现,开放接口”的方案

    本文从一个实例讲解了C++实现“隐藏实现,开放接口”的方案,文章条理清新,内容充实,需要的朋友可以参考下
    2015-07-07
  • C语言实现三子棋游戏附注释

    C语言实现三子棋游戏附注释

    这篇文章主要为大家详细介绍了C语言实现三子棋游戏附注释,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++中的常量定义小结

    C++中的常量定义小结

    在C++中,并不提倡使用#define定义一个常量。#define本质上是一个预处理器指令,它仅仅表示使用一个串代替别一个串而已。也就是说,#define定义的常量从未被编译器看到——它们在编译器开始处理源码之前就被移走了
    2015-08-08
  • C语言线性表全面梳理操作方法

    C语言线性表全面梳理操作方法

    线性表,数据结构中最简单的一种存储结构,专门用于存储逻辑关系为"一对一"的数据。线性表是基于数据在实际物理空间中的存储状态,又可细分为顺序表(顺序存储结构)和链表
    2022-04-04
  • C语言求矩阵主对角线元素及副对角线元素之和

    C语言求矩阵主对角线元素及副对角线元素之和

    这篇文章主要介绍了C语言求矩阵主对角线元素及副对角线元素之和实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • C C++ 题解LeetCode2360图中的最长环示例

    C C++ 题解LeetCode2360图中的最长环示例

    这篇文章主要为大家介绍了C C++ 题解LeetCode2360图中的最长环示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 获取一个文件行数的方法

    获取一个文件行数的方法

    获取一个文件行数的方法,需要的朋友可以参考一下
    2013-03-03
  • C语言进阶输入输出重定向与fopen函数使用示例详解

    C语言进阶输入输出重定向与fopen函数使用示例详解

    这篇文章主要为大家介绍了C语言进阶输入输出重定向与fopen函数的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • C语言Make命令用法讲解

    C语言Make命令用法讲解

    本文详细讲解了C语言Make命令用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • 关于C语言strlen与sizeof区别详情

    关于C语言strlen与sizeof区别详情

    对于 strlen 和 sizeof,相信不少程序员会混淆其功能。虽然从表面上看它们都可以求字符串的长度,但二者却存在着许多不同之处及本质区别,今天得这篇文章我们就来学习C语言strlen与sizeof区别的相关资料,需要的朋友可以参考一下
    2021-10-10

最新评论