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

数据存储设计 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. python获取某路径下某扩展名的所有文件名和文件个数

    # -*- coding: utf-8 -*- # @Time : 19-1-10 下午10:02 # @Author : Felix Wang import os def get_file_coun ...

  2. Git入门学习和使用

    #开篇废话 开篇废话又回来了,离开博客算是有一年了,之间曾经痛下很多次决心,继续写博客,后来都失败了,前年为了申请个CSDN专家,每天发博客,那个高产的状态,现在已然不行了,时过境迁,当时为了吃口饱饭 ...

  3. 微信小程序_(校园视)开发上传视频业务

    微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...

  4. 8.3 CSS样式

    8.3 CSS样式 参考链接:http://how2j.cn/k/css2/css2-border/249.html 一.CSS有什么作用. 不使用css 给每一个单元格加上背景颜色 .就需要给每一个 ...

  5. JVM-GC算法(三)-分代收集算法

    对象分类 上次已经说过,分代收集算法是针对对象的不同特性,而使用合适的算法,这里面并没有实际上的新算法产生.与其说分代收集算法是第四个算法,不如说它是对前三个算法的实际应用.  首先我们来探讨一下对象 ...

  6. Maximum upload size exceede上传文件大小超出解决

    在这里记录三种方法, 努力提高自己的姿势水平 application.yml配置 spring: servlet: multipart: enabled: true max-file-size: 10 ...

  7. TCP层recvmsg系统调用的实现分析

    概述 recvmsg系统调用在tcp层的实现是tcp_recvmsg函数,该函数完成从接收队列中读取数据复制到用户空间的任务:函数在执行过程中会锁定控制块,避免软中断在tcp层的影响:函数会涉及从接收 ...

  8. 如何使用Navicat监控mysql数据库服务器

    https://jingyan.baidu.com/article/c33e3f48de5208ea15cbb525.html 打开Navicat   点击[工具]菜单,选择[服务器监控]下的[MyS ...

  9. cygwin执行.py提示找不到模块,但已经安装模块的解决办法

    . 在解决了cygwin中make命令不能使用的问题之后(https://www.cnblogs.com/zhenggege/p/10724122.html),make maskrcnn路径下的set ...

  10. cp复制命令详解

    linux复制指定目录下的全部文件到另一个目录中复制指定目录下的全部文件到另一个目录中文件及目录的复制是经常要用到的.linux下进行复制的命令为cp.假设复制源目录 为 dir1 ,目标目录为dir ...