c语言学生成绩管理程序,对学生进行总成绩的评价

C语言 码拜 6年前 (2015-10-19) 1400次浏览
学生成绩管理程序

实现功能目标:

能够对学生成绩按照下列进行统计,并对学生进行综合成绩的评价(公式自定)。
具体功能及要求如下:

一、 总人数定义为数据使用文件存放;

二、 输入学生姓名学号,及五门成绩,并计算每个学生五门功课的平均分,并按平均分排列名次,若平均分相同则名次并列;结果写入文件并按格式打印在屏幕上。

三、 统计全班每门课程的平均分,并计算各分数段(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;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c语言学生成绩管理程序,对学生进行总成绩的评价
喜欢 (0)
[1034331897@qq.com]
分享 (0)