1、学生成绩管理系统C语言编写学生成级管理系统 目录 学生成绩管理系统实验题目 3实验要求 3源程序 5结果分析 40心得体会 42实验题目:学生成绩管理系统实验要求:学生包含以下信息项:学号、姓名、学院、班级、高数成绩、英语成绩、C语言成绩、总分、平均分。系统的主要功能包括:1. 创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。2. 增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:增加后的学生信息仍按学号排序,并继续保存至原文件。3. 删除学生信息,提示用户输入要进行删除操作的
2、学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。4. 修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。5. 按不同条件对学生信息进行查询操作,输出满足条件的学生信息。(1) 按学号查询,输入一个学号,输出对应的学生信息。(2) 按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)。(3) 按学院查询,输入学院名称,输出该学院的全部学生的信息。(4) 按班级查询,输入班级名称,输出该班级的全部学生的信息。
3、6. 按不同条件对学生成绩进行统计工作。(1) 按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件中。(2) 按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。(3) 分别找出3门课程成绩最高的学生,并输出他们的信息。(4) 分别统计出3门课程的不及格率,并输出。源程序:#ifndef H_STUDENT_HH #define H_STUDENT_HH #include stdio.h #include string.h #include malloc.h #define LEN sizeof(str
4、uct message_student) /*一个结构体数组元素的长度*/ #define numsubs 5 /*学科数目*/ typedef struct message_student /*结构体定义*/ char number6; char name20; char sex4; float subjectnumsubs; float score; float average; int index; student; extern int numstus; /*学生数目*/ extern student *pointer; /*指向结构体数组*/ extern int lens; int
5、 menu_select(); /*函数声明*/ int openfile(student stu); int findrecord(student stud); int writetotext(student stud); void welcome(); void display1(); void showtable(); void sort(student stu); void deleterecord(student stu,int i); void addrecord(student stud); void display(student stud,int n1,int n2); vo
6、id amendrecord(student stud); void count(student stud); void sortnum(student stud); void sortnum2(student stud); void sortname(student stud); void sortname2(student stud); void sortcount(student stud); void sortcount2(student stud); void statistic(student stud); void display1(); #endif /#include hea
7、d.h int menu_select() char c; printf(nn); printf( | 1. 增加学生记录 5.统计信息 |n); printf( | 2. 查询学生记录 6.打开文件 |n); printf( | 3. 修改学生记录 7.保存文件 |n); printf( | 4. 学生纪录排序 8.显示记录 |n); printf( | 0. 退出系统 |n); printf(nn); printf(请选择(0-8):); c=getchar(); getchar(); return (c-0); /#include head.h int findrecord(studen
8、t stud) /*查找信息*/ char str2; int i,num; if(numstus=0) printf(没有可被查找的记录n); return -1; else printf(以何种方式查找?n1.学号t2.姓名t3.名次n); gets(str); if(str0=1) /*按学号查找*/ printf(请输入学号:); gets(str); for(i=0;i=numstus;i+) if(strcmp(str,studi.number)=0) display(stud,i,i); break; else continue; else if(str0=2) /*按姓名查找*
9、/ printf(请输入姓名:); gets(str); for(i=0;i=numstus;i+) if(strcmp(str,studi.name)=0) display(stud,i,i); break; else continue; else if(str0=3) /*按名次查找*/ printf(请输入名次:); scanf(%d,&num); getchar(); for(i=0;inumstus) printf(没有查找所要的信息。n); return -1; return i; /#includehead.h int openfile(student stu) int i=0,
10、j; FILE *fp; char filename20,str2; if(numstus!=0) printf(已经有记录存在,是否保存?(y/n); gets(str); if(str0=y|str0=Y) writetotext(stu); printf(请输入文件名:); gets(filename); numstus=0; if(fp=fopen(filename,rb+)=NULL) printf(无法打开该文件n); return(-1); fscanf(fp,%d,&numstus); fgetc(fp); while(inumstus) fscanf(fp,%s,stui.n
11、umber); fscanf(fp,%s,stui.name); fscanf(fp,%s,stui.sex); for(j=0;jnumsubs;j+) fscanf(fp,%f,&stui.subjectj); fscanf(fp,%f,&stui.score); fscanf(fp,%f,&stui.average); fscanf(fp,%d,&stui.index); i+; fclose(fp); printf(文件读取成功n); printf(是否显示纪录?(y/n); gets(str); if(str0=y|str0=Y) display(stu,0,numstus-1);
12、return(0); /#include head.h void sort(student stud) int i,j=0; char str5; student *p; p=stud; if(numstus=0) printf(没有可供查询的记录!); while(1) for(i=0;i+) printf( 请输入查询方式:); printf((直接输入回车则结束查询操作)n); printf(1.按照学号t); printf(2.按照姓名t); printf(3.按照名次n); gets(str); if(strlen(str)=0) break; if(str0=1) printf(请
13、输入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str); if(str0=1) sortnum2(p); else sortnum(p); display(stud,0,numstus-1); else if(str0=2) printf(请输入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str); if(str0=1) sortname2(p); else sortname(p); display(stud,0,numstus-1); else if(str0=3) printf(请输入
14、排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str); if(str0=1) sortcount2(p); else sortcount(p); display(stud,0,numstus-1); else printf(请输入13); printf(是否退出排序?(y/n); gets(str); if(str0=y|str0=Y) break; return; void sortnum(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+
15、) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortnum2(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortname(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+)
16、for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortname2(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortcount(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+)
17、for(j=0;jstudj.index) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortcount2(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;jstudj+1.index) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; /#includehead.h void statistic(student stud) /*新增功能,输出统计信息*/ int i,j=0
18、,k=0; char c1,str2; float averagenumsubs,sum=0; if(numstus=0) printf(没有可被查找的记录n); else while(1) printf(下面将统计考试成绩n); printf(请选择你要统计哪科的成绩 1.At2.Bt3.Ct4.Dt5.En); c1=getchar(); printf(t一共有个%d记录n,numstus); /*总共记录数*/ switch(c1) case 1: for(i=0;istudi.subject0) k=i; if(studj.subject0studi.subject0) j=i; av
19、erage0=sum/numstus; printf(t科目A的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,studj.name,studj.subject0); printf(t科目A的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,studk.name,studk.subject0); printf(t科目A的平均分是 %5.2fn,average0); /*平均分*/ break; case 2: for(i=0;istudi.subject1
20、) k=i; if(studj.subject1studi.subject1) j=i; average1=sum/numstus; printf(t科目B的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,studj.name,studj.subject1); printf(t科目B的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,studk.name,studk.subject1); printf(t科目B的平均分是 %5.2fn,average1);
21、 /*平均分*/ break; case 3: for(i=0;istudi.subject2) k=i; if(studj.subject2studi.subject2) j=i; average2=sum/numstus; printf(t科目C的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,studj.name,studj.subject2); printf(t科目C的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,studk.name,stud
22、k.subject2); printf(t科目C的平均分是 %5.2fn,average2); /*平均分*/ break; case 4: for(i=0;istudi.subject3) k=i; if(studj.subject3studi.subject3) j=i; average3=sum/numstus; printf(t科目D的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,studj.name,studj.subject3); printf(t科目D的最低分是:n); /*最低分*/ printf(tt学号
23、:%s 姓名:%s 分数:%.2fn,studk.number,studk.name,studk.subject3); printf(t科目D的平均分是 %5.2fn,average3); /*平均分*/ break; case 5: for(i=0;istudi.subject4) k=i; if(studj.subject4studi.subject4) j=i; average4=sum/numstus; printf(t科目E的最高分:n); /*最高分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studj.number,studj.name,studj.subject4); printf(t科目E的最低分是:n); /*最低分*/ printf(tt学号:%s 姓名:%s 分数:%.2fn,studk.number,studk.name,studk.subject4); printf(t科目E的平均分是 %5.2fn,average4); /*平均分*/ break;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2