一、系统说明
1、制作一个学生信息管理系统。
2、学生信息包括:班级、学号、姓名、(C语言)成绩等。
3、实训信息增加、删除、查找、修改、显示、退出等功能。
4、系统使用方法便捷、简单、功能容易实现。
二、流程图
三、实现效果
#程序可复制直接使用
四、头文件:StudentManagement.h
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //定义学生信息结构体 typedef struct Student { char class[20]; char number[20]; char name[20]; char score[20]; }student; //定义学生信息表结构体 typedef struct StuInfoList { student info[1000];//结构体数组:用于存放1000个学生的信息 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
#include"StudentManagement.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"); system("cls");//清空 exit(0);//程序正常退出 break; default: printf("输入错误,请重新选择\n"); break; } system("pause"); system("cls"); }while (input); return 0; }2、函数:StudentManagement.c
#include"StudentManagement.h" //学生信息表初始化函数 void Initial(list* p) { memset(p->info, 0, sizeof(p->info));//memset设置内存,将info[1000]清0 p->n = 0;//设置信息表最初只有0个元素 } //1.录入函数 void ADD(list* p) { if (p->n == 1000) { printf("信息表已满,无法再录入\n"); } else { 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 = FindName(p, name); //if (i == -1)//没找到 //{ // printf("要查找的学生不在表中\n"); //} 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[i+1]覆盖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); } } //根据姓名查找--为了实现查找、修改、删除,不需要用户看到,不用在头文件中申明 int FindName(list* p, char name[20]) { int i = 0; for (i = 0; i < p->n; i++) { if (strcmp(p->info[i].name, name) == 0)//字符串比较 { return i;//若找到,返回下标 } } //没找到 return -1; }