学生成绩管理系统

#include<stdio.h>
#include<windows.h>
#define MAX 42

void enter();
void show();
void find();
void changed();
void del();
void save();
void low();
void TopAndLow(); 
void avd();
void sum();
double pj_1();
double pj_2();
double pj_3();
double pj_4();
double pj_5(); 
double banjipj();

int number=0;

struct student
{
	int nub;
	char name[10];
	char sex[10];
	double one;
	double two;
	double three;
	double four;
	double five;
		
}stu[MAX];

double banjipj()
{
	int i;
	double he=0,bjpj=0;
	for(i=0;i<number;i++){
		he=stu[i].one+stu[i].two+stu[i].three+stu[i].four+stu[i].five;
	}
	bjpj=he/number;
	return bjpj;
}

double avd(int i)
{
	double pj=0;
	pj=((stu[i].one+stu[i].two+stu[i].three+stu[i].four+stu[i].five)/5.0);
	return pj;
}

double sum(int i)
{
	double he=0;
	he=stu[i].one+stu[i].two+stu[i].three+stu[i].four+stu[i].five;
	return he;
}

double pj_1()
{
	int i; 
	double pj=0;
	for(i=0;i<number;i++)
	{
		pj=pj+stu[i].one; 
	}
	pj=pj/number;
	return pj; 
}

double pj_2()
{
	int i;
	double pj=0;
	for(i=0;i<number;i++)
	{
		pj=pj+stu[i].two; 
	}
	pj=pj/number;
	return pj; 
}

double pj_3()
{
	int i;
	double pj=0;
	for(i=0;i<number;i++)
	{
		pj=pj+stu[i].three; 
	}
	pj=pj/number;
	return pj; 
}

double pj_4()
{
	int i;
	double pj=0;
	for(i=0;i<number;i++)
	{
		pj=pj+stu[i].four; 
	}
	pj=pj/number;
	return pj; 
}

double pj_5()
{
	int i;
	double pj=0;
	for(i=0;i<number;i++)
	{
		pj=pj+stu[i].five; 
	}
	pj=pj/number;
	return pj; 
}

void enter()
{
	int i,t,n;
	int temp_xh,flag=1,c;
	system("cls");
	printf("请输入要录入学生的人数:\n");
	scanf("%d",&n);
	for(t=0;t<n;t++)
	{
		printf("请输入要录入学生的学号:\n");
		scanf("%d",&temp_xh);
		for(i=0;i<number;i++)
		{
			if(stu[i].nub==temp_xh)
			{
				printf("已存在,请重试!\n");
				flag=0;
			}
		}
		if(flag==1)
		{
			stu[i].nub=temp_xh;
			printf("请输入该学生的姓名:\n");
			scanf("%s",stu[i].name);
			printf("请输入该学生的性别:\n");
			scanf("%s",stu[i].sex);
			printf("请输入该学生的第一科成绩:\n");
			scanf("%lf",&stu[i].one);
			printf("请输入该学生的第二科成绩:\n");
			scanf("%lf",&stu[i].two);
			printf("请输入该学生的第三科成绩:\n");
			scanf("%lf",&stu[i].three);
			printf("请输入该学生的第四科成绩:\n");
			scanf("%lf",&stu[i].four);
			printf("请输入该学生的第五科成绩:\n");
			scanf("%lf",&stu[i].five);
			printf("录入成功!\n");
			number++;
		}if(flag==0){
			t--;
			flag=1;
			continue;
		}
	} 
	printf("已成功录入%d位学生!\n",n);
	printf("是否继续录入?\n# 1.继续 \n# 2.返回菜单\n");
	scanf("%d",&c);
	if(c==1)
	{
		system("cls");
		enter();
	}
	else
	{
		printf("正在返回菜单...\n");
		Sleep(2000);
	}
	system("cls");
}

