优化C++制作的简易密码管理工具
发布日期:2022-03-03 10:44:09 浏览次数:2 分类:技术文章

本文共 5138 字,大约阅读时间需要 17 分钟。

最近空闲时间较多,特地复习下C++的基础知识。

原文地址 

修改(优化)点:

  1. 修复从文件中读取数据、把数据重新写入文件等BUG使软件能正常运行
  2. 删除持久化数据的多余空格
  3. 修改每次新增都持久化为先缓存再手动持久化
  4. 原作只管加密不管解密
  5. 下一步基于Qt图形化

操作截图如下:

代码如下:

#define _CRT_SECURE_NO_WARNINGS#include 
   
    #include 
    
     #include 
     
      #include 
      
       #include 
       
        #define fopen_s(pFile,filename,mode) ((*(pFile))=fopen((filename),  (mode)))==NULLusing namespace std;/* global variables */int lnChrLmt=20;int lnsLmt=10;int gCnt = 0;char websiteArr[10][20];char usernameArr[10][20];char passwordArr[10][20];char remarkArr[10][20];char filePath[20] = "data.txt";char spw[20] = "abcd";int retryCnt = 3;void init();void readAll();void search();void append();void save();void remove();void edit();void startPwd();void show();void dump();// remove a element from arrayint remove_from_array(char a[10][20], int n, int &len) {
        
if(a == NULL || n<0 || len < 0 || n>=len) {
return -1;
}
int i;
for(i = n; i < len-1; i ++) {
memcpy(static_cast (a[i]), static_cast (a[i+1]), lnChrLmt);
}
--len;
return 0;}// initailize programvoid init() {
FILE *pFile;
if(fopen_s(&pFile, filePath, "r")!=0) {
printf("error open when init");
system("pause");
exit(1);
}
int c;
do {
c=fgetc(pFile);
if (c=='\n') {
gCnt++;
}
} while(c!=EOF);
fseek(pFile, 0, SEEK_SET);
for(int i=0; i
fread(websiteArr[i], lnChrLmt, 1, pFile);
fread(usernameArr[i], lnChrLmt, 1, pFile);
fread(passwordArr[i], lnChrLmt, 1, pFile);
fread(remarkArr[i], lnChrLmt, 1, pFile);
fscanf(pFile, "\n");
}
fclose(pFile);}// valid passwordvoid startPwd() {
char tmpStr[lnChrLmt];
bool nSucceed = false;
printf("input password:\n");
scanf("%s", tmpStr);
for(int i=retryCnt; i>=0; i--) {
if(strcmp(spw, tmpStr)==0) {
nSucceed = true;
break;
} else {
printf(retryCnt+" times left");
}
}
if(!nSucceed) {
printf("error password");
} else {
printf("press any key to continue...\n");
}
system("pause");}// read data from cachevoid readAll() {
for(int i=0; i
printf("No.%d record\n", i+1);
printf("website: %s, username: %s, password: %s, remark: %s\n", websiteArr[i], usernameArr[i], passwordArr[i], remarkArr[i]);
}}// search by namevoid search() {
char tmpStr[lnChrLmt];
int targetIndex=-1;
printf("input website to find: ");
scanf("%s", tmpStr);
for(int i=0; i
if(strcmp(websiteArr[i], tmpStr)==0) {
printf("website: %s, username: %s, password: %s, remark: %s\n", websiteArr[i], usernameArr[i], passwordArr[i], remarkArr[i]);
break;
}
}}// save record to cachevoid save() {
FILE *pFile;
if(fopen_s(&pFile, filePath, "w")!=0) {
printf("error open write");
}
fwrite(websiteArr[gCnt], lnChrLmt, 1, pFile);
fwrite(usernameArr[gCnt], lnChrLmt, 1, pFile);
fwrite(passwordArr[gCnt], lnChrLmt, 1, pFile);
fwrite(remarkArr[gCnt], lnChrLmt, 1, pFile);
fprintf(pFile, "\n");
fclose(pFile);}// accept record to appendvoid append() {
char tmpStr[20];
printf("input new website: ");
scanf("%s", websiteArr[gCnt]);
printf("username:");
scanf("%s", usernameArr[gCnt]);
printf("password:");
scanf("%s", passwordArr[gCnt]);
printf("remark:");
scanf("%s", remarkArr[gCnt]);
save();
gCnt++;
printf("append success\n");}// dump cached data to filevoid dump() {
FILE *pFile;
if(fopen_s(&pFile, filePath, "w")!=0) {
printf("error open write");
exit(1);
}
fseek(pFile, 0, SEEK_SET);
for(int i=0; i
fwrite(websiteArr[i], lnChrLmt, 1, pFile);
fwrite(usernameArr[i], lnChrLmt, 1, pFile);
fwrite(passwordArr[i], lnChrLmt, 1, pFile);
fwrite(remarkArr[i], lnChrLmt, 1, pFile);
fprintf(pFile, "\n");
}
fclose(pFile);
printf("dump success\n");}// remove one record from cachevoid remove() {
char tmpStr[lnChrLmt];
int targetIndex=-1;
printf("input website to remove: ");
scanf("%s", tmpStr);
for(int i=0; i
if(strcmp(websiteArr[i], tmpStr)==0) {
targetIndex=i;
}
if(targetIndex>=0) {
remove_from_array(websiteArr, i, lnsLmt);
remove_from_array(usernameArr, i, lnsLmt);
remove_from_array(passwordArr, i, lnsLmt);
remove_from_array(remarkArr, i, lnsLmt);
printf("lnChrLmt: %d\n",lnChrLmt);
gCnt--;
break;
}
}
printf("remove success\n");}// edit one record in cachevoid edit() {
char tmpStr[lnChrLmt];
int targetIndex=-1;
printf("input website to edit: ");
scanf("%s", tmpStr);
for(int i=0; i
if(strcmp(websiteArr[i], tmpStr)==0) {
printf("input website: ");
scanf("%s",tmpStr);
strcpy(websiteArr[i], tmpStr);
printf("input username: ");
scanf("%s",tmpStr);
strcpy(usernameArr[i], tmpStr);
printf("input password: ");
scanf("%s",tmpStr);
strcpy(passwordArr[i], tmpStr);
printf("input remark: ");
scanf("%s",tmpStr);
strcpy(remarkArr[i], tmpStr);
break;
}
}
printf("edit success\n");}// prompt control information of programvoid show() {
int choiceNum = 1;
while(choiceNum) {
printf("Welcome to Security Book!\nChoice your operation bellow:\n");
printf("1.Read 2.Append 3.Delete 4.Edit 5.Search 6.Dump 7.Exit\n");
scanf("%d", &choiceNum);
switch(choiceNum) {
case 1: {
readAll();
}
break;
case 2: {
append();
}
break;
case 3: {
remove();
}
break;
case 4: {
edit();
}
break;
case 5: {
search();
}
break;
case 6: {
dump();
}
break;
case 7: {
choiceNum = 0;
}
break;
}
}
printf("bye\n");}// entranceint main(int argc, char** argv) {
init();
startPwd();
show();
return 0;}

 

