华清远见第三课程day2作业

思维导图

 

定义一个学员类型,包含成员属性:姓名、性别、职业、和另一个变量,如果职业是学生,则另一个变量是分数,如果职业是老师,则另一个变量是所带课程。

再封装一个班级类型,包含成员属性:学员数组、班级当前人数,数组大小MAX为40;

操作:

1> 在堆区申请一个班级,并对班级进行初始化

2> 定义添加学员函数,如果班级人数未满,则将某个学员放入到该班级中

3> 定义输出函数,展示出当前班级的所有人员信息

4> 定义查找函数,给定一个姓名,查找该名字是否未该班级成员

5> 定义释放函数,将堆区申请的班级空间释放

#include<stdio.h>	
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define maxsize 40
union x{
	int score;
	char class[10];
};
struct xy{
	char name[20];
	char sex[8];
	char work[8];
	union x x; 

};
typedef struct class {
	struct xy member;
	int number;
}class;

struct class *getclass(int num){
	struct class * C = (struct class *)malloc(sizeof(struct class)*num);
	if(C==NULL){
		printf("空间申请失败\n");
		return NULL;
	}	
	else{
		printf("空间申请成功\n");
		return C;
	}	if(num>maxsize){
		printf("输入数量超过最大值40");
		return NULL;
}
}
void chushihua(class*p){
	p->number = 0;
}
void input(class *p,int num){
	if(p==NULL){
		printf("内存不合法");
		return;
	}	
	if(num>maxsize){
		printf("输入数量超过最大值40");
		return;
	}
	p->number=p->number+num;
	for(int i=p->number-num;i<p->number;i++){
		printf("请输入第%d个成员的姓名:",i+1);
		scanf("%s",(p+i)->member.name);
		printf("请输入第%d个成员的性别(W/M):",i+1);
		scanf("%s",(p+i)->member.sex);
		printf("请输入第%d个成员的职业(学生/老师):",i+1);
		scanf("%s",(p+i)->member.work);
		if(strcmp((p+i)->member.work, "学生")==0){
			printf("请输入成绩");
			scanf("%d",&(p+i)->member.x.score);
		}
		else if(strcmp((p+i)->member.work, "老师")==0){
			printf("请输入所带的课程");
			scanf("%s",(p+i)->member.x.class);
		}
	}
}

void output(class*p,int num){
	if(p==NULL){
		printf("内存不合法");
		return;
	}
	printf("名称\t性别\t职业\t成绩/所带学科\n"); 
	for(int i=0;i<num;i++){
		if(strcmp((p+i)->member.work, "学生")==0){
			printf("%s\t%s\t%s\t%d\n",(p+i)->member.name,(p+i)->member.sex,(p+i)->member.work,(p+i)->member.x.score);
		}
		else if(strcmp((p+i)->member.work, "老师")==0){
			printf("%s\t%s\t%s\t%s\n",(p+i)->member.name,(p+i)->member.sex,(p+i)->member.work,(p+i)->member.x.class);
		}
	}
}

void search(class*p,int num){
	if(p==NULL){
		printf("内存不合法");
		return;
	}
	char arr[10];
	int flag=0;
	printf("请输入需要查找的姓名");
	scanf("%s",arr);
	for(int i=0;i<num;i++){
		if(strcmp((p+i)->member.name,arr)==0){
			printf("查找到此人,此人在名单的第%d位\n",i+1);
			flag=1;
		}
	}
	if(flag==0){
		printf("查无此人\n");
	}
}
void freeclass(class*p){
	if(p!=NULL){
		free(p);
		p=NULL;
	}
}
int main(int argc, const char *argv[])
{
	int i=0;
	printf("请输入需要输入的人数");
	scanf("%d",&i);
	struct class *C=getclass(i);
	chushihua(C);
	input(C,i);
	output(C,i);
	search(C,i);
	freeclass(C);
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值