数据结构(day2)

test.h头文件:

#ifndef __TEST_H__
#define __TEST_H__
#include
#include
#include
#define Max 40

//用结构体嵌套共用体创建成员类
typedef struct Persons
{
    char name[20];
    char sex;
    char occupation;
    union
    {
        double score;
        char course[20];
    };
}per;

//班级类
typedef struct Classroom
{
    per class[Max];
    int len;
}cr;

cr *create();
void insert(cr *p);
void output(cr *p);
void find(cr *p,char *str);
cr *myfree(cr *p);

#endif

test.c:

#include"test.h"

//申请空间
cr *create(){
    cr *p=(cr*)malloc(sizeof(cr));
    if(NULL==p){
        printf("申请空间失败");
        return NULL;
    }
    return p;
}

//输入
void insert(cr *p){
    if(NULL==p){
        printf("未申请空间");
    }
    else {
        if(Maxlen){
            printf("班级已满");
        }
        else{
            printf("请输入姓名:\n");
            scanf("%s",(p->class+p->len)->name);
            printf("请输入性别:\n");
            scanf(" %c",&(p->class+p->len)->sex);
            printf("请输入职业:\n");
            scanf(" %c",&(p->class+p->len)->occupation);
            if((p->class+p->len)->occupation=='s' || (p->class+p->len)->occupation=='S'){
                printf("请输入分数:\n");
                scanf("%lf",&(p->class+p->len)->score);
            }        
            else if((p->class+p->len)->occupation=='t' || (p->class+p->len)->occupation=='T'){
                printf("请输入所教课程:\n");
                scanf("%s",(p->class+p->len)->course);
            }
            else{
                printf("输入了错误职业\n");
            }
            p->len++;
        }

    }
}
//输出
void output(cr *p){
    if(NULL==p){
        printf("未申请空间");
    }
    else{
        if(0==p->len){
            printf("班级为空");
        }
        else{
            printf("姓名\t性别\t职业\t分数/所教课程\n");
            for(int i=0;ilen;i++){
                printf("%s\t%c\t%c\t",(p->class+i)->name,(p->class+i)->sex,(p->class+i)->occupation);
                if((p->class+i)->occupation=='s'||(p->class+i)->occupation=='S'){
                    printf("%lf\n",(p->class+i)->score);
                }        
                else if((p->class+i)->occupation=='t'||(p->class+i)->occupation=='T'){
                    printf("%s\n",(p->class+i)->course);
                }
            }
        }

    }
}
//查找
void find(cr *p,char *str){
    if(NULL==p){
        printf("未申请空间");
    }
    else{
        if(0==p->len){
            printf("班级为空");
        }
        else{
            int flag=0;
            for(int i=0;ilen;i++){
                if(!strcmp(str,(p->class+i)->name)){
                    flag++;
                }
            }
            if(flag==1){
                printf("存在");
                puts(str);
            }
        }
    }
}
//释放
cr *myfree(cr *p){
    if(NULL==p){
        printf("未申请空间");
        return NULL;
    }
    free(p);
    p=NULL;    
    return p;
}

main.c:

#include "test.h"

int main(int argc, const char *argv[])
{
    cr *p=create();
    p->len=0;
    insert(p);
    insert(p);
    output(p);
    getchar();
    printf("请输入查找人的姓名:\n");
    char str[20];
    gets(str);
    find(p,str);
    cr *p1=myfree(p);
    return 0;
}

结果:

ubuntu@ubuntu:数据结构$ ./a.out 
请输入姓名:
gg
请输入性别:
m
请输入职业:
s
请输入分数:
44
请输入姓名:
ee
请输入性别:
t
请输入职业:
t
请输入所教课程:
shu
姓名    性别    职业    分数/所教课程
gg    m    s    44.000000
ee    t    t    shu
请输入查找人的姓名:
ee
存在ee

 思维导图:

数据结构(day2)_第1张图片

 

数据结构(day2)_第2张图片

 

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