学生成绩管理程序
实现功能目标:
能够对学生成绩按照下列进行统计,并对学生进行综合成绩的评价(公式自定)。
具体功能及要求如下:
二、 输入学生姓名学号,及五门成绩,并计算每个学生五门功课的平均分,并按平均分排列名次,若平均分相同则名次并列;结果写入文件并按格式打印在屏幕上。
三、 统计全班每门课程的平均分,并计算各分数段(60以下,60~69,70~79,80~89,90以上)的学生人数;结果写入文件,并按格式在屏幕上打印;
四、 在屏幕上打印出所有不及格学生的下列信息:学号,不及格的课程名,该不及格课程成绩;
五、文件格式要求
1.原始数据文件格式 (具体数据和项目自行编写) 学号 姓名 英语 C语言 高等数学…………..
1 张三 76 89 78 2 李四 …. …. ….
2.输出数据文件(由程序自动生成)
1) 学生综合成绩文件。
2) 学号 姓名 英语 C语言 高等数学 …………….平均成绩 名次
1 张三 76 89 78 ………….. 2 李四 …. …. ….
3)统计结果文件。
4)分数段 英语 C语言 高等数学 …………………. <60 2 … 60~69 8 … 70~79 5 … 80~89 10 …
六、结合学生的多门成绩,设定各科权重,对学生进行总成绩的评价,最后对综合成
解决方案:50分
以上是和你开玩笑,下面玩真的:
#define NUM 5 typedef struct { char id[20]; char name[20]; int grades[5]; double ave; int rank; }STU; int cmpByAve(STU *a, STU *b) { return b->ave - a->ave; } char course_name[5][20]; FILE *f; int i, j, k, sum; int rank; int count[5]; int main(void) { //打开原始数据文件 if (NULL == (f = fopen("原始成绩.txt", "w"))) { fprintf(stderr, "Can not open file:原始成绩.txt\n"); return 1; } //录入学生信息 printf("Input the course name of the 5 courses:\n"); for (i = 0; i < 5; i++) scanf("%19s", course_name[i]); fprintf(f, "%-20s%-20s%-20s%-20s%-20s%-20s%-20s%-20s%-6s\n", "stu_num", "name", course_name[0], course_name[1], course_name[2], course_name[3], course_name[4], "average", "rank"); STU *pStu = malloc(sizeof(STU)*NUM); for (i = 0; i < NUM; i++) { printf("Input student %d:id name grade1 grade2 grade3 grade4 grade5:\n", i + 1); scanf("%s%s%d%d%d%d%d", pStu[i].id, pStu[i].name, &pStu[i].grades[0], &pStu[i].grades[1], &pStu[i].grades[2], &pStu[i].grades[3], &pStu[i].grades[4]); pStu[i].ave = 1.0 * (pStu[i].grades[0] + pStu[i].grades[1] + pStu[i].grades[2] + pStu[i].grades[3] + pStu[i].grades[4]) / 5; } //按平均成绩排名 qsort(pStu, NUM, sizeof(STU), cmpByAve); rank = k = 1; pStu[0].rank = 1; for (i = 1; i < NUM; i++) { if (pStu[i].ave == pStu[i - 1].ave) k++; else { rank += k; k = 1; } pStu[i].rank = rank; } //写入文件 for (i = 0; i < NUM; i++) { fprintf(f, "%-20s%-20s%-20d%-20d%-20d%-20d%-20d%-20.2f%-4d\n", pStu[i].id, pStu[i].name, pStu[i].grades[0], pStu[i].grades[1], pStu[i].grades[2], pStu[i].grades[3], pStu[i].grades[4], pStu[i].ave, pStu[i].rank); } fclose(f); //f = NULL; //打开统计结果数据文件 if (NULL == (f = fopen("统计结果.txt", "w"))) { fprintf(stderr, "Can not open file:统计结果.txt\n"); return 1; } fprintf(f, "%-20s%-8s%-8s%-8s%-8s%-9s average\n", " ", "(0, 60)", "[60, 70)", "[70, 80)", "[80, 90)", "[90, 100]"); //统计成绩 for (i = 0; i < 5; i++) { sum = 0; memset(count, 0, NUM * sizeof(STU)); for (j = 0; j < NUM; j++) { if (pStu[j].grades[i] < 60) count[0]++; else if (pStu[j].grades[i] < 70) count[1]++; else if (pStu[j].grades[i] < 80) count[2]++; else if (pStu[j].grades[i] < 90) count[3]++; else count[4]++; sum += pStu[j].grades[i]; } fprintf(f, "%-20s%-8d%-8d%-8d%-8d%-9d%-5.2f\n", course_name[i], count[0], count[1], count[2], count[3], count[4], 1.0 * sum / NUM); } fclose(f); //释放内存 free(pStu); return 0; }