#include<stdio.h>
#include<string.h>
#define MAX 10
void menu()
{
printf("##########################\n");
printf("######1.录入学生信息######\n");
printf("######2.查看学生信息######\n");
printf("#3.成绩最高和最低学生成绩#\n");
printf("#4.学生的总成绩和平均成绩#\n");
printf("##5.查看学生成绩升序降序##\n");
printf("#######6.查询学生姓名#####\n");
printf("#######0.退出菜单#########\n");
printf("##########################\n");
}
struct Sth{
char name[20]; //定义构造函数的内变量数据类型
char gender[10];
int ID;
double score;
};
int main(int argc, const char *argv[])
{
int a = 0;
int *ptr=&a;
struct Sth student[MAX];
memset(student,0,sizeof(student));// 定义指针 对构造体内的数据初始化
while(1)
{
do{
menu();
int b =0;
printf("请选择-->");
scanf("%d",&b);
switch(b)
{
case 1:
{
printf("请输入添加几个学生:");
scanf("%d",&a);
ptr=&a;
for(int i=0;i<(*ptr);i++)
{
printf("请输入第%d位学生的姓名:",i+1);//结构体变量输入
scanf("%s",student[i].name);
printf("请输入第%d位学生的性别:",i+1);
scanf("%s",student[i].gender);
printf("请输入第%d位学生的学号:",i+1);
scanf("%d",&student[i].ID);
printf("请输入第%d位学生的成绩:",i+1);
scanf("%lf",&student[i].score);
putchar(10);
}
}break;
case 2:
{
for(int i =0;i<*ptr;i++)
{
printf("姓名:%s\t性别:%s\t学号:%d\t成绩:%.1lf\n",student[i].name,student[i].gender,student[i].ID,student[i].score);//输出结构体变量
}
}break;
case 3:
{
double maxdi=0;
int dii =0;
double maxgao=0;
int gaoi = 0;
for(int i=0;i<a-1;i++) //遍历得出成绩最小值输出成绩最大值下标
{
maxdi=student[i].score;
if(maxdi>student[i+1].score)
{
maxdi=student[i+1].score;
dii = i+1;
}
}
printf("姓名:%s\t性别:%s\t学号:%d\t成绩:%.1lf\n",student[dii].name,student[dii].gender,student[dii].ID,student[dii].score);
for(int i=0;i<*ptr-1;i++)//遍历得出成绩最大值输出成绩最大值下标
{
maxgao=student[i].score;
if(maxdi<student[i+1].score)
{
maxgao=student[i+1].score;
gaoi = i+1;
}
}
printf("姓名:%s\t性别:%s\t学号:%d\t成绩:%.1lf\n",student[gaoi].name,student[gaoi].gender,student[gaoi].ID,student[gaoi].score);
}break;
case 4:
{
double a =0;
double b =0;
double abb = 0;
for(int i =0;i<*ptr;i++)
{
abb+=student[i].score;
}
printf("学生总成绩为:%.1lf\n",abb);//对成绩变量进行累加输出
printf("学生平均成绩为:%.1lf\n",abb/(*ptr));//对成绩变量进行叠加除以人数
}break;
case 5:
{
int one = 0;
printf("请选择排序方式:1.升序\t2.降序");
printf("\n");
getchar();
scanf("%d",&one); //遍历循环冒泡排序
if(one==1)
{
for(int i =1;i<*ptr;i++)
{
for(int j=0;j<*ptr-1;j++)
{
if(student[j].score<student[j+1].score)
{
struct Sth drr = student[j];
student[j]=student[j+1];
student[j+1]=drr;
}
}
}
for(int i =0;i<*ptr;i++)
{
printf("姓名:%s\t性别:%s\t学号:%d\t成绩:%.1lf\n",student[i].name,student[i].gender,student[i].ID,student[i].score);
}
}
else if(one==2)
{
for(int i =1;i<*ptr;i++)
{
for(int j=0;j<*ptr-1;j++)
{
if(student[j].score>student[j+1].score)
{
struct Sth drr = student[j];
student[j]=student[j+1];
student[j+1]=drr;
}
}
}
for(int i =0;i<*ptr;i++)
{
printf("姓名:%s\t性别:%s\t学号:%d\t成绩:%.1lf\n",student[i].name,student[i].gender,student[i].ID,student[i].score);
}
}
}break;
case 6:
{
char arr[10]={0};
printf("请输入你要查找的学生姓名:");
scanf("%s",arr);
int p = 0;
int m =0;
for( p =0;p<*ptr;p++)
{
if((strcmp(arr,student[p].name))==0)//对比字符ASCII 比较字符串是否相等
{
printf("姓名:%s\t性别:%s\t学号:%d\t成绩:%.1lf\n",student[p].name,student[p].gender,student[p].ID,student[p].score);
m+=1;
}
}
if(m==0)
{
printf("查询不到学生信息\n");
}
}break;
case 0 :
{
printf("退出菜单\n");//飞雷神直接出循环
goto END;
}
break;
default:{
printf("输入错误,重新输入:\n");//排除输入0-6以外的数字
}break;
}
}
while(1);
}
END:
return 0;
}
结构体 Day07
最新推荐文章于 2024-08-09 20:36:57 发布