延续上个系统的升级,相较1.0 版本,2.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("请选择:\n"); 14 printf("-----0. 退出-----\n"); 15 printf("-----1. 登录-----\n"); 16 printf("-----2. 注册-----\n"); 17 } 18 int denglu () // 登录 19 { 20 FILE *p; 21 int i =0; 22 int j =0; 23 int d; 24 int t=0; 25 int q=0; 26 sj g; 27 p=fopen ("D:\\shuju.dat","rb"); //打开文件 28 fread(&g,sizeof(k),1,p); 29 while((strcmp(k.zh,g.zh)!=0 || strcmp(k.mm,g.mm)!= 0) && fread(&g,sizeof(k),1,p) == 1) 30 { 31 fread(&g,sizeof(k),1,p); 32 } 33 if (strcmp(k.zh,g.zh)==0 && strcmp(k.mm,g.mm)== 0 ) 34 { 35 printf("登录成功!!!\n"); 36 fclose(p); 37 system("pause"); 38 return 0; 39 } 40 fclose(p); 41 printf ("账号或密码错误,请选择:\n 1. 重新输入 \n 2. 注册 \n 0. 退出系统 \n"); // 验证失败 42 scanf ("%d", &d); 43 switch (d) 44 { 45 case 1: 46 return 1 ; 47 break ; 48 case 2: 49 50 return 2; 51 break ; 52 case 0: 53 exit (1); 54 break ; 55 } 56 return 0; 57 } 58 int zhuce ( ) 59 { 60 FILE *p; 61 sj k; 62 printf("请输入注册账号以及密码\n账号:"); // 输入注册信息 63 scanf("%s",k.zh ); 64 printf("密码:"); 65 scanf("%s",k.mm ); 66 p = fopen ("D:\\shuju.dat","ab"); //打开文件 67 if (p== NULL) // 验证文件打开是否成功 68 { 69 printf("source text file error \n"); 70 exit (1); 71 } 72 fwrite(&k,sizeof(k),1,p); // 写入文件 73 fclose (p); // 关闭文件 74 printf ("注册成功!!"); 75 return 0 ; 76 } 77 int main () 78 { 79 menu (); // 显示菜单 80 int c; 81 int a; 82 char h; 83 FILE *p; 84 sj g; 85 p = fopen ("D:\\shuju.dat","ab"); 86 fclose(p); 87 scanf ("%d",&c); 88 switch (c) //选择 89 { 90 case 1 : 91 begin:printf("请输入账号密码\n账号:"); //登录 92 scanf("%s",k.zh ); 93 printf("密码:"); 94 scanf("%s",k.mm ); 95 a = denglu (); 96 if (a == 1 ) // 密码错误 97 { 98 goto begin ; 99 } 100 else if (a == 2) //注册 101 { 102 zhuce (); 103 goto begin ; 104 } 105 break; 106 case 2 : 107 zhuce (); // 注册 108 printf("请登录\n"); 109 goto begin ; 110 break; 111 case 0 :exit(1); // 退出系统 112 break; 113 } 114 return 0; 115 }
更新思路:
这次的存储采用二进制文件,
登录方面采用结构体整体比较的方式,省略了大部分的繁琐代码。