结构体存储学生信息:使用结构体储存学生信息(包括学号,姓名,3门课程成绩,总分),要求实现对学生信息修改和删除操作,最多50名学生。

这篇文章描述了一个C语言程序,用于管理学生的姓名、数学、英语和语文成绩。程序包括查询学生信息、修改分数和删除学生功能,通过输入操作码执行相应操作并显示更新后的学生列表。
摘要由CSDN通过智能技术生成

测试输入:

10 3

1 Siyu 90 90 90

2 Amy 60 70 94

3 Jack 60 60 98

4 Jack 77 90 60

5 Banana 60 60 40

6 White 60 60 60

7 Pinkman 60 60 60

8 Fring 60 60 70

9 Ehrmantraut 80 63 61

10 Schrader 99 66 100

1 Jack

2 1 100 100 100

3 10

测试输入数据说明: 输入一个nq,标书下面n行则是n个学生的信息,再下q行则是对应的操作。

1 name //为根据名字查询操作

2 sno num1 num2 num2 //为修改分数操作,修改学号为sno的3门成绩

3 sno //为删除操作

预期输出:

3 Jack 60 60 98 218

4 Jack 77 90 60 227

1 Siyu 100 100 100 300

2 Amy 60 70 94 224

3 Jack 60 60 98 218

4 Jack 77 90 60 227

5 Banana 60 60 40 160

6 White 60 60 60 180

7 Pinkman 60 60 60 180

8 Fring 60 60 70 190

9 Ehrmantraut 80 63 61 204

10 Schrader 99 66 100 265

1 Siyu 100 100 100 300

2 Amy 60 70 94 224

3 Jack 60 60 98 218

4 Jack 77 90 60 227

5 Banana 60 60 40 160

6 White 60 60 60 180

7 Pinkman 60 60 60 180

8 Fring 60 60 70 190

9 Ehrmantraut 80 63 61 204

预期输出数据说明: 每次修改操作则输出全部的学生信息,查询操作则输出查询的学生的信息。

代码如下:

#include<stdio.h>

#include<string.h>

int Count;

struct student{

    char sno[20],name[20];

    int math,english,chinese,sum;

};

void print(struct student stu){

    printf("%s %s %d %d %d %d\n",stu.sno,stu.name,stu.math,stu.english,stu.chinese,stu.sum);

}

void query_stu(struct student s[],char *name){

    int i;

    for(i=0;i<Count;i++)

    {

        if(strcmp(name,s[i].name)==0)

        {

            s[i].sum=s[i].math+s[i].chinese+s[i].english;

            print(s[i]);

        }

        s[i].sum=s[i].math+s[i].chinese+s[i].english;

    }

}

void delete_stu(struct student s[],char *sno){

    int i;

    for(i=0;i<Count-1;i++)

    {

        if(strlen(s[i].sno)>=strlen(sno))

        {

            if(strcmp(s[i].sno,sno)>=0)s[i]=s[i+1];

        }

    }

}

void update_stu(struct student s[],char *sno,int math,int english,int chinese){

    int i;

    for(i=0;i<Count;i++)

    {

        if(strcmp(s[i].sno,sno)==0)

        {

            s[i].math=math;

            s[i].english=english;

            s[i].chinese=chinese;

            s[i].sum=s[i].math+s[i].chinese+s[i].english;

        }

    }

}

int main(void)

{

    int n,q;

    struct student students[50];

    scanf("%d%d",&n,&q);

    Count=n;

    for(int i=0;i<n;i++){

        /*********Begin*********/

        scanf("%s%s%d%d%d",&students[i].sno,&students[i].name,&students[i].math,&students[i].english,&students[i].chinese);

        students[i].sum=students[i].math+students[i].english+students[i].chinese;

    }

    while(q--){

        int op;

        scanf("%d",&op);

        char sno[20],name[20];

        if(op==1){

            scanf("%s",name);

            query_stu(students,name);

        }

        else if(op==2){

            int a,b,c;

            scanf("%s%d%d%d",sno,&a,&b,&c);

            update_stu(students,sno,a,b,c);

            for(int i=0;i<Count;i++)

                print(students[i]);

        }

        else{

            scanf("%s",sno);

            delete_stu(students,sno);

            for(int i=0;i<Count-1;i++)

                print(students[i]);

        }

    }

    return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值