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