头文件
#ifndef __STU_H__
#define __STU_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#endif
typedef union sot
{
double score;
char course[20];
} sot;
typedef struct member
{
char sex;
char job[20];
char name[20];
sot sot_list;
} Member_t;
typedef struct
{
int index;
Member_t Mem_list[40];
} Class_list;
Class_list *Create_Class_List();
int Add_data(Class_list *L, int pos);
int input(Class_list *L);
int find(Class_list* L);
void output(Class_list *L);
函数实现
#include "stu.h"
/*
功能:在堆空间中申请一个线性表
参数:申请线性表的长度
返回值:线性表首地址
*/
Class_list *Create_Class_List()
{
Class_list *ret = NULL;
ret = (Class_list*)malloc(sizeof(Class_list)+sizeof(Member_t)*40);
if(NULL == ret)
{
puts("malloc memory fail!");
return NULL;
}
memset(ret, 0, sizeof(Class_list));
return ret;
}
int input(Class_list *L)
{
while(1)
{
int flag = 0;
if(NULL == L)
{
puts("malloc memory fail!");
return -1;
}
if(40 == L->index)
{
puts("list MAX!");
return -1;
}
printf("请输入第%d个成员的名字\n", L->index+1);
scanf("%s", L->Mem_list[L->index].name);
getchar();
printf("请输入第%d个成员的性别\n", L->index+1);
scanf("%c", &L->Mem_list[L->index].sex);
printf("请输入第%d个成员的职业\n", L->index+1);
scanf("%s", L->Mem_list[L->index].job);
if( 0 == strcmp(L->Mem_list[L->index].job, "teacher"))
{
printf("请输入第%d个成员所教课程\n", L->index+1);
scanf("%s", L->Mem_list[L->index].sot_list.course);
}
if(0 == strcmp(L->Mem_list[L->index].job, "student"))
{
printf("请输入第%d个成员的成绩\n", L->index+1);
scanf("%lf", &L->Mem_list[L->index].sot_list.score);
}
L->index++;
printf("是否继续插入成员信息,是:1,否:0\n");
scanf("%d", &flag);
if(!flag)
break;
}
}
void output(Class_list *L)
{
if(NULL == L)
{
puts("malloc memory error!");
}
int i = 0;
printf("姓名\t性别\t职业\t成绩\n");
for(i = 0; i < L->index; i++)
{
if(0 == strcmp(L->Mem_list[i].job, "student"))
{
printf("%s\t%c\t%s\t%1.f\n", L->Mem_list[i].name, L->Mem_list[i].sex, L->Mem_list[i].job, L->Mem_list[i].sot_list.score);
}
}
printf("姓名\t性别\t职业\t课程\n");
for(i = 0; i < L->index; i++)
{
if(0 == strcmp(L->Mem_list[i].job, "teacher"))
{
printf("%s\t%c\t%s\t%s\n", L->Mem_list[i].name, L->Mem_list[i].sex, L->Mem_list[i].job, L->Mem_list[i].sot_list.course);
}
}
}
/*
int Add_data(Class_list *L, int pos)
{
if(NULL == L)
{
puts("malloc memory fail!");
return -1;
}
if(pos < 0 || pos > 40)
{
puts("pos error!");
return -1;
}
Class_list *P = L;
int i = 0;
for(i = P->index; i > pos; i--)
{
P->Mem_list[i] = P->Mem_list[i-1];
}
printf("请输入第%d个成员的名字\n", pos);
scanf("%s", L->Mem_list[pos].name);
getchar();
printf("请输入第%d个成员的性别\n", pos);
scanf("%c", &L->Mem_list[L->index].sex);
printf("请输入第%d个成员的职业\n", pos);
scanf("%s", L->Mem_list[L->index].job);
if( 0 == strcmp(L->Mem_list[L->index].job, "teacher"))
{
printf("请输入第%d个成员所教课程\n", pos);
scanf("%s", L->Mem_list[L->index].sot_list.course);
}
if(0 == strcmp(L->Mem_list[L->index].job, "student"))
{
printf("请输入第%d个成员的成绩\n", pos);
scanf("%lf", &L->Mem_list[L->index].sot_list.score);
}
P->index++;
}
*/
int find(Class_list* L)
{
if(NULL == L)
{
puts("malloc memory fail!");
return -1;
}
if(0 == L->index)
{
puts("list is NULL");
return -1;
}
char name[20];
printf("请输入要查找的成员名字\n");
scanf("%s", name);
int i = 0;
for(i = 0; i < L->index; i++)
{
if(0 == strcmp(name, L->Mem_list[i].name))
{
printf("班级里有该成员\n");
return 0;
}
}
printf("班级里没有这个成员\n");
}
主函数
#include "stu.h"
int main()
{
Class_list *L = NULL;
L = Create_Class_List();
input(L);
output(L);
find(L);
return 0;
}