主要实现功能有增删改查数据,本地读取保存。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; }