管理员注册
#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;
}
}