数据结构day2

本文介绍了如何使用C语言定义学员和教师类结构,并实现添加学员、输出学员信息、查找学员和释放内存的函数,展示了面向对象编程的基本概念。
摘要由CSDN通过智能技术生成

 

 

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义学员类型
typedef struct People
{
    char name[100];
    char sex;
    char job;
    union
    {
        int score;
        char lesson[100];
    };
}pe;
typedef struct Classroom
{
    pe class[100];
    int len;
}cla;

//定义空间申请函数
cla *getClass()
{
    cla *P=(cla *)malloc(sizeof(P));
    if(NULL==P)
    {
        printf("申请失败");
        return NULL;
    }else
    {
        printf("申请成功");
        return P;
    }
}
//定义添加学员函数
void addpeople(cla *P)
{
    //判断传过来的指针是否合法
    if(NULL==P)
    {
        printf("不合法\n");
        return;
    }
    if(40<P->len)
    {
        printf("班级已满");
    }
    else
    {
        printf("请输入学员姓名:");
        scanf("%s",(P->class+P->len)->name);
        printf("请输入学员性别:");
        scanf(" %c",&(P->class+P->len)->sex);
        printf("请输入学员职业:");
        scanf(" %c",&(P->class+P->len)->job);
        if((P->class+P->len)->job=='s')
        {
        printf("请输入学生成绩:");
        scanf("%d",&(P->class+P->len)->score);
        }
        else if((P->class+P->len)->job=='t'){
        printf("请输入老师所带课程:");
        scanf("%s",(P->class+P->len)->lesson);}
        P->len++;
    }
}
//定义输出函数
void output(cla *P)
{
    if(NULL==P)
    {
        printf("班级不合法");
        return;
    }else{
        printf("姓名\t性别\t职业\t成绩/课程\n");
        for(int i=0;i<P->len;i++)
        {
            printf("%s\t%c\t%c\t",(P->class+i)->name,(P->class+i)->sex,(P->class+i)->job);
            if((P->class+i)->job=='s')
            {
                printf("%d\n",(P->class+i)->score);
            }
            else if((P->class+i)->job=='t')
            {
                printf("%s\n",(P->class+i)->lesson);
            }
        }
    }
}
//定义查找函数
void search(cla *P,const char *n)

{
    int flag=0;
    for(int i=0;i<P->len;i++)
    {
        if(!strcmp(n,(P->class+i)->name))
        {
            flag=1;
        }
    }
    if(flag=1)
    {
        printf("学员%s存在\n",(P->class+P->len)->name);
        
    }
}
//定义释放函数
void freePeople(cla *P)
{
    if(NULL!=P)
    {
        free(P);
        P=NULL;
    }
}
int main(int argc, const char *argv[])
{
    cla *P=getClass();
    P->len=0;
    addpeople(P);
    addpeople(P);
    addpeople(P);
    output(P);
    getchar();
    char n[100];
    printf("输入学员姓名");
    gets(n);
    search(P,n);
    freePeople(P);
    return 0;
}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值