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

数据存储设计 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. flask框架(六): 实现支持正则的路由

    一:默认路由 @app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/pos ...

  2. Latex的beamer幻灯片图形不编号的问题

    在beamer幻灯片中如果插入图形,一般不会显示图形编号,这是其默认模式,但我们可以通过设置给图形编号.解决办法是: 在导言区加上命令: \setbeamertemplate{caption}[num ...

  3. TCP层close系统调用的实现分析

    在调用close系统调用关闭套接字时,如果套接字引用计数已经归零,则需继续向上层调用其close实现,tcp为tcp_close:本文仅介绍tcp部分,前置部分请参考本博关于close系统调用的文章: ...

  4. 一、基础篇--1.2Java集合-HashMap死循环问题

    为什么HashMap会出现死循环 首先,我们知道java的HashMap不是线程安全的.多线程下应该使用ConcurrentHashMap. HashMap底层是基于动态数组和单向链表(JDK1.7, ...

  5. drawable SVG 使用

    Android会使用一些规则来去帮我们匹配最适合的图片.什么叫最适合的图片?比如我的手机屏幕密度是xxhdpi,那么drawable-xxhdpi文件夹下的图片就是最适合的图片.因此,当我引用andr ...

  6. Python 安装 for Linux

    make后报错: Failed to build these modules:_multiprocessing   binascii           zlib 下载http://www.zlib. ...

  7. keyston报错处理

    1.35357端口启动不了 [root@controller conf.d]# openstack project create --domain default \ > --descripti ...

  8. 一步一步搭建:spark之Standalone模式+zookeeper之HA机制

    理论参考:http://www.cnblogs.com/hseagle/p/3673147.html 基于3台主机搭建:以下仅是操作步骤,原理网上自查 :1. 增加ip和hostname的对应关系,跨 ...

  9. Spring MVC模式下,获取WebApplicationContext的工具类 方法

    在已有的注解类型下,获取WebApplicationContext的工具类 通过  WebApplicationContextUtils.getRequiredWebApplicationContex ...

  10. SQL-T

    Mysql函数.语句记录 增加 INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 删除 DELETE FROM 表名称 WHERE 列名 ...