学生成绩管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*包含必要的头文件*/


void menu();/*显示菜单函数*/
void addnew();/*增加学生信息*/
void display();/*显示全部信息*/
void find();/*查找学生*/
void sortmenu();/*排序菜单*/
void bjpx(int);/*按班级排序*/
void selec();/*选择排序的班级号码*/
void qnz();/*全年组排序*/
void total();/*统计菜单*/
void jige();/*统计及格人数*/
void yxl();/*统计优秀率*/
void pjf();/*统计平均分*/
void my_max();/*统计最大值 max函数是库函数重名 所以加了my_区别不同*/
/*函数声明*/

struct student
{
	int bj;//班级
	int xh;//学号
	int gs;//高数
	int yy;//英语
	int C;//C语言
	int sx;//思修
	int jds;//近代史
	int zf; //总分
}stu[5][20];

int NUM[5];/*记录班级人数*/



/*主函数*/
int main()
{
	int n;
	do
	{
		system("cls");
		//清除屏幕

		menu();
		scanf("%d",&n);
		switch(n)
		{
		case 0:break;
		case 1:addnew();break;
		case 2:display();break;
		case 3:sortmenu();break;
		case 4:find();break;
		case 5:total();break;
		}

	}while(n!=0);
	//死循环获取菜单选择进入相应函数
	return 0;
}


/*菜单  让用户观看*/
void menu()
{
	printf("1:输入学生信息\n");
	printf("2:输出学生信息\n");
	printf("3:排序学生信息\n");
	printf("4:查询学生信息\n");
	printf("5:分数统计\n");
	printf("0:退出\n");
	printf("请输入选项:");
}


/*添加新学生信息*/
void addnew()
{
	int num;
	system("cls");
	printf("请输入班级:\n");
	scanf("%d",&num);
	num--;//如果输入1,则实际保存在0,数组下标0开始
	stu[num][NUM[num]].bj=num;
	printf("请输入学号:\n");
	scanf("%d",&stu[num][NUM[num]].xh);
	printf("请输入高数成绩:\n");
	scanf("%d",&stu[num][NUM[num]].gs);
	printf("请输入英语成绩:\n");
	scanf("%d",&stu[num][NUM[num]].yy);
	printf("请输入C语言成绩:\n");
	scanf("%d",&stu[num][NUM[num]].C);
	printf("请输入思修成绩:\n");
	scanf("%d",&stu[num][NUM[num]].sx);
	printf("请输入近代史成绩:\n");
	scanf("%d",&stu[num][NUM[num]].jds);
	stu[num][NUM[num]].zf=stu[num][NUM[num]].gs+stu[num][NUM[num]].C+stu[num][NUM[num]].jds+stu[num][NUM[num]].sx+stu[num][NUM[num]].yy;
	//总分需要各项相加
	NUM[num]++;//这个班级人数+1
	printf("输入成功!\n");
	system("pause");
}

/*显示全部学生信息*/
void display()
{
	int i,j;
	system("cls");
	printf("班级\t学号\t高数\t英语\tC语言\t思修\t近代史\n");
	for(i=0;i<5;i++)
	{
		for(j=0;j<NUM[i];j++)
		{
			printf("%d\t",i+1);
			printf("%d\t",stu[i][j].xh);
			printf("%d\t",stu[i][j].gs);
			printf("%d\t",stu[i][j].yy);
			printf("%d\t",stu[i][j].C);
			printf("%d\t",stu[i][j].sx);
			printf("%d\n",stu[i][j].jds);
		}
	}
	system("pause");
	/*暂停屏幕函数*/
}


/*查找函数*/
void find()
{
	int i,j,num,flag=0;
	system("cls");
	printf("请输入要查询的学号:\n");
	scanf("%d",&num);
	printf("班级\t学号\t高数\t英语\tC语言\t思修\t近代史\n");


	for(i=0;i<5;i++)
	{
		for(j=0;j<NUM[i];j++)
		{
			if(stu[i][j].xh==num)
			{
				printf("%d\t",i+1);
				printf("%d\t",stu[i][j].xh);
				printf("%d\t",stu[i][j].gs);
				printf("%d\t",stu[i][j].yy);
				printf("%d\t",stu[i][j].C);
				printf("%d\t",stu[i][j].sx);
				printf("%d\n",stu[i][j].jds);
				flag++;//如果查找到  输出学生信息,并且flag++
			}
		}
	}
	if(flag==0)
	{
		printf("查不到该学号!\n");
		//如果一次都没找到  flag没有++过 为0 就显示找不到
	}
	system("pause");
}



