創建儲存用戶賬號密碼的文件:
void Create_File() { FILE *fp; if ((fp = fopen("users.txt","rb"))==NULL) /*如果此文件不存在*/ { if ((fp = fopen("users.txt","wb+"))==NULL) { outtextxy(220, 200, "無法建立文件!"); } } }
關於文件讀寫:
r 只讀 為輸入打開一個文本文件(文件必須存在) w 只寫 為輸出打開一個文本文件(如沒有文件,則新建) a 追加 向文本文件尾添加數據(如沒有文件,則新建) rb 只讀 為輸入打開一個二進制文件 wb 只寫 為輸出打開一個二進制文件 ab 追加 向二進制文件尾添加數據 r+ 讀寫 為讀寫打開一個文本文件(文件必須已經存在) w+ 讀寫 為讀寫建立一個新的文本文件 a+ 讀寫 為讀寫打開一個文本文件(讀寫指針定位在最后) rb+ 讀寫 為讀寫打開一個二進制文件 wb+ 讀寫 為讀寫建立一個新的二進制文件 ab+ 讀寫 為讀寫打開一個二進制文件
創建結構體:
typedef struct The_users //typedef 可以定義結構體別名 { char id[11]; char pwd[20]; }users;
該結構體用於存儲用戶賬號密碼。
注冊用戶(賬號密碼)
void registers() //按結構體的大小,一次寫入或者讀入1個結構體大小 { users a,b;//結構體 The_users 重命名定義 FILE *fp; fp = fopen("users.txt","r"); fread(&b, sizeof(struct The_users), 1, fp); //讀入一個結構體字符塊 到b InputBox(a.id,11,"請輸入賬號"); while (1) { if (strcmp(a.id, b.id)) /*如果兩串不相等*/ { if (!feof(fp)) /*如果未到文件尾*/ { fread(&b, sizeof(struct The_users), 1, fp); } else break; } else { outtextxy(220, 200, "此用戶名已存在!"); fclose(fp); main(); } } InputBox(a.pwd,10,"請輸入密碼"); fp = fopen("users.txt","a"); fwrite(&a, sizeof(struct The_users), 1, fp); outtextxy(220, 200, "帳號注冊成功!"); fclose(fp); main(); }
登錄賬號密碼:
void Input_login() { users a,b;//定義結構體The_users別名 FILE *fp; fp = fopen("users.txt","r"); fread(&b, sizeof(struct The_users), 1, fp); //讀入一個結構體字符塊 寫入b InputBox(a.id,11,"請輸入賬號"); outtextxy(295,270,a.id); while (1) { if (strcmp(a.id, b.id)==0) //如果有此用戶名 { break; } else { if (!feof(fp)) //如果文件沒有讀完 { fread(&b, sizeof(struct The_users), 1, fp); } else { outtextxy(220, 200, "此用戶名不存在!"); fclose(fp); main(); } } } InputBox(a.pwd,20,"請輸入密碼"); if (strcmp(a.pwd, b.pwd)==0) /*如果密碼匹配*/ { fclose(fp); outtextxy(250, 200, "登錄成功,歡迎使用!"); } else { outtextxy(220, 200, "密碼不正確!"); main(); } }