学生信息包括姓名、年龄、籍贯、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;
}