主要实现功能有增删改查数据,本地读取保存。

数据存储设计 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[];
char userName[];
char passWord[];
}ACCOUNT,*PACCOUNT;
#include "data.h"
int g_nNum;

函数方法的实现:

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.cpp

#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 < || nNum > NUM)
{
printf("添加异常请重试!\n");
return;
}
printf("请输入需要保存的站点:\n");
scanf_s("%s", acc[nNum].website,);
char ss = getchar();
printf("请输入需要保存的用户名:\n");
scanf_s("%s", acc[nNum].userName,);
ss = getchar();
printf("请输入需要保存的密码:\n");
scanf_s("%s", acc[nNum].passWord,);
ss = getchar();
(*nCount)++;
printf("保存成功!返回主菜单\n"); } void deleteInfo(ACCOUNT acc[], int* nCount)
{
int nNum = *nCount;
if (nNum < || nNum > NUM)
{
printf("有点小毛病我也不知道咋回事你再试试!\n");
return;
}
char str[] = {};
printf("请输入你想要删除的站点:\n");
scanf_s("%s", str, );
for (int i = ; i < nNum; i++)
{
if (strcmp(str, acc[i].website) == )
{
for (int j=i;j<nNum-;j++)
{
strcpy_s(acc[j].website, , acc[j + ].website);
strcpy_s(acc[j].userName, , acc[j + ].userName);
strcpy_s(acc[j].passWord, , acc[j + ].passWord);
} printf("删除成功!\n");
(*nCount)--;
return;
} }
printf("查无此站点请重试!\n");
} void alterInfo(ACCOUNT acc[], int nCount)
{
char str[] = {};
printf("请输入你想要修改的站点:\n");
scanf_s("%s", str, );
for (int i = ; i < nCount; i++)
{
if (strcmp(str, acc[i].website) == )
{ printf("请输入修改后的站点:\n");
scanf_s("%s", acc[i].website, );
printf("请输入修改后的用户名:\n");
scanf_s("%s", acc[i].userName, );
printf("请输入修改后的密码:\n");
scanf_s("%s", acc[i].passWord, );
printf("修改成功!\n");
return;
} }
printf("查无此站点请重试!\n");
} void searchInfo(ACCOUNT acc[], int nCount)
{
char str[] = {};
printf("请输入你想要查询的站点:\n");
scanf_s("%s", str, );
for (int i = ;i<nCount;i++)
{
if (strcmp(str,acc[i].website) ==)
{
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 (==nCount)
{
printf("空\n");
return;
} for (int i = ; 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 != )
{
printf("保存本地失败!\n");
return ; }
g_nNum = nCount;
fwrite(&nCount, sizeof(nCount), , pFile);
fwrite(&g_nNum, sizeof(g_nNum), , pFile);
int bytsize = sizeof(ACCOUNT) * g_nNum;
char* buf = (char*)malloc(bytsize);
memcpy_s(buf, bytsize, acc, bytsize);
for (int i = ; i < bytsize; i++)
{
buf[i] += ;
}
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 != )
{
*pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * NUM);
g_nNum = NUM;
return ;
}
fread(nCount, sizeof(nCount), , pFile);
fread(&g_nNum, sizeof(g_nNum), , pFile);
if (g_nNum==)
{
*pAc= (PACCOUNT)malloc(sizeof(ACCOUNT));
fclose(pFile);
return;
}
*pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * g_nNum);
memset(*pAc, , 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 = ; i < bytsize; i++)
{
buf[i] -= ;
} fclose(pFile); }

主界面 menuMain.cpp

#include <stdio.h>
#include <malloc.h>
#include "data.h"
#include "ctrl.h"
#include <stdlib.h>
int main()
{
int g_nNum = ; //当前密码容量
int nCount = ; //当前密码个数
PACCOUNT pAc = nullptr;
readInfo(&pAc, &nCount);
//pAc = (PACCOUNT)malloc(sizeof(ACCOUNT) * NUM);
int nOver = ;
int oper;
int oCho = ;
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 += ;
}
break;
case 删除账户:
{
deleteInfo(pAc, &nCount);
oCho += ;
}
break;
case 修改账户:
{
alterInfo(pAc,nCount);
oCho += ; }
break;
case 查询账户:
{
searchInfo(pAc, nCount); }
break;
case 查询所有:
{
searchALLInfo(pAc, nCount);
}
break;
case 保存本地:
{
saveInfo(pAc, nCount);
oCho = ;
}
break;
case 退出:
{
if (oCho!=)
{
printf("更改是否保存到本地?(y or 其他)\n");
char x = getchar();
char s;
scanf_s("%c", &s,);
if ('y'== s)
{
saveInfo(pAc, nCount);
} }
printf("谢谢您的使用!");
nOver = ;
system("pause");
system("cls"); }
break;
default:
{
printf("请输入正确命令");
}
break;
} }
free(pAc);
pAc = nullptr; }

