c语言成绩管理系统

很简单的代码  管理员和学生

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N, M;
float p;
char kecheng[10][20];
struct student
{
	char num[20];
	char name[20];
	char sex[20];
	float score[50]; // 分数,依次是各科的
	float ave;
	float zongfen;
};

//代码注释 
void zengjia(struct student *stu);//增加学生信息 
void save(struct student * stu);//保存学生信息 
struct student * input(struct student *stu);
//从键盘输入包括学号、姓名、各门课程、成绩
void output(struct student *stu);//输出信息 
void chaxun(struct student * stu);//查询学生信息 
void gengxin(struct student * stu);//更新学生信息 
void shanchu(struct student * stu);//删除学生信息 
float average(struct student * stu);//求平均分 
void statistic(struct student *stu);
//显示各科学生总分、平均分、最高、最低、及格率以及各科分数段人数

 
int main()//主函数 
{
	struct student *pArr = NULL;
	void zengjia(struct student *stu);
	void save(struct student * stu);
	struct student * input(struct student *stu);
	void output(struct student *stu);
	void chaxun(struct student * stu);
	void gengxin(struct student * stu);
	void shanchu(struct student * stu);
	int i;
	float average(struct student * stu);
	void statistic(struct student *stu);
	printf("*******************************************************************************\n");
	printf("*******************************************************************************\n");
	printf("**                             成绩管理系统                                  **\n");
	printf("**                               欢迎使用                                    **\n");
	printf("*******************************************************************************\n");
	printf("*******************************************************************************\n\n");
	do
	{
		printf("菜单:\n");
		printf("1.从键盘输入包括学号、姓名、各门课程、成绩 \n");
		printf("2.查询学生信息 \n");
		printf("3.更新学生信息 \n");
		printf("4.删除学生信息 \n");
		printf("5.增加学生信息 \n");
		printf("6.显示学生信息\n");
		printf("7.各科学生成绩统计分析 \n");
		printf("8.保存到磁盘并退出\n");
		printf("您的选择是:");
		scanf("%d", &i);
		if (i == 1)
		{
			pArr = input(pArr);
			average(pArr);
			output(pArr);
		}
		else if (i == 2)
		{
			chaxun(pArr);
		}
		else if (i == 3)
		{
			gengxin(pArr);
			printf("更新后学生信息是:\n");
			average(pArr);
			output(pArr);
		}
		else if (i == 4)
		{
			shanchu(pArr);
			printf("删除后学生信息是:\n");
			average(pArr);
			output(pArr);
		}
		else if (i == 5)
		{
			zengjia(pArr);
			average(pArr);
			output(pArr);
		}
		else if (i == 6)
		{
			average(pArr);
			output(pArr);
		}
		else if (i == 7)
		{
			
			statistic(pArr);
		}
	} while (i != 8);
	save(pArr);
	return 0;
}




//对各科成绩进行统计 
void statistic(struct student *stu)
{
	int i, j;
	float max_score[500];
	float min_score[500];
	float avg_score[500];
	float jigelu[500];
	int a[500]; // 90分以上
	int b[500]; // 80~89
	int c[500]; // 70~79
	int d[500]; // 60~69
	int e[500]; // <60
	for (i = 0; i < M; i++) {
		// M: 课程的个数
		max_score[i] = 0;
		min_score[i] = 100;
		avg_score[i] = 0;
		jigelu[i] = 0;
		a[i] = 0;
		b[i] = 0;
		c[i] = 0;
		d[i] = 0;
		e[i] = 0;
		for (j = 0; j < N; j++) 
		{
			if (stu[j].score[i] >= 60) 
			{
				jigelu[i] += 1;
			}
			max_score[i] = max_score[i] < stu[j].score[i] ? stu[j].score[i] : max_score[i];
			min_score[i] = min_score[i] > stu[j].score[i] ? stu[j].score[i] : min_score[i];
			avg_score[i] += stu[j].score[i];
			if (stu[j].score[i] >= 90) 
			{
				a[i] ++;
			} else if (stu[j].score[i] < 90 & stu[j].score[i] >= 80) 
			{
				b[i] ++;
			} else if (stu[j].score[i] < 80 & stu[j].score[i] >= 70)
			{
				c[i] ++;
			} else if (stu[j].score[i] < 70 & stu[j].score[i] >= 60) 
			{
				d[i] ++;
			}
			else 
			{
				e[i] ++;
			}
		}
		avg_score[i] /= N;
		jigelu[i] /= N;
	}

	int q, m;
	// 按格式打印
	printf("********************************************************************************\n");
	printf("各科成绩统计结果\n");
	printf("		最高分	最低分	平均分	及格率    \n");
	for (q = 0; q < M; q++)
	{
		printf("%s\t\t", kecheng[q]); // 课程
		printf("%.2f	", max_score[q]); // 课程
		printf("%.2f	", min_score[q]); // 课程
		printf("%.2f	", avg_score[q]); // 课程
		printf("%.2f	", jigelu[q]);
		printf("\n");
	}
	
	// 分数段统计
	printf("********************************************************************************\n");
	printf("各科成绩统计结果\n");
	printf("		A(90~100)	B(80~89)	C(70~79)	D(60~69)	E(0~59)    \n");
	for (q = 0; q < M; q++)
	{
		printf("%s\t\t", kecheng[q]); // 课程
		printf("%d	", a[q]); // A
		printf("%d	", b[q]); // B
		printf("%d	", c[q]); // C
		printf("%d	", d[q]); // D
		printf("%d	", e[q]); // E
		printf("\n");
	}
	printf("********************************************************************************");
	printf("\n");
}

