欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)密碼本

 更新時間:2020年02月26日 11:15:21   作者:初識逆向  
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)密碼本,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)密碼本的具體代碼,供大家參考,具體內(nèi)容如下

功能簡述:

1.賬號登陸(密碼驗證,三次鎖定賬號)

2.功能選擇:1、查看所有密碼 2、新增密碼 3、刪除密碼 4、修改密碼 5、查詢密碼 6、解除鎖定 7、退出登陸

3.保存密碼,文件加密

4.流程圖:

數(shù)據(jù)定義部分

#pragma once
//變量聲明
#define NUM 100    //初始密碼本容量
extern int g_nNum;    //當(dāng)前密碼本容量
extern int g_lock_flag;  //鎖定標(biāo)志
/* 定義存儲賬戶密碼的結(jié)構(gòu)體****************************/
typedef struct _PASSWORD
{
 char website[100]; //站點名
 char userName[40];
 char passWord[20];
 char note[100];//備注
}PASSWORD,*PPASSWORD;
/* 定義用戶操作枚舉 *************************************/
#define 查看所有密碼 1
#define 新增密碼  2
#define 刪除密碼  3
#define 修改密碼  4
#define 查詢密碼  5
#define 解除鎖定  6
#define 退出   7

界面與用戶交互

int main()
{
 /*全局變量初始化**********************************************************************/
 g_nNum = 0;      //當(dāng)前密碼本容量
 g_lock_flag = 1;     //鎖定標(biāo)志

 /*局部變量定義 ************************************************************************/
 PPASSWORD pPwd = nullptr;   //密碼數(shù)組指針
 int nCount = 0;     //當(dāng)前密碼個數(shù)
 int op = 0;      //用戶操作

 /*本地讀取,初始化密碼本,鎖定標(biāo)志*****************************************************/
 readInfo(&pPwd, &nCount);

 /*登陸驗證==>注冊和登陸****************************************************************/
 if (!g_lock_flag)
 {
 printf("賬戶已鎖定,請解鎖!\n");
 unLock(pPwd, nCount);
 }
 else
 {
 login(pPwd, &nCount);
 }
 
 /*循環(huán)掃描,功能選擇*********************************************************************/
 /*1、查看所有2、新增3、刪除4、修改5、查詢6、解除鎖定7、退出*/
 /*密碼校驗機(jī)制,三次鎖定,可以登陸,權(quán)限鎖定*/
 while (1)
 {
 Dlg_print();
 printf("請輸入操作: ");
 scanf_s("%d", &op);
 switch (op)
 {
 case 查看所有密碼: searchAllInfo(pPwd,nCount); break;
 case 新增密碼:insertInfo(pPwd, &nCount); break;
 case 刪除密碼:deleInfo(pPwd, &nCount); break;
 case 修改密碼:reviseInfo(pPwd, nCount); break;
 case 查詢密碼:queryInfo(pPwd, nCount); break;
 case 解除鎖定:unLock(pPwd, nCount); break;
 case 退出:admExit(pPwd, nCount); break;
 }
 }
 return 0;
}

讀取和保存

/*本地讀取,初始化密碼本*/
void readInfo(PPASSWORD *ppPwd, int *pnCount)
{
 FILE *fp = NULL;
 errno_t err;
 if ((err = fopen_s(&fp,"password.txt", "rb")) != 0)
 {
 //開辟最大容量空間等待輸入密碼
 printf("文件不存在,請注冊賬號……\n");
 //密碼數(shù)組指針為空,給密碼數(shù)組指針的地址賦值
 *ppPwd = (PPASSWORD)malloc(sizeof(PASSWORD)*NUM);
 memset(*ppPwd, 0, sizeof(PASSWORD)*NUM);
 g_nNum = NUM;
 return;
 }
 fread(pnCount, sizeof(int), 1, fp);
 fread(&g_lock_flag, sizeof(int), 1, fp); 
 g_nNum = *pnCount;
 *ppPwd = (PPASSWORD)malloc(sizeof(PASSWORD)*g_nNum);
 memset(*ppPwd, 0, sizeof(PASSWORD)*g_nNum);
 size_t rlen = fread(*ppPwd, sizeof(PASSWORD), g_nNum, fp);
 /*printf("密碼本密碼數(shù)量:%d\n", *pnCount);
 printf("密碼本鎖定狀態(tài):%d\n", g_lock_flag);
 printf("密碼本當(dāng)前容量:%d\n", g_nNum);*/
 /*解密*/
 if (rlen != g_nNum)
 {
 printf("密碼文件讀取錯誤\n");
 fclose(fp);
 return;
 }
 size_t byteSize = sizeof(PASSWORD)*g_nNum;
 char *buf = (char*)*ppPwd;
 for (size_t i = 0; i < byteSize; i++)
 {
 buf[i] = (buf[i]-i)^8;
 }
 fclose(fp);
}