转载地址:https://blog.csdn.net/yangjiegang8/article/details/104146880 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:基于C++简易JSON解析器
下一篇:转圈算法

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.244.66.235]2022年07月16日 07时43分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

韶关学院计算机专插本专业怎么样,2020年韶关学院专插本各专业计划人数和报考人数情况分析... 2020-01-10 11:49:25
西北工业太学计算机科学与技术周世钢,周世钢_西北工业大学研究生导师信息... 2020-01-10 11:49:25
电子计算机管理应用,电子计算机在企业管理中的应用研究分析原稿(全文完整版)... 2020-01-10 11:49:25
计算机组成原理八位全加器,8位全加器-课程设计 2020-01-10 11:49:25
计算机考研能换专业吗,我本科学的是计算机专业,现在想考研,但是想换一个适合自己的专业,和教育方面有关的专业,请问有什么好专业能选择的么?... 2020-01-10 11:49:25
从S3获取数据在html表示,javascript – 显示从s3获取的图像 2020-01-10 11:49:25
Android手机按键不灵,手机按键不灵怎么办 手机按键修改教程【详细步骤】 2020-01-10 11:49:25
刷php程序,PHP刷CSDN博客脚本 2020-01-10 11:49:25
通信原理及matlab仿真实验指导书,通信原理实验指导书——2015.pdf 2020-01-10 11:49:25
修复win10的更新服务器,win10升级服务器异常怎么解决_win10升级服务器发生异常修复方法... 2020-01-10 11:49:23
ajax session更新,ajax请求session超时时解决办法 2020-01-10 11:49:23
微信免密支付服务器忙,微信免密支付 查询用户授权记录,调起商家预授权 都返回系统繁忙... 2020-01-10 11:49:23
对使用数据源显示信息的web服务器控件,使用数据源控件绑定到数据 2020-01-10 11:49:23
ubuntu系统服务器维护,Ubuntu Server系列各项服务的安装和维护 Apache部分 2020-01-10 11:49:23
软件测试跟踪需求矩阵,测试管理之从需求到跟踪操作实务 2020-01-10 11:49:21
计算机跨专业保研数学,保研生跨专业很容易吗 2020-01-10 11:49:22
大连中考计算机分值,2019大连中考总分多少分及各科目分值设置 2020-01-10 11:49:22
为什么王者荣耀总是服务器中断,王者荣耀有史以来游戏时间最长的对局!服务器多次崩溃!破纪录!... 2020-01-10 11:49:22
css 加载 500错误,express中加载css和js时候出现500错误 2020-01-10 11:49:22
mysql where排除,MySQL'WHERE'子句排除子查询中的结果 2020-01-10 11:49:20