密码管理

#include<stdio.h>
#include<windows.h>
#include<string.h>
#define MAX_PASS 100//结构体数组的最大长度
//密码结构体定义
typedef struct _password//定义结构体
{
char website[256];//网站名称
char account[32];//账号
char password[32];//密码
}PASSWORD;
int add_pass();
void qurey_by_website();
void qurey_all();
int modify_pass();
int delete_pass();
void save_pass();
void validate ();
PASSWORD passwords[MAX_PASS]={0};//此处为声明成分,数组的定义实际上是在.c源文件中


void fun()
{
printf("#*#*#*#*#*#*我的密码本#*#*#*#*#*\n");
printf("\t>1.请输入登录密码本的登录密码:\n");
printf("\t>2.增加密码信息<\n");
printf("\t>3.删除密码信息<\n");
printf("\t>4.修改密码信息<\n");
printf("\t>5.查询密码信息<\n");
printf("\t>0.退出        <\n");
printf("#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*\n");

}


main()
{
int n;
validate();
fun();
while(1)
{
scanf("%d",&n);
switch(n)
{


case 1: 
break;
case 2:add_pass();
break;
case 3:
delete_pass();
printf("你选择的是删除密码信息\n");
break;
case 4:
printf("你选择的是修改密码信息\n");
modify_pass();
save_pass();
break;
case 5:printf(">1.根据网站进行查询<\n");
printf(">2.查看所有密码<\n");
printf(">>");
scanf("%d",&n);
if(n==1)
{
qurey_by_website();
}
else if(n==2)
{
qurey_all();
}else
printf("你输入的选择不存在\n");
break;
case 0: save_pass();
exit(0);
printf("你选择的是退出  \n");
break;
default:printf("你输入的选择不存在\n");
}
}
}
/********************
 *功能:增加密码信息
 *参数:无
 *返回值:0表示添加成功,非0表示出错
 ********************/
int add_pass()
{
PASSWORD tmp={0};
int i=0;
printf(">请输入网站的名称:\n");
scanf("%s",tmp.website);
printf(">请输入账号的名称:\n");
scanf("%s",tmp.account);
printf(">请输入密码\n");
scanf("%s",tmp.password);
//检验是否有重复信息
for(i=0;i<MAX_PASS;i++)
{
//同一网址,同一账号,密码一定相同
if(strcmp(passwords[i].website,tmp.website)==0&&
strcmp(passwords[i].account,tmp.account)==0)
{
printf("该帐号已经存在……");
return 1;
}
}
//检验数组是否有空位置
for(i=0;i<MAX_PASS;i++)
{
if(strlen(passwords[i].website)==0)//该位置为空可以存放新的数据
{
passwords[i]=tmp;
printf("YES\n");  
return 0;
}
}
//当上面循环结束时,都没有空位置,说明数组已满
printf("对不起,该数组已满,无法保存");
return 2;
}
/********************
 *功能:根据网站进行查询
 *参数:无
 *返回值:无
 ********************/
void qurey_by_website()
{
char website[32]={0};//保存要查询的网站名称
int i=0;
int count=0;//计数器
printf(">请输入网站的名称:\n");
scanf("%s",website);
printf("\n您要查找的网站帐号和密码如下:\n");
for(i=0;i<MAX_PASS;i++)
{
if(strcmp(passwords[i].website,website)==0)


{
printf("网站:%s,账号:%s,密码:%s,\n",passwords[i].website,
passwords[i].account,passwords[i].password);
count++;
}
}
if(count==0)//要查询的网站没有记录
{
printf("要查询的网站没有记录\n");
}else
{
printf("该网站:%s共有%d个账号\n",website,count);
}
}
/********************
 *功能:全部查询
 *参数:无
 *返回值:无
 ********************/
