功能:
1.登录
2.注册
3.添加学生
4.统计学生信息
5.打印学生信息
6.查询学生信息
7.修改学生信息
8.删除学生(逻辑删除)
9.退出
注意:里面些许功能只提供了接口没有完善
密码只做了掩码没有做回退
菜单展示图:
#ifndef STUDENT_H_
#define STUDENT_H_
#include <stdio.h>
typedef struct tagUser
{
char number[50];
char pwd[50];
int power; //0普通 1超级
}TUser,*PTUser;
typedef struct tagUserMgr
{
PTUser *userArr;
int userLen;
int userMaxlen;
}TUserMgr,*PTUserMgr;
//学生 动态数组
typedef struct tagStudent
{
char Id[100]; //学号
int age; //年龄
char name[100];
char sex[10];
char place[100]; //籍贯
char fam[100]; //名族
int bflag; //删除索引
char majorclass[100]; //专业班级
char grade[100]; //年级
char college[100]; //学院
}TStudent, * PTStudent;
//专业班级 动态数组
typedef struct tagStudentMgr
{
PTStudent stuArr;
int len;
int Maxlen;
}TStuMgr, * PTStuMgr;
#endif
.c文件
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<windows.h>
#include "student.h"
struct tagStudentMgr* stumgr;
static struct tagUserMgr* usermgr;
/********************************用户管理初始化函数************************************/
//初始化用户 动态数组
static void InitUserMgr()
{
usermgr = malloc(sizeof(TUserMgr));
usermgr->userMaxlen = 100;
usermgr->userLen = 0;
usermgr->userArr = malloc(sizeof(PTUser) * 100);
}
/********************************学生管理初始化函数************************************/
//void 不能return void 需要传参
//初始化学生
static PTStudent InitStudent()
{
PTStudent stu = malloc(sizeof(TStudent));
stu->age = -1;
//默认未删除
stu->bflag = 1;
memset(stu->Id, 0, sizeof(char) * 100);
memset(stu->name, 0, sizeof(char) * 100);
memset(stu->sex, 0, sizeof(char) * 10);
memset(stu->fam, 0, sizeof(char) * 100);
memset(stu->place, 0, sizeof(char) * 100);
memset(stu->majorclass, 0, sizeof(char) * 100);
memset(stu->grade, 0, sizeof(char) * 100);
memset(stu->college, 0, sizeof(char) * 100);
return stu;
}
static void InitStuentMgr()
{
stumgr = malloc(sizeof(TStuMgr));
stumgr->len = 0;
stumgr->Maxlen = 100;
stumgr->stuArr = malloc(sizeof(TStudent)*100);
}
/******************************操作函数********************************************/
//mgr 清屏函数
static void MgrClear()
{
printf("\033[18;20H ");
printf("\033[19;20H ");
printf("\033[20;20H ");
printf("\033[21;20H ");
printf("\033[22;20H ");
printf("\033[23;20H ");
printf("\033[24;20H ");
printf("\033[25;20H ");
printf("\033[26;20H ");
printf("\033[27;20H ");
printf("\033[28;20H ");
printf("\033[29;20H ");
printf("\033[30;20H ");
printf("\033[31;20H ");
printf("\033[32;20H ");
printf("\033[33;20H ");
printf("\033[34;20H ");
printf("\033[35;20H ");
printf("\033[36;20H ");
printf("\033[37;20H ");
}
/********************************学生管理函数************************************/
//删除就是把索引改为0 统一主键为学号
//直接插入学生
static void AddStudentMgr(char* Id, int age, char* name, char* sex,
char* place, char* fam, char* majorclass, char* grade, char* college)
{
InitStudent();
if (stumgr == NULL)
{
return;
}
//memset(stumgr->stuArr[stumgr->len].Id, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].name, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].sex, 0, sizeof(char) * 2);
//memset(stumgr->stuArr[stumgr->len].place, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].fam, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].majorclass, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].grade, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].college, 0, sizeof(char) * 100);
//printf("%x=--=\n", stumgr->stuArr+stumgr->len);
stumgr->stuArr[stumgr->len].age = age;
stumgr->stuArr[stumgr->len].bflag = 1;
strcpy(stumgr->stuArr[stumgr->len].Id, Id);
strcpy(stumgr->stuArr[stumgr->len].name, name);
strcpy(stumgr->stuArr[stumgr->len].sex, sex);
strcpy(stumgr->stuArr[stumgr->len].place, place);
strcpy(stumgr->stuArr[stumgr->len].fam, fam);
strcpy(stumgr->stuArr[stumgr->len].majorclass, majorclass);
strcpy(stumgr->stuArr[stumgr->len].grade, grade);
strcpy(stumgr->stuArr[stumgr->len].college, college);
if (stumgr->len == stumgr->Maxlen)
{
int nlenMax = stumgr->Maxlen * 2;
PTStudent p = malloc(sizeof(TStudent) * nlenMax);
for (int i = 0; i < stumgr->Maxlen; i++)
{
p[i] = stumgr->stuArr[i];
}
free(stumgr->stuArr);
stumgr->stuArr = p;
stumgr->Maxlen = nlenMax;
}
stumgr->len++;
}
//插入学生
static void AddStudent()
{
bf:
;
while (1)
{
int bflag = 0;
InitStudent();
if (stumgr == NULL)
{
return;
}
printf("\033[18;20H\033[36m=========================================================================\033[0m");
printf("\033[26;20H\033[36m=========================================================================\033[0m");
printf("\033[19;20H请输入增加的学生的信息:");
//memset(stumgr->stuArr[stumgr->len].Id, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].name, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].sex, 0, sizeof(char) * 2);
//memset(stumgr->stuArr[stumgr->len].place, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].fam, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].majorclass, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].grade, 0, sizeof(char) * 100);
//memset(stumgr->stuArr[stumgr->len].college, 0, sizeof(char) * 100);
char Id[100]; //学号
int age; //年龄
char name[100];
char sex[10];
char place[100]; //籍贯
char fam[100]; //名族
char majorclass[100]; //专业班级
char grade[100]; //年级
char college[100]; //学院
printf("\033[36m\033[20;20H|学号|\033[0m");
printf("\033[36m\033[20;44H|年龄|\033[0m");
printf("\033[36m\033[20;68H|姓名|\033[0m");
printf("\033[36m\033[21;20H|性别|\033[0m");
printf("\033[36m\033[21;44H|籍贯|\033[0m");
printf("\033[36m\033[21;68H|名族|\033[0m");
printf("\033[36m\033[22;20H|专业班级|\033[0m");
printf("\033[36m\033[22;44H|年级|\033[0m");
printf("\033[36m\033[22;68H|学院|\033[0m");
printf("\033[?25h");
COORD coord;
coord.X = 26;
coord.Y = 19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &Id);
coord.X = 50;
coord.Y = 19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%d", &age);
coord.X = 74;
coord.Y = 19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &name);
coord.X = 26;
coord.Y = 20;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &sex);
coord.X = 50;
coord.Y = 20;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &place);
coord.X = 74;
coord.Y = 20;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &fam);
coord.X = 30;
coord.Y = 21;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &majorclass);
coord.X = 50;
coord.Y = 21;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &grade);
coord.X = 74;
coord.Y = 21;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &college);
stumgr->stuArr[stumgr->len].age = age;
stumgr->stuArr[stumgr->len].bflag = 1;
strcpy(stumgr->stuArr[stumgr->len].Id, Id);
strcpy(stumgr->stuArr[stumgr->len].name, name);
strcpy(stumgr->stuArr[stumgr->len].sex, sex);
strcpy(stumgr->stuArr[stumgr->len].place, place);
strcpy(stumgr->stuArr[stumgr->len].fam, fam);
strcpy(stumgr->stuArr[stumgr->len].majorclass, majorclass);
strcpy(stumgr->stuArr[stumgr->len].grade, grade);
strcpy(stumgr->stuArr[stumgr->len].college, college);
if (stumgr->len == stumgr->Maxlen)
{
int nlenMax = stumgr->Maxlen * 2;
PTStudent p = malloc(sizeof(TStudent) * nlenMax);
for (int i = 0; i < stumgr->Maxlen; i++)
{
p[i] = stumgr->stuArr[i];
}
free(stumgr->stuArr);
stumgr->stuArr = p;
stumgr->Maxlen = nlenMax;
}
stumgr->len++;
printf("\033[23;20H学号:%s 年龄:%d 姓名:%s 性别:%s 籍贯:%s 名族:%s 专业班级:%s 年级:%s 学院:%s",
Id,
age,
name,
sex,
place,
fam,
majorclass,
grade,
college);
printf("\033[24;20H\033[36m添加学生成功!!!!\033[0m");
printf("\033[25;20H\033[31m按z退出,按其他键继续添加\033[0m");
printf("\033?25l");
char c = _getch();
switch (c)
{
case 'z':
bflag = 1;
break;
default:
MgrClear();
goto bf;
break;
}
if (bflag)
{
break;
}
}
//Sleep(2000);
}
//根据学号查找学生
static void FindStuById()
{
while (1)
{
int bflag = 0;
int b = 0;
char number[100] = { 0 };
printf("\033[18;20H\033[36m=========================================================================\033[0m");
printf("\033[26;20H\033[36m=========================================================================\033[0m");
printf("\033[19;20H请输入学生的学号:");
printf("\033[20;20H\033[36m|学号|\033[0m");
printf("\033[?25h");
COORD coord;
coord.X = 26;
coord.Y = 19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &number);
printf("\033[?25l");
TStudent stu;
for (int i = 0; i < stumgr->len; i++)
{
if (strcmp(stumgr->stuArr[i].Id, number) == 0)
{
b = 1;
stu = stumgr->stuArr[i];
break;
}
}
if (b == 0)
{
printf("\033[21;20H\033[31m未找到改学生请重新输入!\033[0m");
Sleep(1000);
MgrClear();
continue;
}
printf("\033[21;20H|学号|%s\033[21;38H|年龄|%d\033[21;58H|姓名|%s",
stu.Id, stu.age, stu.name);
printf("\033[22;20H|籍贯|%s\033[22;38H|名族|%s\033[22;58H|性别|%s",
stu.place,
stu.fam,
stu.sex);
printf("\033[23;20H|专业班级|%s\033[23;38H|年级|%s\033[22;58H|学院|%s",
stu.majorclass,
stu.grade,
stu.college);
printf("\033[24;20H\033[35m[是否删除(0->删除)/(1->正常)]==>%d\033[0m", stu.bflag);
printf("\033[25;20H\033[34m输入z返回主菜单,其他任意键继续查找\033[0m");
char c = _getch();
switch (c)
{
case 'z':bflag = 1;
break;
default:
MgrClear();
continue;
break;
}
if (bflag)
{
break;
}
}
}
//查看学生 索引为0的不显示
static void PrintStu()
{
while (1)
{
int bflag = 0;
printf("\033[18;20H\033[36m=========================================================================\033[0m");
COORD coord;
coord.X = 20;
coord.Y = 18;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("所有学生信息为:\n");
if (stumgr == NULL)return;
for (int i = 0; i < stumgr->len; i++)
{
TStudent stu = stumgr->stuArr[i];
coord.X = 20;
++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[36m------------------------------------------------------------------------\033[0m");
coord.X = 20;
++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("|学号|%s", stu.Id);//年龄:%d 姓名:%s 性别:%s 籍贯:%s 名族:%s 专业班级:%s 年级:%s 学院:%s\n",
coord.X = 44;
//++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("|年龄|%d", stu.age);
coord.X = 68;
//++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("|性别|%s", stu.sex);
coord.X = 20;
++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("|籍贯|%s", stu.place);
coord.X = 44;
//++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("|名族|%s", stu.fam);
coord.X = 68;
//++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("|专业班级|%s", stu.majorclass);
coord.X = 20;
++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("|年级|%s", stu.grade);
coord.X = 44;
//++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("|学院|%s", stu.college);
coord.X = 68;
//++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("[是否删除]=>%d", stu.bflag);
}
coord.X = 20;
++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[36m=========================================================================\033[0m");
coord.X = 20;
++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[31m按任意按键退出!!!\033[0m");
printf("\033[?25l");
char c = _getch();
switch (c)
{
default:bflag = 1;
break;
}
if (bflag)
{
break;
}
}
system("cls");
}
//删除就是把学生的状态改为0
static void DeleteStu()
{
while (1)
{
int bflag = 0;
int b = 0;
if (stumgr == NULL) return;
printf("\033[?25h");
char Id[100] = { 0 };
printf("\033[18;20H\033[36m=========================================================================\033[0m");
printf("\033[23;20H\033[36m=========================================================================\033[0m");
printf("\033[19;20H请输入删除的学生的学号:");
printf("\033[36m\033[20;20H|学号|\033[0m");
COORD coord;
coord.X = 26;
coord.Y = 19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &Id);
printf("\033[?25l");
for (int i = 0; i < stumgr->len; i++)
{
if (strcmp(stumgr->stuArr[i].Id, Id) == 0)
{
stumgr->stuArr[i].bflag = 0;
b = 1;
break;
}
}
if (b)
{
printf("\033[21;20H\033[31m删除成功!!!!\033[0m");
}
else
{
printf("\033[21;20H\033[31m输入的学号无效请重新输入!!!\033[0m");
Sleep(1000);
MgrClear();
continue;
}
printf("\033[22;20H按z退出,按其他键继续删除");
char c = _getch();
switch (c)
{
case 'z':
bflag = 1;
break;
default:
MgrClear();
break;
}
if (bflag)
{
break;
}
}
}
// 修改学生信息
static void ChangeStu()
{
while (1)
{
if (stumgr == NULL)
{
return;
}
COORD coord;
int bflag = 0;
printf("\033[18;20H\033[36m=========================================================================\033[0m");
printf("\033[31;20H\033[36m=========================================================================\033[0m");
printf("\033[19;20H请输入要修改的学生的学号:");
printf("\033[36m\033[20;20H|学号|\033[0m");
char Id[100] = { 0 };
coord.X = 26;
coord.Y = 19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[?25h");
scanf("%s", &Id);
printf("\033[?25l");
for (int i = 0; i < stumgr->len; i++)
{
TStudent stu = stumgr->stuArr[i];
if (strcmp(stumgr->stuArr[i].Id, Id) == 0)
{
printf("\033[21;20H|学号|%s\033[21;38H|年龄|%d\033[21;58H|姓名|%s",
stu.Id, stu.age, stu.name);
printf("\033[22;20H|籍贯|%s\033[22;38H|名族|%s\033[22;58H|性别|%s",
stu.place,
stu.fam,
stu.sex);
printf("\033[23;20H|专业班级|%s\033[23;38H|年级|%s\033[22;58H|学院|%s",
stu.majorclass,
stu.grade,
stu.college);
printf("\033[24;20H\033[35m[是否删除(0->删除)/(1->正常)]==>%d\033[0m", stu.bflag);
printf("\033[25;20H\033[36m=========================================================================\033[0m");
}
}
printf("\033[26;20H请输入要修改的内容");
printf("\033[27;20H|1->状态|\033[27;38H|2->年龄|\033[27;58H|3->姓名|");
printf("\033[28;20H|3->籍贯|\033[28;38H|4->名族|\033[28;58H|5->性别|");
printf("\033[29;20H|6->专业班级|\033[29;38H|7->年级|\033[29;58H|8->学院|");
printf("\033[30;20H\033[31m输入1->8选择修改的内容,输入0重新搜索,输入z退出修改!!!");
char c = _getch();
switch (c)
{
// TODO 修改学生的8个信息
case '1':
break;
case 'z':
bflag = 1;
break;
case '0':
MgrClear();
continue;
break;
default:
break;
}
if (bflag)
{
break;
}
}
}
/********************************用户管理函数************************************/
//插入用户
static int AddUser(int power, char* number, char* pwd)
{
PTUser user = malloc(sizeof(TUser));
//printf("%x==\n", user);
memset(user->number, 0, 50);
memset(user->pwd, 0, 50);
strcpy(user->number, number);
strcpy(user->pwd, pwd);
user->power = power;
if (usermgr == NULL || user == NULL)
{
return 0;
}
//扩容
/*if (usermgr->userLen == usermgr->userMaxlen)
{
int nlenMax = usermgr->userMaxlen * 2;
PTUser* p = malloc(sizeof(PTUser) * nlenMax);
for (int i = 0; i < usermgr->userLen; i++)
{
p[i] = usermgr->userArr[i];
}
free(usermgr->userArr);
usermgr->userArr = p;
usermgr->userMaxlen = nlenMax;
}*/
usermgr->userArr[usermgr->userLen++] = user;
//usermgr->userLen++;
return 1;
}
//管理员添加用户
static void MgrAddUser()
{
while (1)
{
int bflag = 0;
printf("\033[?25h");
printf("\033[18;20H请输入新增加的用户的信息(权限0->普通用户 1->管理员):");
printf("\033[20;20H\033[31m|权限|\033[0m");
printf("\033[21;20H\033[36m|账号|\033[0m");
printf("\033[22;20H\033[36m|密码|\033[0m");
COORD coord;
coord.X = 26;
coord.Y = 19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
int power = 0;
char number[50] = { 0 };
char pwd[50] = { 0 };
scanf("%d", &power);
if (power >= 0 && power <= 1)
{
bflag = 1;
}
if (bflag == 0)
{
printf("\033[?25l");
printf("\033[24;20H增加用户失败,请输入正确权限!");
Sleep(1000);
MgrClear();
continue;
}
printf("\033[?25h");
coord.X = 26;
coord.Y = 20;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &number);
coord.X = 26;
coord.Y = 21;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &pwd);
printf("\033[?25l");
int p = AddUser(power, number, pwd);
if (p)
{
printf("\033[24;20H增加用户成功,请继续操作!");
Sleep(500);
break;
}
}
}
//根据用户账号查找用户
static void FindUserByNumber()
{
while (1)
{
int bflag = 0;
int b = 0;
COORD coord;
printf("\033[18;20H\033[36m=========================================================================\033[0m");
printf("\033[23;20H\033[36m=========================================================================\033[0m");
char number[50] = { 0 };
printf("\033[19;20H请输入需要查找的用户的账号:");
printf("\033[36m\033[20;20H|账号|\033[0m");
printf("\033[?25h");
coord.X = 26;
coord.Y = 19;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", number);
printf("\033[?25l");
for (int i = 0; i < usermgr->userLen; i++)
{
if (strcmp(usermgr->userArr[i]->number, number) == 0)
{
b = 1;
printf("\033[21;20H用户:%s 密码:%s 权限:%d",
usermgr->userArr[i]->number,
usermgr->userArr[i]->pwd,
usermgr->userArr[i]->power);
}
}
if (b == 0)
{
printf("\033[21;20H没有此用户,请重新输入!");
Sleep(1000);
MgrClear();
continue;
}
printf("\033[22;20H\033[34m输入z返回主菜单,输入其他任意键继续查找\033[0m");
char c = _getch();
switch (c)
{
case 'z':bflag = 1;
break;
default:MgrClear();
continue;
break;
}
if (bflag)
{
break;
}
}
}
//根据用户账号修改用户权限 0只读 1可读可写
static void UpdateUserPower()
{
while (1)
{
int bflag = 0;
if (usermgr == NULL)
{
return;
}
char number[50] = { 0 };
printf("\033[18;20H\033[36m=========================================================================\033[0m");
printf("\033[26;20H\033[36m=========================================================================\033[0m");
printf("\033[19;20H请输入被修改的用户的账号:");
COORD coord;
coord.Y = 19;
coord.X = 26;
printf("\033[?25h");
printf("\033[36m\033[20;20H|账号|\033[0m");
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &number);
printf("\033[?25l");
PTUser user = NULL;
for (int i = 0; i < usermgr->userLen; i++)
{
if (strcmp(usermgr->userArr[i]->number, number) == 0)
{
user = usermgr->userArr[i];
printf("\033[21;20H用户:%s 密码:%s 权限:%d",
usermgr->userArr[i]->number,
usermgr->userArr[i]->pwd,
usermgr->userArr[i]->power);
bflag = 1;
break;
}
}
//没找到
if (bflag == 0)
{
printf("\033[21;20H没有找到改用户,请重新输入!");
Sleep(1000);
MgrClear();
continue;
}
//找到了
printf("\033[22;20H请输入需要修改的权限(0->只读 1->可读可写)");
printf("\033[36m\033[23;20H|权限|\033[0m");
int power = -1;
while (1)
{
printf("\033[?25h");
coord.X = 26;
coord.Y = 22;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%d", &power);
printf("\033[?25l");
if (power > 1 || power < 0)
{
printf("\033[24;20H请输入正确的权限索引(0->只读)/(1->可读可写)");
Sleep(1000);
printf("\033[36m\033[23;20H|权限| \033[0m");
printf("\033[24;20H ");
continue;
}
break;
}
printf("\033[?25l");
//修改用户权限
user->power = power;
if (power == 1)
{
printf("\033[24;20H\033[31m修改用户|%s|的权限为可写可读成功\033[0m", user->number);
}
else
{
printf("\033[24;20H\033[31m修改用户|%s|的权限为只读成功\033[0m", user->number);
}
printf("\033[25;20H\033[31m按z退出,按其他键继续修改!!!\033[0m");
char c = _getch();
switch (c)
{
case 'z':bflag = 1;
break;
default:
MgrClear();
continue;
break;
}
if (bflag)
{
break;
}
}
}
//查看用户
static void PrintUser()
{
while (1)
{
int bflag = 0;
COORD coord;
coord.X = 19;
coord.Y = 18;
if (usermgr == NULL)
{
return;
}
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[31m=========================================================================\033[0m\n");
coord.X = 19;
coord.Y += 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[20;20H所有用户信息如下(权限:0->只读 1->可读可写):\n");
for (int i = 0; i < usermgr->userLen; i++)
{
++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("用户:%s 密码:%s 权限:%d\n",
usermgr->userArr[i]->number,
usermgr->userArr[i]->pwd,
usermgr->userArr[i]->power);
}
++coord.Y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
++coord.Y;
printf("\033[31m按任意键退出!!!!\033[0m");
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf("\033[31m=========================================================================\033[0m\n");
char c = _getch();
switch (c)
{
default:
bflag = 1;
break;
}
if (bflag)
{
break;
}
}
}
//删除用户 根据账号
static void DeleteUser(char* number)
{
if (usermgr == NULL)
{
return;
}
int k = 0;
for (int i = 0; i < usermgr->userLen; i++)
{
if (strcmp(usermgr->userArr[i]->number, number) == 0)
{
k = i;
break;
}
}
for (int i = k; i < usermgr->userLen; i++)
{
usermgr->userArr[i] = usermgr->userArr[i + 1];
}
usermgr->userLen--;
}
//二进制写入
static void FileWrite()
{
FILE* pfile = fopen("Student.bin", "wb");
if (usermgr == NULL)
{
return;
}
fwrite(usermgr, 1, sizeof(TUserMgr), pfile);
printf("存档成功!\n");
fclose(pfile);
Sleep(1000);
}
//二进制读出
static void FileRead()
{
FILE* pfile = fopen("Student.bin", "rb");
if (usermgr == NULL)
{
return;
}
fread(usermgr, 1, sizeof(TUserMgr), pfile);
fclose;
}
//管理员菜单 16 20 列 截至
static void MgrMenu()
{
//主要逻辑 先有一个用户作为超级管理员然后这个用户增加别的用户
//打开界面先登录 登陆后匹配身份和权限
//显示用户身份 管理员/普通用户 管理员可增加增加用户信息 管理员可修改学生信息 普通用户只可以查看
while (1)
{
int bflag = 0;
printf("\033[?25h");
printf("\033[8;20H\033[36m===========================学生管理系统(管理员)==========================\033[0m");
printf("\033[10;22H 1->增加用户");
printf("\033[10;42H 2->查看所有用户");
printf("\033[10;62H 3->查找用户(根据账号)");
printf("\033[11;22H 4->修改权限");
printf("\033[11;42H 5->增加学生信息");
printf("\033[11;62H 6->查找学生(根据学号)");
printf("\033[12;22H 7->查找所有学生");
printf("\033[12;42H 8->删除学生(学号)");
printf("\033[12;62H 9->修改学生信息");
printf("\033[13;22H 0->修改登录密码");
printf("\033[13;42H z->退出系统");
printf("\033[14;23H请选择内容->");
printf("\033[16;20H\033[36m=========================================================================\033[0m");
printf("\033[?25l");
char c = _getch();
printf("\033[?25l");
switch (c)
{
case '1':
MgrClear();
MgrAddUser();
MgrClear();
break;
case '2':
MgrClear();
PrintUser();
MgrClear();
break;
case '3':
MgrClear();
FindUserByNumber();
MgrClear();
break;
case '4':
MgrClear();
UpdateUserPower();
MgrClear();
break;
case '5':
MgrClear();
AddStudent();
MgrClear();
break;
case '6':
MgrClear();
FindStuById();
MgrClear();
break;
case '7':
MgrClear();
PrintStu();
MgrClear();
break;
case '8':
MgrClear();
DeleteStu();
MgrClear();
break;
case '9':
MgrClear();
ChangeStu();
MgrClear();
break;
case '0':
MgrClear();
MgrClear();
break;
case 'z':
bflag = 1;
break;
default:
break;
}
printf("\033[?25l");
if (bflag)
{
system("cls");
printf("\033[10;45H\033[33m***感谢使用***\033[0m");
printf("\033[20;30H ");
Sleep(2000);
break;
}
}
}
//普通用户菜单
static void NormalMeun()
{
while (1)
{
int bflag = 0;
printf("\033[?25h");
printf("\033[8;20H\033[36m==========================学生管理系统(普通用户)=========================\033[0m");
printf("\033[10;22H 1->查找学生(根据学号)");
printf("\033[10;48H 2->查找所有学生");
printf("\033[10;74H 3->修改学生信息");
printf("\033[12;22H 4->修改登录密码");
printf("\033[12;48H z->退出系统");
printf("\033[14;22H请选择内容->");
printf("\033[16;20H\033[36m=========================================================================\033[0m");
printf("\033[?25l");
char c = _getch();
switch (c)
{
case '1':FindStuById();
break;
case '2':PrintStu();
break;
case '3':ChangeStu();
break;
case '4':
break;
case 'z':
bflag = 1;
break;
default:
break;
}
if (bflag)
{
system("cls");
printf("\033[10;45H\033[33m***感谢使用***\033[0m");
printf("\033[20;30H ");
Sleep(2000);
break;
}
}
}
//登录菜单
static void LoadUser()
{
int k = 0;
while (1)
{
int time = 0;
int bflag = 0;
//X 列 Y 行
COORD coord;
printf("\033[?25h");
//先有一个超级用户
char number[50] = { 0 };
char pwd[50] = { 0 };
printf("\033[8;20H==========================欢迎登录学生管理系统==========================\n");
printf("\033[10;49H\033[31m***用户登录***\033[0m");
printf("\033[9;21H|");
printf("\033[10;21H|");
printf("\033[11;21H|");
printf("\033[12;21H|");
printf("\033[13;21H|");
printf("\033[14;21H|");
printf("\033[15;21H|");
printf("\033[16;21H|");
printf("\033[9;90H|");
printf("\033[10;90H|");
printf("\033[11;90H|");
printf("\033[12;90H|");
printf("\033[13;90H|");
printf("\033[14;90H|");
printf("\033[15;90H|");
printf("\033[16;90H|");
printf("\033[17;20H========================================================================\n");
printf("\033[13;58H ");
printf("\033[15;58H ");
printf("\033[13;52H\033[36m|账号|\033[0m");
printf("\033[15;52H\033[36m|密码|\033[0m");
coord.X = 58;
coord.Y = 12;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &number);
coord.X = 58;
coord.Y = 14;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
COORD coord1;
coord1.X = 58;
coord1.Y = 14;
int i = 0;
for ( i = 0; i < 50; i++)
{
pwd[i] = _getch();
if (pwd[i]=='\r')
{
break;
}
coord1.X += 1 ;
coord1.Y = 14;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord1);
printf("*");
}
pwd[i] = '\0';
/*coord.X = 58;
coord.Y = 14;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
scanf("%s", &pwd);*/
for (int i = 0; i < usermgr->userLen; i++)
{
if ((strcmp(usermgr->userArr[i]->number, number) == 0) &&
(strcmp(usermgr->userArr[i]->pwd, pwd) == 0))
{
k = i;
printf("\033[?25l");
system("cls");
printf("\033[10;35H验证成功真在登录!!!!!!!!!!");
bflag = 1;
Sleep(1000);
printf("\033[10;35H ");
break;
}
}
if (bflag)
{
break;
}
printf("\033[20;35H输入的密码错误请重新登录!!!!!!!!!!!");
time++;
Sleep(1000);
printf("\033[20;35H ");
if (time == 3)
{
system("cls");
printf("\033[5;35H\033[31m输入密码错误超过3次不可再登录\033[0m");
return;
}
}
if (usermgr->userArr[k]->power == 1)
{
MgrMenu();
}
if (usermgr->userArr[k]->power == 0)
{
NormalMeun();
}
}
/**********************************************************************************/
int main()
{
printf("\033[?25l");
InitUserMgr(usermgr);
InitStuentMgr(stumgr);
AddUser(1, "123456", "111111");
AddUser(1, "221975", "222222");
AddUser(0, "852456", "333333");
AddStudentMgr("427", 21, "张三", "男", "邵阳", "汉族", "软工四班", "2018", "计算机学院");
AddStudentMgr("428", 22, "李四", "男", "邵阳", "汉族", "软工四班", "2018", "计算机学院");
//AddStudentMgr("429", 23, "王五", "女", "邵阳", "汉族", "软工四班", "2018", "计算机学院");
//printf("%s %s ", usermgr->userArr[usermgr->userLen]->number, usermgr->userArr[usermgr->userLen]->pwd);
LoadUser();
//MgrMenu();
//PrintUser();
//FileWrite();
//FileRead();
//PrintUser();
/*UpdateUserPower("123456", 1);
PrintUser();*/
//InitStudent();
//InitStuentMgr();
//PrintStu();
//DeleteStu("0");
//PrintStu();
return 0;
}