day17小作业

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

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值