2018年12月26日 明码登入系统

明码登入系统 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43310774/article/details/85270374