您好,登錄后才能下訂單哦!
使用C語言怎么實現一個密碼本?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
功能簡述:
1.賬號登陸(密碼驗證,三次鎖定賬號)
2.功能選擇:1、查看所有密碼 2、新增密碼 3、刪除密碼 4、修改密碼 5、查詢密碼 6、解除鎖定 7、退出登陸
3.保存密碼,文件加密
4.流程圖:
數據定義部分
#pragma once //變量聲明 #define NUM 100 //初始密碼本容量 extern int g_nNum; //當前密碼本容量 extern int g_lock_flag; //鎖定標志 /* 定義存儲賬戶密碼的結構體****************************/ 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; //密碼數組指針 int nCount = 0; //當前密碼個數 int op = 0; //用戶操作 /*本地讀取,初始化密碼本,鎖定標志*****************************************************/ readInfo(&pPwd, &nCount); /*登陸驗證==>注冊和登陸****************************************************************/ if (!g_lock_flag) { printf("賬戶已鎖定,請解鎖!\n"); unLock(pPwd, nCount); } else { login(pPwd, &nCount); } /*循環掃描,功能選擇*********************************************************************/ /*1、查看所有2、新增3、刪除4、修改5、查詢6、解除鎖定7、退出*/ /*密碼校驗機制,三次鎖定,可以登陸,權限鎖定*/ 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"); //密碼數組指針為空,給密碼數組指針的地址賦值 *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("密碼本密碼數量:%d\n", *pnCount); printf("密碼本鎖定狀態:%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); } }
關于使用C語言怎么實現一個密碼本問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。