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

数据存储设计 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. HTML5属性备忘单

    在网上闲逛的时候看到了文章,感觉总结的这个html5文章,决定转载过来,在排版的时候也帮助自己重新梳理复习一遍.毕竟学习基础最重要. by zhangxinxu from http://www.zha ...

  2. ACM之路(19)—— 主席树初探

    长春赛的 I 题是主席树,现在稍微的学了一点主席树,也就算入了个门吧= = 简单的来说主席树就是每个节点上面都是一棵线段树,但是这么多线段树会MLE吧?其实我们解决的办法就是有重复的节点给他利用起来, ...

  3. Android学习_Fragment

    Fragment 使用Fragment 我们可以把屏幕划分成几块,然后进行分组,进行一个模块化的管理.从而可以更加方便的在运行过程中动态地更新Activity的用户界面.另外Fragment并不能单独 ...

  4. linux 分区管理

    1. 查看系统中硬盘的设备 [root@centos6 ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb 可以看出,系统有 ...

  5. CodeForce 137B

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description " ...

  6. Nginx事件管理之ngx_event_core_module模块

    1. 概述 ngx_event_core_module 模块是一个事件类型的模块,它在所有事件模块中的顺序是第一位.它主要完成以下两点任务: 创建连接池(包括读/写事件): 决定究竟使用哪些事件驱动机 ...

  7. selenium 入门(Java)

    官网:https://www.seleniumhq.org/ 下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads 华 ...

  8. wait/notify模拟连接池

    连接池中的连接可重复使用,减少每次新建和烧毁连接对资源的消耗,但连接池的容量大小也要设置合理,否则也会占用多余的资源.连接池的基本功能是获取连接和释放连接 连接在java中也是一个类,连接对象是一个普 ...

  9. [String.Format(转换时间格式)]

    string.Format("{0:d}", System.DateTime.Now);   // 2017/6/2; string.Format("{0:D}" ...

  10. python 连接oracle数据库:cx_Oracle

    注意:64位操作系统必须安装64位oracle客户端,否则会连接报错 安装第三方库:cx_Oracle 一.连接数据库的三种方式: 1.cx_Oracle.connect('账号/密码@ip:端口/数 ...