C语言通过结构体制作简易的信息管理系统

主文件

#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);
	}
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值