定义一个学员类型,包含成员属性:姓名、性别、职业、和另一个变量,如果职业是学生,则另一个 变量是分数,如果职业是老师,则另一个变量是所带课程。再封装一个班级类型,包含成员属性:学员数组、班级当前人数,数组大小MAX为40;
1> 在堆区申请一个班级,并对班级进行初始化
2> 定义添加学员函数,如果班级人数未满,则将某个学员放入到该班级中
3> 定义输出函数,展示出当前班级的所有人员信息
4> 定义查找函数,给定一个姓名,查找该名字是否未该班级成员
5> 定义释放函数,将堆区申请的班级空间释放
主函数:
#include "fun.h"
int main(int argc, const char *argv[])
{
struct Class *H = shen(); //调用申请空间函数
ru(H); //调用输入函数
chu(H); //调用输出函数
cha(H); //调用查找函数
fan(H); //调用释放空间函数
return 0;
}
功能函数:
#include "fun.h"
/**************************在堆区申请空间**************************/
struct Class *shen()
{
//向堆区申请MAX个struct Class大小的空间
struct Class *H = (struct Class *)malloc(sizeof(struct Class)*MAX);
if(H == NULL)
{
printf("申请失败!");
}
else
{
printf("申请成功!\n");
//将结构体数组初始化为0
memset(H->xue,0,sizeof(H->xue));
//将人数初始化为0
H->len = 0;
return H;
}
}
/***************************加入成员****************************/
void ru(struct Class *p)
{
p->len = 0;
//定义一个学生的字符数组方便后面比较
char a[20] = "学生";
//定义一个教师的字符数组方便后面比较
char b[20] = "教师";
//for循环输入成员信息
for(int i = 0; i < MAX; i++)
{
printf("请输入第%d个成员的姓名:",i+1);
scanf("%s",(p+i)->xue->name);
printf("请输入第%d个成员的性别:",i+1);
scanf("%s",(p+i)->xue->sex);
printf("请输入第%d个成员的职位:",i+1);
scanf("%s",(p+i)->xue->job);
//判断职位是什么,记录最后一个变量内容
if(strcmp((p+i)->xue->job,a) == 0)
{
printf("请输入学生的成绩:");
scanf("%lf",&(p+i)->xue->jo.sorce);
}
else if(strcmp((p+i)->xue->job,b) == 0)
{
printf("请输入教师的课表:");
scanf("%s",(p+i)->xue->jo.ke);
}
else
{
printf("输入错误职位!\n");
}
//每执行完一次就让人数加一
p->len++;
}
}
/***************************展示成员****************************/
void chu(struct Class *p)
{
//定义一个学生的字符数组方便后面比较
char a[20] = "学生";
printf("姓名\t性别\t职位\t内容\n");
//循环输出成员信息
for(int i = 0; i < MAX;i++)
{
//判断职位是什么,根据职位的不同输出也不同
if(strcmp((p+i)->xue->job,a) == 0)
{
//当职位为学生时输出
printf("%s\t%s\t%s\t%.1lf\n",(p+i)->xue->name,\
(p+i)->xue->sex,(p+i)->xue->job,(p+i)->xue->jo.sorce);
}
else
{
//当职位为教师时输出
printf("%s\t%s\t%s\t%s\n",(p+i)->xue->name,\
(p+i)->xue->sex,(p+i)->xue->job,(p+i)->xue->jo.ke);
}
}
}
/***************************查找成员****************************/
void cha(struct Class *p)
{
//定义一个学生的字符数组方便后面比较
char c[20] = "学生";
//定义一个字符数组,用来接收想要查找的成员名
char a[20];
//标志位,最后用来辅助判断是否有想要查找的成员
int b=0;
printf("请输入想要查找的成员:");
scanf("%s",a);
//遍历结构体数组
for(int i = 0; i < MAX;i++)
{
//判断是否有该成员
if(strcmp((p+i)->xue->name,a) == 0)
{
b = 0;
printf("有该成员!");
//判断职位是什么,根据职位的不同输出也不同
if(strcmp((p+i)->xue->job,c) == 0)
{
//当职位为学生时输出
printf("%s\t%s\t%s\t%.1lf\n",(p+i)->xue->name,\
(p+i)->xue->sex,(p+i)->xue->job,(p+i)->xue->jo.sorce);
}
else
{
//当职位为教师时输出
printf("%s\t%s\t%s\t%s\n",(p+i)->xue->name,\
(p+i)->xue->sex,(p+i)->xue->job,\
(p+i)->xue->jo.ke);
}
break;
}
else
{
//标志位加一
b++;
}
}
if(b > 0)
printf("没有找到该成员!\n");
}
/***************************释放空间****************************/
void fan(struct Class *p)
{
free(p);
p = NULL;
}
头文件:
#ifndef __FUN_H__
#define __FUN_H__
#include
#include
#include
#define MAX 40
/****************定义一个工作共用体*************************/
union Job
{
double sorce; //成绩
char ke[20]; //课程
};
/****************定义一个学员类型*************************/
struct Xue
{
char name[20]; //姓名
char sex[20]; //性别
char job[20]; //职业
union Job jo; //工作内容
};
/****************定义一个班级类型*************************/
struct Class
{
struct Xue xue[MAX]; //成员数组
int len; //成员个数
};
struct Class *shen(); //申请堆区空间的函数声明
void ru(struct Class *p); //输入函数的声明
void chu(struct Class *p); //输出函数的声明
void cha(struct Class *p); //查找函数的声明
void fan(struct Class *p); //释放空间函数的声明
#endif