C高级第7天

 写出一个信息录入功能:

1、输入学生和老师的信息;

2、遍历信息

3、修改信息

4、删除信息

5、退出输入程序

头文件

#ifndef __FUNC_H__
#define __FUNC_H__

#include <stdio.h>

union msg
{
	int score;
	short jixiao;
};

typedef struct
{
	int id;
	char name[20];
	int age;
	char flag; // s 学生  t:老师
	union msg t;
} Stu;

void insert_stu(Stu *pinfo, int index); // Stu* pinfo = info
void show_msg(Stu *pinfo, int index);		// Stu* pinfo = info
void insert_tec(Stu *pinfo, int index);
void del_msg(Stu *pinfo,int index);
void res_msg(Stu *pinfo,int index);

#endif

 

主函数

#include <stdio.h>
#include "./08_func.h" //在预处理步骤展开

int main(int argc, const char *argv[])
{
	union msg t;

	Stu info[10];	 // 定义结构体数组,存储学生和老师的信息
	int index = 0; // 目前有效数据是0个

	int choose = 0;
	while (1)
	{
		printf("1. 录入学生\n");
		printf("2. 录入老师\n");
		printf("3. 遍历\n");
		printf("4. 修改信息\n");
		printf("5. 删除\n");
		printf("6. 退出\n");

		printf("请输入>>> ");
		scanf("%d", &choose);

		switch (choose)
		{
		case 1:
			// 录入学生
			insert_stu(info, index);
			index++;
			break;
		case 2:
			// 录入老师
			insert_tec(info, index);
			index++;
			break;
		case 3:
			// 遍历数组
			show_msg(info, index);
			break;
		case 4:
			res_msg(info,index);
			break;
		case 5:
			del_msg(info,index);
			index--;
			break;
		case 6:
			// 退出
			goto END;
		default:
			printf("输入错误\n");
		}
	}
END:
	return 0;
}

 

功能函数:输入学生信息

#include "./08_func.h"
#include <string.h>
// 输入学生
void insert_stu(Stu *pinfo, int index) // Stu* pinfo = info
{
// 从终端获取一个学生的姓名,年龄,成绩
	printf("请输入学生姓名>>> ");
	char name[20];
	scanf("%s", name);

	printf("请输入学生年龄>>> ");
	int age;
	scanf("%d", &age);

	printf("请输入学生成绩>>> ");
	int score;
	scanf("%d", &score);

	// 存储到main函数定义好的info数组中
	strcpy((pinfo + index)->name, name);
	(pinfo + index)->age = age;
	(pinfo + index)->t.score = score;
	(pinfo+index)->id=index;
	(pinfo + index)->flag = 's'; // 代表是个学生

	return;
}

 

 功能函数:输入老师信息

void insert_tec(Stu *pinfo, int index)
{
	printf("请输入老师姓名>>>");
	char name[20];
	scanf("%s", name);
	
	printf("请输入老师年龄>>>");
	int age;
	scanf("%d", &age);
	
	printf("请输入老师绩效>>>");
	int jixiao;
	scanf("%d", &jixiao);
	(pinfo+index)->id=index;
	strcpy((pinfo + index)->name, name);
	(pinfo + index)->age = age;
	(pinfo + index)->t.jixiao = jixiao;
	(pinfo + index)->flag = 't';
	return;
}

 

功能函数:遍历信息

void show_msg(Stu *pinfo, int index) // Stu* pinfo = info
{	
	for (int i = 0; i < index; i++)
	{
		printf("id=%d\tname=%s\tage=%d\t",(pinfo+i)->id, (pinfo + i)->name, (pinfo + i)->age);
		if ('s' == (pinfo + i)->flag){
			printf("score=%d\n", (pinfo + i)->t.score);
		}else{
		printf("jixiao=%d\n", (pinfo + i)->t.jixiao);
		}
		
	}
	return;
}

 

功能函数:修改信息

void res_msg(Stu *pinfo,int index){
	int n;
	char name[20]={0};
	int age;
	int score;
	int jixiao;

	printf("请输入要修改学员或老师的编号\n");
	scanf("%d",&n);
	for(int i=0;i<index;i++){
		if(pinfo[i].id==n){
			printf("请输入要修改的姓名>>>");
			scanf("%s",name);
			memset(pinfo[i].name,0,strlen(pinfo[i].name));
			strcpy(pinfo[i].name,name);

			printf("请输入要修改的年龄>>>");
			scanf("%d",&age);
			pinfo[i].age=age;
			if(pinfo[i].flag=='s'){
				printf("请输入要修改的成绩>>>");
				scanf("%d",&score);
				pinfo[i].t.score=score;
			}else{
				printf("请输入要修改的绩效>>>");
				scanf("%d",&jixiao);
				pinfo[i].t.jixiao=jixiao;
			}
			printf("修改成功!\n");
		}
	}
	return;
}

 

功能函数:删除信息

void del_msg(Stu *pinfo,int index){
	int n;
	printf("请输入需要删除的信息编号:\n");
		scanf("%d",&n);
	for(int i=0,j=0;i<index;i++){
		if(pinfo[i].id!=n){
			strcpy(pinfo[j].name,pinfo[i].name);
			pinfo[j].age=pinfo[i].age;
			pinfo[j].flag=pinfo[i].flag;
			pinfo[j].id=pinfo[i].id;
			if(pinfo[i].flag=='s'){
				pinfo[j].t.score=pinfo[i].t.score;
			}else{
				pinfo[j].t.jixiao=pinfo[i].t.jixiao;
			}
			j++;
		}
	}
	printf("删除成功!\n");
	return;
}

运行结果

 

 使用Makefile管理多文件

Target:=a.out
obj:=06_union.o 07_func.o
can:=-c -o
cc:=gcc
-include ./makefile.cfg

$(Target):$(obj)
	$(cc) $^ -o $@

%.o:%.c
	$(cc) $< $(can) $@


.PHONY:clean:
	rm $(obj) $(Target)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值