1. 程式人生 > >2018年12月26日 明碼登入系統

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; }