主文件
#include <stdio.h>
#include <stdlib.h>
#include "./07_head.h"
#define n 100
int main(int argc, const char *argv[])
{
//存储学生和教师的信息
pepo system[n];
int num = 0; //老师和学生的总个数
int choose;
while(1)
{
printf("-----------------------\n");
printf("---1. 学生信息录入-----\n");
printf("---2. 教师信息录入-----\n");
printf("---3. 遍历学生信息-----\n");
printf("---4. 遍历教师信息-----\n");
printf("---5. 退出-------------\n");
printf("-----------------------\n");
printf("输入序号进行对应的操作:\n");
scanf("%d", &choose);
getchar();
switch(choose)
{
case 1:
//学生信息
studentMsg(system, &num);
printf("学生个数num = %d __%d__\n", num, __LINE__); //打印个数和行号
break;
case 2:
//教师信息
teacherMsg(system, &num);
printf("教师个数num = %d __%d__\n", num, __LINE__);
break;
case 3:
//遍历学生信息
stu_bianli(system, num);
break;
case 4:
//遍历教师信息
tea_bianli(system, num);
break;
case 5:
//退出
printf("退出成功\n");
goto end;
break;
default:
printf("序号输入错误,重新输入!!");
}
}
end:
return 0;
}
调用的头文件
#ifndef __func_h__ //防止头文件重复包含
#define __func_h__
//联合体
typedef union
{
float score;
int jixiao;
}test;
//信息
typedef struct people
{
int id;
char name[20];
test t; //联合体
char differ; //用来区分教师还是学生 学生's' 教师't'
}pepo;
void studentMsg(pepo *str, int *pnum);
void teacherMsg(pepo *ttr, int *pnum);
void stu_bianli(pepo *bstr, int num);
void tea_bianli(pepo *bstr, int num);
#endif
调用的函数文件
#include <stdio.h>
#include "./07_head.h"
// (ptr+num)->id
// *(ptr+num).id
// ptr[num].id
//学生信息函数
void studentMsg(pepo *str, int *pnum)
{
// (ptr+num)->id
// *(ptr+num).id
// ptr[num].id
(str + *pnum)->differ = 's'; //标识符存储学生
printf("输入学生ID:");
//指针*str指向首地址,首地址里面有id ,name等数据访问里面的数据:
// str->id
// num是个数,定义了一个初值,int num = 0,
//当想输入信息时,指针应偏移num个地址,即:
// str+num->id,但是访问的是外部的局部变量num,
//需要传num的地址到函数中,即定义个指针*pnun来接收该地址
//因此:最后即(str + *num)->id
scanf("%d", &( (str + *pnum) )->id);
getchar();
printf("输入学生姓名:");
scanf("%s",( *(str + *pnum) ).name);
getchar();
printf("输入学生成绩:");
scanf("%f",&( str[*pnum].t.score) );
getchar();
(*pnum)++;
return;
}
//教师信息函数
void teacherMsg(pepo *ttr, int *pnum)
{
(ttr + *pnum)->differ = 't';
printf("输入教师ID:");
scanf("%d", &( (ttr + *pnum) )->id);
getchar();
printf("输入教师姓名:");
scanf("%s", ( *(ttr + *pnum) ).name);
getchar();
printf("输入教师绩效:");
scanf("%d", &( ttr[*pnum].t.jixiao ));
getchar();
(*pnum)++;
return;
}
//学生信息遍历
void stu_bianli(pepo *bstr, int num)
{
int i = 0;
for(i = 0; i < num; i++)
{
if(bstr[i].differ == 's')
printf("%d %s %g\n",bstr[i].id, bstr[i].name, bstr[i].t.score);
}
return;
}
//教师信息遍历
void tea_bianli(pepo *bttr, int num)
{
int i = 0;
for(i = 0; i < num; i++)
{
if(bttr[i].differ == 't')
printf("%d %s %d\n",bttr[i].id, bttr[i].name, bttr[i].t.jixiao);
}
}