最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言實(shí)現(xiàn)登錄注冊(cè)和忘記密碼功能

 更新時(shí)間:2020年12月28日 10:12:57   作者:monkey-jie  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)登錄、注冊(cè)和忘記密碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

這是一個(gè)用純C語(yǔ)言和文件操作實(shí)現(xiàn)的系統(tǒng)的登錄、注冊(cè)和忘記密碼功能??梢杂糜赾語(yǔ)言大作業(yè)的登錄系統(tǒng)。下面分享一下具體的代碼。

首先定義一個(gè)結(jié)構(gòu)體來(lái)存放用戶的注冊(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ù)用來(lái)創(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("無(wú)法建立文件!\n");
      exit(0);
      
    }
  }
}

注冊(cè):將存放用戶的信息的結(jié)構(gòu)體直接存入文件中,每次存入分配該結(jié)構(gòu)體大小的空間,然后該用戶的信息就可以按結(jié)構(gòu)體整體來(lái)讀取。還加入了一些錯(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("歡迎來(lái)到注冊(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("歡迎來(lái)到登錄界面!\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("歡迎來(lái)到找回密碼界面!\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++自帶的sort函數(shù)如何對(duì)vector容器元素進(jìn)行排序

    C++自帶的sort函數(shù)如何對(duì)vector容器元素進(jìn)行排序

    這篇文章主要介紹了C++自帶的sort函數(shù)如何對(duì)vector容器元素進(jìn)行排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • C語(yǔ)言文件操作大全

    C語(yǔ)言文件操作大全

    這篇文章主要介紹了C語(yǔ)言文件操作大全的相關(guān)資料,需要的朋友可以參考下
    2018-03-03
  • C++類中如何使用定義的類型別名

    C++類中如何使用定義的類型別名

    這篇文章主要介紹了C++類中如何使用定義的類型別名,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 基于select、poll、epoll的區(qū)別詳解

    基于select、poll、epoll的區(qū)別詳解

    本篇文章是對(duì)select、poll、epoll之間的區(qū)別進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05
  • QT實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘效果

    QT實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘效果

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)簡(jiǎn)單時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • c語(yǔ)言實(shí)現(xiàn)順序表的基本操作

    c語(yǔ)言實(shí)現(xiàn)順序表的基本操作

    這篇文章主要介紹了c語(yǔ)言實(shí)現(xiàn)順序表的基本操作,需要的朋友可以參考下
    2014-03-03
  • C語(yǔ)言線索二叉樹基礎(chǔ)解讀

    C語(yǔ)言線索二叉樹基礎(chǔ)解讀

    線索二叉樹還是按照鏈二叉樹的方法創(chuàng)建,只不過(guò)在結(jié)點(diǎn)原本為空的左指針改為指向該結(jié)點(diǎn)在中序遍歷中的前驅(qū),結(jié)點(diǎn)原本為空的右指針改為指向該結(jié)點(diǎn)在中序遍歷中的后繼,也就是說(shuō)把空的指針給利用了起來(lái)
    2022-04-04
  • 詳解c++ 繼承

    詳解c++ 繼承

    這篇文章主要介紹了c++ 繼承的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C++返回值類型后置實(shí)現(xiàn)(跟蹤返回值類型)

    C++返回值類型后置實(shí)現(xiàn)(跟蹤返回值類型)

    本文主要介紹了C++返回值類型后置實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 如何讓C++函數(shù)返回值死心塌地為你工作

    如何讓C++函數(shù)返回值死心塌地為你工作

    這篇文章主要介紹了如何讓C++函數(shù)返回值死心塌地為你工作,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

石渠县| 尉氏县| 汝南县| 滨州市| 承德县| 开鲁县| 普宁市| 湘西| 镇康县| 信阳市| 叶城县| 敦化市| 女性| 寿光市| 杂多县| 阳西县| 施秉县| 台湾省| 肥乡县| 永昌县| 凤庆县| 河源市| 汨罗市| 常州市| 高雄县| 朝阳区| 文登市| 灵石县| 富民县| 云梦县| 怀安县| 扶沟县| 宝鸡市| 凤台县| 集安市| 牙克石市| 南雄市| 西丰县| 水富县| 建德市| 汶川县|