/*保存密碼,保存鎖定標(biāo)志*/
void saveInfo(PASSWORD pwd[], int nCount)
{
 FILE *fp = NULL;
 errno_t err;
 if ((err = fopen_s(&fp,"password.txt", "wb+")) != 0)
 {
 printf("打開文件失敗\n");
 exit(1);
 }
 fwrite(&nCount, sizeof(int), 1, fp);
 fwrite(&g_lock_flag, sizeof(int), 1, fp);
 /*先加密再存儲*/
 size_t byteSize = sizeof(PASSWORD)*nCount;
 char *buf = (char*)malloc(byteSize);
 memcpy_s(buf, byteSize, pwd, byteSize);
 for (size_t i = 0; i < byteSize; i++)
 {
 buf[i] = (buf[i] ^ 8) + i;
 }
 size_t rlen = fwrite(buf, sizeof(PASSWORD), nCount, fp);
 if (rlen != nCount)
 {
 printf("文件寫入錯誤\n");
 }
 else
 {
 printf("保存成功\n");
 }
 fclose(fp);
 system("pause");
 system("cls");
}

登陸

void login(PASSWORD pwd[],int *pnCount)
{
 char admName[40] = { 0 };
 char admPwd1[20] = { 0 };
 char admPwd2[20] = { 0 };
 printf("*******************************************\n");
 printf("-------------歡迎使用1024密碼本------------\n");
 printf("賬戶: ");
 scanf_s("%s", admName,40);
 printf("密碼: ");
 scanf_s("%s", admPwd1,20);

 if (strlen(pwd[0].userName) == 0||g_nNum == 0)    
 {
 //賬戶不存在---注冊---保存賬號密碼
 printf("重新輸入密碼: ");
 scanf_s("%s", admPwd2,20);
 if(strcmp(admPwd1, admPwd2)!=0)
 {
 printf("兩次密碼不一致,請重新輸入\n");
 exit(1);
 }
 strcpy_s(pwd[0].website, 100, "密碼本");
 strcpy_s(pwd[0].userName, 40, admName);
 strcpy_s(pwd[0].passWord, 20, admPwd1);
 strcpy_s(pwd[0].note, 100, "管理員賬戶");
 printf("注冊成功\n");
 (*pnCount)++;
 saveInfo(pwd, *pnCount);
 }
 else if (strcmp(admName, pwd[0].userName) == 0)
 {
 // 賬戶存在,驗證密碼
 int i = 0;
 while (strcmp(admPwd1, pwd[0].passWord) != 0)
 { 
 i++;
 if (i >= 3)
 {
 g_lock_flag = 0;
 printf("您的賬戶已被鎖定!請解鎖后再操作!\n");
 exit(1);
 }
 printf("密碼錯誤,請重新輸入: ");
 scanf_s("%s", admPwd1,20);
 }
 }
 else
 {
 printf("賬號密碼錯誤\n");
 system("pause");
 exit(1);
 }
}

功能就不寫了,源代碼上傳了,下面是運(yùn)行結(jié)果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++ com編程學(xué)習(xí)詳解

    C++ com編程學(xué)習(xí)詳解

    這篇文章主要介紹了C++ COM編程的學(xué)習(xí)過程,在C++中,可以使用抽象基類來實現(xiàn)COM接口,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • C++實踐排序函數(shù)模板項目的參考方法

    C++實踐排序函數(shù)模板項目的參考方法

    今天小編就為大家分享一篇關(guān)于C++實踐排序函數(shù)模板項目的參考方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • C++頭文件algorithm中的函數(shù)功能詳解

    C++頭文件algorithm中的函數(shù)功能詳解

    這篇文章主要介紹了C++頭文件algorithm中的函數(shù)功能詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C++實現(xiàn)教職工信息管理系統(tǒng)

    C++實現(xiàn)教職工信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)教職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++鏈表倒序?qū)崿F(xiàn)方法

    C++鏈表倒序?qū)崿F(xiàn)方法

    這篇文章主要介紹了C++鏈表倒序?qū)崿F(xiàn)方法,是一個很經(jīng)典的C++鏈表操作實例,需要的朋友可以參考下
    2014-08-08
  • C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL)

    C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL)

    這篇文章主要介紹了C++?基礎(chǔ)函數(shù)的介紹及使用(Vector+deque+STL),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • C語言修煉之路靈根孕育源流出?初識C言大道生下篇

    C語言修煉之路靈根孕育源流出?初識C言大道生下篇

    C語言是一門面向過程、抽象化的通用程序設(shè)計語言,廣泛應(yīng)用于底層開發(fā)。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產(chǎn)生少量的機(jī)器語言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計語言
    2022-03-03
  • C++中可正確獲取UTF-8字符長度的函數(shù)分享

    C++中可正確獲取UTF-8字符長度的函數(shù)分享

    這篇文章主要介紹了C++中可正確獲取UTF-8字符長度的函數(shù)分享,需要的朋友可以參考下
    2014-08-08
  • C語言實現(xiàn)簡單學(xué)生信息管理系統(tǒng)

    C語言實現(xiàn)簡單學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡單學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 詳解C語言編程中的函數(shù)指針以及函數(shù)回調(diào)

    詳解C語言編程中的函數(shù)指針以及函數(shù)回調(diào)

    這篇文章主要介紹了C語言編程中的函數(shù)指針以及函數(shù)回調(diào),函數(shù)回調(diào)實際上就是讓函數(shù)指針作函數(shù)參數(shù)、調(diào)用時傳入函數(shù)地址,需要的朋友可以參考下
    2016-04-04

最新評論