//学生管理系统 #include#include #include #define N 50 void menu(); void help(); void next(); void add_student(); void search_student(); void delete_student(); void display_student(); void modify_student(); void save_student(); void flush_student(); int peo_num = 0; typedef struct STU { char num[100]; //学号 char name[100]; //姓名 char sex[10]; //性别 int age; //年龄 float score[3]; //成绩 }student; student stu[N]; int main() { int number = 0; while(1) { menu(); printf("请输入菜单编号:"); scanf("%d", &number); switch(number) { case 1: help(); break; //使用帮助 case 2: add_student(); break; //添加学生 case 3: search_student(); break; //查询学生 case 4: delete_student(); break; //删除学生 case 5: save_student(); break; //保存学生 case 6: display_student();break; //展示所有学生 case 7: modify_student(); break; //修改学生信息 case 8: flush_student(); break; //刷新学生信息 case 9: exit(0); break; //退出 default: next(); break; } } } void menu() //显示菜单 { system("cls"); printf("n"); printf("********************************************************************************************n"); printf("* 学生信息管理系统 *n"); printf("********************************************************************************************n"); printf("****************************************系统功能菜单****************************************n"); printf("--------------------------------------------------------------------------------------------n"); printf("********************************************************************************************n"); printf("**** 1、使用帮助 **** 2、增加学生信息 ****n"); printf("********************************************************************************************n"); printf("**** 3、查询学生信息 **** 4、删除学生信息 ****n"); printf("********************************************************************************************n"); printf("**** 5、保存当前信息 **** 6、显示当前信息 ****n"); printf("********************************************************************************************n"); printf("**** 7、修改学生信息 **** 8、刷新学生信息 ****n"); printf("********************************************************************************************n"); printf("**** 9、退出系统 **** ====》待开发模块《==== ****n"); printf("********************************************************************************************n"); printf("--------------------------------------------------------------------------------------------n"); } //使用帮助 void help() { system("cls"); printf("n 这是一个学生管理系统,为方便您更快了解它,请先阅读以下注意事项: n"); printf("n 注意事项: n"); printf("n 1、请根据提示进行操作! n"); printf("n 2、初次使用请先选择增加学生信息! n"); printf("n 3、修改或者增加学生信息后切记保存! n"); printf("n 4、如果数据有错误,请先修改再保存! n"); printf("n 5、若您之前使用过,下次进入系统请先刷新学生信息! n"); printf("n 6、在添加学生时,用两个字符代表不同的性别,比如男用‘M’代替,女用‘W’代替!n"); printf("n 7、保存或者刷新时,输入的文件名后缀请使用.txt,比如: stu.txt,系统会在源程序n"); printf("n “学生管理系统.exe”的相同目录建立一个.txt文件来保存学生信息,您可以查看n"); printf("n 该文件,但非专业人员不要轻易改动,否则会造成刷新数据异常或刷新失败! n"); printf("n 8、学生信息包括:姓名、学号、性别、年龄、C语言成绩、高数成绩、英语成绩等! n"); printf("n 9、使用遇到任何问题请与我们联系,电话:110、119、120n"); printf("n 10、最后感谢您的使用! n"); system("pause"); //让系统暂停 } //待开发模块 void next() { system("cls"); printf("n"); printf("********************************************************************************************n"); printf("**** ====》此模块待开发《==== ****n"); printf("********************************************************************************************n"); system("pause"); //让系统暂停 } //增加学生 void add_student() { int m; //添加人员数 printf("n请输入待添加的学生人数:"); scanf("%d", &m); int j = 1; while(m--) { int flag = 1; //用于判断学号是不是重复的标志位 如果重复则会重新输入 printf("%dn", peo_num); while(flag != 0) { flag = 0; printf("n请输入第%d位学生的学号:", j); scanf("%s", &stu[peo_num].num); //用gets可以输入空格 这里必须有值0-9 for(int k = 0; k < peo_num; k++) { if(strcmp(stu[peo_num].num, stu[k].num) == 0) { printf("n该学号已存在,请重新输入!!n"); flag = 1; break; } } } printf("n请输入第%d位学生的姓名:", j); getchar(); //第一次使用gets时需要清空缓存 // fflush(stdin); //第一次使用gets时需要清空缓存 gets(stu[peo_num].name); printf("n请输入第%d位学生的性别:", j); gets(stu[peo_num].sex); printf("n请输入第%d位学生的年龄:", j); scanf("%d", &stu[peo_num].age); printf("n请输入第%d位学生C语言成绩:", j); scanf("%f", &stu[peo_num].score[0]); printf("n请输入第%d位学生高等数学成绩:", j); scanf("%f", &stu[peo_num].score[1]); printf("n请输入第%d位学生大学英语成绩:", j); scanf("%f", &stu[peo_num].score[2]); j++; peo_num++; } printf("添加成功!"); system("pause"); } //查询学生信息 void search_student() { system("cls"); int label = 0; //查询标签 char s1[100]; //查询输入的信息 printf("********************************************************************************************n"); printf("*-------------------------------------1、按学号查询----------------------------------------*n"); printf("*-------------------------------------2、按姓名查询----------------------------------------*n"); printf("*-------------------------------------3、退出本菜单----------------------------------------*n"); printf("********************************************************************************************n"); while(1) { int flag = 0; printf("n请输入要执行的操作序号:"); scanf("%d", &label); switch(label) { case 1: printf("n请输入要查询的学号:"); scanf("%s", s1); if(strlen(s1) == 0) break; for(int i = 0; i < peo_num; i++) { if(strcmp(stu[i].num, s1) == 0) { flag = 1; printf("n学号tt姓名tt性别tt年龄ttC语言tt高数tt英语"); printf("n%stt%stt%stt%dtt%.2ftt%.2ftt%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } } break; case 2: printf("n请输入要查询的姓名:"); scanf("%s", s1); for(int i = 0; i < peo_num; i++) { if(strcmp(stu[i].name, s1) == 0) { flag = 1; printf("n学号tt姓名tt性别tt年龄ttC语言tt高数tt英语"); printf("n%stt%stt%stt%dtt%.2ftt%.2ftt%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } } break; case 3: return ; default : printf("n请在1---3之间输入!");break; } if(flag == 0) printf("n找不到该学生,请检查后重新输入!!"); } } //删除学生 void delete_student() { char s1[100]; printf("n请输入要删除的学号:"); scanf("%s", s1); int flag = 0; for(int i = 0; i < peo_num; i++) { if(strcmp(stu[i].num, s1) == 0) { flag = 1; for(int j = i; j < peo_num - 1; j++) { stu[j] = stu[j+1]; } } if(flag == 1) break; } if(flag == 0) printf("n未找到该学生!"); if(flag == 1) { printf("n删除成功!!"); memset(&stu[peo_num], 0, sizeof(student)); peo_num--; } system("pause"); } //展示所有学生信息 void display_student() { if(peo_num == 0) printf("n现在暂无学生信息,请先添加学生信息!"); else { printf("n班级一共有%d名学生", peo_num); printf("n学号tt姓名tt性别tt年龄ttC语言tt高数tt英语"); for(int i = 0; i < peo_num; i++) { printf("n%stt%stt%stt%dtt%.2ftt%.2ftt%.2f", stu[i].num, stu[i].name, stu[i].sex, stu[i].age, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } printf("n"); } system("pause"); } //修改学生信息 void modify_student() { char s1[100]; int laber = 0; int flag, age, num, i; char number[100], sex[10]; int score1, score2, score3; printf("n请输入需要修改学生姓名:"); getchar(); gets(s1); while(1) { int flag = 0; for(int i = 0; i < peo_num; i++) { if(strcmp(stu[i].name, s1) == 0) { flag = 1; system("cls"); printf("********************************************************************************************n"); printf("*--------------1、修改学号------------------------------------ 2、修改性别-----------------*n"); printf("*--------------3、修改年龄------------------------------------ 4、修改C语言成绩------------*n"); printf("*--------------5、修改高数成绩-------------------------------- 6、修改英语成绩-------------*n"); printf("*---------------------------------------7、退出菜单----------------------------------------*n"); printf("********************************************************************************************n"); printf("n请输入菜单编号:"); scanf("%d", &laber); switch(laber) { case 1: printf("n请输入新学号:"); getchar(); gets(number); strcpy(stu[i].num, number); break; case 2: printf("n请输入性别:"); getchar(); gets(sex); strcpy(stu[i].sex, sex); break; case 3: printf("n请输入年龄:"); scanf("%d", &age); stu[i].age = age; break; case 4: printf("n请输入C语言成绩:"); scanf("%f", &score1); stu[i].score[0] = score1; break; case 5: printf("n请输入高数成绩:"); scanf("%f", &score2); stu[i].score[1] = score2; break; case 6: printf("n请输入英语成绩:"); scanf("%f", &score3); stu[i].score[2] = score3; break; case 7:return; default:printf("n请输入1--7之间的数字!"); } if(laber > 0 && laber < 8) printf("n修改成功n"); break; } } if(flag == 0) { printf("n未找到该学生,请重新输入需要修改学生姓名:"); getchar(); gets(s1); } } } //保存学生信息 void save_student() { FILE *fp; char filename[100]; printf("n请输入要保存的文件名:"); scanf("%s", filename); if((fp = fopen(filename, "w+")) == NULL) { printf("n打开文件失败!n"); exit(0); } for(int i = 0; i < peo_num; i++) { if(fwrite(&stu[i], sizeof(struct STU), 1, fp) != 1) printf("n保存失败!n"); } printf("n保存成功!n"); fclose(fp); system("pause"); } //刷新学生信息 void flush_student() { FILE* fp; char filename[100]; int k = 0; printf("n请输入需要刷新的文件名:"); getchar(); gets(filename); if ((fp = fopen(filename, "r+")) == NULL) { printf("打开文件失败!n"); exit(0); } for (int i = 0; i < N; i++) { if (fread(&stu[i], sizeof(student), 1, fp) == 1) { k++; } } peo_num = k; if (k == 0) printf("刷新失败!n"); else printf("刷新成功!n"); fclose(fp); system("pause"); }



