#include"stdio.h" //标准的输入输出函数文件头部说明 #include"math.h" // 数学函数头部说明 #include"string.h" #include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h" //头文件声明,下文用到了改变控制台的宽度和高度 #define M 100 struct student { char name[20]; //姓名 char num[20]; //学号 int sex; // 性别 char nl[20]; //年龄 char term[20]; // 学期 char id[20];// 身份证号 char native[20]; //籍贯 char tel[20]; //电话 int major; //专业 int math,yy,sz,js,cyy,pe;//数学,英语,思政,军事,c语言,体育 int fail; //不及格 int pass; //及格 int bj; //班级 double sum; // 总分 double aver; // 平均 double passl; double max; double min; int failer; }; void input(struct student stu[M]); //输入函数 void output(struct student stu[M]); //各类用户自定义函数的声明 void lookfor(struct student stu[M]); //查询函数 void modify(struct student stu[M]); //修改函数 void order(struct student stu[M]); //排序函数 void delete_student(struct student stu[M]); //删除函数 void xuehao(struct student stu[M]); void xingming(struct student stu[M]); void xueqi(struct student stu[M]); void analyse(struct student stu[M]); void fsd(struct student stu[M]); void fileread(struct student stu[M]); void filewrite(struct student stu[M]); int count=0; struct student t; void xingming(struct student stu[M]) { } int main() { int choice=0,sum=0; struct student stu[M]; system("mode con:cols=400 lines=30000"); //调节控制台的宽度和高度 system("color 0E"); //调节控制台的背景和字体颜色 printf("\t\t\t\t\t\t\t\t\3\3\3\3\3\3\3\3\3\3\3\3\3欢迎你使用学生成绩管理系统\3\3\3\3\3\3\3\3\3\3\n"); while(choice!=10) { printf("\t\t\t\t\t\t\t\t-------------------------------------------------\n"); printf("\t\t\t\t\t\t\t\t+ 学生信息管理系统 +\n"); printf("\t\t\t\t\t\t\t\t-------------------------------------------------\n"); printf("\t\t\t\t\t\t\t\t\t\t ***************\n"); printf("\t\t\t\t\t\t\t\t\t\t 1、添加学生信息\n"); printf("\t\t\t\t\t\t\t\t\t\t 2、浏览学生信息\n"); printf("\t\t\t\t\t\t\t\t\t\t 3、查询学生信息\n"); printf("\t\t\t\t\t\t\t\t\t\t 4、修改学生信息\n"); printf("\t\t\t\t\t\t\t\t\t\t 5、删除学生信息\n"); printf("\t\t\t\t\t\t\t\t\t\t 6、排列学生信息\n"); printf("\t\t\t\t\t\t\t\t\t\t 7、查看分析报告\n"); printf("\t\t\t\t\t\t\t\t\t\t 8、读取文件学生\n"); //从文件读取 printf("\t\t\t\t\t\t\t\t\t\t 9、保存到文件\n"); //保存到文件 printf("\t\t\t\t\t\t\t\t\t\t 10、退出系统\n"); printf("\t\t\t\t\t\t\t\t\t\t ***************\n"); printf("请输入你的选择\n"); scanf("%d",&choice); fflush(stdin); //清除输入缓冲区 if(choice<1||choice>10) { sum++; if(sum==3) { printf("输入错误次数过多,程序将重新开始\n"); system("cls"); //清屏语句 sum=0; } } switch(choice) { case 1:input(stu);break; case 2:output(stu);break; case 3:lookfor(stu);break; case 4:modify(stu);break; case 5:delete_student(stu);break; case 6:order(stu);break; case 7:analyse(stu);break; case 8:fileread(stu);break; case 9:filewrite(stu);;break; case 10:printf("感谢你使用学生信息管理系统,请关掉程序!!!\n");system("pause");break; default:printf("无效的选择!!!请重新输入!!!\n");break; } } printf("the program is over!!!\n"); return 0; } void input(struct student stu[M]) //自定义输入函数 { int len,size,chang; //学生号长度,身份证号长度,手机号码长度 system("cls"); printf("请添加要输入学生的成绩\n"); do { printf("请输入由11位数字组成的学生学号\n"); //do-while循环应用,提示输入位数为一确定数 scanf("%s",&stu[count].num); len=strlen(stu[count].num); }while(len!=11); printf("请输入同学的姓名\n"); scanf("%s",&stu[count].name); printf("请输入同学的年龄\n"); scanf("%s",&stu[count].nl); printf("请输入同学的性别:1、男 2、女\n"); scanf("%d",&stu[count].sex); printf("请输入同学的学期: 如:大一上 、大一下\n"); scanf("%s",&stu[count].term); do { printf("请输入由18位数字组成的学生身份证号\n"); //同上 scanf("%s",&stu[count].id); size=strlen(stu[count].id); }while(size!=18); printf("请输入学生的籍贯\n"); scanf("%s",&stu[count].native); do{ printf("请输入学生11位的手机号码\n"); scanf("%s",&stu[count].tel); chang=strlen(stu[count].tel); }while(chang!=11); printf("请输入所需要的专业代号:1、计算机科学 2、软件工程 3、网络工程 4、物联网\n"); //采用如此方法解决了专业输入难问题 scanf("%d",&stu[count].major); printf("请输入对应的学生班级号码: 如:1801 、1802 \n"); scanf("%d",&stu[count].bj); do { printf("请依次输入不大于100的学生各科成绩\n"); scanf("%d%d%d%d%d%d",&stu[count].math,&stu[count].yy,&stu[count].sz,&stu[count].js,&stu[count].cyy,&stu[count].pe); }while(stu[count].math>100||stu[count].yy>100||stu[count].sz>100||stu[count].js>100||stu[count].cyy>100||stu[count].pe>100); //同上同上 stu[count].aver=(stu[count].math+stu[count].yy+stu[count].sz+stu[count].js+stu[count].cyy+stu[count].pe)/6.0; //求出平均值 stu[count].sum=(stu[count].math+stu[count].yy+stu[count].sz+stu[count].js+stu[count].cyy+stu[count].pe); count++; } void output(struct student stu[M]) //自定义输出函数 { int j; system("cls"); if (count==0) { printf("当前已存学生信息为0个\n"); return; } else { printf("学号 \t姓名\t性别\t年龄\t学期\t\t身份证号\t籍贯\t\t手机号 \t\t专业\t\t班级\t数学\t英语\t思政\t军事\tC语言\t体育\t总分\t平均分\n\n"); for (j=0;jstu[m].math) {t=stu[k];stu[k]=stu[m];stu[m]=t;} };break; case 2:for (j=0;jstu[m].yy) {stu[k]=stu[m];} //整个为排序部分,采用了所谓的选择排序的方法 };break; case 3:for (j=0;jstu[m].sz) {t=stu[k];stu[k]=stu[m];stu[m]=t;} };break; case 4:for (j=0;jstu[m].js) {t=stu[k];stu[k]=stu[m];stu[m]=t;} };break; case 5:for (j=0;jstu[m].cyy) {t=stu[k];stu[k]=stu[m];stu[m]=t;} };break; case 6:for (j=0;jstu[m].pe) {t=stu[k];stu[k]=stu[m];stu[m]=t;} };break; case 7:for (j=0;jstu[m].aver) {t=stu[k];stu[k]=stu[m];stu[m]=t;} //强制类型转换符号只能用于有操作数,根据赋值运算中的类型转换问题可知 };break; default:printf("无效的选择!!!请重新输入!!!\n");break; } } void xuehao(struct student stu[M]) //自定义通过学号方式删除学生信息函数 { int j,k=count; char xh[25]; system("cls"); printf("请输入你想要删除的同学学号\n"); scanf("%s",xh); fflush(stdin); for (j=0;j=60) j++; if(stu[i].math>max1) max1=stu[i].math; if(stu[i].math=60) m++; if(stu[i].yy>max2) max2=stu[i].yy; if(stu[i].yy=60) n++; if(stu[i].sz>max3) max3=stu[i].sz; if(stu[i].sz=60) a++; if(stu[i].js>max4) max4=stu[i].js; if(stu[i].js=60) b++; if(stu[i].cyy>max5) max5=stu[i].cyy; if(stu[i].cyy=60) c++; if(stu[i].pe>max6) max6=stu[i].pe; if(stu[i].pe