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

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

(0)

相关推荐

  • C语言实现注册登录系统

    本文实例为大家分享了C语言实现注册登录系统的具体代码,供大家参考,具体内容如下 /* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h" #include "windows.h" //定义变量 char reg_name[30]="",reg_pwd[10]=""; char on_name[30],on_pwd[10];

  • C语言利用数组和文件实现登录注册功能

    C语言利用文件系统实现简单的用户登录和注册功能 版本一:利用数组 最近有个朋友让我帮他做一个C语言的登录注册功能,考虑到他没有学到数据库于是想到了存入文件 此版本使用的数组,第二个版本使用的是链表,链表是一个很好的数据结构,推荐大家用链表 第二版:链接 话不多说上代码 #include <stdio.h> #include <stdlib.h> #define USER_MAX 20 //此系统能存放最多的用户数 typedef struct { char name[10]; ch

  • C语言实现密码强度检测

    本文实例为大家分享了C语言实现密码强度检测,供大家参考,具体内容如下 1 方案得分项 一.密码长度: 公式 :+(n*4),其中n表示密码长度 二.大写字母: 公式:+((len-n)*2),其中n表示大写字母个数,len表示密码长度 三.小写字母: 公式:+((len-n)*2),其中n表示小写字母个数,len表示密码长度 四.数字: 公式:+(n*4),其中n表示数字个数 条件:满足n < len,才能得到加分,len表示密码长度 五.符号: 公式:+(n*6),其中n表示符号个数 六.位于

  • C语言利用链表与文件实现登录注册功能

    C语言实现简登录和注册功能,供大家参考,具体内容如下 C语言实现注册登录 使用链表 使用文件 版本二: 利用链表 此版本使用的链表,第一个版本使用的是数组 数组版本连接 这里我使用的线性链表,一定要注意在判断语句或赋值语句中不可将指针指向未定义的区域,这会产生很大问题,所以一般都需要在链表最后一个节点指向空指针 代码: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <stri

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

    这是一个用纯C语言和文件操作实现的系统的登录.注册和忘记密码功能.可以用于c语言大作业的登录系统.下面分享一下具体的代码. 首先定义一个结构体来存放用户的注册信息,账号密码等. typedef struct The_users //typedef 可以定义结构体别名 { char id[11]; //账号 char pwd[20]; //密码 char name[15];//姓名为字符串 char sex; //性别为单个字符 long phone; //电话号码为长整型 }users; 然后写

  • Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码

    本文重在实现理解,过滤器,业务,逻辑需求,样式请无视.. 项目结构如下 1.idea新建Spring boot项目,在pom中加上thymeleaf和mybatis支持.pom.xml代码如下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3

  • Android通过SharedPreferences实现自动登录记住用户名和密码功能

    最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现. SharedPreferences简介 SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data/data/<包名>/shared_prefs目录下.SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现

  • thinkphp框架下实现登录、注册、找回密码功能

    本文实例为大家分享了thinkphp框架下使用ajax表单提交的登录.注册.找密码的实现方法,以及注册后的用户需后台审核. user表的字段为id.num.password.name.email.addtime.status 具体代码如下 <?php namespace Home\Controller; use Think\Controller; class LoginController extends Controller { //处理登录 public function signin(){

  • Javascript实现登录记住用户名和密码功能

    话不多说,请看代码: <script type="text/javascript"> $(document).ready(function () { $("#UserAccount").focus(); //记住用户名和密码 $('#remebers').click(function () { if ($("#UserAccount").val() == "") { alert("用户名不能为空!&quo

  • Springboot实现邮箱验证码注册与修改密码及登录功能详解流程

    目录 前言 一.SpringBoot依赖 1.pom.xml文件 2.Applications.yaml 二.数据库文件 三.实现注册功能 四.找回密码功能 五.登录功能 总结 前言 最近Springboot课程要求登录.注册.找回密码功能,可以自行添加一些额外的功能,这里也是记录一下做好的思路和代码. 一.SpringBoot依赖 1.pom.xml文件 Maven版本号:3.5.4 登录.注册.找回密码,需要用到邮箱验证码,要引入mail依赖,实现三分钟需要使用到redis,要引入redis

  • Android实现登录注册功能封装

    我们都知道Android应用软件基本上都会用到登录注册功能,那么对一个一个好的登录注册模块进行封装就势在必行了.这里给大家介绍一下我的第一个项目中所用到的登录注册功能的,已经对其进行封装,希望能对大家有帮助,如果有什么错误或者改进的话希望各位可以指出. 我们都知道登录注册系列功能的实现有以下几步: 注册账号 登录账号 (第三方账号登录) 记住密码 自动登录 修改密码 大体的流程如下 对于需要获取用户登录状态的操作,先判断用户是否已经登录. 如果用户已经登录,则继续后面的操作,否则,跳转到登录页面

  • java web实现邮箱激活与忘记密码

    由于在项目中要实现用户注册的邮箱激活以及忘记密码重置密码功能,所以通过查阅资料做了一个简单的设计和实现. 邮箱激活 背景:几乎每个网站或论坛之类的用户注册后都需要通过发送邮件到邮箱激活用户. 设计: 激活步骤: 1. 发送激活操作链接地址至用户邮箱. 2. 用户至邮箱查收邮件. 3. 用户点击链接,跳转至成功页面(修改激活状态),激活成功. 实现: /** * 发送邮件 * * @param request * @return */ @RequestMapping(value = "/sendE

  • Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析

    本文实例讲述了Laravel 框架基于自带的用户系统实现登录注册及错误处理功能.分享给大家供大家参考,具体如下: 一.默认 Laravel 不会自动帮你装上用户系统, 二.但是我们可以从默认首页的代码中看到,登录注册按钮被隐藏了 三.需要手动输入命令进行安装 php artisan make:auth 安装完成后重新刷新页面就可以到登录注册按钮了 四.可能遇到的问题 1. 当在注册页面点击注册时,一般会报如下错误,如果你没动过任何配置的话, SQLSTATE[HY000] [1045] Acce

随机推荐