【C#】学生综合信息管理系统

学生信息包括姓名、年龄、籍贯、3门课(数理化)成绩,实现如下运算:
1、数据录入;
2、打印总分最高学生的相关信息;
3、打印单科最高分学生 (输入科目);
4、打印单科挂科学生名单及人数(输入科目);
5、按平均分降序分行输出,格式:张三,87.2;
6、按分数段(平均分)查询并打印学生信息
7、按省份统计学生数(输入省份,显示人数)
0、退出

#include<iostream>
using namespace std;
#define MAX 100

//定义结构体
typedef struct person
{
	char name[15]; //姓名
	int  age;      //年龄
	char birth[15];      //籍贯
	int grades[3] = { 0 };      //成绩(三科)
}person;

person students[MAX];//信息数组

int input(person students[])//数据录入
{ 
	int n;//学生数量
	printf("请输入学生数量:");
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++)
	{
		printf("请输入学生信息:\n");
		printf("姓名:");
		scanf_s("%s", &students[i].name, 15);
		printf("年龄:");
		scanf_s("%d", &students[i].age);
		printf("籍贯:");
		scanf_s("%s", &students[i].birth, 15);
		printf("成绩:");
		for (int j = 0; j < 3; j++)
		{
			if (j == 0)
			{
				printf("\n数学:");
				scanf_s("%d", &students[i].grades[j]);
			}
			else if (j == 1)
			{
				printf("物理:");
				scanf_s("%d", &students[i].grades[j]);
			}
			else
			{
				printf("化学:");
				scanf_s("%d", &students[i].grades[j]);
			}
		}
	}
	return n;
}

void PrintfSumMax(person students[],int n)//打印总分最高学生的相关信息
{
	int Sum[100] = { 0 };
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 3; j++)
			Sum[i] += students[i].grades[j];
	}
	int temp,order=0;
	temp = Sum[0];
	for (int i = 0; i < n; i++)
	{
		if (Sum[i] > temp)
		{
			order = i;
			temp = Sum[i];
		}
	}
	printf("总分最高的学生是%s\t年龄:%d\t籍贯:%s\t三门课成绩%4d,%4d,%4d\n", students[order].name, students[order].age, students[order].birth,students[order].grades[0], students[order].grades[1], students[order].grades[2]);
}

void PrintfMax(person students[], int n)//打印单科最高分学生 (输入科目);
{
	int choice = 0;//选择科目的编号
	char Class[15];//选择查看的科目
	char Class1[15] = "数学";
	char Class2[15] = "物理";
	char Class3[15] = "化学";
	printf("要选择什么科目?请输入:");
	scanf_s("%s", &Class, 15);
	if(strcmp(Class, Class1)==0)//替换为选择科目的编号
		choice = 0;
	else if (strcmp(Class, Class2) == 0)
		choice = 1;
	else choice = 2;
	int temp, order = 0;
	temp = students[order].grades[choice];
	for (int i = 0; i < n; i++)
	{
		if (students[i].grades[choice] > temp)
		{
			order = i;
			temp = students[i].grades[choice];
		}
	}
	printf("单科分最高的学生是:%s\n", students[order].name);
}

void PrintfNo(person students[], int n)//打印单科挂科学生名单及人数(输入科目);
{
	int choice = 0;//选择科目的编号
	char Class[15];//选择查看的科目
	char Class1[15] = "数学";
	char Class2[15] = "物理";
	char Class3[15] = "化学";
	printf("要查看什么科目?请输入:");
	scanf_s("%s", &Class, 15);
	if (strcmp(Class, Class1) == 0)//替换为选择科目的编号
	{
		choice = 0; 
		printf("数学挂科学生名单为:\n");
	}
	else if (strcmp(Class, Class2) == 0)
	{
		choice = 1;
		printf("物理挂科学生名单为:\n");
	}
	else
	{
		choice = 2;
		printf("化学挂科学生名单为:\n");
	}
	int num = 0;
	for (int i = 0; i < n; i++)//统计人数
	{
		if (students[i].grades[choice] < 60)
		{
			printf("%s\n", students[i].name);
			num++;
		}
	}
	printf("总人数为%d\n",num);
}

