C語言實(shí)現(xiàn)登錄注冊(cè)和忘記密碼功能
這是一個(gè)用純C語言和文件操作實(shí)現(xiàn)的系統(tǒng)的登錄、注冊(cè)和忘記密碼功能??梢杂糜赾語言大作業(yè)的登錄系統(tǒng)。下面分享一下具體的代碼。
首先定義一個(gè)結(jié)構(gòu)體來存放用戶的注冊(cè)信息,賬號(hào)密碼等。
typedef struct The_users //typedef 可以定義結(jié)構(gòu)體別名 { char id[11]; //賬號(hào) char pwd[20]; //密碼 char name[15];//姓名為字符串 char sex; //性別為單個(gè)字符 long phone; //電話號(hào)碼為長(zhǎng)整型 }users;
然后寫一個(gè)函數(shù)用來創(chuàng)建儲(chǔ)存用戶賬號(hào)密碼的文件。
/*創(chuàng)建儲(chǔ)存用戶賬號(hào)密碼的文件*/ void Create_File() { FILE *fp; if ((fp = fopen("users.txt","rb"))==NULL) /*如果此文件不存在*/ { if ((fp = fopen("users.txt","wb+"))==NULL) { printf("無法建立文件!\n"); exit(0); } } }
注冊(cè):將存放用戶的信息的結(jié)構(gòu)體直接存入文件中,每次存入分配該結(jié)構(gòu)體大小的空間,然后該用戶的信息就可以按結(jié)構(gòu)體整體來讀取。還加入了一些錯(cuò)誤提示,如果輸入錯(cuò)誤就提示重新輸入。
/*注冊(cè)賬號(hào)*/ void registers() //按結(jié)構(gòu)體的大小,一次寫入或者讀入1個(gè)結(jié)構(gòu)體大小 { users a,b;//結(jié)構(gòu)體 The_users 重命名定義 FILE *fp; char temp[20]; int count = 0; printf("歡迎來到注冊(cè)界面!\n"); Sleep(1000); fp = fopen("users.txt","r"); fread(&b, sizeof(struct The_users), 1, fp); //讀入一個(gè)結(jié)構(gòu)體字符塊 到b printf("請(qǐng)輸入賬號(hào)\n"); scanf("%s",&a.id); while (1) { if (strcmp(a.id, b.id)) /*如果兩串不相等*/ { if (!feof(fp)) /*如果未到文件尾*/ { fread(&b, sizeof(struct The_users), 1, fp); } else break; } else { printf("此用戶名已存在!請(qǐng)重新注冊(cè)!\n"); Sleep(1000); fclose(fp); return; } } printf("請(qǐng)輸入姓名:\n"); scanf("%s",&a.name); printf("請(qǐng)輸入性別(f(女)/m(男)):\n"); scanf(" %c",&a.sex); do{ if(a.sex != 'f' && a.sex != 'm'){ printf("性別輸入錯(cuò)誤!請(qǐng)重新輸入!\n"); scanf("%c",&a.sex); } }while(a.sex != 'f' && a.sex != 'm'); getchar(); printf("請(qǐng)輸入電話號(hào)碼:\n"); scanf("%ld",&a.phone); printf("請(qǐng)輸入密碼\n"); scanf(" %s",&a.pwd); printf("請(qǐng)確認(rèn)密碼\n"); scanf(" %s",&temp); do{ if(!strcmp(a.pwd,temp)){ fp = fopen("users.txt","a"); fwrite(&a, sizeof(struct The_users), 1, fp); printf("賬號(hào)注冊(cè)成功,請(qǐng)登錄!\n"); Sleep(500); fclose(fp); return; }else{ printf("兩次密碼不匹配!請(qǐng)重新輸入!\n"); scanf("%s",&a.pwd); printf("請(qǐng)確認(rèn)密碼\n"); scanf("%s",&temp); } }while(1); }
登錄:先輸入賬號(hào)和密碼。然后按賬號(hào)從文件中讀取,如果賬號(hào)匹配就讀取密碼,如果密碼也匹配就登錄成功,否則重新輸入密碼。
/*登錄系統(tǒng)*/ void Input_login() { users a,b;//定義結(jié)構(gòu)體The_users別名 FILE *fp; printf("歡迎來到登錄界面!\n"); Sleep(1000); fp = fopen("users.txt","r"); fread(&b, sizeof(struct The_users), 1, fp); //讀入一個(gè)結(jié)構(gòu)體字符塊 寫入b printf("請(qǐng)輸入賬號(hào)\n"); scanf("%s",&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 { printf("此用戶名不存在,請(qǐng)重新輸入!\n"); Sleep(500); fclose(fp); return; } } } printf("請(qǐng)輸入密碼\n"); scanf("%s",&a.pwd); do{ if (strcmp(a.pwd, b.pwd)==0) /*如果密碼匹配*/ { fclose(fp); printf("登錄成功,歡迎使用!"); Sleep(500); return; } else { printf("密碼不正確!請(qǐng)重新輸入密碼\n"); scanf("%s",&a.pwd); } }while(strcmp(a.pwd, b.pwd)==0); }
找回密碼:根據(jù)輸入的賬號(hào)獲取該賬號(hào)的結(jié)構(gòu)體信息,然后與其他信息進(jìn)行匹配,如果全部匹配成功,則顯示該賬號(hào)的密碼。
/*找回密碼*/ void reback() //按結(jié)構(gòu)體的大小,一次寫入或者讀入1個(gè)結(jié)構(gòu)體大小 { users a,b;//結(jié)構(gòu)體 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); //讀入一個(gè)結(jié)構(gòu)體字符塊 寫入b printf("請(qǐng)輸入賬號(hào)\n"); scanf("%s",&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 { printf("此用戶名不存在,請(qǐng)重新輸入!\n"); Sleep(500); fclose(fp); return; } } } printf("請(qǐng)輸入姓名:\n"); scanf("%s",&a.name); do{ if(strcmp(a.name,b.name)){ printf("姓名輸入錯(cuò)誤!請(qǐng)重新輸入!\n"); scanf("%s",&a.name); } }while(strcmp(a.name,b.name)); printf("請(qǐng)輸入電話號(hào)碼:\n"); scanf("%ld",&a.phone); do{ if(a.phone != b.phone){ printf("電話號(hào)碼輸入錯(cuò)誤!請(qǐng)重新輸入!\n"); scanf("%ld",&a.phone); } }while(a.phone != b.phone); printf("您的密碼是:%s",b.pwd); Sleep(3000); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)“隱藏實(shí)現(xiàn),開放接口”的方案
本文從一個(gè)實(shí)例講解了C++實(shí)現(xiàn)“隱藏實(shí)現(xiàn),開放接口”的方案,文章條理清新,內(nèi)容充實(shí),需要的朋友可以參考下2015-07-07C語言求矩陣主對(duì)角線元素及副對(duì)角線元素之和
這篇文章主要介紹了C語言求矩陣主對(duì)角線元素及副對(duì)角線元素之和實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01C C++ 題解LeetCode2360圖中的最長(zhǎng)環(huán)示例
這篇文章主要為大家介紹了C C++ 題解LeetCode2360圖中的最長(zhǎng)環(huán)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10C語言進(jìn)階輸入輸出重定向與fopen函數(shù)使用示例詳解
這篇文章主要為大家介紹了C語言進(jìn)階輸入輸出重定向與fopen函數(shù)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02關(guān)于C語言strlen與sizeof區(qū)別詳情
對(duì)于 strlen 和 sizeof,相信不少程序員會(huì)混淆其功能。雖然從表面上看它們都可以求字符串的長(zhǎng)度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別,今天得這篇文章我們就來學(xué)習(xí)C語言strlen與sizeof區(qū)別的相關(guān)資料,需要的朋友可以參考一下2021-10-10