密碼管理

#include
#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);
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章