**源代码:
#include#include #define num 7// 宏定义学生人数 int tot1[10], tot2[10], tot3[10];// 各个分数段的人数 double ave[10]; double sum[10];// 储存所有学生同一科目的总分以计算每个课程平均分 char enter = 'n';// 换行 方便使用 struct student{// 每个学生都要输入的信息 char name[10][5]; char ID[30];// 不能太短,否则会影响文件中的打印格式 double grade1, grade2, grade3;// 三个学科的成绩 double average;// 学生平均分 int rank; }stu[num+1]; void Add_Student();// 输入学生信息并计算平均分 void sort();// 把平均分排序 void Grade_tot();// 统计各个分数段的学生数 void Same_();// 处理平均分相同的情况 void Student_Data();// 存储学生信息 void Average_Grade();// 计算每科平均分 void Save_Average();// 将平均分存入d:/average.txt文件 over! void Add_Student(){ for(int i = 1; i <= num; i++){ printf(" 快输入学生信息哟~ n"); printf(" t请输入第%d位学生的信息: n",i); printf("<姓名>:"); scanf("%s",stu[i].name); printf("<学号>:"); scanf("%s",stu[i].ID); printf("<课程1的成绩>:"); scanf("%lf",&stu[i].grade1); printf("<课程2的成绩>:"); scanf("%lf",&stu[i].grade2); printf("<课程3的成绩>:"); scanf("%lf",&stu[i].grade3); stu[i].average = (stu[i].grade1 + stu[i].grade2 + stu[i].grade3) / 3.0;// 计算所有学生的平均分 } } void sort(int l, int r){// 这里用了快排排序将平均分按从大到小排列(处理的数据更多) if(l >= r) return ; int i = l, j = r; struct student key = stu[i]; while(i < j){ while(i < j && stu[j].average <= key.average) j--; stu[i] = stu[j]; while(i < j && stu[i].average >= key.average) i++; stu[j] = stu[i]; } stu[i] = key; sort(l, i - 1); sort(i + 1, r); // for(int i = 1; i < num; i++){ // for(int j = 1; j < num; j++){ // if(stu[j].average < stu[j + 1].average){ // struct student t = stu[j]; // stu[j] = stu[j + 1]; // stu[j + 1] = t; // } // } // }// 冒泡排序的方法也可以 } void Grade_tot(){// 统计各个分数段的学生数 for(int i = 1; i <= num; i++){ if(stu[i].grade1 < 60) tot1[0]++; if(stu[i].grade1 >= 60 && stu[i].grade1 < 70) tot1[1]++; if(stu[i].grade1 >= 70 && stu[i].grade1 < 80) tot1[2]++; if(stu[i].grade1 >= 80 && stu[i].grade1 < 90) tot1[3]++; if(stu[i].grade1 >= 90) tot1[4]++;// 课程一 if(stu[i].grade2 < 60) tot2[0]++; if(stu[i].grade2 >= 60 && stu[i].grade2 < 70) tot2[1]++; if(stu[i].grade2 >= 70 && stu[i].grade2 < 80) tot2[2]++; if(stu[i].grade2 >= 80 && stu[i].grade2 < 90) tot2[3]++; if(stu[i].grade2 >= 90) tot2[4]++;// 课程二 if(stu[i].grade3 < 60) tot3[0]++; if(stu[i].grade3 >= 60 && stu[i].grade3 < 70) tot3[1]++; if(stu[i].grade3 >= 70 && stu[i].grade3 < 80) tot3[2]++; if(stu[i].grade3 >= 80 && stu[i].grade3 < 90) tot3[3]++; if(stu[i].grade3 >= 90) tot3[4]++;// 课程三 } } void Same_(){// 处理平均分相同的情况 int m = num; int Rank = 1; for(int i = 1; i <= num; i++){// 此时平均分已经排好序了 if(stu[i].average == stu[i + 1].average){ stu[i].rank = Rank; continue; } stu[i].rank = Rank; Rank++; } } void Student_Data(){// 存储学生信息 FILE *fp; fp = fopen("d://st.txt", "wt+");// 读写一个二进制文件 fprintf(fp, "ttttttt 成绩单 ttttt%c", enter); fprintf(fp, "t排名tt学生姓名tt学生学号tt课程一成绩t课程二成绩t课程三成绩t平均分t%c", enter); for(int i = 1; i <= num; i++){ fprintf(fp, "t%4dtt%7st %15s t%10.1ftt%10.1ftt%10.1ft %10.1ft%c", stu[i].rank, stu[i].name, stu[i].ID,stu[i].grade1, stu[i].grade2, stu[i].grade3, stu[i].average, enter); }// 尤其注意打印格式 printf("<学生信息已存入d:/st.txt文件中>n"); fclose(fp); } void Average_Grade(){// 计算每科平均分 for(int i = 1; i <= num; i++){ sum[1] = sum[1] + stu[i].grade1; sum[2] = sum[2] + stu[i].grade2; sum[3] = sum[3] + stu[i].grade3; } for(int i = 1; i < 4; i++){ ave[i] = sum[i] / (double)num; } } void Save_Average(){// 将计算完成的数据存入d:/average.txt文件 FILE *fp; fp = fopen("d://average.txt", "wt+"); fprintf(fp, "ttttt 各课程平均分情况 tt%c",enter); fprintf(fp, "tttt 课程一平均分t课程二平均分t课程三平均分t%c",enter); fprintf(fp, "tttt%10.1lftt%10.1lftt%10.1lft%c",ave[1],ave[2],ave[3],enter); printf("<平均分计算完成,已将数据存储到d:/average.txt文件中>%c", enter); fprintf(fp, "tttt 各课程分数段分布情况 t%c",enter); fprintf(fp, "t课程一人数分布情况t90分以上:%d人t80~90分:%d人t70~80分:%d人t60~70分:%d人t60分以下:%d人tt%c",tot1[4],tot1[3],tot1[2],tot1[1],tot1[0],enter); fprintf(fp, "t课程二人数分布情况t90分以上:%d人t80~90分:%d人t70~80分:%d人t60~70分:%d人t60分以下:%d人tt%c",tot2[4],tot2[3],tot2[2],tot2[1],tot2[0],enter); fprintf(fp, "t课程三人数分布情况t90分以上:%d人t80~90分:%d人t70~80分:%d人t60~70分:%d人t60分以下:%d人tt%c",tot3[4],tot3[3],tot3[2],tot3[1],tot3[0],enter); printf("<各科分数段人数统计完成,已将数据存入d:/average.txt文件中>%c", enter); fclose(fp); } int main() { FILE *fp; printf("*****************这里是学生成绩管理系统*********************n"); printf(" <请录入本班学生信息> n"); printf(" <请分别输入本班学生的姓名、学号及三门考试成绩> n"); printf(" <系统将按平均分排名的信息导入d:\st.txt文件中> n"); printf(" <本系统将自动将平均分等级导入d:\average.txt文件中> n"); printf("******************下面请依次输入学生信息********************n");// 开场白hhh Add_Student();// 输入学生信息并计算平均分 sort(1, num);// 把平均分排序 Grade_tot();// 统计各个分数段的学生数 Same_();// 处理平均分相同的情况 Student_Data();// 存储学生信息 Average_Grade();// 计算每科平均分 Save_Average();// 将平均分存入d:/average.txt文件 over! return 0; }
***这是借鉴csdn一篇博客所写,但我现在找不到那篇了。。。T_T