void show()
{
	system("cls");
	int i,n,t;
	int a;
	struct student temp;
	printf("请输入要查询的形式:\n");
	printf("1.学号排序\n2.总分排序\n");
	scanf("%d",&a);
	if(a==1)
	{
		for(i=0;i<number;i++)
		{
			printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 平均分:%.1f\n 总分:%.1f\n\n",stu[i].nub,stu[i].name,stu[i].sex,avd(i),sum(i));
		
		}
	}else if(a==2)
	{
		for(i=0;i<number-1;i++)
		{
			for(t=0;t<number;t++)
			{
				if((stu[t].one+stu[t].two+stu[t].three+stu[t].four+stu[t].five)<(stu[t+1].one+stu[t+1].two+stu[t+1].three+stu[t+1].four+stu[t+1].five))
				{
					temp=stu[t];
					stu[t]=stu[t+1];
					stu[t+1]=temp;
				}
			}
		}
		for(i=0;i<number;i++)
		{
			printf("#排名:%d\n 学号:%06d\n 姓名:%s\n 性别:%s\n 平均分:%.1f\n 总分:%.1f\n\n",i+1,stu[i].nub,stu[i].name,stu[i].sex,avd(i),sum(i));
		
		}
	}
	system("pause");
	system("cls");
	
}