void qurey_all()
{
int i=0;
int count=0;//计数器
for(i=0;i<MAX_PASS;i++)
{
if(strlen(passwords[i].website)!=0)//判断当前密码数组元素的网站信息是否为空,
//不为空则进行输出,并计数
{
printf("网站:%s,账号:%s,密码:%s,\n",passwords[i].website,
passwords[i].account,passwords[i].password);
count++;
}
}
if(count==0)//没有记录
{
printf("\n对不起,您还没有任何密码信息....\n");
}else
{
printf("共有%d个账号\n",count);
}
}
/********************
 *功能:删除密码信息,根据输入的网站账号,进行删除
 *参数:无
 *返回值:0表示删除成功,1表示不想删除,非0/1表示出错
 ********************/
 delete_pass()
{
char website[256];//网站名称
char account[32];//账号
char password[32];//密码
int i=0;
printf(">请输入要删除账号所在网站的名称:\n");
scanf("%s",website);
printf(">请输入要删除账号的名称:\n");
scanf("%s",account);
//查找所要删除的账号是否存在
for(i=0;i<MAX_PASS;i++)
{
if(strcmp(passwords[i].website,website)==0&&
strcmp(passwords[i].account,account)==0)
//表示找到了
{
printf("请输入该账号的密码进行比对:\n");
scanf("%s",password);
if(strcmp(passwords[i].password,password)==0)//密码验证正确
{
char ch;
printf("您确定要删除吗?该操作不可逆(按Y/N继续)\n");
getchar();
scanf("%c",&ch);
if(ch=='Y'||'y')
{
strcpy(passwords[i].website,"\0");
printf("删除成功...");
save_pass();
return 0 ;
} else if(ch=='N'||'n')
{
return 1;
}


}else
{
printf("您输入的密码不正确吗,无法进行密码的删除...");
return 2;
}
}


}
printf("您要删除的账号不存在...");
return 3;


}
/********************
 *功能:修改指定网站的指定账号
 *参数:无
 *返回值:修改成功返回值为0,否则为非0
 ********************/
int modify_pass()
{
char website[256]={0};
char account[32]={0};
char password[32]={0};
char newpassword[32]={0};
int i=0;
printf(">请输入要修改的账号所在网站:\n");
scanf("%s",website);
printf(">请输入要修改账号的名称:\n");
scanf("%s",account);
//查找所要修改的账号是否存在
for(i=0;i<MAX_PASS;i++)
{
if(strcmp(passwords[i].website,website)==0&&strcmp(passwords[i].account,account)==0)

//表示找到了
{
printf("请输入该账号的密码进行核对:\n");
scanf("%s",password);
if(strcmp(passwords[i].password,password)==0)//密码验证正确
{
char ch;
printf("您确定要修改吗?该操作不可逆(按Y/N继续)\n");
getchar();//
scanf("%c",&ch);
if(ch=='Y'||'y')
{
printf("请输入新密码:");
scanf("%s",password);
printf("请再次输入新密码:");
scanf("%s",newpassword);
if(strcmp(password,newpassword)==0)
{


strcpy(passwords[i].password,password);
printf("修改成功:");

return 0 ;
}



}else if(ch=='N'||'n')
{
return 1;
}


}else
{
printf("您输入的密码不正确吗,无法进行密码的修改...");
return 2;
}
}


}
printf("您要修改的账号不存在...");
return 3;


}





/********************
 *功能:进行密码的保存,在密码结构体数组中进行增加,删除,修改后调用
 *参数:无
 *返回值:无
 ********************/
void save_pass()
{
FILE *fp=NULL;
int i,count=0;
fp=fopen("pass.dat","a+");//以w形式打开文件,看文件是否存在,
//若不存在,文件自动创建,若存在,则不创建,直接打开
if(fp==NULL)
{
printf("文件打开失败!\n:");
return ;
}
for(i=0;i<MAX_PASS;i++)//遍历整个结构体数组
{
if(strlen(passwords[i].website)!=0)//判断数组元素的网站信息是否为空,
//不为空,则进行写入文件,并计数器+1
{
//fprintf(fp,"%s %s %s\n",passwords[i].website,password[i],account,passwords[i],password);
fwrite(&passwords[i],sizeof(PASSWORD),1,fp);
count++;
}


}
printf("信息已保存成功,共计%d条记录",count);
fclose (fp);
printf("文件已保存!\n");
}
/********************
 *功能:进行密码加载,在程序第一次运行时,调用
 *参数:无
 *返回值:无
 ********************/
void load_pass()
{
FILE*fp=NULL;
int count=0;
fp=fopen("pass.dat","r");//以r的形式打开文件,只读
if(fp==NULL)
{
printf("文件打开失败!\n:");
return ;
}
while(1)
{
if(feof(fp))
break;
fread(&passwords[count],sizeof(PASSWORD),1,fp);
}
count++;
printf("信息成功加载,共计%d条记录",count);
fclose (fp);

}
void validate ()
{
int i,t=0;
char newpassword[32];
char password[32]="liu";


for(i=0;i<3;i++)
{
printf("请输入密码: ");
scanf("%s",&newpassword);
if(strcmp(newpassword,password)==0)
{
printf("登陆成功");
break;
}
else
{
printf("你输入的密码不正确:\n");
t++;
}
}
if(t==3)
{
printf("\n密码三次输入不正确:请离开\n");
exit(0);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值