主要實現功能有增刪改查數據,本地讀取保存。web
數據存儲設計 data.h data.cpp函數
#pragma once #define 添加帳戶 1 #define 刪除帳戶 2 #define 修改帳戶 3 #define 查詢帳戶 4 #define 查詢全部 5 #define 保存本地 6 #define 退出 7 #define NUM 100 extern int g_nNum; //當前密碼本容量 extern int oCho; //判斷是否保存到本地了 //定義帳戶結構體 typedef struct _ACCOUNT { char website[100]; char userName[100]; char passWord[100]; }ACCOUNT,*PACCOUNT;
#include "data.h" int g_nNum;
函數方法的實現:spa
ctrl.h設計
#pragma once #include "data.h" //增長帳戶 void insertInfo(ACCOUNT acc[], int* nCount); //刪除帳戶 void deleteInfo(ACCOUNT acc[], int *nCount); //修改帳戶 void alterInfo(ACCOUNT acc[], int nCount); //查詢帳戶 void searchInfo(ACCOUNT acc[], int nCount); //查詢全部帳戶 void searchALLInfo(ACCOUNT acc[], int nCount); //保存操做 void saveInfo(ACCOUNT acc[], int nCount); //讀取數據 void readInfo(PACCOUNT *pAc, int *nCount);
ctrl.cppcode
#include <stdio.h> #include <string.h> #include <malloc.h> #include "data.h" #include "ctrl.h" void insertInfo(ACCOUNT acc[], int* nCount) { int nNum = *nCount; if (nNum <0 || nNum > NUM) { printf("添加異常請重試!\n"); return; } printf("請輸入須要保存的站點:\n"); scanf_s("%s", acc[nNum].website,100); char ss = getchar(); printf("請輸入須要保存的用戶名:\n"); scanf_s("%s", acc[nNum].userName,100); ss = getchar(); printf("請輸入須要保存的密碼:\n"); scanf_s("%s", acc[nNum].passWord,100); ss = getchar(); (*nCount)++; printf("保存成功!返回主菜單\n"); } void deleteInfo(ACCOUNT acc[], int* nCount) { int nNum = *nCount; if (nNum <0 || nNum > NUM) { printf("有點小毛病我也不知道咋回事你再試試!\n"); return; } char str[100] = {}; printf("請輸入你想要刪除的站點:\n"); scanf_s("%s", str, 100); for (int i = 0; i < nNum; i++) { if (strcmp(str, acc[i].website) == 0) { for (int j=i;j<nNum-1;j++) { strcpy_s(acc[j].website, 100, acc[j + 1].website); strcpy_s(acc[j].userName, 100, acc[j + 1].userName); strcpy_s(acc[j].passWord, 100, acc[j + 1].passWord); } printf("刪除成功!\n"); (*nCount)--; return; } } printf("查無此站點請重試!\n"); } void alterInfo(ACCOUNT acc[], int nCount) { char str[100] = {}; printf("請輸入你想要修改的站點:\n"); scanf_s("%s", str, 100); for (int i = 0; i < nCount; i++) { if (strcmp(str, acc[i].website) == 0) { printf("請輸入修改後的站點:\n"); scanf_s("%s", acc[i].website, 100); printf("請輸入修改後的用戶名:\n"); scanf_s("%s", acc[i].userName, 100); printf("請輸入修改後的密碼:\n"); scanf_s("%s", acc[i].passWord, 100); printf("修改爲功!\n"); return; } } printf("查無此站點請重試!\n"); } void searchInfo(ACCOUNT acc[], int nCount) { char str[100] = {}; printf("請輸入你想要查詢的站點:\n"); scanf_s("%s", str, 100); for (int i = 0;i<nCount;i++) { if (strcmp(str,acc[i].website) ==0) { printf("查詢結果爲:\n"); printf("站 點:%s \n", acc[i].website); printf("用戶名:%s \n", acc[i].userName); printf("密 碼:%s \n", acc[i].passWord); return; } } printf("暫無搜索結果\n"); } void searchALLInfo(ACCOUNT acc[], int nCount) { printf("-------------查詢結果----------------\n"); if (0==nCount) { printf("空\n"); return; } for (int i = 0; i< nCount; i++) { printf("站 點:%s \n",acc[i].website); printf("用戶名:%s \n",acc[i].userName); printf("密 碼:%s \n",acc[i].passWord); printf("--------------------------------\n"); } } void saveInfo(ACCOUNT acc[], int nCount) { FILE* pFile=NULL; errno_t err = fopen_s(&pFile, "file.txt", "wb"); if (err != 0) { printf("保存本地失敗!\n"); return ; } g_nNum = nCount; fwrite(&nCount, sizeof(nCount), 1, pFile); fwrite(&g_nNum, sizeof(g_nNum), 1, pFile); int bytsize = sizeof(ACCOUNT) * g_nNum; char* buf = (char*)malloc(bytsize); memcpy_s(buf, bytsize, acc, bytsize); for (int i = 0; i < bytsize; i++) { buf[i] += 2; } fwrite(buf, sizeof(ACCOUNT), g_nNum, pFile); fclose(pFile); free(buf); buf = NULL; printf("已成功保存到本地!\n"); } void readInfo(PACCOUNT *pAc, int *nCount) { FILE* pFile=NULL; errno_t err = fopen_s(&pFile, "file.txt", "rb"); if (err != 0) { *pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * NUM); g_nNum = NUM; return ; } fread(nCount, sizeof(nCount), 1, pFile); fread(&g_nNum, sizeof(g_nNum), 1, pFile); if (g_nNum==0) { *pAc= (PACCOUNT)malloc(sizeof(ACCOUNT)); fclose(pFile); return; } *pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * g_nNum); memset(*pAc, 0, sizeof(ACCOUNT) * g_nNum); size_t lent = fread(*pAc, sizeof(ACCOUNT), g_nNum, pFile); if (lent!=g_nNum) { printf("讀取錯誤!"); fclose(pFile); return; } int bytsize = sizeof(ACCOUNT) * g_nNum; char* buf = (char*) *pAc; for (int i = 0; i < bytsize; i++) { buf[i] -= 2; } fclose(pFile); }
主界面 menuMain.cppblog
#include <stdio.h> #include <malloc.h> #include "data.h" #include "ctrl.h" #include <stdlib.h> int main() { int g_nNum = 0; //當前密碼容量 int nCount = 0; //當前密碼個數 PACCOUNT pAc = nullptr; readInfo(&pAc, &nCount); //pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * NUM); int nOver = 1; int oper; int oCho = 0; printf("歡迎使用塵風密碼本\n"); while (nOver) { printf("======主菜單===========\n"); printf("1 添加帳戶\n"); printf("2 刪除帳戶\n"); printf("3 修改帳戶\n"); printf("4 查詢帳戶\n"); printf("5 查詢全部帳戶\n"); printf("6 保存本地\n"); printf("7 退出\n"); printf("請輸入你想要進行的操做序號:\n"); scanf_s("%d",&oper); switch (oper) { case 添加帳戶: { insertInfo(pAc, &nCount); oCho += 1; } break; case 刪除帳戶: { deleteInfo(pAc, &nCount); oCho += 1; } break; case 修改帳戶: { alterInfo(pAc,nCount); oCho += 1; } break; case 查詢帳戶: { searchInfo(pAc, nCount); } break; case 查詢全部: { searchALLInfo(pAc, nCount); } break; case 保存本地: { saveInfo(pAc, nCount); oCho = 0; } break; case 退出: { if (oCho!=0) { printf("更改是否保存到本地?(y or 其餘)\n"); char x = getchar(); char s; scanf_s("%c", &s,1); if ('y'== s) { saveInfo(pAc, nCount); } } printf("謝謝您的使用!"); nOver = 0; system("pause"); system("cls"); } break; default: { printf("請輸入正確命令"); } break; } } free(pAc); pAc = nullptr; }