用户注册登入管理系统

用户注册登入管理系统
要求:
功能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()
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值