数据结构学习day2

定义一个学员类型,包含成员属性:姓名,性别,职业,和另外一个变量,如果职业是学生,则变量是分数,如果职业是教师,则变量为所带课程。 再封装一个班级类型,包含成员属性:学员数组,班级当前人数,数组MAX大小为40。

操作:

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

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

3.定义输出函数,展示出当前班级的所有人员信息(包括老师)

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

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

#include
#include
#include

//定义班级成员类型
typedef struct {
    char name[50];
    char gender[10];
    char occupation[50];
    union {
        int score;        // 学生的分数
        char course[50];  // 教师所带课程
    } extra;
} Student;

// 定义班级类型
typedef struct {
    Student students[40];  // 学员数组
    int count;            // 班级当前人数
} Class;

//在堆区申请班级空间
Class *getclass()
{
    Class *cls = (Class *)malloc(sizeof(Class));
    
    if(NULL == cls)
    {
        printf("班级空间申请失败\n");
        return NULL;
    }else
    {
        printf("班级空间申请成功\n");
        return cls;
    }
}

// 初始化班级
void initClass(Class* cls) {
    cls->count = 0;
}

// 添加学员到班级
void addStudentToClass(Class* cls, char* name, char* gender, char* occupation, int score, char* course) {
    if (cls->count < 40) {
        Student stu;
        strcpy(stu.name, name);
        strcpy(stu.gender, gender);
        strcpy(stu.occupation, occupation);
        if (strcmp(occupation, "学生") == 0) {
            stu.extra.score = score;
        } else {
            strcpy(stu.extra.course, course);
        }
        cls->students[cls->count++] = stu;
        printf("学员 %s 添加成功!\n", stu.name);
    } else {
        printf("班级已满,无法添加学员。\n");
    }
}

// 输出班级成员信息
void printClassInfo(Class cls) {
    printf("班级成员信息:\n");
    for (int i = 0; i < cls.count; i++) {
        printf("姓名:%s, 性别:%s, 职业:%s", cls.students[i].name, cls.students[i].gender, cls.students[i].occupation);
        if (strcmp(cls.students[i].occupation, "学生") == 0) {
            printf(", 分数:%d\n", cls.students[i].extra.score);
        } else {
            printf(", 所带课程:%s\n", cls.students[i].extra.course);
        }
    }
}

// 查找学员在班级中是否存在
int findStudentInClass(Class cls, char* name) {
    for (int i = 0; i < cls.count; i++) {
        if (strcmp(cls.students[i].name, name) == 0) {
        printf("%s是该班级成员。\n", *name); // 学员存在
        return -1;
        }
    }
        printf("%s不是该班级成员。\n", *name);//  学员不存在
}

// 释放班级空间
void releaseClass(Class* cls) {
    cls->count = 0;
    free(cls);
    cls = NULL; 
    printf("班级空间释放成功。\n");
}
 
int main() {
    // 在堆区申请一个班级,并初始化
    Class* cls = getclass();
    initClass(cls);

    // 添加学员到班级
    addStudentToClass(cls, "张三", "男", "学生", 90, "");  // 学生
    addStudentToClass(cls, "李四", "女", "教师", 0, "数学");  // 教师

    // 输出班级成员信息
    printClassInfo(*cls);

    // 查找学员是否存在
    char s[20];
    printf("输入查找成员名:");
    scanf("%s", s);
    findStudentInClass(*cls, s);

    // 释放班级空间
    releaseClass(cls);
    cls = NULL;

    
    return 0;
}
 

你可能感兴趣的:(算法,数据结构)