12月20日 结构体,顺序结构

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
struct Student
{
    char name[20];
    char id;
    union
    {
        double score;
        char subject[10];
    };
};

struct Class
{
    struct Student s[MAX];
    int count;
};
double input(struct Class *c)
{
    double sum_score=0;
    while(1)
    {
        printf("请输入%d个学生的姓名:",c->count+1);
        scanf("%s",c->s[c->count].name);
        printf("请输入%d个学生的id:",c->count+1);
        getchar();
        scanf("%c",&c->s[c->count].id);
        if(c->s[c->count].id=='s'||c->s[c->count].id=='S')
        {
            printf("请输入%d个学生的分数",c->count+1);
            scanf("%lf",&c->s[c->count].score);
            sum_score+=c->s[c->count].score;
        }
        else if(c->s[c->count].id=='t'||c->s[c->count].id=='T')
        {
            printf("请输入%d个老师的课程:",c->count+1);
            scanf("%s",c->s[c->count].subject);
        }
        c->count++;
        char judge[10];
        printf("是否继续录入学生信息");
        scanf("%s",judge);
        if(strcmp(judge,"yes")==0)
        {
            if(c->count==MAX)
            {
                printf("班级人数已满,无法继续录入");
                break;
            }
        }
        else if(strcmp(judge,"no")==0)
                
                {    break;}

    }
    return sum_score;
}


void output(struct Class *c)
{
    printf("班级人员信息如下:\n");
    for(int i=0;i<c->count;i++)
    {
        printf("%s\t%c\t",c->s[i].name,c->s[i].id);
        if(c->s[i].id=='s'||c->s[i].id=='S')
        {
            printf("%.2lf\n",c->s[i].score);
        }
        else
        {
            printf("%s\n",c->s[i].subject);

        }
    }
}

void insert(struct Class *c)
{
    int num,i;

        printf("请输入要插入的位置:\n");
        scanf("%d",&num);
    if(num>c->count||num<1)
    {
        printf("输入的数据不合法");
    }
    else
    {
        while(1)
        {
            for(i=c->count-1;i>=num-1;i--)
            {
                c->s[i+1]=c->s[i];
            }
            printf("请输插入学生的姓名");
            scanf("%s",c->s[num-1].name);
            printf("请输插入学生的id:");
            getchar();
            scanf("%c",&c->s[num-1].id);
            if(c->s[num-1].id=='s'||c->s[num-1].id=='S')
            {
                printf("请输入插入学生的分数");
                scanf("%lf",&c->s[num-1].score);
                }
            else if(c->s[num-1].id=='t'||c->s[num-1].id=='T')
            {
                printf("请输入插入老师的课程:");
                scanf("%s",c->s[num-1].subject);
            }
            c->count++;
            printf("是否继续录入学生信息");
            char judge[10];
            scanf("%s",judge);
            if(strcmp(judge,"yes")==0)
            {
                if(c->count==MAX)
                {
                    printf("班级人数已满,无法继续录入");
                    break;
                }
            }
            else if(strcmp(judge,"no")==0)
                
                {break;}
        }

}
}
void delete(struct Class *c)
{
    int num,i;

        printf("请输入要删除的位置:\n");
        scanf("%d",&num);
    if(num>c->count||num<1)
    {
        printf("输入的数据不合法");
    }
    else
    {
        for(int i=num;i<c->count;i++)
        {
            c->s[i]=c->s[i+1];
        }
        c->count--;
    }
}

int main(int argc, const char *argv[])
{
    struct Class *c=(struct Class*)malloc(sizeof(struct Class));
    if(c==NULL)
    {
        printf("创建班级失败\n");
        return -1;
    }
    c->count=0;
    double sum_score=input(c);
    output(c);
    printf("学生总成绩为:%.2lf\n",sum_score);
    insert(c);
    output(c);
    delete(c);
    output(c);
    free(c);
    c=NULL;

    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值