用户注册登入管理系统
要求:
功能1:用户名及登入密码格式检查
(1)用户名格式要求:只能用字母,但不区分大小写
写一个函数isName()判断用户名是否符合格式要求
(2)密码格式要求:不多于6位数字字符
写一个函数isPass()判断密码是否符合格式
功能2:录入的用户名和密码按:用户名_密码的格式连接起来
写一个函数strConnet()完成用户名_密码的格式连接
功能3:写一个函数append()将用户名_密码添加到数组stu[][]中
功能4:写一个函数getName()提取user[SIZE][SIZE]中指定行的用户名
功能5:写一个函数getPass()提取user[SIZE][SIZE]中指定行的密码
功能6:写一个用户名查找函数findName(),该函数通过调用getName()函数提取用户名,查找用户名所在的行
功能7:写一个注册函数register()
当用户输入注册的用户名和密码时,
通过调用isName()检查用户名是否符合格式要求
通过调用isPass()检查密码是否符合格式要求
通过调用findName()检查用户名是否存在,如果用户名已存在,提示用户重新输入用户名
如果用户名和密码符合格式要求则调用strConnet()将用户名和密码连接起来
功能8:根据用户名删除用户信息
写一个用户删除函数delete(),该函数通过调用findName()函数所得到的行,根据用户名删除相关用户信息。
功能9:根据用户名查找该用户的密码
写一个用户密码查找函数findPass(),该函数通过调用findName()函数找到用户名所在的行
并通过调用getPass()函数得到用户密码
功能10:可按用户名进行升序和降序排序
写一个函数sort()完成上述功能
功能11:显示已排序的所有用户信息和登入密码
写一个函数showSort()显示排序信息
功能12: 用户登入
写一个登入函数userLogin(),用户登入时,通过调用findName()函数查找检查用户名
并用getPass()提取密码与用户输入的密码进行比较
如果正确则提示:“欢迎XXX光临本系统!”,否则给出用户名不存在或密码错误的信息。
功能13:管理员登入
写一个管理员登入函数adminLogin(),通过验证管理员密码后,显示管理员子菜单
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 30
#define PASSSIZE 10
#define YES 1
#define NO 0
#define FAILURE -1
#define SUCCESS 1
int isName(char *name); //函数申明
int isPass(char *passwrd) ;
int isPass(char* p);
int strConnet(char* name,char* pass,char* ans);
int append(char user[][SIZE],int* n,char* str);
int getName(char user[][SIZE],int n,char* name);
int getPass(char user[][SIZE],int n,char* pass);
int findName(char user[][SIZE],int n,char* name);
int findPass(char user[][SIZE],int n,char* name,char* pass);
void userLogin(char user[][SIZE],int n);
void adminLogin(char user[][SIZE],int* n,char* adminPass);
void sort(char user[][SIZE],int n);
void showSort(char user[][SIZE],int n);
int mainMenu();
void usermenu(char* name);
void adminmenu(char user[][SIZE],int* n);
void usermenu(char* name)
{
system("cls");
printf("欢迎%s光临本系统!\n",name);
system("pause");
}
/**************************************
函数功能说明:判断用户名格式是否为字母
形参说明: *name 指向用户名的地址
返回值: YES 表示符合要求
NO 表示不符合要求
**************************************/
int isName(char *name) //形参与可以用 char name[],意思是等价的
{
int i=0,flag=0;
while(name[i]!='\0') //name[i]与*(name+i)等价
{
flag=isalpha(name[i]); //调用系统函数判断单个字符是否是字母
if(flag==0) break; //如果flag等于0,说明姓名中存在非字母字符
i++;
}
if(flag==0) return NO;//如果存在非字母,返回NO,表示不符合要求
else return YES;//如果不存在非字母,返回YES,表示符合要求
}//end isName(char *name)
int isPass(char* p)
{
if(strlen(p)>6)
return NO;
while(*p)
{
if(*p<'0'||*p>'9')return NO;
p++;
}
return true;
}
int strConnet(char* name,char* pass,char* ans)
{
int len;
if(!name || !pass || !ans)
return FAILURE;
len=strlen(name);
strcpy(ans,name);
ans[len]='_';
strcpy(&ans[len+1],pass);
return SUCCESS;
}
int append(char user[][SIZE],int* n,char* str)
{
if(*n>=SIZE)//溢出
return FAILURE;
strcpy(user[*n],str);
(*n)++;
return SUCCESS;
}
int getName(char user[][SIZE],int n,char* name)
{
if(n>SIZE)return FAILURE;
strcpy(name,user[n-1]);
while(*name)
{
if(*name=='_')
{
*name='\0';
break;
}
name++;
}
return SUCCESS;
}
int getPass(char user[][SIZE],int n,char* pass)
{
char* p;
if(n>SIZE)return FAILURE;
strcpy(pass,user[n-1]);
p=pass;
while(*p)
{
if(*p=='_')
{
p++;
while(*p)
{
*pass=*p;
pass++;
p++;
}
*pass='\0';
break;
}
p++;
}
return SUCCESS;
}
int findName(char user[][SIZE],int n,char* name)
{
int i;
char temp[100];
for(i=1;i<=n;i++)
{
if(getName(user,i,temp)==SUCCESS)
{
if(!strcmp(name,temp))
{
return i;//所在行
}
}
}
return 0;//不存在
}
int findPass(char user[][SIZE],int n,char* name,char* pass)
{
char temp[100];
int cur = findName(user,n,name);
if(cur==0)return FAILURE;
getPass(user,cur,temp);
if(!strcmp(temp,pass))
return SUCCESS;
return FAILURE;
}
void userLogin(char user[][SIZE],int n)
{
char name[100];
char pass[100];
char temp[100];
system("cls");
printf("请输入用户名:");
scanf("%s",name);
printf("请输入密码:");
scanf("%s",pass);
if(findPass(user,n,name,pass)==SUCCESS)
{
usermenu(name);
return ;
}
printf("用户名不存在或密码错误!\n");
system("pause");
}
void sort(char user[][SIZE],int n)
{
int i,j;
char str[100];
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(user[i],user[j])>0)
{
strcpy(str,user[i]);
strcpy(user[i],user[j]);
strcpy(user[j],str);
}
}
}
}
void showSort(char user[][SIZE],int n)
{
int i;
char name[100];
char pass[100];
system("cls");
printf("%-10s%-10s\n","用户名","密码");
for(i=1;i<=n;i++)
{
getName(user,i,name);
getPass(user,i,pass);
printf("%-10s%-10s\n",name,pass);
}
system("pause");
}
void find(char user[][SIZE],int n)
{
int i,cur;
char name[100];
char pass[100];
system("cls");
printf("请输入要查询的用户名:");
scanf("%s",name);
cur=findName(user,n,name);
if(cur==0)
{
printf("无该用户!\n");
system("pause");
return;
}
printf("%-10s%-10s\n","用户名","密码");
getPass(user,cur,pass);
printf("%-10s%-10s\n",name,pass);
system("pause");
}
void Delete(char user[][SIZE],int* n)
{
int i,cur;
char name[100];
char pass[100];
system("cls");
printf("请输入要查询的用户名:");
scanf("%s",name);
cur=findName(user,*n,name);
if(cur==0)
{
printf("无该用户!\n");
system("pause");
return;
}
printf("%-10s%-10s\n","用户名","密码");
getPass(user,cur,pass);
printf("%-10s%-10s\n",name,pass);
for(i=cur;i<*n;i++)
{
strcpy(user[i],user[i+1]);
}
printf("删除成功!\n");
(*n)--;
system("pause");
}
void adminmenu(char user[][SIZE],int* n)
{
int choice;
do
{
system("cls");
printf("1:删除用户\n");
printf("2:查询用户\n");
printf("3:用户排序\n");
printf("4:显示用户\n");
printf("0:返回\n");
printf("请输入选择:");
scanf("%d",&choice);
while(choice<0||choice>4)
{
printf("请重新输入选择:");
scanf("%d",&choice);
}
switch(choice)
{
case 1:
Delete(user,n);
break;
case 2:
find(user,*n);
break;
case 3:
case 4:
sort(user,*n);
showSort(user,*n);
break;
}
}while(choice!=0);
}
void adminLogin(char user[][SIZE],int* n,char* adminPass)
{
char name[100];
char pass[100];
char temp[100];
system("cls");
printf("请输入管理员密码:");
scanf("%s",pass);
if(!strcmp(pass,adminPass))
{
adminmenu(user,n);
return ;
}
printf("密码错误!\n");
system("pause");
}
int mainMenu()
{
int choice;
system("cls");
printf("1:用户登录\n");
printf("2:用户注册\n");
printf("3:管理员登录\n");
printf("0:退出\n");
printf("请输入选择:");
scanf("%d",&choice);
while(choice<0||choice>3)
{
printf("请重新输入选择:");
scanf("%d",&choice);
}
return choice;
}
void Register(char user[][SIZE],int* n)
{
char name[100];
char pass[100];
char temp[100];
system("cls");
printf("请输入用户名:");
scanf("%s",name);
printf("请输入密码:");
scanf("%s",pass);
if(isName(name)==NO)
{
printf("用户名必须是字母!\n");
system("pause");
return;
}
if(isPass(pass)==NO)
{
printf("密码不超过6位,且只能数字!\n");
system("pause");
return;
}
if(findName(user,*n,name)==SUCCESS)
{
printf("该用户已存在!\n");
system("pause");
return ;
}
strConnet(name,pass,temp);
append(user,n,temp);
printf("注册成功!\n");
system("pause");
}
void main()
{
char user[SIZE][SIZE]={"LinMing_123456","ZhangShan_666666","Wangxiao_888888","GouSheng_567123"};
//没有填满的部分系统全部自动填'\0'
char adminPass[SIZE]="12345678";//预设管理员密码为12345678
char name[SIZE],password[PASSSIZE];
int result,isOk,passlen,choice;
int user_count=4;//当前用户数量
//检测用户名是否符合格式
do
{
choice=mainMenu();
switch(choice)
{
case 1:
userLogin(user,user_count);
break;
case 2:
Register(user,&user_count);
break;
case 3:
adminLogin(user,&user_count,adminPass);
break;
}
}while(choice!=0);
}//end main()