C语言实现密码本
本文实例为大家分享了C语言实现密码本的具体代码,供大家参考,具体内容如下
功能简述:
1.账号登陆(密码验证,三次锁定账号)
2.功能选择:1、查看所有密码2、新增密码3、删除密码4、修改密码5、查询密码6、解除锁定7、退出登陆
3.保存密码,文件加密
4.流程图:
数据定义部分
#pragmaonce
//变量声明
#defineNUM100//初始密码本容量
externintg_nNum;//当前密码本容量
externintg_lock_flag;//锁定标志
/*定义存储账户密码的结构体****************************/
typedefstruct_PASSWORD
{
charwebsite[100];//站点名
charuserName[40];
charpassWord[20];
charnote[100];//备注
}PASSWORD,*PPASSWORD;
/*定义用户操作枚举*************************************/
#define查看所有密码1
#define新增密码2
#define删除密码3
#define修改密码4
#define查询密码5
#define解除锁定6
#define退出7
界面与用户交互
intmain()
{
/*全局变量初始化**********************************************************************/
g_nNum=0;//当前密码本容量
g_lock_flag=1;//锁定标志
/*局部变量定义************************************************************************/
PPASSWORDpPwd=nullptr;//密码数组指针
intnCount=0;//当前密码个数
intop=0;//用户操作
/*本地读取,初始化密码本,锁定标志*****************************************************/
readInfo(&pPwd,&nCount);
/*登陆验证==>注册和登陆****************************************************************/
if(!g_lock_flag)
{
printf("账户已锁定,请解锁!\n");
unLock(pPwd,nCount);
}
else
{
login(pPwd,&nCount);
}
/*循环扫描,功能选择*********************************************************************/
/*1、查看所有2、新增3、删除4、修改5、查询6、解除锁定7、退出*/
/*密码校验机制,三次锁定,可以登陆,权限锁定*/
while(1)
{
Dlg_print();
printf("请输入操作:");
scanf_s("%d",&op);
switch(op)
{
case查看所有密码:searchAllInfo(pPwd,nCount);break;
case新增密码:insertInfo(pPwd,&nCount);break;
case删除密码:deleInfo(pPwd,&nCount);break;
case修改密码:reviseInfo(pPwd,nCount);break;
case查询密码:queryInfo(pPwd,nCount);break;
case解除锁定:unLock(pPwd,nCount);break;
case退出:admExit(pPwd,nCount);break;
}
}
return0;
}
读取和保存
/*本地读取,初始化密码本*/
voidreadInfo(PPASSWORD*ppPwd,int*pnCount)
{
FILE*fp=NULL;
errno_terr;
if((err=fopen_s(&fp,"password.txt","rb"))!=0)
{
//开辟最大容量空间等待输入密码
printf("文件不存在,请注册账号……\n");
//密码数组指针为空,给密码数组指针的地址赋值
*ppPwd=(PPASSWORD)malloc(sizeof(PASSWORD)*NUM);
memset(*ppPwd,0,sizeof(PASSWORD)*NUM);
g_nNum=NUM;
return;
}
fread(pnCount,sizeof(int),1,fp);
fread(&g_lock_flag,sizeof(int),1,fp);
g_nNum=*pnCount;
*ppPwd=(PPASSWORD)malloc(sizeof(PASSWORD)*g_nNum);
memset(*ppPwd,0,sizeof(PASSWORD)*g_nNum);
size_trlen=fread(*ppPwd,sizeof(PASSWORD),g_nNum,fp);
/*printf("密码本密码数量:%d\n",*pnCount);
printf("密码本锁定状态:%d\n",g_lock_flag);
printf("密码本当前容量:%d\n",g_nNum);*/
/*解密*/
if(rlen!=g_nNum)
{
printf("密码文件读取错误\n");
fclose(fp);
return;
}
size_tbyteSize=sizeof(PASSWORD)*g_nNum;
char*buf=(char*)*ppPwd;
for(size_ti=0;i
登陆
voidlogin(PASSWORDpwd[],int*pnCount)
{
charadmName[40]={0};
charadmPwd1[20]={0};
charadmPwd2[20]={0};
printf("*******************************************\n");
printf("-------------欢迎使用1024密码本------------\n");
printf("账户:");
scanf_s("%s",admName,40);
printf("密码:");
scanf_s("%s",admPwd1,20);
if(strlen(pwd[0].userName)==0||g_nNum==0)
{
//账户不存在---注册---保存账号密码
printf("重新输入密码:");
scanf_s("%s",admPwd2,20);
if(strcmp(admPwd1,admPwd2)!=0)
{
printf("两次密码不一致,请重新输入\n");
exit(1);
}
strcpy_s(pwd[0].website,100,"密码本");
strcpy_s(pwd[0].userName,40,admName);
strcpy_s(pwd[0].passWord,20,admPwd1);
strcpy_s(pwd[0].note,100,"管理员账户");
printf("注册成功\n");
(*pnCount)++;
saveInfo(pwd,*pnCount);
}
elseif(strcmp(admName,pwd[0].userName)==0)
{
//账户存在,验证密码
inti=0;
while(strcmp(admPwd1,pwd[0].passWord)!=0)
{
i++;
if(i>=3)
{
g_lock_flag=0;
printf("您的账户已被锁定!请解锁后再操作!\n");
exit(1);
}
printf("密码错误,请重新输入:");
scanf_s("%s",admPwd1,20);
}
}
else
{
printf("账号密码错误\n");
system("pause");
exit(1);
}
}
功能就不写了,源代码上传了,下面是运行结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。