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

数据存储设计 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. 响应式web布局

    通过不同的媒体类型和条件定义样式表规则,媒体查询让CSS可以更精确作用于不同的媒体类型和同一媒体的不同条件.媒体查询的大部分媒体特性都接受min和max用于表达”大于或等于”和”小与或等于”.如:wi ...

  2. python-线性回归预测

    导入包 # Required Packages import matplotlib.pyplot as plt import numpy as np import pandas as pd from ...

  3. liunx 一些文件下载上传的命令

    xshell 上传 rz sftp 语法: put path/filename.txt Put -r path/文件夹 或者 put “path/filename.txt” Put -r “path/ ...

  4. SRS之RTMP连接处理线程conn:接收客户端推流

    由 SRS之RTMP的TCP线程 分析可知,SRS 接受客户端的连接后创建了一个线程:conn,用于处理与客户端的 RTMP 连接. 本文的分析是基于该配置文件的: listen 1935; max_ ...

  5. GitHub-Microsoft:sql-server-samples

    ylbtech-GitHub-Microsoft:sql-server-samples 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. https://gi ...

  6. [Python]python-jenkins 启动需要参数的job

    需求: 我要用python通过api,启动这个job,并且启动这个job需要1个参数 安装依赖: pipenv install python-jenkins 熟悉API的使用方法: 了解一个API的最 ...

  7. 阶段3 3.SpringMVC·_05.文件上传_5 文件上传之跨服务器上传分析和搭建环境

    使用这个jar包来跨服务器上传 搞两个tomcat.一个springmvc一个fileupload 选中tomcat server点击左边的加号 需要改端口和JMX pport这个端口 部署文件上传的 ...

  8. c# Selenium ExpectedConditions 不存在

    Selenium中的显示等待指的是,等待某一元素出现或者等待页面加载完成后,才执行下一步.需要用到WebDriverWait类. 例如: , , )); var element = wait.Unti ...

  9. CKeditor从Word粘贴格式问题

    在config.js中添加配置 config.pasteFromWordRemoveFontStyles = false;    config.pasteFromWordRemoveStyles = ...

  10. Codeforces--C2. Good Numbers (hard version)

    题目链接http://codeforces.com/contest/1249/problem/C2.这是道进制转换题,我们的目的是找到最小的一个每个位都是1的三进制数来表示一个十进制数n.做法是,先将 ...