C语言学生管理系统2.0

发布时间:2026/6/3 7:24:30
C语言学生管理系统2.0
一、系统说明动态增长版本信息表默认可以存放5个学生的信息信息表存满时需要进行扩容每次增加3个空间。二、流程图三、头文件StudentManagement.h#define _CRT_SECURE_NO_WARNINGS #includestdio.h #includestdlib.h #includestring.h //定义学生信息结构体 typedef struct Student { char class[20]; char number[20]; char name[20]; char score[20]; }student; //定义学生信息表结构体 typedef struct StuInfoList { student *info;//结构体指针 int n;//当前已有n个学生信息 int N;//当前信息表的最大容量,最多放N个学生信息 }list; //定义系统功能的枚举变量 enum Option { Exit,//0 Add,//1 Show,//2 Search,//3 Modify,//4 Delete//5 }; //函数声明 void Initial(list* p); void ADD(list* p); void SHOW(list* p); void SEARCH(list* p); void DELETE(list* p); void MODIFY(list* p);五、源文件1、主程序test.c#includeStudentManagement.h //动态版学生信息管理系统 //菜单函数 void menu() { printf(*************************\n); printf(**********0. 退出********\n); printf(**********1. 录入********\n); printf(**********2. 显示********\n); printf(**********3. 查找********\n); printf(**********4. 修改********\n); printf(**********5. 删除********\n); } //主函数 int main() { int input 0; list stulist;//创建学生信息表 Initial(stulist);//初始化信息表 do { menu(); printf(请选择功能); scanf(%d, input); switch (input) { case Add: printf(录入\n); ADD(stulist); break; case Show: printf(显示\n); SHOW(stulist); break; case Search: printf(查找\n); SEARCH(stulist); break; case Modify: printf(修改\n); MODIFY(stulist); break; case Delete: printf(删除\n); DELETE(stulist); break; case Exit: printf(退出\n); Destroy(stulist);//销毁信息表释放动态开辟的内存空间 system(cls);//清空 exit(0);//程序正常退出 break; default: printf(输入错误请重新选择\n); break; } system(pause); system(cls); } while (input); return 0; }2、函数StudentManagement.c#includeStudentManagement.h //学生信息表初始化函数 void Initial(list* p) { p-info (student*) calloc(5 , sizeof(student));//动态开辟5个学生信息空间 p-info (student*)malloc(5*sizeof(student));//动态开辟5个学生信息空间 p-n 0; p-N 5; } //检测信息表的当前容量增容 void checkN(list* p) { if (p-n p-N) { //增容 student *prrealloc(p-info,(p-N3)*sizeof(student)); if (pr ! NULL) { p-info pr; p-N 3; printf(增容成功\n); } else { printf(增容失败\n); } } } //1.录入函数 void ADD(list* p) { //检测信息表的当前容量 //①满增加空间 //②没满不变 checkN(p); //增加数据 printf(请输入学生的班级); scanf(%s, p-info[p-n].class); printf(请输入学生的学号); scanf(%s, p-info[p-n].number); printf(请输入学生的姓名); scanf(%s, p-info[p-n].name); printf(请输入学生的成绩); scanf(%s, p-info[p-n].score); p-n; printf(录入信息成功\n); } //2.显示函数 void SHOW(list* p) { if (p-n 0) { printf(信息表为空表\n); } else { int i 0; printf(--------------------------------------------------\n); printf(%-20s %-20s %-20s %-20s\n, 班级, 学号, 姓名, 成绩); for (i 0; i p-n; i) { printf(%-20s %-20s %-20s %-20s\n, p-info[i].class, p-info[i].number, p-info[i].name, p-info[i].score); } printf(--------------------------------------------------\n); } } //3.查找函数查找指定姓名的学生信息 void SEARCH(list* p) { char name[20]; printf(请输入要查找的学生姓名); scanf(%s, name); int i 0; for (i 0; i p-n; i) { if (strcmp(p-info[i].name, name) 0)//字符串比较 { break;//若找到则跳出if } } if (i p-n)//没找到 { printf(要查找的学生不在表中\n); } else { printf(%-20s %-20s %-20s %-20s\n, 班级, 学号, 姓名, 成绩); printf(%-20s %-20s %-20s %-20s\n, p-info[i].class, p-info[i].number, p-info[i].name, p-info[i].score); } } //4.修改函数修改指定姓名的学生信息 void MODIFY(list* p) { //输入要修改学生的名字 char name[20]; printf(请输入要修改的学生姓名); scanf(%s, name); //先查找 int i 0; for (i 0; i p-n; i) { if (strcmp(p-info[i].name, name) 0)//字符串比较 { break;//若找到则跳出if } } if (i p-n)//没找到 { printf(要修改的学生不在表中\n); } else { printf(请输入学生的班级); scanf(%s, p-info[i].class); printf(请输入学生的学号); scanf(%s, p-info[i].number); printf(请输入学生的姓名); scanf(%s, p-info[i].name); printf(请输入学生的成绩); scanf(%s, p-info[i].score); printf(修改%s的信息完成\n, name); } } //5.删除函数删除指定姓名的学生信息 void DELETE(list* p) { char name[20]; printf(请输入要删除的学生姓名); scanf(%s, name); //查找要删除的学生姓名在信息表中的位置把要删除的姓名和表中的姓名一个个对比 int i 0; for (i 0; i p-n; i) { if (strcmp(p-info[i].name, name) 0)//字符串比较 { break;//若找到则跳出if } } if (i p-n)//没找到 { printf(要删除的学生不在表中\n); } else { //删除数据 //找到的学生信息下标为i,即info[i] //要删除的就是info[i],用info[i1]覆盖info[i] int j 0; for (j i; j p-n - 1; j) { p-info[j] p-info[j 1]; } p-n--; printf(删除%s的信息成功\n, name); } } //销毁信息表释放动态开辟的内存空间 void Destroy(list* p) { free(p-info); p-info NULL; }