這是一個用純C語言和檔案操作實作的系統的登錄、注冊和忘記密碼功能,可以用于c語言大作業的登錄系統,下面分享一下具體的代碼,

首先定義一個結構體來存放用戶的注冊資訊,賬號密碼等,
typedefstructThe_users//typedef可以定義結構體別名 { charid[11];//賬號 charpwd[20];//密碼 charname[15];//姓名為字串 charsex;//性別為單個字符 longphone;//電話號碼為長整型 }users;
然后寫一個函式用來創建儲存用戶賬號密碼的檔案,
/*創建儲存用戶賬號密碼的檔案*/ voidCreate_File() { FILE*fp; if((fp=fopen("users.txt","rb"))==NULL)/*如果此檔案不存在*/ { if((fp=fopen("users.txt","wb+"))==NULL) { printf("無法建立檔案!\n"); exit(0); } } }
注冊:
將存放用戶的資訊的結構體直接存入檔案中,每次存入分配該結構體大小的空間,然后該用戶的資訊就可以按結構體整體來讀取,還加入了一些錯誤提示,如果輸入錯誤就提示重新輸入,
/*注冊賬號*/ voidregisters()//按結構體的大小,一次寫入或者讀入1個結構體大小
{ usersa,b;//結構體The_users重命名定義 FILE*fp; chartemp[20]; intcount=0; printf("歡迎來到注冊界面!\n"); Sleep(1000); fp=fopen("users.txt","r"); fread(&b,sizeof(structThe_users),1,fp);
//讀入一個結構體字符塊到b printf("請輸入賬號\n"); scanf("%s",&a.id); while(1) { if(strcmp(a.id,b.id))
/*如果兩串不相等*/ { if(!feof(fp))/*如果未到檔案尾*/ { fread(&b,sizeof(structThe_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(structThe_users),1,fp);
printf("賬號注冊成功,請登錄!\n"); Sleep(500); fclose(fp); return; }else{ printf("兩次密碼不匹配!請重新輸入!\n"); scanf("%s",&a.pwd); printf("請確認密碼\n"); scanf("%s",&temp); } }while(1); }
登錄:
先輸入賬號和密碼,然后按賬號從檔案中讀取,如果賬號匹配就讀取密碼,如果密碼也匹配就登錄成功,否則重新輸入密碼,
/*登錄系統*/ voidInput_login() { usersa,b;//定義結構體The_users別名 FILE*fp; printf("歡迎來到登錄界面!\n"); Sleep(1000); fp=fopen("users.txt","r"); fread(&b,sizeof(structThe_users),1,fp);
//讀入一個結構體字符塊寫入b printf("請輸入賬號\n"); scanf("%s",&a.id); while(1) { if(strcmp(a.id,b.id)==0)//如果有此用戶名 { break; } else { if(!feof(fp))//如果檔案沒有讀完 { fread(&b,sizeof(structThe_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); }
找回密碼:
根據輸入的賬號獲取該賬號的結構體資訊,然后與其他資訊進行匹配,如果全部匹配成功,則顯示該賬號的密碼,
/*找回密碼*/ voidreback()//按結構體的大小,一次寫入或者讀入1個結構體大小 { usersa,b;//結構體The_users重命名定義 FILE*fp; chartemp[20]; intcount=0; printf("歡迎來到找回密碼界面!\n"); Sleep(1000); fp=fopen("users.txt","r"); fread(&b,sizeof(structThe_users),1,fp);//讀入一個結構體字符塊寫入b printf("請輸入賬號\n"); scanf("%s",&a.id); while(1) { if(strcmp(a.id,b.id)==0)//如果有此用戶名 { break; } else { if(!feof(fp))//如果檔案沒有讀完 { fread(&b,sizeof(structThe_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); }

另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這里或許可以幫到你~
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習:

編程學習:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/271836.html
標籤:其他
上一篇:【分布式】SpringCloud(2)--SpringCloud分布式架構思想的理解
下一篇:java方法詳解