struct student * input(struct student *stu)//从键盘输入包括学号、姓名、各门课程、成绩
{
	int q;
	printf("请输入学生个数\n");
	printf("N = ");
	scanf("%d", &N);
	stu = (struct student *)malloc(N * sizeof(struct student));
	printf("请输入课程数目\n");
	printf("M = ");
	scanf("%d", &M);
	printf("请输入各课程名称\n");
	for (q = 0; q < M; q++)
	{
		printf("课程%d:", q + 1);
		scanf("%s", kecheng[q]);
	}
	int i;
	for (i = 0; i < N; i++)
	{
		printf("请输入第%d个学生成绩:\n", i + 1);
		printf("学号:");
		scanf("%s", stu[i].num);
		printf("姓名:");
		scanf("%s", stu[i].name);
		printf("性别:");
		scanf("%s", stu[i].sex);
		for (q = 0; q < M; q++)
		{
			printf("%s的成绩:", kecheng[q]);
			scanf("%f", &stu[i].score[q]);
		}
	}
	return stu;
}







void output(struct student *stu)//按照平均分由大到小顺序排序
{
	int m, q, k;
	printf("********************************************************************************");
	printf("按照平均分由大到小顺序排序\n");
	printf("输出顺序为< 学号 姓名 性别:");
	for (q = 0; q < M; q++)
	{
		printf("%s ", kecheng[q]);
	}
	printf(" 平均分 总分>\n");
	for (m = 0; m < N; m++)
	{
		printf("%-13s %-10s %5s:", stu[m].num, stu[m].name, stu[m].sex);
		for (k = 0; k < M; k++)
			printf("%10.2f", stu[m].score[k]);
		printf("%10.2f", stu[m].ave);
		printf("%10.2f\n", stu[m].zongfen);
		printf("--------------------------------------------------------------------------------\n");
	}
	printf("********************************************************************************");
	printf("\n");
}









float average(struct student * stu)//求平均分 
{
	struct student t;
	int i, q, m, n;
	float p, k;
	p = 0.0;
	for (i = 0; i < N; i++)
	{
		k = 0.0;
		for (q = 0; q < M; q++)
		{
			k = k + stu[i].score[q];
		}
		stu[i].zongfen = k;
		k = k / M;
		stu[i].ave = k;
		p = p + k;
	}
	p = p / N;
	for (m = 0; m < (N - 1); m++)
		for (n = 0; n < N - m - 1; n++)
		{
			if (stu[n].ave < stu[n + 1].ave)
			{
				t = stu[n];
				stu[n] = stu[n + 1];
				stu[n + 1] = t;
			}
		}

	return p;
}






