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

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

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

本文實例為大家分享了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;    //當前密碼本容量
extern int g_lock_flag;  //鎖定標志
/* 定義存儲賬戶密碼的結(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;      //當前密碼本容量
 g_lock_flag = 1;     //鎖定標志

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

 /*本地讀取,初始化密碼本,鎖定標志*****************************************************/
 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、退出*/
 /*密碼校驗機制,三次鎖定,可以登陸,權(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\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);
}

/*保存密碼,保存鎖定標志*/
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);
 }
}

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

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

相關(guān)文章

  • 深入C++可見性與生命期的區(qū)別詳解

    深入C++可見性與生命期的區(qū)別詳解

    本篇文章對C++中可見性與生命期的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解C++中指針和引用的區(qū)別

    詳解C++中指針和引用的區(qū)別

    這篇文章主要介紹了C++中指針和引用的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 深入了解c語言的循環(huán)語句

    深入了解c語言的循環(huán)語句

    這篇文章主要為大家介紹了c語言的循環(huán)語句,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C語言帶你學會位段相關(guān)知識

    C語言帶你學會位段相關(guān)知識

    這篇文章主要介紹了什么是位段,位段的聲明和結(jié)構(gòu)是類似的,位段的成員必須是 int、unsigned int 或signed int;位段的成員名后邊有一個冒號和一個數(shù)字,本文有詳細的代碼案例,感興趣的同學可以參考閱讀
    2023-04-04
  • 純c語言實現(xiàn)面向?qū)ο蠓治雠c示例分享

    純c語言實現(xiàn)面向?qū)ο蠓治雠c示例分享

    采用C語言實現(xiàn)的關(guān)鍵是如何運用C語言本身的特性來實現(xiàn)多態(tài)、繼承面、封裝的面向?qū)ο蟮奶卣?最近給出了例子,大家可以參考使用
    2014-01-01
  • C++模板類的用法

    C++模板類的用法

    這篇文章主要介紹了C++模板類的用法,實例講述了模板類的概念及相關(guān)用法,需要的朋友可以參考下
    2014-10-10
  • C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別

    C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別

    這篇文章主要介紹了C++ 中pragma once 與 #ifndef _XXX_H_ #define _XXX_H_的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 講解C語言編程中指針賦值的入門實例

    講解C語言編程中指針賦值的入門實例

    這篇文章主要介紹了講解C語言編程中指針賦值的入門實例,通過const int i與int *const pi這樣兩個例子來分析指針的賦值和地址指向,需要的朋友可以參考下
    2015-12-12
  • C++之編寫高效Makefile文件最佳方法

    C++之編寫高效Makefile文件最佳方法

    在軟件開發(fā)過程中,Makefile是一個非常重要的工具,它可以幫助我們自動化構(gòu)建、編譯、測試和部署,然而,編寫高效的Makefile文件并不是一件容易的事情。在本文中,我們將討論如何編寫高效的Makefile文件,以提高開發(fā)效率和產(chǎn)品質(zhì)量,需要的朋友可以參考下
    2023-05-05
  • C語言制作簡易金山打字通功能的代碼

    C語言制作簡易金山打字通功能的代碼

    今天小編就為大家分享一篇關(guān)于C語言制作簡易金山打字通功能的代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論

河北区| 东港市| 普安县| 关岭| 德保县| 青海省| 罗源县| 鄱阳县| 时尚| 枣阳市| 兴和县| 定州市| 桐柏县| 民勤县| 元谋县| 和田县| 洛隆县| 乌拉特前旗| 普兰县| 宝应县| 岳西县| 济阳县| 潼南县| 且末县| 大宁县| 海盐县| 文昌市| 军事| 光泽县| 通江县| 邵阳县| 云梦县| 新田县| 麻阳| 高碑店市| 枞阳县| 巴马| 清水河县| 朔州市| 平昌县| 济阳县|