第二个小案例新鲜出炉啦,小人不才,斗胆将其公之于众,请各位大佬手下留情,也希望给出些许建议,万分感谢!
同是天涯码字猿,共勉,共勉!
案例目的:C语言实现登录界面
实现功能:
1.用户登录:用户名、用户密码登录,进入主菜单
密码正确:进入主菜单
密码错误:重新登录或找回密码
找回密码:输入绑定手机号,输入正确,返回账号信息
2.用户注册:注册账号、密码,账户密保,返回登录界面
注册账号:输入用户名:用户名重复,重新输入
输入密码:两次输入密码,密码不同,重新输入
输入验证码:产生验证码,输入验证码,不同重新输入
账户密保:绑定手机号,手机号重复,重新输入手机号
#include
#include
#include
#include
#include
#include
void Exit(void); //退出函数
void Empty(int a); //清空返回
void IdentifyingCode(void); //生成验证码
void Create(void); //用户注册
int TestaCcount(char ch1[11]); //注册辅助函数:账号验证
void security(char ch1[11],char ch2[11]): //绑定手机
int TestaPhone(char ch1[11]); //绑定辅助函数:手机号验证
void Entry(); //登录账号
int TestaPassword(char ch1[11],char ch2[11]);//登录辅助函数:密码验证
void PasswordHelp(void); //密码错误
void FoundPassword (void); //找回密码
int main()
{
int n;
do
{
system("cls");
printf("\n $登录界面$\n");
printf("\n\n 1.用户注册 2.用户登录 3.退出程序\n");
printf("\n^*^请选择:");
scanf("%d",&n);
switch(n)
{
case 1:Create();break;
case 2:Entry();break;
case 3:Exit();break;
default:system("cls");printf("#输入有误#");
}
}while(1);
return 0;
}
void Create(void) //用户注册
{
FILE *fp;
char ch1[11],ch2[11],ch3[11];
int k=0,i,h=0,g,n;
if((fp=fopen("account.txt","ab"))==NULL)
{
printf("文件打开失败\n");
exit(-1);
}
system("cls");
do
{
printf("\n $注册$\n");
printf("\n 请输入账号:");
for(i=0;i<10;i++)
{
ch1[i]=getch();
printf("%c",ch1[i]);
}
ch1[10]='\0';
if(TestaCcount(ch1)==0)
{
h=1;
fwrite(ch1,10*sizeof(char),1,fp);
}
else
{
system("cls");
printf("#账号已被注册,请重新输入账号#\n");
}
}while(h==0);
putchar(10);
system("cls");
do
{
do
{
n=0;
g=0;
printf("\n $注册$\n");
printf("\n 请输入密码:");
for(i=0;i<10;i++)
{
ch2[i]=getch();
printf("*");
}
ch2[10]='\0';
for(i=0;ch2[i];i++)
{
if(isalpha(ch2[i]))
g=1;
if(!(('1'<=ch2[i] && ch2[i]<='9') || ('a'<=ch2[i] && ch2[i]<='z') || ('A'<=ch2[i] && ch2[i]<='Z')))
{
system("cls");
printf("\n#密码只能包含数字和字母#");
n=1;
break;
}
}
if(g==0 && n==0)
{
system("cls");
printf("\n#密码应至少包含一个字母#\n");
}
}while(g==0);
putchar(10);
printf(" 再次输入密码:");
for(i=0;i<10;i++)
{
ch3[i]=getch();
printf("*");
}
ch3[10]='\0';
putchar(10);
if(strcmp(ch2,ch3)==0)
{
k=1;
fwrite(ch2,10*sizeof(char),1,fp);
}
else
{
system("cls");
printf("#两次密码不一致#\n");
}
}while(k==0);
fclose(fp);
security(ch1,ch2);
Empty(1);
return;
}
int TestaCcount(char ch1[11]) //账号验证
{
FILE *fp;
int g=0;
char a[11];
if((fp=fopen("account.txt","rb"))==NULL)
{
printf("文件打开失败\n");
exit(-1);
}
while(feof(fp)==0)
{
fread(a,10*sizeof(char),1,fp);
a[10]='\0';
if(strcmp(a,ch1)==0) g=1;
}
fclose(fp);
if(g==0)
return 0;
else
return 1;
}
void security(char ch1[11],char ch2[11]) //绑定手机
{
FILE *fp;
char ch3[11];
int i,k=0;
if((fp=fopen("security.txt","ab"))==NULL)
{
printf("文件打开失败\n");
exit(-1);
}
system("cls");
do
{
printf("\n $绑定$\n");
printf("\n 手机号[10位]:");
for(i=0;i<10;i++)
{
ch3[i]=getch();
printf("%c",ch3[i]);
}
ch3[10]='\0';
if(TestaPhone(ch3)==0)
{
k=1;
fwrite(ch3,10*sizeof(char),1,fp);
fwrite(ch2,10*sizeof(char),1,fp);
fwrite(ch1,10*sizeof(char),1,fp);
}
else
{
system("cls");
printf("#该手机号已被绑定#\n");
}
}while(k==0);
fclose(fp);
putchar(10);
IdentifyingCode();
return;
}
int TestaPhone(char ch1[11]) //手机号验证
{
FILE *fp;
int g=0;
char a[11];
if((fp=fopen("security.txt","rb"))==NULL)
{
printf("文件打开失败\n");
exit(-1);
}
while(feof(fp)==0)
{
fread(a,10*sizeof(char),1,fp);
a[10]='\0';
if(strcmp(a,ch1)==0) g=1;
}
fclose(fp);
if(g==0)
return 0;
else
return 1;
}
void IdentifyingCode(void) //验证码
{
char ch1[5],ch2[5];
int a,i;
srand(time(NULL));
system("cls");
do
{
for(i=0;i<4;i++)
{
a=rand()%9;
switch(a)
{
case 1:ch1[i]='2';break;
case 2:ch1[i]='G';break;
case 3:ch1[i]='a';break;
case 4:ch1[i]='5';break;
case 5:ch1[i]='Q';break;
case 6:ch1[i]='0';break;
case 7:ch1[i]='k';break;
case 8:ch1[i]='7';break;
case 9:ch1[i]='S';break;
case 0:ch1[i]='W';break;
default :ch1[i]='A';
}
}
ch1[4]='\0';
printf("\n $验证$\n");
printf("\n 5秒后生成验证码:");
Sleep(5000);
printf("\n [%s]\n",ch1);
printf(" 请输入验证码:");
scanf("%s",ch2);
if(strcmp(ch1,ch2)==0)
break;
else
{
system("cls");
printf("#验证码错误#\n");
}
}while(1);
return;
}
void Entry() //登录账号
{
int k=0,i;
char ch1[11],ch2[11];
system("cls");
do
{
printf("\n $登录$\n");
printf("\n 账号:");
for(i=0;i<10;i++)
{
ch1[i]=getch();
printf("%c",ch1[i]);
}
ch1[10]='\0';
printf("\n 密码:");
for(i=0;i<10;i++)
{
ch2[i]=getch();
printf("*");
}
ch2[10]='\0';
if(TestaPassword(ch1,ch2)==1)
k=1;
else
{
PasswordHelp();
system("cls");
}
}while(k==0);
Empty(2);
return;
}
int TestaPassword(char ch1[11],char ch2[11]) //密码验证
{
FILE *fp;
int c=0,g=0,k=0;
char a[11],b[11];
if((fp=fopen("account.txt","rb"))==NULL)
{
printf("文件打开失败\n");
exit(-1);
}
while(c==0 && feof(fp)==0)
{
fread(a,10*sizeof(char),1,fp);
a[10]='\0';
if(strcmp(a,ch1)==0)
{
fread(b,10*sizeof(char),1,fp);
b[10]='\0';
if(strcmp(b,ch2)==0) c=1;
g=1;
}
}
fclose(fp);
if(g==1 && c==1)
return 1;
else
return 0;
}
void PasswordHelp(void) //密码错误
{
int n;
system("cls");
do
{
printf("\n $密码错误$\n");
printf("\n\n 1.找回密码 2.重新登录\n");
printf("\n^*^请选择:");
scanf("%d",&n);
if(n==1)
{
FoundPassword();
return;
}
if(n==2)
return;
else
{
system("cls");
printf("#输入错误#");
}
}while(n!=1 && n!=2);
return;
}
void FoundPassword (void) //找回密码
{
FILE *fp;
int g=0,i,n;
char a[11],b[11],ch1[11],c[11];
if((fp=fopen("security.txt","rb"))==NULL)
{
printf("文件打开失败\n");
exit(-1);
}
system("cls");
do
{
printf("\n $找回密码$\n");
printf("\n 输入绑定手机号:");
for(i=0;i<10;i++)
{
ch1[i]=getch();
printf("%c",ch1[i]);
}
ch1[10]='\0';
rewind(fp);
while(feof(fp)==0)
{
fread(a,10*sizeof(char),1,fp);
a[10]='\0';
if(strcmp(a,ch1)==0)
{
fread(b,10*sizeof(char),1,fp);
fread(c,10*sizeof(char),1,fp);
b[10]='\0';
c[10]='\0';
g=1;
}
}
if(g==0)
{
system("cls");
printf("#该手机号未被绑定#");
}
else
{
system("cls");
printf("\n $找回成功$\n");
printf("\n 5秒后返回账号信息:\n");
Sleep(5000);
printf("\n 账号: %s ",c);
printf("\n 密码: %s ",b);
}
}while(g==0);
fclose(fp);
do
{
printf("\n\n ^*^输入 0 返回界面\n");
scanf("%d",&n);
if(n==0)
return;
else
{
system("cls");
printf("#输入有误#\n\n");
}
}while(n!=0);
system("cls");
return;
}
void Empty(int a) //清空返回
{
int n;
system("cls");
do
{
if(a==1)
{
printf("\n $注册成功$\n");
printf("\n^*^输入 0 返回界面\n");
}
if(a==2)
{
printf("\n $登录成功$\n");
printf("\n^*^输入 0 进入主菜单\n");
}
scanf("%d",&n);
if(n==0)
return;
else
{
system("cls");
printf("#输入有误#\n\n");
}
}while(n!=0);
}
void Exit(void)
{
system("cls");
printf("\n\n\n ^*^感谢使用手机模拟系统,祝您生活愉快!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
exit(-1);
}
注:1.程序通过建立文件,将账号信息写入所建文件,需要时从文件中读出所需信息,本程序共建立两个文件,分别是:account.txt 文件和 security.txt 文件,其中account.txt 文件储存注册的账号与密码,security.txt 文件储存绑定的手机号、账号以及密码。2.system(“cls”);为清屏函数。3.srand(“time(NULL)”);和rand();为随机数函数;
小小推荐:
C语言案例系列:
C语言小案例:学生管理系统1.0版
前端案例系列:
前端小案例:登录页面
撕烂数据爆锤算法系列:
撕烂数据爆锤算法:单链表
撕烂数据爆锤算法:循环链表
刚接触这方面的东西,有很多不解和疑问,希望大家能够多多支持,也希望我能在编程之路上越走越远,哈哈!