这是一个用纯C语言和文件操作实现的系统的登录、注册和忘记密码功能。可以用于c语言大作业的登录系统。下面分享一下具体的代码。


 

首先定义一个结构体来存放用户的注册信息,账号密码等。

typedefstructThe_users//typedef可以定义结构体别名 { charid[11];//账号 charpwd[20];//密码 charname[15];//姓名为字符串 charsex;//性别为单个字符 longphone;//电话号码为长整型 }users;

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

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

  

注册:

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

/*注册账号*/ voidregisters()//按结构体的大小,一次写入或者读入1个结构体大小 

{ usersa,b;//结构体The_users重命名定义 FILE*fp; chartemp[20]; intcount=0; printf("欢迎来到注册界面!n"); Sleep(1000); fp=fopen("users.txt","r"); fread(&b,sizeof(structThe_users),1,fp);

//读入一个结构体字符块到b printf("请输入账号n"); scanf("%s",&a.id); while(1) { if(strcmp(a.id,b.id))

/*如果两串不相等*/ { if(!feof(fp))/*如果未到文件尾*/ { fread(&b,sizeof(structThe_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(structThe_users),1,fp); 

printf("账号注册成功,请登录!n"); Sleep(500); fclose(fp); return; }else{ printf("两次密码不匹配!请重新输入!n"); scanf("%s",&a.pwd); printf("请确认密码n"); scanf("%s",&temp); } }while(1); }

  

登录:

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

/*登录系统*/ voidInput_login() { usersa,b;//定义结构体The_users别名 FILE*fp; printf("欢迎来到登录界面!n"); Sleep(1000); fp=fopen("users.txt","r"); fread(&b,sizeof(structThe_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(structThe_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); }

  

找回密码:

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

/*找回密码*/ voidreback()//按结构体的大小,一次写入或者读入1个结构体大小 { usersa,b;//结构体The_users重命名定义 FILE*fp; chartemp[20]; intcount=0; printf("欢迎来到找回密码界面!n"); 

Sleep(1000); fp=fopen("users.txt","r"); fread(&b,sizeof(structThe_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(structThe_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++编程!弯道超车,快人一步!笔者这里或许可以帮到你~

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习:


 

编程学习:


 
内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/zuishuaideou/p/14610443.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!