功能在菜单中
远古代码,好操蛋
课程名称可以保存在字符串数组,这样方便扩展课程(可改进的地方)
可以用链表来储存信息,那样难度高,具有挑战性,而且加分啊!
// author daijunjie #include#include #include #define N 500 int nf ,ns , rate[N] , check[N] , c=0 ;// nf 学生人数 ns enter()函数中确定增加的学生人数 rate记录排名信息 check检测学号是否重复 float ave[N]; char filename[50]; struct student { int stunum; char sex; char name[50]; int score[4]; float average; } stuarr[N],stuenter[N],*Node; // 可用结构体数组保存信息然后操作文件,也可以用链表,结构体作为一个结点 比如 Node stu即是一个结点指针 void people() //校正文件所存入学生数量 { int i=0; //即得到文件内学生信息数量nf FILE *fp; fp=fopen(filename,"r"); //可用 filename 记录文件名,这样可以打开用户自定义名称的文件 if(fp==NULL) { printf("File cannot open! 请自行在同文件夹目录下创建文件 " ); exit(1); } else while(!feof(fp)){ fscanf(fp,"%d %c %s %d %d %d %d",&stuarr[i].stunum, &stuarr[i].sex, &stuarr[i].name, &stuarr[i].score[0], &stuarr[i].score[1], &stuarr[i].score[2], &stuarr[i].score[3]); i+=1; } nf=i-1; fclose(fp); } void scan() //将文件信息导入到数组,方便进行信息查询,求平均分,按平均分排名次 //简称读盘 { int i=0; FILE *fp; fp=fopen("student.txt","r"); if(fp==NULL){ printf("文件打开失败!"); exit(1);} while(!feof(fp)){ //while(!feof(fp)),文件指针到位置末尾则!feof(fp)==0,否则为1 fscanf(fp,"%d %c %s %d %d %d %d",&stuarr[i].stunum, &stuarr[i].sex, &stuarr[i].name, &stuarr[i].score[0], &stuarr[i].score[1], &stuarr[i].score[2], &stuarr[i].score[3]); i++; //以此作为 while的循环条件,每读取一次,结构体数组的信息就则增加一个“结构体 ” } fclose(fp); } void average() //平均数调用函数 { scan(); float a; int i,j; for(i=0;i >>数据存盘成功!n"); fclose(fp); } void reload() //覆盖写入,供xiugai和del调用,实现数据修改和删除 { int i; FILE *fp; fp=fopen(filename,"w+"); for(i=0;i =90&& stuarr[i].score[j]<=100) s[j][0]+=1; else if(stuarr[i].score[j]>=80&&stuarr[i].score[j]<90) s[j][1]+=1; else if(stuarr[i].score[j]>=60&&stuarr[i].score[j]<80) s[j][2]+=1; else if(stuarr[i].score[j]<60) s[j][3]+=1; } printf("n分数段 C语言 高等数学 英语 线性代数n"); printf("90-100 %d %d %d %dn" ,s[0][0],s[1][0],s[2][0],s[3][0]) ; printf("80-89 %d %d %d %dn" ,s[0][1],s[1][1],s[2][1],s[3][1]) ; printf("60-79 %d %d %d %dn" ,s[0][2],s[1][2],s[2][2],s[3][2]) ; printf("60以下 %d %d %d %dn" ,s[0][3],s[1][3],s[2][3],s[3][3]) ; } void paixu( student stuarr[]) //按平均成绩排序,并给出名次 {int i,j,t; char s[50]; for(i=0;i >>>>现有人数为:%d%n",nf); printf("请输入你要添加的学生的信息n"); printf("请输入第%d个学生的信息:n",nf+1); stuarr[0].stunum=Repeatability_checking(); //调用Repeatability_checking函数,返回值为成功输入的学号 ch=getchar(); printf("请输入第%d名学生的性别:",nf+1); scanf("%c",&stuarr[0].sex); ch=getchar(); printf("请输入第%d名学生的姓名:",nf+1); gets(stuarr[0].name); printf("请输入第%d名学生的成绩:n",nf+1); printf("C语言 高等数学 英语 线性代数n"); scanf("%d %d %d %d",&stuarr[0].score[0], &stuarr[0].score[1], &stuarr[0].score[2], &stuarr[0].score[3]); ns=1;cunpan(); printf(">>>增加成功!n") ; } void del() //删除一条学生记录 { scan(); //将文件信息导入到结构体数组,对结构体数组的数据进行操作,修改or删除 int n,i,j,find=0; //完成相应操作以w+的覆盖写入方式导入回文件 char name[50],ch; printf(">>现有人数为:%d%n",nf); printf(">>请问你要删除哪位学生的信息n"); printf("-------请选择检索方式----------n"); printf("-------1--按学号查询-----------n"); printf("-------2--按姓名查询-----------n"); printf("-------3--返回主菜单-----------n"); scanf("%d",&n); while(1){if(n<1||n>3) {printf("请在1到3之内输入n");scanf("%d",&n);} else break; } switch(n){ case 1: printf("请输入学号:"); scanf("%d",&n); //DEL[d]=n;d++; for(i=0;i >>删除成功!n"); system("pause");break; } case 2: ch=getchar(); printf("请输入所要删除的学生姓名:"); gets(name); for(i=0;i >>删除成功!n"); system("pause");break; } case 3:break; } } void xiugai() //修改学生记录 { int num,i,j,n,find=0; char ch; printf("请问你要修改哪位学生的信息,请输入学号:"); scanf("%d",&num); for(i=0;i 6) printf("输入错误,请重新输入"); else break; } while(1); switch(n){ case 1:printf("姓名:%s要改为:",stuarr[i].name);gets(stuarr[i].name);break; case 2:printf("性别:%c要改为:",stuarr[i].sex);scanf("%c",&stuarr[i].sex);break; case 3:printf("C语言成绩为%d要改为:",stuarr[i].score[0]);scanf("%d",&stuarr[i].score[0]);break; case 4:printf("高数成绩为%d要改为:",stuarr[i].score[1]);scanf("%d",&stuarr[i].score[1]);break; case 5:printf("英语成绩为%d要改为:",stuarr[i].score[2]);scanf("%d",&stuarr[i].score[2]);break; case 6:printf("线性代数成绩为%d要改为:",stuarr[i].score[3]);scanf("%d",&stuarr[i].score[3]);break; } reload(); printf("修改成功!n"); printf("请问是否还需要修改 0则退出修改操作 1表示继续修改 :"); scanf("%d",&n); if(0==n) break; } while(1); } } if(find!=1) printf(">>>>>>无此人!n>>>>>>请重新选择菜单n"); } void chaxun() //查询学生信息 { scan(); int num,i,n,jud=0; char name[50]; float a; printf("-------请选择查询方式----------n"); printf("-------1--按学号查询-----------n"); printf("-------2--按姓名查询-----------n"); printf("-------3--返回主菜单-----------n"); scanf("%d",&n); while(1){if(n<1||n>3) {printf("请在1到3之内输入n");scanf("%d",&n);} else break; } switch(n){ case 1:printf("请输入学号:"); scanf("%d",&num); for(i=0;i =80&&stuarr[i].score[j]<90) s[j][1]+=1; else if(stuarr[i].score[j]>=60&&stuarr[i].score[j]<80) s[j][2]+=1; else if(stuarr[i].score[j]<60) s[j][3]+=1; } printf("n分数段 C语言 高等数学 英语 线性代数n"); printf("各科平均分 %.2f %.2f %.2f %.2f n",ave_sub[0],ave_sub[1],ave_sub[2],ave_sub[3]) ; printf("90-100 %d %d %d %dn" ,s[0][0],s[1][0],s[2][0],s[3][0]) ;//这地方可改进 printf("80-89 %d %d %d %dn" ,s[0][1],s[1][1],s[2][1],s[3][1]) ; printf("60-79 %d %d %d %dn" ,s[0][2],s[1][2],s[2][2],s[3][2]) ; printf("60以下 %d %d %d %dn" ,s[0][3],s[1][3],s[2][3],s[3][3]) ; system("pause") ; } void meun() //主菜单 { int n; printf("请输入要操作的文件名: "); gets(filename); while(1) { printf("------------------------------------------------------- n"); printf("-----------------学生信息管理系统---------------------- n"); printf("----------------------菜单----------------------------- n"); printf(" 1:数据的输入 | 2:计算各位同学的平均分 n"); printf(" 3:求每门课程的平均分数| 4:计算各分数段的人数 n"); printf(" 5:按平均分排序 | 6:选择增加,删除或修改学生记录 n"); printf(" 7:对数据进行查询 | 8:显示输出结果 n"); printf(" 0:退出 | n"); printf("------------------------------------------------------- n"); printf("------------更多功能,请关注公众号:退学通知书---------- n"); printf("------------------------------------------------------- n"); people(); printf(">>>>>当前文件中学生数量为:%dn",nf) ; printf(">>>>>请选择菜单中的一项:"); scanf("%d",&n); if(n==0) {printf(" see you next time! n"); printf(" 再见! n");break;} else if(n<0||n>8) {printf("输入错误!n"); system("pause") ;} switch(n){ case 1:enter();break; case 2:studentave();break; case 3:subjectave ();break; case 4:personscore ();break; case 5:average();paixu(stuarr);break; case 6: printf("小提示:输入1-3以外数字可退回至主菜单n");//防误触 printf(">>>>>>子菜单>>>>>>n"); printf("1:增加学生记录---- 2:删除学生记录---- 3:修改学生记录>>>n"); printf("请输入您要选择的操作:");scanf("%d",&n); switch(n){ case 1:zengjia();break; case 2:del();break; case 3:xiugai();break; } ;break; case 7:chaxun();break; case 8:display();break; } } } int main() { meun(); return 0; } //author daijunjie
tips:本人男,懒得改了



