定义一个学员类型,包含成员属性:姓名,性别,职业,和另外一个变量,如果职业是学生,则变量是分数,如果职业是教师,则变量为所带课程。 再封装一个班级类型,包含成员属性:学员数组,班级当前人数,数组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;
}