2018年12月26日 明碼登入系統
阿新 • • 發佈:2019-01-01
明碼登入系統 2018年12月26日
以下內容僅供娛樂,歡迎隨時探討,請多指教!
#include <stdio.h>
#include <string.h>
typedef struct {
char name[100];
char pw[100];
} uifo;
#define USER_FILE "data.bin"
#define DEFAULT_NAME "guest"
#define DEFAULT_PW "123"
void write_data(uifo *info) {
unsigned char len;
FILE *fp;
fp = fopen(USER_FILE, "wb");
if(fp == NULL) {
printf("can not open file \n");
return;
}
len = strlen(info->name);
fwrite(&len, 1, 1, fp);
fwrite(info->name, 1, len, fp);
len = strlen(info->pw);
fwrite(&len, 1, 1, fp);
fwrite(info->pw, 1, len, fp);
fclose(fp);
}
void read_data (uifo *info) {
FILE *fp;
unsigned char len;
fp = fopen(USER_FILE, "rb");
if(fp == NULL) {
strcpy(info->name, DEFAULT_NAME);
strcpy(info->pw, DEFAULT_PW);
write_data(info);
} else {
memset(info, 0, sizeof *info);
fread(&len, 1, 1, fp);
fread(info->name, 1, len, fp);
fread (&len, 1, 1, fp);
fread(info->pw, 1, len, fp);
fclose(fp);
}
}
int main() {
uifo info;
char pw[100]= {0}, pw_confirm[100]= {0};
int wt = 0;
memset(&info, 0, sizeof info);
read_data(&info);
printf("welcome! please login\n");
while(1) {
printf("please input your user name\n");
scanf("%s", pw);
if(strcmp(pw, info.name) != 0) {
printf("no such user name\n");
continue;
}
printf("please input your password\n");
scanf("%s", pw);
if(strcmp(pw, info.pw) != 0)
printf("password error\n");
else break;
wt ++;
if(wt >= 3) {
printf("3 times password error, exit!\n");
return -1;
}
}
while(1) {
int i;
printf("input 1 to change your password\ninput 0 to exit\n");
scanf("%d", &i);
if(i == 0) break;
if(i == 1) {
while(1) {
printf("please input your original password\n");
scanf("%s", pw);
if(strcmp(pw, info.pw) != 0) {
printf("original password is not correct\n");
continue;
}
printf("please input your new password\n");
scanf("%s", pw);
printf("please confirm your new password\n");
scanf("%s", pw_confirm);
if(strcmp(pw, pw_confirm) != 0) {
int j;
printf("the new passwords are not same in two times input!\n");
while(1) {
printf("input 1 to change password again\ninput 2 to back to last step\ninput 0 to exit\n");
scanf("%d", &j);
if(j == 0) return -2;
if(j == 1 || j == 2) break;
printf("unknown input\n");
}
if(j == 2) break;
continue;
}
strcpy(info.pw, pw);
write_data(&info);
break;
}
} else printf("unknown input, should be 0/1\n");
}
printf("Bye!\n");
return 0;
}