/*排序菜单*/
void sortmenu()
{
	int n;
	system("cls");
	printf("1:班级内部\n");
	printf("2:全年组\n");
	printf("请选择排序方式\n");
	scanf("%d",&n);
	switch(n)
	{
	case 1:selec();break;
	case 2:qnz();break;
	}
}

/*班级选择菜单*/
void selec()
{
	int n;
	printf("请选择班级\n");
	printf("请输入1-5\n");
	scanf("%d",&n);
	bjpx(n-1);
	//数组下标是0-4  输入的时候是1-5所以-1
}


/*参数b代表要排序的班级*/
void bjpx(int b)
{
	int n;
	int i,j;
	struct student temp;
	printf("1:按高数排名输出\n");
	printf("2:按英语排名输出\n");
	printf("3:按C语言排名输出\n");
	printf("4:按思修排名输出\n");
	printf("5:按近代史排名输出\n");
	printf("6:按总分排名输出\n");
	printf("请选择排序方式\n");
	scanf("%d",&n);
	switch(n)
	{
	case 1:
        for (i=0;i<NUM[b];i++)
        {
            if(stu[b][i].gs<stu[b][i+1].gs)
            {
				temp=stu[b][i];
				stu[b][i]=stu[b][i+1];
				stu[b][i+1]=temp;
            }
        }
		//利用选择排序  对数据进行排序处理
		break;
	case 2:
		for (i=0;i<NUM[b];i++)
        {
            if(stu[b][i].yy<stu[b][i+1].yy)
            {
				temp=stu[b][i];
				stu[b][i]=stu[b][i+1];
				stu[b][i+1]=temp;
            }
        }
		break;
	case 3:
		for (i=0;i<NUM[b];i++)
        {
            if(stu[b][i].C<stu[b][i+1].C)
            {
				temp=stu[b][i];
				stu[b][i]=stu[b][i+1];
				stu[b][i+1]=temp;
            }
        }
		break;
	case 4:
		for (i=0;i<NUM[b];i++)
        {
            if(stu[b][i].sx<stu[b][i+1].sx)
            {
				temp=stu[b][i];
				stu[b][i]=stu[b][i+1];
				stu[b][i+1]=temp;
            }
        }
		break;
	case 5:
		for (i=0;i<NUM[b];i++)
        {
            if(stu[b][i].jds<stu[b][i+1].jds)
            {
				temp=stu[b][i];
				stu[b][i]=stu[b][i+1];
				stu[b][i+1]=temp;
            }
        }
		break;
	case 6:
		for (i=0;i<NUM[b];i++)
        {
            if(stu[b][i].zf<stu[b][i+1].zf)
            {
				temp=stu[b][i];
				stu[b][i]=stu[b][i+1];
				stu[b][i+1]=temp;
            }
        }
		break;
	}
	printf("班级\t学号\t高数\t英语\tC语言\t思修\t近代史\n");
	for(j=0;j<NUM[b];j++)
	{
		printf("%d\t",stu[b][j].bj+1);
		printf("%d\t",stu[b][j].xh);
		printf("%d\t",stu[b][j].gs);
		printf("%d\t",stu[b][j].yy);
		printf("%d\t",stu[b][j].C);
		printf("%d\t",stu[b][j].sx);
		printf("%d\n",stu[b][j].jds);
	}
	//输出排序后的信息
	system("pause");
}



