结构体---学生管理系统(学号,姓名,性别,成绩)

#include<stdio.h>
#include<string.h>
#define N 100
struct Xitong
{
    int number;
    char name[20];
    char sex[10];
    double score;
};
void luru(int n,struct Xitong *gn)
{
    for(int i=0;i<n;i++)
    {
        printf("请输入第%d个学生学号:",i+1);
        scanf("%d",&gn[i].number);
        printf("请输入第%d个学生姓名:",i+1);
        scanf("%s",gn[i].name);
        printf("请输入第%d个学生性别:",i+1);
        scanf("%s",gn[i].sex);
        printf("请输入第%d个学生分数:",i+1);
        scanf("%lf",&gn[i].score);        
    }
    printf("录入完成\n");
}
void shuchu(int n,struct Xitong *gn)
{
    for(int i=0;i<n;i++)//循环输出
    {
        printf("%d\t%s\t%s\t%.2lf\n",gn[i].number,gn[i].name,gn[i].sex,gn[i].score);
    }
}
void zuizhi(int n,struct Xitong *gn)
{
    struct Xitong zd=gn[0];
    struct Xitong zx=gn[0];
    double zd_zhi;
    double zx_zhi;
    double zhi;
    for(int i=0;i<n;i++)//循环求最大值
    {
        zhi=gn[i].score;
        zd_zhi=zd.score;
        zx_zhi=zx.score;
        if(zhi>zd_zhi)//判断最大值
        {
            zd=gn[i];
        }
        if(zhi<zx_zhi)//判断最小值
        {
            zx=gn[i];
        }
    }
    printf("最高:%d\t%s\t%s\t%.2lf,最低:%d\t%s\t%s\t%.2lf\n",zd.number,zd.name,zd.sex,zd.score,zx.number,zx.name,zx.sex,zx.score);
}
void chenji(int n,struct Xitong *gn)
{
    double ave,sum;
    for(int i=0;i<n;i++)//循环求总成绩
    {
        sum+=gn[i].score;
    }
    ave=sum/n;
    printf("总成绩:%.2lf,平均成绩:%.2lf\n",sum,ave);
}
void paixu(int n,struct Xitong *gn)
{
    char x;
    printf("请选择升序还是降序:");
    scanf("%s",&x);
    if(x=='s')
    {
        for(int i=1;i<n;i++)//循环求升序后的数组
        {
            for(int j=0;j<n-i;j++)
            {
                if(gn[j].score>gn[j+1].score)
                {
                    struct Xitong sx=gn[j];
                    gn[j]=gn[j+1];
                    gn[j+1]=sx;
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            printf("%d\t%s\t%s\t%.2lf\n",gn[i].number,gn[i].name,gn[i].sex,gn[i].score);
        }   
    }
    else if(x=='j')
    {
        for(int i=1;i<n;i++)//循环求降序后的数组
        {
            for(int j=0;j<n-i;j++)
            {
                if(gn[j].score<gn[j+1].score)
                {
                    struct Xitong jx=gn[j];
                    gn[j]=gn[j+1];
                    gn[j+1]=jx;
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            printf("%d\t%s\t%s\t%.2lf\n",gn[i].number,gn[i].name,gn[i].sex,gn[i].score);
        }   
    }
    else
    {
        printf("error!\n");
    }
}
void cat(int n,struct Xitong *gn)
{
    char xm[20]={""};
    int flag=0;
    printf("请输入要查找的学生的姓名:");
    scanf("%s",xm);
    for(int i=0;i<n;i++)
    {
        char mz[20]={""};
        strcpy(mz,gn[i].name);
        if(strcmp(mz,xm)==0)
        {
            flag=1;
            break;
        }
    }
    if(flag==1)
    {
        printf("存在\n");
    }
    else
    {
        printf("不存在\n");
    }
}
int main(int argc,const char *argv[])
{
    int n=0;
    printf("请输入学生人数:");
    scanf("%d",&n);
    while(1)
    {
        int a=0;
        struct Xitong gn1[N];
        printf("----------输入1,录入成绩----------\n");//菜单
        printf("----------输入2,查询学生成绩----------\n");
        printf("----------输入3,查询成绩最高和最低的学生----------\n");
        printf("----------输入4,查询学生总成绩和平均成绩----------\n");
        printf("----------输入5,对学生成绩进行排序----------\n");
        printf("----------输入6,查找学生----------\n");
        printf("----------输入0,退出----------\n");
        printf("请输入选项:");
        scanf("%d",&a);
        switch(a)
        {
            case 1:
            {
                luru(n,gn1);
            }break;
            case 2:
            {
                shuchu(n,gn1);
            }break;
            case 3:
            {
                zuizhi(n,gn1);
            }break;
            case 4:
            {
                chenji(n,gn1);
            }break;
            case 5:
            {
                paixu(n,gn1);
            }break;
            case 6:
            {
                cat(n,gn1);
            }break;
            case 0:goto END;
            default:
            {
                printf("输入错误请重新输入:\n");
            }
        }
    }
END:
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值