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

