功能:
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",