void find()
{
	int i;
	int n,xh;
	char mingzi[10];
	printf("请选择您想要的查找方式:\n");
	printf("  1.姓名  2.学号\n");
	scanf("%d",&n);
	if(n==1)
	{
		printf("请选择您想要查找学生的名字:\n");
		scanf("%s",mingzi);
		for(i=0;i<number;i++)
		{
			if(strcmp(mingzi,stu[i].name)==0)
			{
				printf("#学号:%d\n 姓名:%s\n 性别:%s\n 第一科:%.1f\n 第二科:%.1f\n 第三科:%.1f\n 第四科:%.1f\n 第五科:%.1f\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one,stu[i].two,stu[i].three,stu[i].four,stu[i].five);
			}
		}
		
	}else if(n==2)
	{
		printf("请选择您想要查找学生的学号:\n");
		scanf("%d",&xh);
		for(i=0;i<number;i++)
		{
			if(xh==stu[i].nub)
			{
				printf("#学号:%d\n 姓名:%s\n 性别:%s\n 第一科:%.1f\n 第二科:%.1f\n 第三科:%.1f\n 第四科:%.1f\n 第五科:%.1f\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one,stu[i].two,stu[i].three,stu[i].four,stu[i].five);
			}
		}	
	} 
	system("pause");
	system("cls");
	
}

void changed()
{
	int i;
	int n,xh,flag=0;
	char mingzi[10],xingbie[10]; 
	printf("请选择您想要的查找方式:\n");
	printf("  1.姓名  2.学号\n");
	scanf("%d",&n);
	if(n==1)
	{
		printf("请选择您想要修改的学生名字:\n");
		scanf("%s",mingzi);
		for(i=0;i<number;i++)
		{
			if(strcmp(mingzi,stu[i].name)==0)
			{
				printf("#学号:%d\n 姓名:%s\n 性别:%s\n 第一科:%.1f\n 第二科:%.1f\n 第三科:%.1f\n 第四科:%.1f\n 第五科:%.1f\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one,stu[i].two,stu[i].three,stu[i].four,stu[i].five);
				flag=1;
				break;
			}
		}
		
	}else if(n==2)
	{
		printf("请选择您想要修改的学生学号:\n");
		scanf("%d",&xh);
		for(i=0;i<number;i++)
		{
			if(xh==stu[i].nub)
			{
				printf("#学号:%d\n 姓名:%s\n 性别:%s\n 第一科:%.1f\n 第二科:%.1f\n 第三科:%.1f\n 第四科:%.1f\n 第五科:%.1f\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one,stu[i].two,stu[i].three,stu[i].four,stu[i].five);
				flag=1;
				break;
			}
		}	
	}
	if(flag==1)
	{
		printf("请输入要修改的内容:\n");
		printf(" 1.姓名\n 2.性别\n 3.第一科成绩\n 4.第二科成绩\n 5.第三科成绩\n 6.第四科成绩\n 7.第五科成绩\n\n");
		scanf("%d",&n);
		switch(n)
		{
			case 1:{
				system("cls");
				printf("请输入要修改的名字:\n");
				scanf("%s",mingzi);
				strcpy(stu[i].name,mingzi);
				printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
				scanf("%d",&n);
				if(n==1)
				{
					system("cls");
					changed();
				}else
				{
					printf("稍等...\n"); 
					Sleep(2000);
					system("cls");
					break;
				}
				break;
			}
			case 2:{
				system("cls");
				printf("请输入要修改的内容:\n");
				scanf("%s",xingbie);
				strcpy(stu[i].name,xingbie);
				printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
				scanf("%d",&n);
				if(n==1)
				{
					system("cls");
					changed();
				}else
				{
					printf("稍等...\n"); 
					Sleep(2000);
					system("cls");
					break;
				}
				break;
			}
			case 3:{
				system("cls");
				printf("请输入要修改的内容:\n");
				scanf("%d",&n);
				stu[i].one=n;
				printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
				scanf("%d",&n);
				if(n==1)
				{
					system("cls");
					changed();
				}else
				{
					printf("稍等...\n"); 
					Sleep(2000);
					system("cls");
					break;
				}
				break;
			}
			case 4:{
				system("cls");
				printf("请输入要修改的内容:\n");
				scanf("%d",&n);
				stu[i].two=n;
				printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
				scanf("%d",&n);
				if(n==1)
				{
					system("cls");
					changed();
				}else
				{
					printf("稍等...\n"); 
					Sleep(2000);
					system("cls");
					break;
				}
				break;
			}
			case 5:{
				system("cls");
				printf("请输入要修改的内容:\n");
				scanf("%d",&n);
				stu[i].three=n;
				printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
				scanf("%d",&n);
				if(n==1)
				{
					system("cls");
					changed();
				}else
				{
					printf("稍等...\n"); 
					Sleep(2000);
					system("cls");
					break;
				}
				break;
			}
			case 6:{
				system("cls");
				printf("请输入要修改的内容:\n");
				scanf("%d",&n);
				stu[i].four=n;
				printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
				scanf("%d",&n);
				if(n==1)
				{
					system("cls");
					changed();
				}else
				{
					printf("稍等...\n"); 
					Sleep(2000);
					system("cls");
					break;
				}
				break;
			}
			case 7:{
				system("cls");
				printf("请输入要修改的内容:\n");
				scanf("%d",&n);
				stu[i].five=n;
				printf("修改成功!是否继续?\n 1.继续 2.返回菜单\n");
				scanf("%d",&n);
				if(n==1)
				{
					system("cls");
					changed();
				}else
				{
					printf("稍等...\n"); 
					Sleep(2000);
					system("cls");
					break;
				}
				break;
			}
		}
	}
	system("cls");
	
}

void del()
{
	int i,t;
	int n,xh;
	char mingzi[10]; 
	printf("请选择您想要依照的方式进行删除:\n");
	printf("  1.姓名  2.学号\n");
	scanf("%d",&n);
	if(n==1)
	{
		printf("请选择您想要删除的学生名字:\n");
		scanf("%s",mingzi);
		for(i=0;i<number;i++)
		{
			if(strcmp(mingzi,stu[i].name)==0)
			{
				for(t=i;t<number-1;t++)
				{
					stu[t]=stu[t+1]; 
				}
				number--;
				break;
			}
		}
		
	}else if(n==2)
	{
		printf("请选择您想要删除的学生学号:\n");
		scanf("%d",&xh);
		for(i=0;i<number;i++)
		{
			if(xh==stu[i].nub)
			{
				for(t=i;t<number-1;t++)
				{
					stu[t]=stu[t+1]; 

				}
				number--;
				break;
			}
		}	
	}
	printf("(不论是否存在)删除成功!正在返回菜单......\n");
	Sleep(2000);
	system("cls");
}

void save()
{
	system("cls");
	FILE* fp;
	int i;
	if ((fp = fopen("score.txt", "w+b")) == NULL)
	{
		printf("打开文件失败!\n");
		exit(0);
	}
	for (i = 0; i < number; i++)
	{
		if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)
			printf("保存失败!\n");
	}
	printf("保存成功!\n");
	fclose(fp);
	system("pause");
	system("cls");
}

void low()
{
	system("cls");
	int i,a;
	printf("请选择要显示的科目或者总分:\n");
	printf("#1.第一科\n#2.第二科\n#3.第三科\n#4.第四科\n#5.第五科\n#6.总分\n\n");
	scanf("%d",&a);
	switch(a){
		case 1:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_1());
			for(i=0;i<number;i++){
				if(stu[i].one<pj_1()){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第一科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one);
				}
			}
			break;
		}
		case 2:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_2());
			for(i=0;i<number;i++){
				if(stu[i].two<pj_2()){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第二科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].two);
				}
			}
			break;
		}
		case 3:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_3());
			for(i=0;i<number;i++){
				if(stu[i].three<pj_3()){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第三科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].three);
				}
			}
			break;
		}
		case 4:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_4());
			for(i=0;i<number;i++){
				if(stu[i].four<pj_4()){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第四科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].four);
				}
			}
			break;
		}
		case 5:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_5());
			for(i=0;i<number;i++){
				if(stu[i].five<pj_5()){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第五科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].five);
				}
			}
			break;
		}
		case 6:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分或高于90分:\n",banjipj());
			for(i=0;i<number;i++){
				if(stu[i].one<banjipj()){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 总分\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,sum(i));
				}
			}
			break;
		}
	}
	printf("是否继续查询?\n 1.继续 其他.返回菜单\n");
	scanf("%d",&a);
	if(a==1){
		system("cls");
		low();
		return;
	} else{
		return;
		system("pause");
		system("cls");	
	}	
}

