C语言小案例:登录界面

第二个小案例新鲜出炉啦,小人不才,斗胆将其公之于众,请各位大佬手下留情,也希望给出些许建议,万分感谢!
同是天涯码字猿,共勉,共勉!
C语言小案例:登录界面_第1张图片
案例目的:C语言实现登录界面
实现功能:
1.用户登录:用户名、用户密码登录,进入主菜单
密码正确:进入主菜单
密码错误:重新登录或找回密码
找回密码:输入绑定手机号,输入正确,返回账号信息
2.用户注册:注册账号、密码,账户密保,返回登录界面
注册账号:输入用户名:用户名重复,重新输入
输入密码:两次输入密码,密码不同,重新输入
输入验证码:产生验证码,输入验证码,不同重新输入
账户密保:绑定手机号,手机号重复,重新输入手机号

  1. 函数声明:
#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);   //找回密码
  1. 主函数:显示登录界面
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;
}
  1. 注册函数:注册新用户账号信息,显示注册页面
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;
}
  1. 注册辅助函数:验证账号是否已被注册
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;
}
  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;
}
  1. 绑定辅助函数:验证手机号是否已被绑定
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;
}
  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;
}
  1. 登录函数:登录账号
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;
}
  1. 登录辅助函数:验证输入账号信息是否正确
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;
}
  1. 登录辅助函数:登录出错选择找回密码或重新登录
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;
}
  1. 找回密码函数:通过绑定的手机号找回密码
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;
}
  1. 清屏函数:清空界面,返回主界面
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);
}
  1. 退出函数:退出程序
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版
前端案例系列:
前端小案例:登录页面
撕烂数据爆锤算法系列:
撕烂数据爆锤算法:单链表
撕烂数据爆锤算法:循环链表
刚接触这方面的东西,有很多不解和疑问,希望大家能够多多支持,也希望我能在编程之路上越走越远,哈哈!

你可能感兴趣的:(C语言,c语言)