注册,登录 1.0

算法功能:

实现注册,登录验证。

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 struct sj   //构造账号,密码
  5 {
  6     char zh[20];
  7     char mm[20];
  8 };
  9 typedef struct sj sj ;
 10 sj k={' '};  
 11 void menu ()    // 开始菜单
 12 {
 13     printf("-----0. 退出-----\n");
 14     printf("-----1. 登录-----\n");
 15     printf("-----2. 注册-----\n");
 16 }
 17 int denglu ()   // 登录
 18 {
 19     FILE *p;
 20     int i =0;
 21     int j =0;
 22     int d;
 23     int t=0;
 24     int q=0;
 25     char hh;
 26     char zh[20];
 27     char mm[20]; 
 28     p=fopen ("D:\\shuju.txt","r");    //打开文件
 29     while ((zh[i] = fgetc (p)) != EOF )   //验证账号
 30     {
 31       if (zh[i]==k.zh[i])
 32       {
 33           i++;
 34       }
 35       else if( zh[i] == ' ' &&zh[i] != '\n' && i==strlen(k.zh ))    //验证账号完毕,准备验证密码。
 36       {
 37           while ((mm[j] = fgetc (p)) != EOF)
 38           {
 39               if (mm[j] == k.mm [j])
 40               { 
 41                   j++;
 42                   continue;
 43               }
 44               else if (mm[j] ==' '&&mm[i] != '\n'&& j==strlen(k.mm ) )   // 验证密码成功
 45               {
 46                   printf("登录成功!!");
 47                   return 0;
 48               }
 49               else   //验证密码失败
 50               { 
 51                 t = 1;
 52                 break;
 53               }
 54           }
 55       }
 56       else    // 验证下一条账号
 57       {
 58           i=0;    
 59           while ( (hh=fgetc(p))!=EOF &&  q<2)
 60           {
 61               if (hh==' ' && hh !='\n')
 62               {
 63                   q++;
 64               }
 65           }
 66           q=0;
 67       }
 68       if ( t ==1)
 69       {
 70           break;
 71       }
 72     }
 73     fclose(p);
 74     printf ("账号或密码错误,请选择:\n 1. 重新输入 \n 2. 注册 \n 0. 退出系统 \n"); // 验证失败
 75     scanf ("%d", &d);
 76     switch (d)
 77     {
 78     case 1: 
 79           return 1 ; 
 80           break ;
 81     case 2:
 82           
 83           return 2;
 84           break ;
 85     case 0:
 86           exit (1);
 87           break ;
 88     }    
 89     return 0;
 90 }
 91 int zhuce ( )
 92 {
 93     FILE *p;
 94     sj k;
 95     printf("请输入账号密码\n账号:"); // 输入注册信息
 96     scanf("%s",k.zh );
 97     printf("密码:");
 98     scanf("%s",k.mm );
 99     p = fopen ("d:\\shuju.txt","a");  //打开文件
100     if (p==0)                        // 验证文件打开是否成功
101     {
102         printf("source text file error \n");
103         exit (1);
104     }
105     fputs(k.zh,p);    // 写入文件
106     fputc(' ',p);
107     fputs(k.mm,p);
108     fputc(' ',p);
109     fputc('\n',p);
110     fclose (p);      // 关闭文件
111     printf ("注册成功!!");
112     return 0 ;
113 }
114 int main ()
115 {
116     menu ();  // 显示菜单
117     int c;
118     int a;
119     scanf ("%d",&c);
120     switch (c)  //选择
121     {
122     case 1 :
123             begin:printf("请输入账号密码\n账号:"); //登录
124             scanf("%s",k.zh );
125             printf("密码:");
126             scanf("%s",k.mm );
127             a = denglu ();
128             if (a == 1 )   // 密码错误
129             {
130                 goto begin ;
131             }
132             else if (a == 2) //注册
133             {
134                 zhuce ();
135                 printf("请登录\n");
136                 goto begin ;
137             }
138             break;
139     case 2 :
140             zhuce  ();  // 注册
141             printf("请登录\n");
142             goto begin ;
143             break;
144     case 0 :exit(1); // 退出系统
145             break;
146     }
147 return 0;
148 }

设计思路:

1:

数据以账号+空格+密码+空格的格式存储在txt中。

2:

注册部分,以字符串的形式写入数据。

3:

登录部分,将账号密码的字符串拆分成一个个字符,逐个比对。以空格为标志,分割账号和密码以及结束密码的验证。以输入账号密码的长度为界

细节部分:

1,

输入的账号密码用 构造变量 存储。

2,

登录验证失败可选择重新输入,或注册,用函数的返回值来控制接下来的动作。

3,

采用计数的方式,来解决文件指针换行的问题。

以及密码验证错误的时候,退出验证的双循环。

总结:

作为1.0 版本,能够正常运行 ,但代码方面会比较繁琐,不适合放入长代码的程序中使用。

猜你喜欢

转载自www.cnblogs.com/btimepes/p/11628752.html