void DeclineOrder(person students[], int n)//按平均分降序分行输出,格式:张三,87.2;
{
	int Sum[100] = { 0 };//总分
	int aver[100] = { 0 };//平均分
	int order[100] = { 0 };//排名
	for (int i = 0; i < n; i++)//计算平均分
	{
		for (int j = 0; j < 3; j++)
			Sum[i] += students[i].grades[j];
		aver[i] = Sum[i] / 3;
		order[i] = i;
	}
	printf("成绩排行如下:\n");
	int temp=0;
	for (int i = 0; i < n; i++)//冒泡排序
		for (int j = 0; j < (n - i); j++)
		{
			if (aver[j] < aver[j + 1])
			{
				temp = order[j];
				order[j] = order[j + 1];
				order[j + 1] = temp;
			}
		}
	for (int i = 0; i < n; i++)//打印排名
		printf("%s,%d\n",students[order[i]].name, aver[order[i]]);
}

void PrintfAverGrade(person students[], int n)//按分数段(平均分)查询并打印学生信息
{
	int Sum[100] = { 0 };//总分
	int aver[100] = { 0 };//平均分
	for (int i = 0; i < n; i++)//计算平均分
	{
		for (int j = 0; j < 3; j++)
			Sum[i] += students[i].grades[j];
		aver[i] = Sum[i] / 3;
	}
	printf("请输入要查看的分数段(例如80 90)\t");
	int edge[2] = { 0 };
	scanf_s("%d %d", &edge[0], &edge[1]);
	for (int i = 0; i < n; i++)//查找并输出
	{
		if (aver[i] < edge[1]&& aver[i]>edge[0])
		{
			printf("%s\t年龄:%d\t籍贯:%s\t三门课成绩%4d,%4d,%4d\n", students[i].name, students[i].age, students[i].birth, students[i].grades[0], students[i].grades[1], students[i].grades[2]);
		}
	}
}

void Birth(person students[], int n)//按省份统计学生数(输入省份,显示人数)
{
	int num = 0;//人数
	char province[15];
	printf("要查看哪个省份?请输入:");
	scanf_s("%s", &province, 15);
	for (int i = 0; i < n; i++)
	{
		if (strcmp(province, students[i].birth) == 0)
			num++;
	}
	printf("人数为%d\n",num);
}

int main()
{
	int n=0;//学生个数
	char choice;
	int begin = 1;
	while (begin)
	{
		printf("****************************************************\n");
		printf("\t\t学生综合信息管理\n");
		printf("****************************************************\n");
		printf("1、数据录入\n2、打印总分最高学生的相关信息\n3、打印单科最高分学生 (输入科目)\n4、打印单科挂科学生名单及人数(输入科目)\n5、按平均分降序分行输出,格式:张三,87.2\n6、按分数段(平均分)查询并打印学生信息\n7、按省份统计学生数(输入省份,显示人数)\n0、退出\n");
		printf("请选择要查询的信息:");
		scanf_s(" %c", &choice);
		switch (choice)
		{
		case'1':n=input(students); break;//数据录入
		case'2':PrintfSumMax(students,n); break;//打印总分最高学生的相关信息
		case'3':PrintfMax(students,n); break;//打印单科最高分学生 (输入科目);
		case'4':PrintfNo(students, n); break;//打印单科挂科学生名单及人数(输入科目);
		case'5':DeclineOrder(students, n); break;//按平均分降序分行输出,格式:张三,87.2;
		case'6':PrintfAverGrade(students, n); break;//按分数段(平均分)查询并打印学生信息
		case'7':Birth(students, n); break;//按省份统计学生数(输入省份,显示人数)
		case'0':begin = 0; break;//退出
		}
		printf("\n");
	}
	return 0;
}   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值