代码实现:
主函数
#include <stdio.h>
#include <string.h>
int size=0; //定义全局变量表示当前学生个数
//定义学生结构体
struct Stu
{
char ID[20];
char name[20];
char sex[5];
double score;
};
/***********************主函数*************************/
int main(int argc, char const *argv[])
{
struct Stu stu[100];
int flag=0;
while (1)
{
switch (MENU())
{
case 1:
stu_input(stu);
break;
case 2:
stu_output(stu);
break;
case 3:
stu_max_min(stu);
break;
case 4:
stu_sum_avg(stu);
break;
case 5:
printf("0降序/1升序:");
scanf("%d",&flag);
stu_sort(stu,flag);
break;
case 6:
stu_search(stu);
break;
case 0:
exit(0);
default:
printf("错误输入\n");
}
}
return 0;
}
//菜单函数
int MENU()
{
int n;
printf("————————————————————————————————————————————\n");
printf("\t<<<<<<学生管理系统>>>>>>\n");
printf("\t******1>>信息录入******\n");
printf("\t******2>>查看信息******\n");
printf("\t******3>>成绩最值******\n");
printf("\t******4>>求和平均******\n");
printf("\t******5>>信息排序******\n");
printf("\t******6>>查找信息******\n");
printf("\t******0>>退出系统******\n");
printf("————————————————————————————————————————————\n");
printf(">>> ");
scanf("%d",&n);
getchar();
return n;
}
//完成对学生信息的录入,确定人数,完成输入
void stu_input(struct Stu stu[])
{
int n=0;
printf("请输入录入学生信息个数:");
scanf("%d",&n);
for (int i = size; i < size+n; i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%s",stu[i].ID);
printf("请输入第%d个学生的名字:",i+1);
scanf("%s",stu[i].name);
printf("请输入第%d个学生的性别:",i+1);
scanf("%s",stu[i].sex);
printf("请输入第%d个学生的成绩:",i+1);
scanf("%lf",&stu[i].score);
putchar(10);
}
printf("*******完成输入*********\n");
size+=n;
}
//完成对学生信息的输出
void stu_output(const struct Stu stu[])
{
printf("学号\t姓名\t性别\t成绩\n");
for (int i = 0; i < size; i++)
{
printf("%s\t%s\t%s\t%.2f\n",stu[i].ID,stu[i].name,stu[i].sex,stu[i].score);
}
putchar(10);
}
//输出成绩最高和最低学生的成绩
void stu_max_min(const struct Stu stu[])
{
int maxi=0;
int mini=0;
for (int i = 0; i < size; i++)
{
if (stu[maxi].score < stu[i].score)
{
maxi=i;
}
if (stu[mini].score > stu[i].score)
{
mini=i;
}
}
printf("成绩最高的学生信息为:\n");
printf("%s\t%s\t%s\t%.2f\n",stu[maxi].ID,stu[maxi].name,stu[maxi].sex,stu[maxi].score);
printf("成绩最低的学生信息为:\n");
printf("%s\t%s\t%s\t%.2f\n",stu[mini].ID,stu[mini].name,stu[mini].sex,stu[mini].score);
}
//输出学生的总成绩和平均成绩
void stu_sum_avg(const struct Stu stu[])
{
double sum=0;
for (int i = 0; i < size; i++)
{
sum+=stu[i].score;
}
printf("学生总成绩为:%.2f, 学生平均成绩为:%.2f\n",sum,sum/size);
}
//对学生信息按成绩进行排序,根据传入的升降序,确定排序功能
void stu_sort(struct Stu stu[],int flag)
{
for(int i=1; i<size; i++)
{
for(int j=0; j<size-i; j++)
{
if(flag==0)
{
if(stu[j].score < stu[j+1].score)
{
struct Stu temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
else if(flag==1)
{
if(stu[j].score > stu[j+1].score)
{
struct Stu temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
}
}
//提示并输入要查找的学生名字,查找该名字是否存在于该班级
void stu_search(struct Stu stu[])
{
char name_temp[20]="";
printf("请输入要查找的学生姓名:");
scanf("%s",name_temp);
for (int i = 0; i < size; i++)
{
if(strcmp(stu[i].name, name_temp)==0)
{
printf("%s\t%s\t%s\t%.2f\n",stu[i].ID,stu[i].name,stu[i].sex,stu[i].score);
}
}
}