c语言之登录系统

#include <stdio.h>
#include <string.h>
#define N 100
struct user
{
 int user_id;
 char username[18];
 char password[16];
};

int is_username_length_available(char* p);
int is_username_character_available(char* p);
int is_password_length_available(char* p);
int is_password_character_available(char* p);
int is_password_same(char* pre_psd,char* wait_psd);
int user_register(struct user *userinfo,int count);
int loop_username(char* p);
int loop_password(char* p);
void password_input(char* pre_psd,char* re_psd);
int count_password_ckeck(struct user *userinfo,int count);
int is_my_user_id(int input_id,int restore_id);
int is_my_user_psd(char* input_psd,char* p);
int update(struct user *userinfo,int count);
int show_menu();

int i=0;
int main()
{
 int num;
 struct user userinfo[100];
 while(1)
 {
  switch(show_menu())
  {
   case 1:
   if(user_register(userinfo,i))
   {
    i++;
   }
   ;break;
   case 2:
   if(count_password_ckeck(userinfo,i))
   {
    printf("登陆成功!\n");
   }
   ;break;
   case 3:
   if(update(userinfo,i))
   {
    printf("密码修改成功\n");
   }
   else
   {
    printf("密码修改失败\n");
   }
   ;break;
  }
 }
 
}

 

//user:

//judge username's length available
int is_username_length_available(char* p)
{
 if(strlen(p)>18||strlen(p)<6)
 {
  return 0; 
 }
 else
 {
  return 1; 
 
}

//judge username's character available
int is_username_character_available(char* p)
{
 int i;
 if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z'))
 {
  for(i=0;i<strlen(p);i++)
  {
   if(((p[i]<'a'&&p[i]>'z') || (p[i]<'A'&&p[i]>'Z') ||(p[i]<'0'&p[i]>'9')))
   {
    return 0;  
   }
   else if((p[i]==' '))
   {
    printf("您输入的用户命中含有空格,请检查!\n");;
   }
  
 }
 else if(*p=='_')
 {
  return 0;
 }
 else
 {
  return 1;
 
}

//password:

//is password length available
int is_password_length_available(char* p)
{
 if(strlen(p)>16||strlen(p)<6)
 {
  return 0; 
 }
 else
 {
  return 1; 
 }
}

//is password character available
int is_password_character_available(char* p)
{
 int i;
 if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z'))
 {
  for(i=0;i<strlen(p);i++)
  {
   if((p[i]==' ') || (p[i]<'a'&&p[i]>'z') || (p[i]<'A'&&p[i]>'Z'))
   {
    return 0;  
   }
   else if((p[i]==' '))
   {
    return 1;
    
  
 }
 else
 {
  return 1;
 
}

//ckeck password
int is_password_same(char* pre_psd,char* wait_psd)
{
 if(strcmp(pre_psd,wait_psd)==0)
 {
  return 1; 
 }
 else
 {
  return 0;
 }
}

//loop username error
int loop_username(char* p)
{
 if(!is_username_length_available(p))
 {
  printf("您输入的用户名长度应该在6-18范围,请您检查!\n");
  return 0;
 }
 else if(!is_username_character_available(p))
 {
  printf("您输入的用户名首字符是下划线,请您以字母或者数字开头!\n");
  return 0;
 
 else
 {
  return 1;
 }
}

//loop password error
int loop_password(char* p)
{
 if(!is_password_length_available(p))
 {
  printf("您输入的密码长度应该在6-16范围,请您检查!\n"); 
  return 0;
 }
 else if(!is_password_character_available(p))
 {
  printf("您输入的密码不符合要求,只有字母,数字,下划线等字符才满足要求,请您检查!\n"); 
  return 0;
 }
 else
 {
  return 1;
 }
}

//password input&check
void password_input(char* pre_psd,char* re_psd)
{
 printf("请输入密码:\n");
    fflush(stdin);
 scanf("%s",pre_psd);
 while(!loop_password(pre_psd))
 {
  printf("请输入密码:\n");
     fflush(stdin);
  scanf("%s",pre_psd);
  printf("请再次输入密码:\n");
  fflush(stdin);
  scanf("%s",re_psd); 
  while(!is_password_same(pre_psd,re_psd))
  {
   printf("-------------------------!\n");
  }
 }
 printf("请再次输入密码:\n");
 fflush(stdin);
 scanf("%s",re_psd);
 if(is_password_same(pre_psd,re_psd))
 {
  printf("mimayizhi\n");
 }
 else
 {
  printf("mimabuyizhi\n");
  password_input(pre_psd,re_psd);
 }
}

//user register
int user_register(struct user *userinfo,int count)
{
 
 char pre_psd[16];
 char re_psd[16];
 printf("请输入用户名:\n");
 scanf("%s",userinfo[count].username);
 while(!loop_username(userinfo[count].username))
 {
  printf("请输入用户名:\n");
  scanf("%s",userinfo[count].username);  
 }
 password_input(pre_psd,re_psd);
 strcpy(userinfo[count].password,pre_psd); 
 printf("username:%s\npassword:%s\n",userinfo[count].username,userinfo[count].password);
 printf("您已经完成注册!\n您的账号为:%d\n",userinfo[count].user_id=10000+count);
 return 1;
}

//implement login function
int count_password_ckeck(struct user *userinfo,int count)
{
 int k;
 int temp;
 int counter;
 char input_psd[16];
 for(k=0;k<count;k++)
 {
  temp=is_my_user_id(counter,userinfo[k].user_id);
  while(!temp)
  {
   temp=is_my_user_id(counter,userinfo[k].user_id);
  }
  temp=is_my_user_psd(input_psd,userinfo[k].password);
  while(!temp)
  {
   temp=is_my_user_psd(input_psd,userinfo[k].password);
  }
 }
}

//is my user_id
int is_my_user_id(int input_id,int restore_id)
{
 printf("请输入您的账号:\n");
 scanf("%d",&input_id);
 if(input_id==restore_id)
 {
  return 1;
 }
 else
 {
  printf("您输入的账号不存在,请检查!\n");
  return 0;
 }
}
 
 //is_my_user_psd
 
int is_my_user_psd(char* input_psd,char* p)
{
  printf("请您输入密码:\n");
 scanf("%s",input_psd);
 if(strcmp(input_psd,p)==0)
 {
  //printf("登陆成功!\n");
  return 1; 
 }
 else
 {
  printf("您输入的密码不正确,请检查后重新输入!\n");
  return 0;
 }
 }
 
 
 
int update(struct user *userinfo,int count)
{
 int counter;
 int k;
 int temp;
 char psd[16];
 char psd1[16];
 char psd2[16];
 for(k=0;k<count;k++)
 {
  temp=is_my_user_id(counter,userinfo[k].user_id);
  while(!temp)
  {
   temp=is_my_user_id(counter,userinfo[k].user_id);
  }
  temp=is_my_user_psd(psd,userinfo[k].password);
  while(!temp)
  {
   temp=is_my_user_psd(psd,userinfo[k].password);
  }
  printf("密码正确,您可以对密码进行修改了!\n");
  password_input(psd1,psd2);
  strcpy(userinfo[k].password,psd1); 
 }
 
}
 
//show menu
int show_menu()
{
 int choice;
 printf("请您选择:\n");
 printf("1.用户注册\n2.用户登录\n3.密码修改\n请输入1-3\n");
 scanf("%d",&choice);
 return choice;
}