編寫密碼的c文件(和大家分享)

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define N 100
struct user
{
int user_id;
char user_name[19];//最大18位
char password[13];//最大13位
char like[255];
char sign[255];
};

/*
* 驗證用戶名長度是否合法
*/
int length_user_name(char *p)
{
int l;
l=strlen(p);
if(l>18||l<1)
{
   return 0;
}
else
   return l;
}

/*
* 判斷用戶名是否有效
*/
int valid_user_name(char *p)
{
int i=0;
int len = strlen(p);
if((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <='Z')) //判斷首字符是不是字母
{
   for(i = 0; i < len; i++)
   {
    if(!(p[i] == '_' || (p[i] >= 'a' && p[i] <= 'z') || (p[i] >= 'A' && p[i] <='Z')
     ||(p[i] >='0' && p[i] <= '9'))) //判斷後面字符是否有效
     return 0;

   }
   return 1;
}
else
   return 0;

}

/*
* 判斷用戶名是否有效
*/
int is_username_valid(char *p)
{
if((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <='Z'))
{
   p++;
   while(*p)
   {
    if(!(isalpha(*p) || *p == '_' || isdigit(*p)))
     return 0;
    p++;
   }

   return 1;
}
else
{
   return 0;
}
}

/*
* 密碼長度有效性驗證
*/
int length_password(char *p)
{
int len;
len = strlen(p);
if(len<6||len>12)
{
   return 0;
}
else
   return len;
}

/*
* 密碼的有效性驗證
*/
int is_password_valid(char *p)
{
int i=0;

for(;*p != '\0'; p++)
{
   if(!( (*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <='Z')
    ||(*p >='0' && *p <= '9'))) //判斷字符是否有效
    return 0;
}
return 1;
}

int two_password_valid(char *p1,char*p2)
{
if(strcmp(p1,p2)==0)
   return 1;
else
   return 0;
}


/*
* 完成註冊功能
*/
int user_register(struct user *ptr_user,int size)
{
char password[13];
char repassword[13];
if(size==N)
{
   puts("註冊人數以滿!");
   return 0;
}
printf("請輸入註冊姓名:");
fflush(stdin);
gets(ptr_user[size].user_name);
if(!(length_user_name(ptr_user[size].user_name)&&valid_user_name(ptr_user[size].user_name)))
{
   printf("您輸入的姓名無效,用戶名在1-18之間,首字符爲字母,後面必須爲字母,數字或下劃線!!!");
   return 0;
}

printf("請輸入註冊密碼:");
fflush(stdin);
gets(password);
printf("請再次輸入註冊密碼:");
fflush(stdin);
gets(repassword);
if(!two_password_valid(password,repassword))
{
   printf("\n兩次輸入的密碼不一致!");
   return 0;
}
else
{
   strcpy(ptr_user[size].password,password);
}

if(!(length_password(ptr_user[size].password)&&is_password_valid(ptr_user[size].password)))
{
   printf("您輸入的密碼無效,密碼應在6-12之間,密碼只能包含字母和數字!!!");
   return 0;
}

printf("請輸入您的愛好:");
fflush(stdin);
gets(ptr_user[size].like);
printf("請輸入您的個性簽名:");
fflush(stdin);
gets(ptr_user[size].sign);
printf("您的編號爲:%d,這將是您的登陸帳號.",ptr_user[size].user_id=10000+size);
return 1;
}

/*
* 如果登陸成功則返回第i+1個用戶的信息,否則返回0
*/
int is_my_user(struct user *p,int size)
{
int i;
int zhanghu;
char mima[15];
printf("請輸入您的帳號: ");
scanf("%d",&zhanghu);
fflush(stdin);
printf("請輸入您的密碼: ");
gets(mima);
for(i=0;i<size;i++)
{
   if((zhanghu == p[i].user_id)&&(strcmp(mima,p[i].password)==0))
   {

    return i + 1;
   }
}
return 0;
}

void display_user(struct user u)
{
printf("\n你的帳號是:%d",u.user_id);
printf("\n你註冊姓名是:%s",u.user_name);
printf("\n你的愛好:%s",u.like);
printf("\n你的個性簽名:%s",u.sign);
}

void update_password(struct user *ptr_user,int size)
{
char mima1[13],mima2[13];
int i = is_my_user(ptr_user,size);
if(i)
{
   i--;
}
else
{
   printf("\n帳號密碼不存在!");
   return;
}

printf("請輸入新密碼: ");
scanf("%s",mima1);
printf("請再次輸入新密碼: ");
scanf("%s",mima2);

if(two_password_valid(mima1,mima2) && length_password(mima1) && is_password_valid(mima1))
{
   strcpy(ptr_user[i].password,mima1);//完成新舊密碼的調換
   printf("\n您的的密碼修改成功!");
}
else
   printf("\您的密碼修改失敗!");

}

//顯示菜單
int show_menu()
{
int choice;
printf("\n1.註冊");
printf("\n2.登陸");
printf("\n3.修改密碼");
printf("\n4.退出");
printf("\n請選擇1-4\n");
scanf("%d",&choice);

return choice;
}

int main()
{
struct user our_users[N];
int count = 0;
int current_user;
while(1)
{
   switch(show_menu())
   {
    case 1:
     if(user_register(our_users,count))
     {
      count++;
      printf("\n註冊成功!");
     }
     break;
     //註冊
    case 2:
     if((current_user = is_my_user(our_users,count)))
     {
      printf("\n登陸成功!");
      display_user(our_users[current_user - 1]);
     }
     else
      printf("\n登陸失敗!");
      break;
     //登陸
    case 3:
     update_password(our_users,count);
      break;
     //修改密碼
    case 4:
     exit(1);
     break;
     //退出
    default:
     printf("請正確輸入");
   }
}
return 0;
}

 

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