void qnz()
{
	int n;
	int i,j,k,m;
	struct student temp;
	printf("1:按高数排名输出\n");
	printf("2:按英语排名输出\n");
	printf("3:按C语言排名输出\n");
	printf("4:按思修排名输出\n");
	printf("5:按近代史排名输出\n");
	printf("6:按总分排名输出\n");
	printf("请选择排序方式\n");
	scanf("%d",&n);
	switch(n)
	{
	case 1:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
			for(k=0;k<5;k++)
				for(m=0;m<NUM[k];k++)
            if(stu[j][i].gs<stu[k][m].gs)
            {
				temp=stu[j][i];
				stu[j][i]=stu[k][m];
				stu[k][m]=temp;
            }
        }
		//用四重循环遍历全校学生信息进行排序
		break;
	case 2:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
			for(k=0;k<5;k++)
				for(m=0;m<NUM[k];k++)
            if(stu[j][i].yy<stu[k][m].yy)
            {
				temp=stu[j][i];
				stu[j][i]=stu[k][m];
				stu[k][m]=temp;
            }
        }
		break;
	case 3:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
			for(k=0;k<5;k++)
				for(m=0;m<NUM[k];k++)
            if(stu[j][i].C<stu[k][m].C)
            {
				temp=stu[j][i];
				stu[j][i]=stu[k][m];
				stu[k][m]=temp;
            }
        }
		break;
	case 4:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
			for(k=0;k<5;k++)
				for(m=0;m<NUM[k];k++)
            if(stu[j][i].sx<stu[k][m].sx)
            {
				temp=stu[j][i];
				stu[j][i]=stu[k][m];
				stu[k][m]=temp;
            }
        }
		break;
	case 5:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
			for(k=0;k<5;k++)
				for(m=0;m<NUM[k];k++)
            if(stu[j][i].jds<stu[k][m].jds)
            {
				temp=stu[j][i];
				stu[j][i]=stu[k][m];
				stu[k][m]=temp;
            }
        }
		break;
	case 6:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
			for(k=0;k<5;k++)
				for(m=0;m<NUM[k];k++)
            if(stu[j][i].zf<stu[k][m].zf)
            {
				temp=stu[j][i];
				stu[j][i]=stu[k][m];
				stu[k][m]=temp;
            }
        }
		break;
	}
	printf("班级\t学号\t高数\t英语\tC语言\t思修\t近代史\n");
	for(i=0;i<5;i++)
	for(j=0;j<NUM[i];j++)
	{
		printf("%d\t",stu[i][j].bj+1);
		printf("%d\t",stu[i][j].xh);
		printf("%d\t",stu[i][j].gs);
		printf("%d\t",stu[i][j].yy);
		printf("%d\t",stu[i][j].C);
		printf("%d\t",stu[i][j].sx);
		printf("%d\n",stu[i][j].jds);
	}
	//输出排序后的信息
	system("pause");	
}



/*统计主菜单  */
void total()
{
	int m;
	printf("1:统计及格人数\n");
	printf("2:统计优秀率\n");
	printf("3:统计平均分\n");
	printf("4:统计最高分\n");
	printf("请输入选择:\n");
	scanf("%d",&m);
	switch(m)
	{
	case 1:
		jige();
		break;
	case 2:
		yxl();
		break;
	case 3:
		pjf();
		break;
	case 4:
		my_max();
		break;
	}
}


/*统计及格人数*/
void jige()
{
	int n,i,j,sum=0;
	printf("1:统计高数及格人数\n");
	printf("2:统计英语及格人数\n");
	printf("3:统计C语言及格人数\n");
	printf("4:统计思修及格人数\n");
	printf("5:统计近代史及格人数\n");
	scanf("%d",&n);
	switch(n)
	{
	case 1:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].gs<60)
            {
				sum++;
            }
        }//遍历全部学生,如果分数<60说明不及格 sum+1
		printf("高数及格人数为%d\n",sum);
		break;
	case 2:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].yy<60)
            {
				sum++;
            }
        }
		printf("英语及格人数为%d\n",sum);
		break;
	case 3:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].C<60)
            {
				sum++;
            }
        }
		printf("C语言及格人数为%d\n",sum);
		break;
	case 4:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].sx<60)
            {
				sum++;
            }
        }
		printf("思修及格人数为%d\n",sum);
		break;
	case 5:
		for(j=0;j<5;j++)
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].jds<60)
            {
				sum++;
            }
        }
		printf("近代史及格人数为%d\n",sum);
		break;
	}
	system("pause");
}



