23062数据结构02

定义一个学员类型,包含成员属性:姓名、性别、职业、和另一个变量,如果职业是学生,则另一个变量是分数,如果职业是老师,则另一个变量是所带课程。

再封装一个班级类型,包含成员属性:学员数组、班级当前人数,数组大小MAX为40;

操作:

1> 在堆区申请一个班级,并对班级进行初始化

2> 定义添加学员函数,如果班级人数未满,则将某个学员放入到该班级中

3> 定义输出函数,展示出当前班级的所有人员信息

4> 定义查找函数,给定一个姓名,查找该名字是否未该班级成员

5> 定义释放函数,将堆区申请的班级空间释放

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 40

union Job
{
    char lesson[20];    
    double score;
};

struct Stu
{
    char name[20];
    char sex;
    char job[20];
    union Job J1;
};
struct Class
{
    struct Stu s[MAX];
    int count;
};
//向堆区申请空间
struct Class *get()
{
    struct Class *S  = (struct Class *)malloc(sizeof(struct Class));
    if(NULL==S)
    {
        printf("空间申请失败\n");
        return NULL;
    }else
    {
        printf("空间申请成功\n");
        return S;
    }
}
void iClass(struct Class* cls) {
    cls->count = 0;            
}
//定义添加函数
void addStu(struct Class *S,struct Stu s1)
{
      if(NULL == S)
    {
        printf("学生信息不合法\n");
        return;
    }
      if(S->count<MAX)
      {
        S->s[S->count++] = s1;
        printf("学员 %s 添加成功!\n", s1.name);
         } 
      else 
      {
        printf("班级已满,无法添加学员!\n");
      }
}
//定义输出函数
void outputClass(struct Class S)
{
     printf("班级成员信息:\n");
    for (int i = 0; i < S.count; i++) {
        printf("学员姓名:%s\n", S.s[i].name);
        printf("性别:%c\n", S.s[i].sex);
        printf("职业:%s\n", S.s[i].job);
        if (strcmp(S.s[i].job, "学生") == 0) {
            printf("分数:%.2lf\n", S.s[i].J1.score);
        } else if (strcmp(S.s[i].job, "老师") == 0) {
            printf("所带课程:%s\n", S.s[i].J1.lesson);
        }
        printf("\n");
    }
}
//定义查找函数
int searchStudent(struct Class class, char *name) {
    for (int i = 0; i < class.count; i++) {
        if (strcmp(class.s[i].name, name) == 0) {
            return i;
        }
    }
    return -1;
}
void freeClass(struct Class *H)
{
    if(NULL != H)
    {
        free(H);           //释放堆区空间使用权
        H = NULL;
    }
}
int main(int argc, const char *argv[])
{
    struct Class *C=get();
    iClass(C);    
    struct Stu student1 = {"张三",'M' , "学生", .J1.score = 90.5};
    addStu(C, student1);
    struct Stu student2 = {"李四", 'W', "老师"};
    strcpy(student2.J1.lesson, "C基础");
    addStu(C, student2);
    outputClass(*C);
    char searchName[50];
    printf("请输入要查找的学员姓名:");
    scanf("%s", searchName);
    int index = searchStudent(*C, searchName);
    if (index != -1) {
        printf("学员 %s 在班级中的索引为 %d\n", searchName, index);
    } else {
        printf("学员 %s 不存在于班级中\n", searchName);
    }
    freeClass(C);
    
    return 0;
}

运行结果:

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值