#ifndef _FUN_H_
#define _FUN_H_
#include
#include
#include
#define Max 40 //数组大小MAX为40
typedef enum //定义一个枚举类型名字为Career
{
Student,
Teacher
}Career;
/*********************************************************/
typedef struct XueYuan //定义了一个名为Xy的结构体类型
{
char name[32];// 姓名
char sex[32]; //性别
Career Career; //职业
//嵌套定义一个共用体,判断职业是学生还是老师
union
{
int score; //分数
char course[32]; //课程
}Add; //无名结构体声明Add
}Xy;
/**********************************************************/
//定义一个班级类型的结构体classroom
typedef struct
{
Xy xy[Max]; //定义了一个学员数组名为xy的属性,数组大小为40
int Nownumber; //定义了一个当前班级人数
}classroom;
/***********************************************************/
//声明回调函数
classroom *BANJI();
void Addnumber(classroom *BJ,Xy xuey);
void shownumber(classroom *BJ);
void find(classroom *BJ,const char *name);
void BJfree(classroom *BJ);
#endif
#include "fun.h"
//在堆区申请一个班级,并对班级进行初始化
classroom *BANJI()
{
//在堆区进行申请
classroom *BJ=(classroom *)malloc(sizeof(classroom));
//判断能否申请成功
if(BJ==NULL)
{
printf("班级申请失败\n");
return NULL;
}
else if(BJ!=NULL)
{
BJ->Nownumber=0; //班级人数初始化
printf("申请成功\n");
return BJ;
}
}
/******************************************************/
//定义添加学员函数,如果班级人数未满,则讲某个学员放入到该班级中
void Addnumber(classroom *BJ,Xy xuey)
{
if(BJ->Nownumberxy[BJ->Nownumber] = xuey;
BJ->Nownumber++;
printf("%s已经添加到班级了\n",xuey.name);
}
else
{
printf("班级人数满了,无法继续添加人数\n");
}
}
/************************************************************/
//定义输出函数,展示出当前班级的所有人员信息
void shownumber(classroom *BJ)
{
printf("班级信息如下:\n");
for(int i=0;iNownumber;i++)
{
Xy xuey = BJ->xy[i];
if(xuey.Career == Student)
{
printf("姓名:%s,性别:%s,职业:学生,分数:%d\n",xuey.name,xuey.sex,xuey.Add.score);
}
else if(xuey.Career == Teacher)
{
printf("姓名:%s,性别:%s,职业:老师,所带课程:%s\n",xuey.name,xuey.sex,xuey.Add.course);
}
}
}
/**************************************************************************/
//定义查找函数,给定一个姓名,查找改名字是否为班级成员
void find(classroom *BJ,const char *name)
{
for(int i=0;iNownumber;i++)
{
Xy xuey = BJ->xy[i];
if(strcmp(xuey.name,name) == 0) //用strcmp函数比较给定的名字是否和班级成员名字相等
{
printf("%s是该班成员\n",name);
break;
}
else
{
printf("%s不是该班成员\n",name);
break;
}
}
}
/**************************************************************************/
//定义释放函数,将堆区申请的班级空间释放
void BJfree(classroom *BJ)
{
if(BJ !=NULL)
{
free(BJ); //释放堆区空间使用权
BJ=NULL;
}
}
#include "fun.h"
int main(int argc, const char *argv[])
{
classroom *BJ =BANJI();//申请调用
//给定班级学员
Xy stu1={"吴二","男",Student,.Add.score =100};
Xy stu2={"张三","男",Student,.Add.score =60};
Xy stu3={"李四","男",Student,.Add.score =50};
Xy teacher1={"王五","男",Teacher};
strcpy(teacher1.Add.course,"数学");
Xy teacher2={"小花","女",Teacher};
strcpy(teacher2.Add.course,"英语");
//调用添加学员函数
Addnumber(BJ,stu1);
Addnumber(BJ,stu2);
Addnumber(BJ,stu3);
Addnumber(BJ,teacher1);
Addnumber(BJ,teacher2);
//调用输出函数
shownumber(BJ);
//调用查找函数
find(BJ,"小花");
find(BJ,"嘉文四世");
//调用释放函数
BJfree(BJ);
BJ =NULL;
return 0;
}
