登陆

Login.h头文件

#ifndef _LOGIN_H_
#define _LOGIN_H_

#ifndef _STDIO_H_
#define _STDIO_H_
#include<stdio.h>
#endif

#ifndef _STDLIB_H_
#define _STDLIB_H_
#include<stdlib.h>
#endif

#ifndef _STRING_H_
#define _STRING_H_
#include<string.h>
#endif

#define zjlBOOL int
#define YES     0x01
#define NO      0x10
#define SAME    0x11

//权限  三级
#define ONE     0x01   //一级权限
#define TWO     0x02   //二级权限
#define THR     0x03   //三级权限
#define EPT     0X04   //无任何权限

typedef struct _LOGIN_
{
	char ad[20];    //Admin  
	char pw[20];    //Password
	int  lm;        //权限
	struct _LOGIN_ *pNext;
}Login,*pLogin;

pLogin pHead = NULL;

Login Admin; //记录登录者

pLogin Create()
{
	pLogin p = (pLogin)malloc(sizeof(Login));
	p->pNext = NULL;
	p->lm = EPT;
	return p;
}

/*
作用:注册用户
返回值:YES---添加成功   SAME---用户名一样,不添加
*/
zjlBOOL AddLogin(pLogin pData)
{
	pLogin p = pHead;
	pLogin pNew = Create();
	pNew = pData;
	if(!p)
		pHead = pNew;
	else
	{
		while(p->pNext)
		{
			if(!strcmp(p->ad,pData->ad))
				return SAME;
			p = p->pNext;
		}
		p->pNext = pNew;
	}
	return YES;
}

/*
作用:判断输入的用户名是否存在
返回值: YES---存在   NO--不存在  SAME---用户名一样
*/
zjlBOOL IsLogin(pLogin pData)
{
	pLogin p = pHead;
	while(p)
	{
		if(!strcmp(p->ad,pData->ad) && !strcmp(p->pw,pData->pw))
		{
			strcpy(Admin.ad,p->ad);
			strcpy(Admin.pw,p->pw);
			strcpy(Admin.lm,p->lm);
			return YES;
		}
		p = p->pNext;
	}
	return NO;
}

/*
参数:pData是用户的用户名、密码
作用:删除单个用户
返回值:YES--删除成功   NO---删除失败
*/
zjlBOOL RemoveAt(pLogin pData)
{
	pLogin p = pHead;
	if(!strcmp(p->ad,pData->ad) && !strcmp(p->pw,pData->pw))
	{
		pHead = p->pNext;
		free(p);
		return YES;
	}
	while(p->pNext)
	{
		if(!strcmp(p->pNext->ad,pData->ad) && !strcmp(p->pNext->pw,pData->pw))
		{
			pLogin s = p->pNext;
			pLogin d = s->pNext;
			p->pNext = d;
			free(s);
			return YES;
		}
		p = p->pNext;
	}
	return NO;
}

/*
作用:删除所有申请的堆空间
返回值:
*/
void RemoveAll()
{
	pLogin p = pHead,d;
	while(p)
	{
		d = p->pNext;
		free(p);
		p = d;
	}
}

/*
作用:获取链表的头指针
返回值:pHead
*/
pLogin GetHead()
{
	return pHead;
}

/*
作用:获取登录者
返回值:Login--登录者信息
*/
Login GetLogin()
{
	return Admin;
}

/*
作用:保存到文件中
返回值:
*/
void SaveLogin()
{
	FILE *file;
	pLogin p = pHead;
	Login s;
	file = fopen("./Login.dat","w");
	if(!file || !p)
		return ;
	while(p)
	{
		strcpy(s.ad,p->ad);
		strcpy(s.pw,p->pw);
		s.lm = p->lm;
		fwrite(&s,1,sizeof(s),file);
		p = p->pNext;
	}
	fclose(file);
}

/*
作用:读取保存的数据
返回值:
*/
void LoadLogin()
{
	FILE *file;
	Login s;
	file = fopen("./Login.dat","r");
	if(!file)
		return ;
	while(fread(&s,1,sizeof(s),file) == sizeof(Login))
	{
		pLogin p = pHead;
		pLogin pNew = Create();
		strcpy(pNew->ad,s.ad);
		strcpy(pNew->pw,s.pw);
		pNew->lm = s.lm;
		if(!p)
			pHead = pNew;
		else
		{
			while(p->pNext)
				p = p->pNext;
			p->pNext = pNew;
		}
		
	}

	fclose(file);
}

#endif

main.c

#include"Login.h"

#include<stdio.h>

void Init()
{
	printf("#========================#\n");
	printf("#\t 1、登录\n");
	printf("#\t 2、注册\n");
	printf("#\t 3、退出\n");
	printf("#\t 4、浏览\n");
	printf("#\t 5、删除\n");
	printf("#========================#\n");
}

void AddMenu()
{
	int lm;
	int res;
	pLogin pNew = Create();
	printf("请输入用户名:");
	scanf("%s",pNew->ad);
	printf("\n请输入密码:");
	scanf("%s",pNew->pw);
	printf("\n请输入权限【老师(0)、学生(1)】:");
	scanf("%d",&lm);
	switch(lm)
	{
	case 0:
		pNew->lm = ONE;
		break;
	case 1:
		pNew->lm = TWO;
		break;
	}

	res = AddLogin(pNew);

	switch(res)
	{
	case YES:
		printf("添加成功!\n");
		break;
	case SAME:
		printf("用户名一样!\n");
		break;
	}
}

void ShowAllLogin()
{
	char lm[5];
	int i = 1;
	pLogin p = GetHead();
	printf("序号\t用户名\t密码\t权限\n");
	while(p)
	{
		switch(p->lm)
		{
		case ONE:
			strcpy(lm,"老师");
			break;
		case TWO:
			strcpy(lm,"学生");
			break;
		}
		printf("%d\t%s\t%s\t%s\n",i,p->ad,p->pw,lm);
		i++;
		p = p->pNext;
	}
}

void LoginMenu()
{
	int res;
	pLogin pNew = Create();
	printf("请输入用户名:");
	scanf("%s",pNew->ad);
	printf("\n请输入密码:");
	scanf("%s",pNew->pw);

	res = IsLogin(pNew);
	switch(res)
	{
	case YES:
		printf("登录成功!\n");
		printf("登录名:%s\t%s\n",GetLogin().ad,GetLogin().lm);
		break;
	case NO:
		printf("登录失败!\n");
		break;
	}
}

void RemoveMenu()
{
	int res;
	pLogin pNew = Create();
	printf("请输入用户名:");
	scanf("%s",pNew->ad);
	printf("\n请输入密码:");
	scanf("%s",pNew->pw);

	res = RemoveAt(pNew);
	switch(res)
	{
	case YES:
		printf("删除成功!\n");
		break;
	case NO:
		printf("删除失败!\n");
		break;
	}
}

void main()
{
	int cmd;
	int flag = 1;
	LoadLogin();
	while(flag)
	{
		Init();
		printf("请输入选择:");
		scanf("%d",&cmd);
		switch(cmd)
		{
		case 1:
			LoginMenu();
			break;
		case 2:
			AddMenu();
			break;
		case 3:
			flag = 0;
			break;
		case 4:
			ShowAllLogin();
			break;
		case 5:
			RemoveMenu();
			break;
		}
	}
	SaveLogin();
	RemoveAll();
	return ;
}

源代码:https://download.csdn.net/download/qq_38611124/10837609

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值