C語言實現登入註冊和忘記密碼功能
阿新 • • 發佈:2020-12-29
這是一個用純C語言和檔案操作實現的系統的登入、註冊和忘記密碼功能。可以用於c語言大作業的登入系統。下面分享一下具體的程式碼。
首先定義一個結構體來存放使用者的註冊資訊,賬號密碼等。
typedef struct The_users //typedef 可以定義結構體別名 { char id[11]; //賬號 char pwd[20]; //密碼 char name[15];//姓名為字串 char sex; //性別為單個字元 long phone; //電話號碼為長整型 }users;
然後寫一個函式用來建立儲存使用者賬號密碼的檔案。
/*建立儲存使用者賬號密碼的檔案*/ void Create_File() { FILE *fp; if ((fp = fopen("users.txt","rb"))==NULL) /*如果此檔案不存在*/ { if ((fp = fopen("users.txt","wb+"))==NULL) { printf("無法建立檔案!\n"); exit(0); } } }
註冊:將存放使用者的資訊的結構體直接存入檔案中,每次存入分配該結構體大小的空間,然後該使用者的資訊就可以按結構體整體來讀取。還加入了一些錯誤提示,如果輸入錯誤就提示重新輸入。
/*註冊賬號*/ void registers() //按結構體的大小,一次寫入或者讀入1個結構體大小 { users a,b;//結構體 The_users 重新命名定義 FILE *fp; char temp[20]; int count = 0; printf("歡迎來到註冊介面!\n"); Sleep(1000); fp = fopen("users.txt","r"); fread(&b,sizeof(struct The_users),1,fp); //讀入一個結構體字元塊 到b printf("請輸入賬號\n"); scanf("%s",&a.id); while (1) { if (strcmp(a.id,b.id)) /*如果兩串不相等*/ { if (!feof(fp)) /*如果未到檔案尾*/ { fread(&b,fp); } else break; } else { printf("此使用者名稱已存在!請重新註冊!\n"); Sleep(1000); fclose(fp); return; } } printf("請輸入姓名:\n"); scanf("%s",&a.name); printf("請輸入性別(f(女)/m(男)):\n"); scanf(" %c",&a.sex); do{ if(a.sex != 'f' && a.sex != 'm'){ printf("性別輸入錯誤!請重新輸入!\n"); scanf("%c",&a.sex); } }while(a.sex != 'f' && a.sex != 'm'); getchar(); printf("請輸入電話號碼:\n"); scanf("%ld",&a.phone); printf("請輸入密碼\n"); scanf(" %s",&a.pwd); printf("請確認密碼\n"); scanf(" %s",&temp); do{ if(!strcmp(a.pwd,temp)){ fp = fopen("users.txt","a"); fwrite(&a,fp); printf("賬號註冊成功,請登入!\n"); Sleep(500); fclose(fp); return; }else{ printf("兩次密碼不匹配!請重新輸入!\n"); scanf("%s",&a.pwd); printf("請確認密碼\n"); scanf("%s",&temp); } }while(1); }
登入:先輸入賬號和密碼。然後按賬號從檔案中讀取,如果賬號匹配就讀取密碼,如果密碼也匹配就登入成功,否則重新輸入密碼。
/*登入系統*/ void Input_login() { users a,b;//定義結構體The_users別名 FILE *fp; printf("歡迎來到登入介面!\n"); Sleep(1000); fp = fopen("users.txt","r"); fread(&b,fp); //讀入一個結構體字元塊 寫入b printf("請輸入賬號\n"); scanf("%s",&a.id); while (1) { if (strcmp(a.id,b.id)==0) //如果有此使用者名稱 { break; } else { if (!feof(fp)) //如果檔案沒有讀完 { fread(&b,fp); } else { printf("此使用者名稱不存在,請重新輸入!\n"); Sleep(500); fclose(fp); return; } } } printf("請輸入密碼\n"); scanf("%s",&a.pwd); do{ if (strcmp(a.pwd,b.pwd)==0) /*如果密碼匹配*/ { fclose(fp); printf("登入成功,歡迎使用!"); Sleep(500); return; } else { printf("密碼不正確!請重新輸入密碼\n"); scanf("%s",&a.pwd); } }while(strcmp(a.pwd,b.pwd)==0); }
找回密碼:根據輸入的賬號獲取該賬號的結構體資訊,然後與其他資訊進行匹配,如果全部匹配成功,則顯示該賬號的密碼。
/*找回密碼*/ void reback() //按結構體的大小,一次寫入或者讀入1個結構體大小 { users a,b;//結構體 The_users 重新命名定義 FILE *fp; char temp[20]; int count = 0; printf("歡迎來到找回密碼介面!\n"); Sleep(1000); fp = fopen("users.txt","r"); fread(&b,fp); //讀入一個結構體字元塊 寫入b printf("請輸入賬號\n"); scanf("%s",fp); } else { printf("此使用者名稱不存在,請重新輸入!\n"); Sleep(500); fclose(fp); return; } } } printf("請輸入姓名:\n"); scanf("%s",&a.name); do{ if(strcmp(a.name,b.name)){ printf("姓名輸入錯誤!請重新輸入!\n"); scanf("%s",&a.name); } }while(strcmp(a.name,b.name)); printf("請輸入電話號碼:\n"); scanf("%ld",&a.phone); do{ if(a.phone != b.phone){ printf("電話號碼輸入錯誤!請重新輸入!\n"); scanf("%ld",&a.phone); } }while(a.phone != b.phone); printf("您的密碼是:%s",b.pwd); Sleep(3000); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。