结构体管理、存储学生信息

Happiness and luck are at a price, and there is no free lunch!
幸福和幸运是需要代价的,天下没有免费的午餐!

小编建议:做题大家一定要看清题目的要求

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

注意考察点:结构体,函数,指针
测试输入:
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

测试输入数据说明(PS:这里理解后,输出就好看懂了):

输入一个n,q,标书下面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

源代码:


```c
#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);
void delete_stu(struct student s[],char *sno);
void update_stu(struct student s[],char *sno,int math,int english,int chinese);
int main(void)//主函数
{
    int n,q;
    struct student students[50];
    scanf("%d%d",&n,&q);
    Count=n;
    for(int i=0;i<n;i++){
scanf("%s %s %d %d %d",students[i].sno, students[i].name, &students[i].math, &students[i].english, &students[i].chinese);
  students[n].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;
}
void query_stu(struct student s[],char *name) {
    int n;
    for (n = 0; n < Count; n++) {
        if (strcmp(name, s[n].name) == 0) {
            s[n].sum=s[n].chinese+s[n].english+s[n].math;
            print(s[n]);
        }
        s[n].sum=s[n].math+s[n].english+s[n].chinese;
    }
}
void update_stu(struct student s[],char *sno,int math,int english,int chinese){
    int n;
    for(n=0;n<Count;n++) {
        if (strcmp(s[n].sno,sno)==0) {
            s[n].math=math;s[n].english=english;s[n].chinese=chinese;
            s[n].sum=s[n].math+s[n].english+s[n].chinese;
        }
    }
}
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];
            }
    }
}


**运行结果:**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200424182157222.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MjU5MjUx,size_16,color_FFFFFF,t_70)


  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值