c++—简单的密码本实现的更多相关文章

  1. JS简单验证密码强度

    <input type="password" id="password" value=""/><button id=&qu ...

  2. javascript 异或运算符实现简单的密码加密功能

    写在前面的 当我们需要在数据库中存储用户的密码时,当然是不能明文存储的. 我们就是介绍一下用^运算符来实现简单的密码加密以及解密功能 上代码 首先,回顾一下基础知识. String.fromCharc ...

  3. 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile

      通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...

  4. 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数

    通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...

  5. 通过游戏学python 3.6 第一季 第七章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号

    #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误 ...

  6. 通过游戏学python 3.6 第一季 第六章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改 可复制直接使用 娱乐 可封装 函数

    #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优 ...

  7. 时间转换,django的时间设置,re模块简单校验密码和手机号

    时间转换和密码,手机的re模块简单校验 import re,time def check_userinfo(request): pwd = request.POST.get("pwd&quo ...

  8. C#-用Winform制作一个简单的密码管理工具

    为什么要做? 首先是为了练习一下c#. 想必大家都有过记不起某个平台的账号密码的经历,那种感受着实令人抓狂.那这么多账号密码根本记不住!我之前用python写过一个超级简单(连账号信息都写在代码里那种 ...

  9. 通过游戏学python 3.6 第一季 第五章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆 可复制直接使用 娱乐 可封装 函数

    #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--账号密码登陆 #!usr/bin/env python #-*-coding:utf-8-*- #QQ12411129 ...

随机推荐

  1. ubuntu安装扩展在phpinfo显示不出来的解决办法

    在Ubuntu中使用apt-get安装了php扩展(比如redis.memcache.memcached等),在终端输入php -m是显示已加载,但是在phpinfo中无法显示,这个时候需要重启一下p ...

  2. CF762F Tree nesting

    题目连接 问题分析 可以给小树钦定一个根, \(Dp[i][j]\) 表示大树上的点 \(i\) 对应到小树上的点 \(j\) 的可能的方案数.然后每一步转移都是一个状压DP(将小树是否被匹配状压,然 ...

  3. Cow and Snacks

    ​ D. Cow and Snacks 参考:Codeforces 1209D. Cow and Snacks 思路:利用并查集,构建一个生成树,然后树的边数就是能够开心的客人的人数.用一个条件fin ...

  4. flask入门第一篇

    一. Python 现阶段三大主流Web框架 Django Tornado Flask 对比 1.Django 主要特点是大而全,集成了很多组件,例如: Models Admin Form 等等, 不 ...

  5. okHttp3 源码分析

    一, 前言 在上一篇博客OkHttp3 使用详解里,我们已经介绍了 OkHttp 发送同步请求和异步请求的基本使用方法. OkHttp 提交网络请求需要经过这样四个步骤: 初始化 OkHttpClie ...

  6. leetcode题目15.三数之和(中等)

    题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重 ...

  7. Ngrinder 源码之Maven 项目

    Ngrinder支持Maven结构的测试脚本.使用ScriptHandlerFactory来个脚本选择处理器handler,目前有JythonScriptHandler, GroovyScriptHa ...

  8. Spring核心内容-认识bean

  9. ELK- elasticsearch 讲解,安装,插件head,bigdesk ,kopf,cerebro(kopf升级版)安装

    ElasticSearch:简称es ,分布式全文搜索引擎,使用java语言开发,面向文档型数据库,一条数据就是一个文档,数据用json序列化后存储. 默认端口:9200 借助redis来理解 red ...

  10. C++异常实现机制

    1.C函数的调用和返回 要理解C++异常机制实现之前,首先要了解一个函数的调用和返回机制,这里面就要涉及到ESP和EBP寄存器.我们先看一下函数调用和返回的流程. 下面是按调用约定__stdcall ...