C语言实现的注册登录以及修改账户

首先要在exe文件目录下新建一个users.txt文件 ,代码亲测可行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct users   
{
    char id[10]; //账号 
    char password[6]; //密码 
    char name[15];//姓名为字符串 
    char sex; //性别为单个字符
     
}users;
 

/*注册账号*/ 
void registers()  //按结构体的大小,一次写入或者读入1个结构体大小
{    
    users a,b;
    FILE *fp;
    char password_two[20];
   
    printf("欢迎来到注册界面!\n");
    fp = fopen("users.txt","r");
    fread(&b, sizeof(struct 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 users), 1, fp);
            }   
            else
            {
                break;
            }
                
        }
        else

        {   
            printf("此用户名已存在!请重新注册!\n"); 
            fclose(fp);
            fp=NULL;
            return;      
        }
    }
    printf("请输入姓名:\n");
    scanf("%s",&a.name);
    printf("请输入性别(f(女)/m(男)):\n");
    scanf(" %s",&a.sex);
    do{
        if(a.sex != 'f' && a.sex != 'm'){
            printf("性别输入错误!请重新输入!\n");
            scanf("%c",&a.sex);
        }
    }while(a.sex != 'f' && a.sex != 'm');

         
    printf("请输入密码\n");
    scanf(" %s",&a.password);
    printf("请重新输入,确认密码\n");
    scanf(" %s",&password_two);
    do{
        if(!strcmp(a.password,password_two)){
             fp = fopen("users.txt","a");
            fwrite(&a, sizeof(struct users), 1, fp);
            printf("账号注册成功,请登录!\n"); 
                 
            fclose(fp);
            return;
        }else{
            printf("两次密码不匹配!请重新输入!\n");
            scanf("%s",&a.password);
            printf("请确认密码\n");
            scanf("%s",&password_two);
             }
        }while(1);
}
/*登录系统*/ 
void  Login()
{
    users a,b;
    
    FILE *fp;
    printf("欢迎来到登录界面!\n");
    
    fp = fopen("users.txt","r");
    
    fread(&b, sizeof(struct users), 1, fp); //读入一个结构体字符块 写入b
    printf("请输入账号\n");
    scanf("%s",&a.id);   
    
    while (1)
    {   
        if (!strcmp(a.id, b.id))         //如果有此用户名
        {
            break;       
        }
               
        else 
        {
                    
                     
            if(!feof(fp))
            {
                     
                fread(&b, sizeof(struct users), 1, fp);
            }   
            else
            {
                printf("此用户名不存在,请重新输入!\n");       
                fclose(fp); 
                return; 
            }
        }
    }
       
       printf("请输入密码\n");
       
       do{   
           scanf("%s",&a.password); 
           if (strcmp(a.password, b.password)==0)            /*如果密码匹配*/
               
           {  
              fclose(fp);
              printf("登录成功,欢迎使用!");
             
              return;
            }
           else  
           {    printf("密码不正确!请重新输入密码\n");
                   
           }
        }while(strcmp(a.password, b.password));
       
}
/*找回密码*/
 
void reback()  
{    
    users a,b;
    FILE *fp;
    char temp[20];
    int count = 0;
    printf("欢迎来到找回密码界面!\n");
        
    fp = fopen("users.txt","r");
    
    fread(&b, sizeof(struct users), 1, fp); 
    printf("请输入账号\n");
    scanf("%s",&a.id);   
    
    while (1)//在文件中找到与用户输入相同的id
    {
        
        if (!strcmp(a.id, b.id))
        {
            break;
        }
        else
        {
            if (!feof(fp))//没读到文件尾,继续读
            {
                fread(&b, sizeof(users), 1, fp);
            }
            else
            {
                printf("您输入的账号不存在!请重新输入!\n");
                
                fclose(fp);
            
                return;
            }
        }
    }
     printf("请输入您的姓名>>");
    scanf("%s", &a.name);
    
    do//匹配姓名
    {
        
        if (strcmp(a.name, b.name))
        {
            printf("输入错误,请重新输入!\n");
            scanf("%s", &a.name);
        }
    } while (strcmp(a.name, b.name));
 
    printf("您的密码是:%s",b.password);
        
}
void chang_account()
{
    users a,b;
    FILE *fp;
    int t;
    char temp[10];
    char now_a[10];
    char now_b[10];
    printf("欢迎进入修改账号界面");
    fp = fopen("users.txt","r");
    fread(&b, sizeof(struct users), 1, fp); //读入一个结构体字符块 写入b
    printf("请输入原有账号");
    scanf("%s",&a.id);
    do
    {   
        if (!strcmp(a.id, b.id))         //如果有此用户名
        {
            break;       
        }
        else 
        {
            if(!feof(fp))
            {
                     
                fread(&b, sizeof(struct users), 1, fp);
            }
            else
            {
                       
                printf("此用户名不存在,请重新输入!\n");
                return; 
               
            }
        }
    }while(strcmp(a.id, b.id));
    printf("请输入密码\n");
       scanf("%s",&a.password); 
       do{   
            scanf("%s",&a.password); 
           if (strcmp(a.password, b.password)==0)            /*如果密码匹配*/
               
           {  
              
              printf("登录成功,欢迎使用!");
              break;
            }
           else  
           {
            printf("密码不正确!请重新输入密码\n");
                   
           }
       }
        while(strcmp(a.password, b.password));
    printf("请输入你修改之后的账号");
    scanf("%s",&now_a); 
    if(!strcmp(now_a,a.id))
    {
        printf("账号与之前相同,请确定是否放弃更改,1.放弃2.继续输入");
        scanf("%d",&t);
        switch(t)
        {
            case 1:
                printf("保留之前账号成功");
                fclose(fp);
                break;  
            case 2:
                printf("请输入需要更改后的账号");
                scanf("%s",&now_b);
                 if(!strcmp(now_b,a.id))
                 {
                     printf("两次输入相同账号,强制退出");
                     exit(0);
                 }
                 else
                 {
                     strcpy(a.id,now_b);
                    fp = fopen("users.txt","a");
                    fwrite(&a, sizeof(struct users), 1, fp);
                     fprintf(fp,"%s",a.id);
                     
                     printf("账户更改成功");
                     fclose(fp);
                     return;
                 }
            default:
                break;
     
                
        }
        
        
    }
     else
    {
                     strcpy(a.id,now_a);
                    fp = fopen("users.txt","a");
                    fwrite(&a, sizeof(struct users), 1, fp);
                     fprintf(fp,"%s",a.id);
                     printf("账户更改成功");
                     
                     fclose(fp);
    }
    
}
void menu()
{
    printf("欢迎来到账户登录系统,请先选择你需要办理的业务!\n");
    printf("***************************************************\n");
    printf("1.注册账号\n");
    printf("2.登录账号\n");
    printf("3.找回密码\n");
    printf("4.修改账号\n");
    printf("5.退出系统\n"); 
    printf("*****************************************************\n");
    

int main()
{
    char input;
    do
    {
        menu();
        setbuf(stdin, NULL);//注意清空输入缓存
        input = getchar();
        switch (input)
        {
        case '1':
            registers();
            break;
        case '2':
            Login();
            break;
        case '3':
            reback();
            break;
        case '4':
            chang_account();
            break;
        case '5':
            printf("退出成功!\n");
            break;
        default:
            printf("选择错误,请重新选择!\n");
            break;
        }
        }while(input!='5');
}

    
 

  • 14
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值