学生信息管理系统 小型结课项目

PS代码效率并不是很高,仅供参考

//测试数据 
/*3 1 100 1 小明 90 90 80 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
 101 2 小红 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
 102 3 小李 90 100 90 90 100 90 100 90 90 90 90 100 90 90 90 90 90 90 1 */
#include<stdio.h>
#include<windows.h> 
struct score
{
	int C;
	int Math;
	int Phy;
	int Ide;
	int PE;
	int Introduce;
};
struct student
{
	int Id;
	int Classid;
	int allscore;
	char Name[20];
	struct score Usually;
	struct score Midterm;
	struct score Endterm;
	struct score FinallyScore;
}stu[10000],LOL;
struct classInfo
{
	float studentCount;
	float allscore;
	float avescore;
	int classid;
}stuClass[100],swap;
int showRewardList(int N,int n,int k)//奖学金同学列表 
{
	int flag=0;
	for(int s=0;s<N;s++)//排序部分,这里按照班级顺序来排,输出也是按班输出。 
	{
		for(int i=0;i<n;i++)
		{
			flag=0;
			for(int j=0;j<N*n;j++)
			{
				if(stu[j].Classid==s+1)
				{
					if(stu[flag].allscore<stu[j].allscore&&stu[flag].Classid==s+1)
					{
						LOL=stu[j];
						stu[j]=stu[flag];
						stu[flag]=LOL;
					}
					flag=j;
				}
			}
		}
		for(int i=0,j=0;i<k;j++)//输出部分 
		{
			if(stu[j].Classid==s+1)
			{
				i++;
				printf("%d\t%s\t%d\t%d\n",
				stu[j].Id,
				stu[j].Name,
				stu[j].Classid,
				stu[j].allscore);
			}
		}
	}
	
}
int studentSort(int N,int n)//学生成绩排行 
{
	for(int i=0;i<N*n;i++)
	{
		for(int j=0;j<N*n-i-1;j++)
		{
			if(stu[j].allscore<stu[j+1].allscore)
			{
				LOL=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=LOL;
			}
		}
	}
} 
int showStudentInfo(int id,int N,int n)//查询学生信息 
{
	for(int i=0;i<N*n;i++)
	{
		if(stu[i].Id==id)
		{
			printf("查询结果为:\n");
			printf("学号\t姓名\t班级\t总分\n");
			printf("%d\t%s\t%d\t%d",
			stu[i].Id,
			stu[i].Name,
			stu[i].Classid,
			stu[i].allscore);
			break;
		}
	}
}
int classAllsort(int N)//所有班总分排名 
{
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<N-i;j++)
		{
			if(stuClass[j].allscore<stuClass[j+1].allscore)
			{
				swap=stuClass[j];
				stuClass[j]=stuClass[j+1];
				stuClass[j+1]=swap; 
			} 
		}
	}
}
int classAvesort(int N)//所有班平均分排名 
{
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<N-i;j++)
		{
			if(stuClass[j].avescore<stuClass[j+1].avescore)
			{
				swap=stuClass[j];
				stuClass[j]=stuClass[j+1];
				stuClass[j+1]=swap; 
			} 
		}
	}
}
int showClassRank(int N)//输出所有班总分排名 
{
	for(int i=0;i<N;i++)
	{
		printf("第%d名是第%d班\n",i+1,stuClass[i].classid);
	}
}
int showStuRank(int N,int n)//输出学生排名 
{
	printf("\n学号\t姓名\t班级\t总分\n");
	for(int i=0;i<N*n;i++)
	{
		printf("%d\t%s\t%d\t%d\n",stu[i].Id,stu[i].Name,stu[i].Classid,stu[i].allscore);
	}
}
int imput(int N,int n)//输入部分 
{
	for(int i=0;i<n*N;i++)
	{

		scanf("%d%d%s%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d",
		&stu[i].Id,
		&stu[i].Classid,
		&stu[i].Name,
		&stu[i].Usually.C,
		&stu[i].Usually.Math,
		&stu[i].Usually.Phy,
		&stu[i].Usually.Ide,
		&stu[i].Usually.PE,
		&stu[i].Usually.Introduce,
		&stu[i].Midterm.C,
		&stu[i].Midterm.Math,
		&stu[i].Midterm.Phy,
		&stu[i].Midterm.Ide,
		&stu[i].Midterm.PE,
		&stu[i].Midterm.Introduce,
		&stu[i].Endterm.C,
		&stu[i].Endterm.Math,
		&stu[i].Endterm.Phy,
		&stu[i].Endterm.Ide,
		&stu[i].Endterm.PE,
		&stu[i].Endterm.Introduce);

		//各科成绩 
		stu[i].FinallyScore.C=stu[i].Usually.C*0.2+stu[i].Midterm.C*0.2+stu[i].Endterm.C*0.6;
		stu[i].FinallyScore.Math=stu[i].Usually.Math*0.2+stu[i].Midterm.Math*0.2+stu[i].Endterm.Math*0.6;
		stu[i].FinallyScore.Phy=stu[i].Usually.Phy*0.2+stu[i].Midterm.Phy*0.2+stu[i].Endterm.Phy*0.6;
		stu[i].FinallyScore.Ide=stu[i].Usually.Ide*0.2+stu[i].Midterm.Ide*0.2+stu[i].Endterm.Ide*0.6;
		stu[i].FinallyScore.PE=stu[i].Usually.PE*0.2+stu[i].Midterm.PE*0.2+stu[i].Endterm.PE*0.6;
		stu[i].FinallyScore.Introduce=stu[i].Usually.Introduce*0.2+stu[i].Midterm.Introduce*0.2+stu[i].Endterm.Introduce*0.6;
		//总成绩 
		stu[i].allscore=stu[i].FinallyScore.C+
		stu[i].FinallyScore.Ide+
		stu[i].FinallyScore.Introduce+
		stu[i].FinallyScore.Math+
		stu[i].FinallyScore.PE+
		stu[i].FinallyScore.Phy;
		//班总成绩 
		stuClass[stu[i].Classid-1].allscore+=stu[i].allscore;
		//班人数
		stuClass[stu[i].Classid-1].studentCount++;
	}
	//班级平均分
	for(int i=0;i<N;i++)
	{
		stuClass[i].avescore=stuClass[i].allscore/stuClass[i].studentCount;
	}
	//给每个班打上编号
	for(int i=0;i<N;i++)
	{
		stuClass[i].classid=i+1;
	} 
}
int menu(void)//朴实无华的菜单 
{
	system("color 2"); 
	printf("\t\t\t");
	for(int i=1;i<=26;i++)//上边框 
	{
		Sleep(10);
		printf("■");	
	}
	for(int i=1;i<=15;i++)
	{
		printf("\n\t\t\t");
		if(i==2)
		{
			for(int i=1;i<=50;i++)//学生信息标题 
			{
				if(i==1||i==50)
				{
					Sleep(10);
					printf("■");
				}else if(i==18)
				{
					Sleep(40);
					printf("学");
					Sleep(40);
					printf("生");
					Sleep(40);
					printf("考");
					Sleep(40);
					printf("试");
					Sleep(40);
					printf("信");
					Sleep(40);
					printf("息");
					Sleep(40);
					printf("系");
					Sleep(40);
					printf("统");
					Sleep(40); 
					i+=15;
				}
				else
				{
					printf(" ");
				}
			}
		}else if(i==4)
		{
			for(int i=1;i<=50;i++)//查询各班总分排名 
			{
				if(i==1||i==50)
				{
					Sleep(10);
					printf("■");
				}else if(i==18)
				{
					Sleep(40);
					printf("1、");
					Sleep(40);
					printf("查");
					Sleep(40);
					printf("询");
					Sleep(40);
					printf("各");
					Sleep(40);
					printf("班");
					Sleep(40);
					printf("总");
					Sleep(40);
					printf("分");
					Sleep(40);
					printf("排");
					Sleep(40);
					printf("名");
					Sleep(40);
					i+=18;
				}
				else
				{
					printf(" ");
				}
			} 
		}else if(i==5)
		{
			for(int i=1;i<=50;i++)//查询各班平均分排名 
			{
				if(i==1||i==50)
				{
					Sleep(10);
					printf("■");
				}else if(i==18)
				{
					Sleep(40);
					printf("2、");
					Sleep(40);
					printf("查");
					Sleep(40);
					printf("询");
					Sleep(40);
					printf("各");
					Sleep(40);
					printf("班");
					Sleep(40);
					printf("平");
					Sleep(40);
					printf("均");
					Sleep(40);
					printf("分");
					Sleep(40);
					printf("排");
					Sleep(40);
					printf("名");
					Sleep(40);
					i+=20;
				}
				else
				{
					printf(" ");
				}
			} 
		}else if(i==6)
		{
			for(int i=1;i<=50;i++)//查询个别学生信息
			{
				if(i==1||i==50)
				{
					Sleep(10);
					printf("■");
				}else if(i==18)
				{
					Sleep(40);
					printf("3、");
					Sleep(40);
					printf("查");
					Sleep(40);
					printf("询");
					Sleep(40);
					printf("个");
					Sleep(40);
					printf("别");
					Sleep(40);
					printf("学");
					Sleep(40);
					printf("生");
					Sleep(40);
					printf("信");
					Sleep(40);
					printf("息");
					Sleep(40);
					i+=18;
				}
				else
				{
					printf(" ");
				}
			} 
		}else if(i==7)
		{
			for(int i=1;i<=50;i++)//输出学生排名 
			{
				if(i==1||i==50)
				{
					Sleep(10);
					printf("■");
				}else if(i==18)
				{
					Sleep(40);
					printf("4、");
					Sleep(40);
					printf("查");
					Sleep(40);
					printf("询");
					Sleep(40);
					printf("学");
					Sleep(40);
					printf("生");
					Sleep(40);
					printf("总");
					Sleep(40);
					printf("分");
					Sleep(40);
					printf("排");
					Sleep(40);
					printf("名");
					Sleep(40);
					i+=18;
				}
				else
				{
					printf(" ");
				}
			} 
		}else if(i==8)
		{
			for(int i=1;i<=50;i++)//输出奖学金推荐名单 
			{
				if(i==1||i==50)
				{
					Sleep(10);
					printf("■");
				}else if(i==18)
				{
					Sleep(40);
					printf("5、");
					Sleep(40);
					printf("查");
					Sleep(40);
					printf("询");
					Sleep(40);
					printf("奖");
					Sleep(40);
					printf("学");
					Sleep(40);
					printf("金");
					Sleep(40);
					printf("名");
					Sleep(40);
					printf("单");
					Sleep(40);
					i+=16;
				}
				else
				{
					printf(" ");
				}
			} 
		}else if(i==14)
		{
			for(int i=1;i<=50;i++)//退出系统 
			{
				if(i==1||i==50)
				{
					Sleep(10);
					printf("■");
				}else if(i==18)
				{
					Sleep(40);
					printf("9、");
					Sleep(40);
					printf("退");
					Sleep(40);
					printf("出");
					Sleep(40);
					printf("系");
					Sleep(40);
					printf("统");
					Sleep(40);
					i+=10;
				}
				else
				{
					printf(" ");
				}
			} 
		}else
		{
			for(int i=1;i<=50;i++)//空的两侧边框 
			{
				if(i==1||i==50)
				{
					Sleep(10);
					printf("■");
				}else
				{
					printf(" ");
				}
			}
		}				
	}
	printf("\n\t\t\t");
	for(int i=1;i<=26;i++)//尾行边框 
	{
		Sleep(10);
		printf("■");	
	}
}
int main(void)
{
	int N,n,k,id;
	int num;
	printf("请输入学生信息\n");
	scanf("%d%d",&N,&n);
	imput(N,n);
	scanf("%d",&k);
	menu();
	for(;;)
	{
		printf("\n\n请输入功能所对应序号:");
		scanf("%d",&num);
		if(num==1)
		{
			printf("班级总分排名为:\n");
			classAllsort(N);
			showClassRank(N);
		}else if(num==2)
		{
			printf("班级平均分排名为:\n");
			classAvesort(N);
			showClassRank(N);
		}else if(num==3)
		{
			printf("\n请输入学生的学号来查询:\n");
			scanf("%d",&id);
			showStudentInfo(id,N,n);
		}else if(num==4)
		{
			printf("学生排名为:\n");
			studentSort(N,n);
			showStuRank(N,n);
		}else if(num==5)
		{
			printf("获得奖学金的同学信息为:\n");
			showRewardList(N,n,k);
		} 
		else if(num==9)
		{
			printf("系统已关闭");
			break;
		}else
		{
			printf("序号不存在请重新输入\n");
		}
	}
	return 0;
} 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值