Day2数据结构

#ifndef _TEST_H_
#define _TEST_H_
#define MAX 40      //班级最大容纳量
#include

//定义学员类型
typedef struct
{
    char name[20];  //姓名
    char sex;      //性别
    char job;     //职业
    union 
    {
        double score;  //分数
        char sub[20];   //课程
    };
}Stu;

//定义班级类型
typedef struct
{
    Stu data[MAX];   //存储学员的数组
    int len;      //当前班级人数
}Class, *Class_ptr;

//声明申请空间函数
Class_ptr create();

//声明添加学员函数
int add(Class_ptr C, Stu s);

//声明输出函数
void show(Class_ptr C);

//声明查找函数
int search(Class_ptr C, const char *name);

//是否内存
void class_free(Class_ptr C);





#endif
#include"5work.h"
#include
#include
#include

//声明申请空间函数
Class_ptr create()
{
    //在堆区申请一个班级空间
    Class_ptr C = (Class_ptr)malloc(sizeof(Class));
    if(NULL == C)
    {
        printf("空间申请失败\n");
        return NULL;
    }

    //对班级进行初始化工作
    C->len = 0;       //将班级人数清零

    printf("班级创建成功\n");
    //将地址返回
    return C;
}

//声明添加学员函数
int add(Class_ptr C, Stu s)
{
    //判断逻辑
    if(NULL==C || C->len==MAX)
    {
        printf("添加失败\n");
        return -1;
    }

    //可以进行添加工作
    C->data[C->len] = s;     //将数据添加到尾端

    //班级人数自增1
    C->len++;

    printf("添加成功\n");
    return 0;
}

//声明输出函数
void show(Class_ptr C)
{
    //判断逻辑
    if(NULL==C || C->len==0)
    {
        printf("操作失败\n");
        return;
    }

    //开始输出操作
    printf("当前班级人员信息如下\n");
    printf("姓名\t\t性别\t职业\t成绩或课程\n");
    for(int i=0; ilen; i++)
    {
        printf("%s\t\t%c\t%c\t", C->data[i].name,\
                C->data[i].sex,\
                C->data[i].job);

        if(C->data[i].job=='S'||C->data[i].job=='s')
        {
            printf("%.2lf\n", C->data[i].score);
        }else
        {
            printf("%s\n", C->data[i].sub);
        }
    }
}

//声明查找函数
int search(Class_ptr C, const char *name)
{
    //判断逻辑
    if(NULL==C || C->len==0)
    {
        printf("查找个der。。。");
        return -1;
    }

    //开始进行查找
    //设置一个旗帜
    int flag = 0;
    for(int i=0; ilen; i++)
    {
        if(strcmp(C->data[i].name, name) == 0)
        {
            flag = 1;       //说明查找到了

            printf("%s\t\t%c\t%c\t", C->data[i].name,\
                    C->data[i].sex,\
                    C->data[i].job);

            if(C->data[i].job=='S'||C->data[i].job=='s')
            {
                printf("%.2lf\n", C->data[i].score);
            }else
            {
                printf("%s\n", C->data[i].sub);
            }

            //break;
        }
    }

    //判断是否没找到
    if(flag == 0)
    {
        printf("你走错班了,该班查无此人\n");
        return -1;
    }

    return 0;

}

//是否内存
void class_free(Class_ptr C)
{
    if(NULL != C)
    {
        free(C);
        C = NULL;
    }
    printf("释放成功\n");
}
#include"5work.h"
#include

int main(int argc, const char *argv[])
{
    //调用函数创建一个班级
    Class_ptr C = create();
    if(NULL == C)
    {
        return -1;
    }

    //测试录入学生工作
    while(1)
    {
        Stu s;       //定义一个学员
        printf("请输入学员的姓名:");
        scanf("%s", s.name);
        printf("请输入学员的性别(M|W):");
        scanf(" %c", &s.sex);
        printf("请输入学员的职业(S|T):");
        scanf(" %c", &s.job);
        if(s.job == 'S' || s.job=='s')
        {
            printf("请输入学员的分数:");
            scanf("%lf", &s.score);
        }else if(s.job=='T' || s.job=='t')
        {
            printf("请输入学员所带课程:");
            scanf("%s", s.sub);
       }

        //调用添加学员函数
        add(C, s);

        //判断是否继续录入
        char judge;
        printf("是否继续录入(Y|N):");
        scanf(" %c", &judge);
        if((judge=='Y' || judge=='y'))
        {
            if(C->len < MAX)
            {
                continue;
            }else
            {
                printf("操作失败,班级满了\n");
                break;
            }
        }else
        {
            //输入不再添加数据,则结束录入功能
            break;
        }

    }

    //调用输出函数
    show(C);

    //定义要查找的名字
    char name[20];
    printf("请输入要查找的姓名:");
    scanf("%s", name);

    //调用查找函数
    search(C, name);

    //调用释放函数
    class_free(C);
    C = NULL;
    
    return 0;
}

Day2数据结构_第1张图片

 2、思维导图

Day2数据结构_第2张图片

 

你可能感兴趣的:(数据结构,算法)