void TopAndLow()
{
	system("cls");
	int i,a;
	printf("请选择要显示的科目或者总分:\n");
	printf("#1.第一科\n#2.第二科\n#3.第三科\n#4.第四科\n#5.第五科\n#6.总分\n\n");
	scanf("%d",&a);
	switch(a){
		case 1:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_1);
			for(i=0;i<number;i++){
				if(stu[i].one<pj_1() || stu[i].one>=90){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第一科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].one);
				}
			}
			break;
		}
		case 2:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_2);
			for(i=0;i<number;i++){
				if(stu[i].two<pj_2() || stu[i].two>=90){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第二科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].two);
				}
			}
			break;
		}
		case 3:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_3);
			for(i=0;i<number;i++){
				if(stu[i].three<pj_3() || stu[i].three>=90){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第三科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].three);
				}
			}
			break;
		}
		case 4:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_4);
			for(i=0;i<number;i++){
				if(stu[i].four<pj_4() || stu[i].four>=90){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第四科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].four);
				}
			}
			break;
		}
		case 5:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",pj_5);
			for(i=0;i<number;i++){
				if(stu[i].five<pj_5() || stu[i].five>=90){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 科目:第五科\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,stu[i].five);
				}
			}
			break;
		}
		case 6:{
			printf("该班级的平均分为:%.2f\n其中有以下同学低于平均分:\n",banjipj());
			for(i=0;i<number;i++){
				if(sum(i)<banjipj()){
					printf("#学号:%06d\n 姓名:%s\n 性别:%s\n 总分\n 成绩:%.2f\n\n",stu[i].nub,stu[i].name,stu[i].sex,sum(i));
				}
			}
			break;
		}
	}
	printf("是否继续查询?\n 1.继续 其他.返回菜单\n");
	scanf("%d",&a);
	if(a==1){
		system("cls");
		TopAndLow();
		return;
	} else{
		return;
		system("pause");
		system("cls");	
	}
}

int main()
{
	FILE* fp;
	int i;
	if ((fp = fopen("score.txt", "a+b")) == NULL)
	{
		printf("Open Error!\n");
		exit(0);
	}
	for (i = 0; fread(&stu[i], sizeof(struct student), 1, fp) != 0; i++)
	{
		number++;	
	}	
	int n;
	system("cls");
	while (1) {
		int flag = 0;
		printf("— 欢迎使用成绩管理系统! —\n");
		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("———— 9.退出程序 ————\n");
		printf("——————————————\n");
		printf("— 目前已经记录了%d位学生 —\n",number);
		scanf("%d", &n);
			switch (n)
			{
			case 1: {
				enter();
				break;
			}
			case 2: {
				show();
				break;
			}
			case 3: {
				find();
				break;
			}
			case 4: {
				changed();
				break;
			}
			case 5: {
				del();
				break;
			}
			case 6: {
				save();
				break;
			}
			case 7: {
				low();
				break;
			}
			case 8:{
				TopAndLow();
				break;
			}
			case 9:{
				flag = 1;
				break;
			}
			default: {
				printf("请输入1~7的有效数字!\n");
				break;
			}
		}
		if (flag == 1) {
			printf("谢谢使用!正在退出~\n");
			break;
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值