void save(struct student * stu)//保存学生信息 
{
	FILE *fp;
	int i;
	if ((fp = fopen("chengji.dat", "wb")) == NULL)
	{
		printf("cannot open file\n");
		return;
	}
	for (i = 0; i < N; i++)
	{
		if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)
			printf("file write error\n");
	}
	fclose(fp);
}
void chaxun(struct student * stu)//查询学生信息 
{
	char st[20];
	int i, q, p, k;
	printf("请选择查询类型:(1)按学号查询\n(2)按姓名查询\n(3)按性别查询\n(4)退出\n");
	scanf("%d", &i);
	if (i == 1)
	{
		printf("请输入要查询的学号:\n");
		scanf("%s", st);
		for (q = 0; q < N; q++)
		{
			if (strcmp(st, stu[q].num) == 0)
				break;
		}
		printf("********************************************************************************");
		printf("输出顺序为< 学号 姓名 性别:");
		for (p = 0; p < M; p++)
		{
			printf("%s ", kecheng[p]);
		}
		printf(" 平均分 总分>\n");
		printf("%-13s %-10s %5s:", stu[q].num, stu[q].name, stu[q].sex);
		for (k = 0; k < M; k++)
			printf("%10.2f", stu[q].score[k]);
		printf("%10.2f", stu[q].ave);
		printf("%10.2f\n", stu[q].zongfen);
		printf("--------------------------------------------------------------------------------\n");
		printf("********************************************************************************");
		printf("\n");
	}
	else if (i == 2)
	{
		printf("请输入要查询的姓名:\n");
		scanf("%s", st);
		for (q = 0; q < N; q++)
		{
			if (strcmp(st, stu[q].name) == 0)
			{
				printf("********************************************************************************");
				printf("输出顺序为< 学号 姓名 性别:");
				for (p = 0; p < M; p++)
				{
					printf("%s ", kecheng[p]);
				}
				printf(" 平均分 总分>\n");
				printf("%-13s %-10s %5s:", stu[q].num, stu[q].name, stu[q].sex);
				for (k = 0; k < M; k++)
					printf("%10.2f", stu[q].score[k]);
				printf("%10.2f", stu[q].ave);
				printf("%10.2f\n", stu[q].zongfen);
				printf("--------------------------------------------------------------------------------\n");
				printf("********************************************************************************");
				printf("\n");
			}
		}
	}
	else if (i == 3)
	{
		printf("请输入要查询的性别:\n");
		scanf("%s", st);
		for (q = 0; q < N; q++)
		{
			if (strcmp(st, stu[q].sex) == 0)
			{
				printf("********************************************************************************");
				printf("输出顺序为< 学号 姓名 性别:");
				for (p = 0; p < M; p++)
				{
					printf("%s ", kecheng[p]);
				}
				printf(" 平均分 总分>\n");
				printf("%-13s %-10s %5s:", stu[q].num, stu[q].name, stu[q].sex);
				for (k = 0; k < M; k++)
					printf("%10.2f", stu[q].score[k]);
				printf("%10.2f", stu[q].ave);
				printf("%10.2f\n", stu[q].zongfen);
				printf("--------------------------------------------------------------------------------\n");
				printf("********************************************************************************");
				printf("\n");
			}
		}
	}
	else if (i == 4)
		return;
}



void gengxin(struct student * stu)//更新学生信息 
{
	int i, k, m, q;
	printf("请选择更新方式:1.全部更新 2.单个更新 3.取消\n");
	scanf("%d", &k);
	if (k == 1)
	{
		for (i = 0; i < N; i++)
		{
			printf("请输入第%d个学生成绩:\n", i + 1);
			printf("学号:");
			scanf("%s", stu[i].num);
			printf("姓名:");
			scanf("%s", stu[i].name);
			printf("性别:");
			scanf("%s", stu[i].sex);
			for (q = 0; q < M; q++)
			{
				printf("%s的成绩:", kecheng[q]);
				scanf("%f", &stu[i].score[q]);
			}
		}

	}
	else if (k == 2)
	{
		printf("您要更新的是第几个学生?\n");
		scanf("%d", &m);
		m = m - 1;
		printf("学号:");
		scanf("%s", stu[m].num);
		printf("姓名:");
		scanf("%s", stu[m].name);
		printf("性别:");
		scanf("%s", stu[m].sex);
		for (q = 0; q < M; q++)
		{
			printf("%s的成绩:", kecheng[q]);
			scanf("%f", &stu[m].score[q]);
		}

	}
	else if (k == 3)
		return;

}


void shanchu(struct student * stu)//删除学生信息 
{
	struct student t;
	int n, i;
	printf("您要删除第几个学生信息:");
	scanf("%d", &n);
	n = n - 1;
	for (i = n; i < (N - 1); i++)
	{
		stu[i] = stu[i + 1];
	}
	N = N - 1;
	realloc(stu, N * sizeof(struct student));
}


void zengjia(struct student *stu)//增加学生信息 
{
	int i, q, p;
	printf("请输入要增加的个数\n");
	scanf("%d", &i);
	q = N;
	N = N + i;
	realloc(stu, N * sizeof(struct student));
	for (; q < N; q++)
	{
		printf("请输入第%d个学生成绩:\n", q + 1);
		printf("学号:");
		scanf("%s", stu[q].num);
		printf("姓名:");
		scanf("%s", stu[q].name);
		printf("性别:");
		scanf("%s", stu[q].sex);
		for (p = 0; p < M; p++)
		{
			printf("%s的成绩:", kecheng[p]);
			scanf("%f", &stu[q].score[p]);
		}
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值