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