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