简单注册系统部分功能实现(不包含头文件及主函数)

管理员注册

#include "../include/head.h"

int jiancha() //检测是否注册管理员账号
{
    FILE* fp;
    fp = fopen("guanliyuan.txt", "w+");
    if (fp == NULL) 
	{
        printf("无法打开文件!\n");
        return 0;
    }
    char first;
    first = fgetc(fp);
    fclose(fp);
    if (first == -1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

void chuangjiangly() //在使用前先创建管理员账号
{
	guanliyuan guanliyuan;
    FILE* fp;
    fp = fopen("guanliyuan.txt", "rt+");
    if (fp == NULL) {
        printf("无法打开文件!\n");
        return;
    }
    char a[20], b[20];
    printf("请输入管理员账号:\n");
    scanf("%s", a);
    printf("请输入管理员密码:\n");
    scanf("%s", b);
    strcpy(guanliyuan.glzh, a);
    strcpy(guanliyuan.glmm, b);
    fwrite(&guanliyuan, sizeof(guanliyuan), 1, fp);
    fclose(fp);
    printf("注册成功\n");
    sleep(1);
	system("clear");
    return;
}

管理员登录及功能

#include "../include/head.h"

void glydenglu() //管理员登录系统
{
	guanliyuan guanliyuan;
	system("clear");
	FILE* fp;
	fp = fopen("guanliyuan.txt", "r+");
	if (fp == NULL) 
	{
		printf("无法打开文件!\n");
		return;
	}
	fread(&guanliyuan, sizeof(guanliyuan), 1, fp);
	char c[20], d[20];
	printf("管理员账号:\n");
	scanf("%s", c);
	printf("管理员密码:\n");
	scanf("%s", d);
	if ((0 == strcmp(c, guanliyuan.glzh)) && (strcmp(d, guanliyuan.glmm) == 0))
	{
		guanlimenu();
		return;
	}
	else
	{
		printf("账号或密码错误!\n");
		sleep(1);
		return;
	}
}

void guanlimenu() //管理员菜单
{
	int op = 0;
	printf("欢迎使用管理员系统\n");
	while (op != -1)
	{
		system("clear");
		puts("----------菜-单----------");
		puts("| 请选择选项:          |");
		puts("|  < 1 > ---- < 查看 >  |");
		puts("|  < 2 > ---- < 修改1>  |");
		puts("|  < 3 > ---- < 修改2>  |");
		puts("|  < 4 > ---- < 删除 >  |");
		puts("|  <-1 > ---- < 退出 >  |");
		puts("|                       |");
		puts("-------------------------");
		scanf("%d", &op);
		switch (op)
		{
		case 1:
			look();
			break;
		case 2:
			xiugai();
			break;
		case 3:
			xiugaigly();
			break;
		case 4:
			shanchu();
			break;
		case -1:
			printf("感谢您的支持!\n欢迎下次使用!\n");
			sleep(1);
			system("clear");
			break;
		default:
			printf("无效的选项,请重新选择!\n");
			break;
		}
		return;
	}
}

void look() //查看用户信息
{
	system("clear");
	FILE* fp = fopen("users.txt", "r");
	if (fp == NULL) 
	{
		printf("无法打开文件!\n");
		return;
	}
	Users a;
	while (fread(&a, sizeof(Users), 1, fp) == 1)
	{
		printf("%s\t\t %s\t\t %s\t\t %s\t\t %s\t\t\n", a.name, a.zh, a.mm, a.question, a.answer);
	}
	if (!feof(fp))
	{
		printf("读取文件失败!\n");
	}
	fclose(fp);

	int input;
	printf("输入666退出:\n");
	scanf("%d", &input);
	if (input == 666) 
	{
		system("clear");
		guanlimenu();
	}
}

void xiugai() //修改用户信息
{
	system("clear");
	Users a;
	Users b;
	int number;
	char name[SIZE];
	FILE* fp = fopen("users.txt", "r+");
	if (fp == NULL) 
	{
		printf("无法打开文件!\n");
		return;
	}
	
	printf("请输入要修改账号的用户名:\n");
	scanf("%s", name);
	int found = 0; // 标记是否找到了要修改的用户
	while (fread(&a, sizeof(Users), 1, fp) == 1)
	{
		if (strcmp(a.name, name) == 0)
		{
			found = 1;
			break;
		}
	}
	if (!found) 
	{
		printf("该用户不存在!\n");
		fclose(fp);
		sleep(1);
		system("clear");
		guanlimenu();
		return;
	}
	
	printf("\n%s \n%s \n%s\n", a.name, a.zh, a.mm);
	printf("请选择需要修改的项目:用户名(1),账号(2),密码(3)\n");
	scanf("%d", &number);
	switch (number)
	{
	case 1:
		printf("新的用户名:\n");
		scanf("%s", b.name);
		strcpy(a.name, b.name);
		break;
	case 2:
		printf("新的账号:\n");
		scanf("%s", b.zh);
		strcpy(a.zh, b.zh);
		break;
	case 3:
		printf("新的密码:\n");
		scanf("%s", b.mm);
		strcpy(a.mm, b.mm);
		break;
	default:
		printf("无效的选项,请重新选择!\n");
		fclose(fp);
		sleep(1);
		system("clear");
		guanlimenu();
		return;
	}
	
	fseek(fp, -(int)sizeof(Users), SEEK_CUR);
	fwrite(&a, sizeof(Users), 1, fp);
	printf("修改成功!\n");
	fclose(fp);
	sleep(1);
	system("clear");
	guanlimenu();
}


void xiugaigly() //修改管理员账号
{
	guanliyuan guanliyuan;
	FILE* fp;
	fp = fopen("guanliyuan.txt", "rt+");
	if (fp == NULL) {
		printf("无法打开文件!\n");
		return;
	}
	char a[20], b[20];
	printf("请输入新账号:\n");
	scanf("%s", a);
	printf("请输入新密码:\n");
	scanf("%s", b);
	strcpy(guanliyuan.glzh, a);
	strcpy(guanliyuan.glmm, b);
	fseek(fp, -((int)(sizeof(guanliyuan))), SEEK_CUR);
	fprintf(fp, "%s", guanliyuan.glzh);
	fseek(fp, -((int)(sizeof(guanliyuan)) - 20), SEEK_CUR);
	fprintf(fp, "%s", guanliyuan.glmm);
	fclose(fp);
	printf("修改成功!\n");
	sleep(1);
	system("clear");
	return;
}
int shanchu()
{
	Users a, b;
	printf("请输入要删除的用户名:\n");
	scanf("%s", a.name);
	FILE* fp = fopen("users.txt", "r+");
	if (fp == NULL)
	{
		printf("无法打开文件\n");
		return USERS_NULL;
	}
	int found = 0;
	while (fread(&b, sizeof(Users), 1, fp) == 1)
	{
		if (strcmp(a.name, b.name) == 0)
		{
			found = 1;
			break;
		}
	}

	if (found)
	{
		fseek(fp, -sizeof(Users), SEEK_CUR);
		Users c = { "", "", "", "", "" };
		fwrite(&c, sizeof(Users), 1, fp);
		printf("用户删除成功\n");
	}
	else
	{
		printf("找不到要删除的用户\n");
	}

	fclose(fp);

	FILE* new_fp = fopen("new_users.txt", "wt");
	if (new_fp == NULL)
	{
		printf("无法打开新文件\n");
		return USERS_NULL;
	}

	fp = fopen("users.txt", "rt");
	if (fp == NULL)
	{
		printf("无法打开文件\n");
		return USERS_NULL;
	}

	while (fread(&b, sizeof(Users), 1, fp) == 1)
	{
		if (strcmp(b.name, "") != 0)
		{
			fwrite(&b, sizeof(Users), 1, new_fp);
		}
	}

	fclose(fp);
	fclose(new_fp);

	remove("users.txt");
	rename("new_users.txt", "users.txt");
	system("clear");
	guanlimenu();
}

用户注册

#include "../include/head.h"

int zhuce()//注册模块
{
	system("clear");//清屏

	char tmp[20];//用于比较判断

	Users a,b;//定义临时结构体变量,a用来接收用户输入数据,b用来从文件中读取数据

	printf("欢迎来到注册界面!\n");
	FILE *fp = fopen("users.txt", "r+");
	if (!fp) 
	{
		printf("无法打开文件!\n");
		return USERS_NULL;
	}
	fread(&b, sizeof(Users), 1, fp);
	sleep(1);

	printf("请输入你的账号:\n");
	scanf("%s", a.zh);
	while (1)
	{
		if (!strcmp(a.zh, b.zh))//判断账号有没有重复
		{
			printf("此用户已存在,请重新输入!\n");
			sleep(1);
			fclose(fp);//关闭文件
			return 0;
		}
		if (!feof(fp))//判断文件是否读到末尾
		{
			fread(&b, sizeof(Users), 1, fp);//继续读取
		}
		else//读到末尾没有重复账号
		{
			break;
		}
	}
	printf("请输入您的姓名:\n");
	scanf("%s", a.name);
	printf("请输入您的密码:\n");
	scanf("%s", a.mm);
	printf("请再次输入您的密码:\n");
	scanf("%s", tmp);
	while (strcmp(a.mm, tmp) != 0) 
	{
		printf("两次密码不匹配!请重新输入!\n");
		printf("请输入您的密码:\n");
		scanf("%s", a.mm);
		printf("请再次输入您的密码:\n");
		scanf("%s", tmp);
	}
	printf("请输入您的密保问题:\n");
	scanf("%s",a.question);
	printf("请输入您的密保答案:\n");
	scanf("%s",a.answer);
	fp = fopen("users.txt", "a");
	fwrite(&a, sizeof(Users), 1, fp);
	printf("\n账号注册成功,请登录!\n");
	sleep(1);
	fclose(fp);
	return 0;
}

用户登录

#include "../include/head.h"

int denglu()
{
	Users a,b;//同理,a是用来给用户输入的,b是用来对比的

	FILE* fp = fopen("users.txt", "r");//以只读的方式打开文件
	if (!fp) return USERS_NULL;//如果读取失败
	printf("欢迎来到登录界面!\n");
	sleep(1);

	fread(&b, sizeof(Users),1,fp);//先从文件中读取一个用户试试水

	printf("请输入账号\n");
	scanf("%s", a.zh);

	while (1)
	{
		if (!strcmp(a.zh, b.zh))//在文件中找到了与用户输入相同的账号
		{
			break;
		}
		else
		{
			if (!feof(fp))//没读到文件末尾,继续读取文件中的zh到b中
			{
				fread(&b, sizeof(Users),1,fp);//继续从文件中读取用户信息进b,直到在文件中找到一个和a的信息相同的
			}
			else//读到文件末尾了,没有找到与用户输入相同的账号
			{
				printf("此账号不存在!请重新输入!\n");
				sleep(1);
				fclose(fp);
				fp = NULL;
				return USERS_F;
			}
		}
	}
	do
	{
		printf("请输入密码:\n");
		scanf("%s",a.mm);//获取密码
		if (!strcmp(a.mm, b.mm))//输入的密码与文件中的相同
		{
			printf("\n登录成功!欢迎使用!\n");
			sleep(1);
			fclose(fp);
			fp = NULL;//置空,避免野指针
			return USERS_T;
		}
		else
		{
			printf("密码输入错误,请重新输入!\n");
		}
	} while (strcmp(a.mm, b.mm));
}

菜单

int menu()
{
	int opt = 0;
	puts("----------菜-单----------");
	puts("| 请选择选项:          |");
	puts("|  < 1 > ---- <管理登录>|");
	puts("|  < 2 > ---- < 登录 >  |");
	puts("|  < 3 > ---- < 注册 >  |");
	puts("|  < 4 > ---- < 找回 >  |");
	puts("|  <-1 > ---- < 退出 >  |");
	puts("|                       |");
	puts("-------------------------");
	scanf("%d", &opt);
	return opt;
}

用户找回

#include "../include/head.h"

int zhaohui()
{
	system("clear");
	char tmp[SIZE] = ""; // 用于密码匹配的临时变量
	Users a, b;

	FILE* fp = fopen("users.txt", "r+");

	if (!fp) return USERS_NULL;

	fread(&b, sizeof(Users), 1, fp); // 读取一个用户试试水

	printf("请输入您的账号:\n");
	sleep(1);
	scanf("%s", a.zh);

	while (1) // 在文件中找到与用户输入相同的zh
	{
		if (!strcmp(a.zh, b.zh)) // 如果读取到了相同的zh(在文件中找到了和用户输入一样的)
		{
			break;
		}
		else
		{
			if (!feof(fp)) // 继续读到文件尾
			{
				fread(&b, sizeof(Users), 1, fp);
			}
			else
			{
				printf("您输入的账号不存在!请重新输入!\n");
				sleep(1);
				fclose(fp);
				fp = NULL;
				return USERS_F;
			}
		}
	}

	do // 匹配姓名
	{
		printf("请输入您的姓名:\n");
		scanf("%s", a.name);
		if (!strcmp(a.name, b.name))
		{
			break;
		}
		else
		{
			printf("输入错误,请重新输入!\n");
		}
	} while (strcmp(a.name, b.name));

	printf("问题:%s\n", b.question); // 密保
	printf("回答:\n");
	scanf("%s", a.answer);

	if (strcmp(a.answer, b.answer) == 0)
	{
		// 更改密码
		printf("验证成功!请修改您的密码!\n");
		printf("请输入您的密码:\n");
		scanf("%s", a.mm);
		printf("请再次确认您的密码:\n");
		scanf("%s", tmp);
		if (strcmp(a.mm, tmp) == 0) // 两次密码相等
		{
			strcpy(b.mm, a.mm); // 更新用户密码
			fseek(fp, -((int)(sizeof(Users))), SEEK_CUR);
			fwrite(&b, sizeof(Users), 1, fp); // 将更新后的用户信息写入文件
			printf("密码修改成功,请登录!\n");
			sleep(1);
			fclose(fp);
			fp = NULL;
			return USERS_T;
		}
		else
		{
			printf("两次密码不匹配,请重新输入!:\n");
			fclose(fp);
			fp = NULL;
			return USERS_F;
		}
	}
	else
	{
		printf("回答错误了嗷,走你!\n");
		sleep(1);
		fclose(fp);
		fp = NULL;
		return USERS_F;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值