void yxl()
{
	int n,i,j,sum=0,rs=0;
	printf("1:统计高数优秀率\n");
	printf("2:统计英语优秀率\n");
	printf("3:统计C语言优秀率\n");
	printf("4:统计思修优秀率\n");
	printf("5:统计近代史优秀率\n");
	scanf("%d",&n);
	switch(n)
	{
	case 1:
		for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].gs>=90)
            {
				sum++;
            }
        }
		rs+=NUM[j];
		}
		//rs用来记录每个班人数之和
		printf("高数优秀率为%g\n",sum*1.0/rs);
		break;

	case 2:
		for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].yy>=90)
            {
				sum++;
            }
        }
		rs+=NUM[j];
		}
		printf("英语优秀率为%g\n",sum*1.0/rs);
		break;
	case 3:
		for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].C>=90)
            {
				sum++;
            }
        }
		rs+=NUM[j];
		}
		printf("C语言优秀率为%g\n",sum*1.0/rs);
		break;
	case 4:
		for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].sx>=90)
            {
				sum++;
            }
        }
		rs+=NUM[j];
		}
		printf("思修优秀率为%g\n",sum*1.0/rs);
		break;
	case 5:
		for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            if(stu[j][i].jds>=90)
            {
				sum++;
            }
        }
		rs+=NUM[j];
		}
		printf("近代史优秀率为%g\n",sum*1.0/rs);
		break;
	}
	system("pause");
}

void pjf()
{
	int n,i,j,sum=0,rs=0;
	printf("1:统计高数平均分\n");
	printf("2:统计英语平均分\n");
	printf("3:统计C语言平均分\n");
	printf("4:统计思修平均分\n");
	printf("5:统计近代史平均分\n");
	scanf("%d",&n);
	switch(n)
	{
	case 1:
		for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            sum+=stu[j][i].gs;
        }
		rs+=NUM[j];
		}
		//rs同样是记录人数和
		printf("高数平均分为%g\n",sum*1.0/rs);
		break;

	case 2:
		for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            sum+=stu[j][i].yy;
        }
		rs+=NUM[j];
		}
		printf("英语平均分为%g\n",sum*1.0/rs);
		break;
	case 3:
			for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            sum+=stu[j][i].C;
        }
		rs+=NUM[j];
		}
		printf("C语言平均分为%g\n",sum*1.0/rs);
		break;
	case 4:
		for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            sum+=stu[j][i].sx;
        }
		rs+=NUM[j];
		}
		printf("思修平均分为%g\n",sum*1.0/rs);
		break;
	case 5:
			for(j=0;j<5;j++)
		{
		for (i=0;i<NUM[j];i++)
        {
            sum+=stu[j][i].jds;
        }
		rs+=NUM[j];
		}
		printf("近代史平均分为%g\n",sum*1.0/rs);
		break;
	}
	system("pause");
}



void my_max()
{
	int n,i,j,max=0;
	printf("1:高数最高分\n");
	printf("2:英语最高分\n");
	printf("3:C语言最高分\n");
	printf("4:思修最高分\n");
	printf("5:近代史最高分\n");
	scanf("%d",&n);
	switch(n)
	{
	case 1:
		for(j=0;j<5;j++)
		{
			for (i=0;i<NUM[j];i++)
			{
			   if(max<stu[j][i].gs)
				   max=stu[j][i].gs;
			   //判断max是不是比这个学生的小,如果小,就换值
			 }
		}
		printf("高数最高分为%d\n",max);
		break;

	case 2:
		for(j=0;j<5;j++)
		{
			for (i=0;i<NUM[j];i++)
			{
			   if(max<stu[j][i].yy)
				   max=stu[j][i].yy;
			 }
		}
		printf("英语最高分为%d\n",max);
		break;
	case 3:
		for(j=0;j<5;j++)
		{
			for (i=0;i<NUM[j];i++)
			{
			   if(max<stu[j][i].C)
				   max=stu[j][i].C;
			 }
		}
		printf("C语言最高分为%d\n",max);
		break;
	case 4:
	for(j=0;j<5;j++)
		{
			for (i=0;i<NUM[j];i++)
			{
			   if(max<stu[j][i].sx)
				   max=stu[j][i].sx;
			 }
		}
		printf("思修最高分为%d\n",max);
		break;
	case 5:
	for(j=0;j<5;j++)
		{
			for (i=0;i<NUM[j];i++)
			{
			   if(max<stu[j][i].jds)
				   max=stu[j][i].jds;
			 }
		}
		printf("近代史最高分为%d\n",max);
		break;
	}
	system("pause");

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值