c高级结构体作业

头文件

#ifndef __STUDENT_H__
#define __STUDENT_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 show();
void insert_stu(Stu* pinfo, int index); 	//Stu* pinfo = info
void show_msg(Stu* pinfo, int index); 	    //Stu* pinfo = info
void insert_stu1(Stu* pinfo, int index);    //Stu* pinfo = info
void find_msg(Stu * pinfo, int index);
void delete(Stu * pinfo, int index);
void chage(Stu *pinfo, int index);

#endif

功能函数

#include "student.h"
#include <string.h>

void show()
{
    printf("*******1、录入学生********\n");
    printf("*******2、录入老师********\n");
    printf("*******3、遍历数据********\n");
    printf("*******4、删除数据********\n");
    printf("*******5、查找数据********\n");
    printf("*******6、修改数据********\n");
    printf("*******0、退出  **********\n");
}

//录入学生
void insert_stu(Stu* pinfo, int index) //pinfo是数组,index是计算人数
{
    printf("请输入学号:");
    scanf("%d",&(pinfo+index)->id);
    printf("请输入姓名:");
    getchar();
    scanf("%s", (pinfo+index)->name);
    printf("请输入年龄:");
    scanf("%d", &(pinfo+index)->age);
    printf("请输入成绩:");
    scanf("%d", &(pinfo+index)->t.score);
    (pinfo+index)->flag = 's';
    return;
}

//录入老师
void insert_stu1(Stu* pinfo, int index) //pinfo是数组,index是计算人数
{
    printf("请输入学号:");
    scanf("%d",&(pinfo+index)->id);
    printf("请输入姓名:");
    getchar();
    scanf("%s", (pinfo+index)->name);
    printf("请输入年龄:");
    scanf("%d", &(pinfo+index)->age);
    printf("请输入成绩:");
    scanf("%hd", &(pinfo+index)->t.jixiao);
    (pinfo+index)->flag = 't';
    return;
}

//遍历
void show_msg(Stu* pinfo, int index)
{
    printf("\t学号\t姓名\t年龄\t成绩\n");
    for(int i = 0; i < index; i++)
    {
        if('s' == pinfo[i].flag)
            printf("学生:\t%d\t%s\t%d\t%d\n", pinfo[i].id, pinfo[i].name, pinfo[i].age, pinfo[i].t.score);
        else
            printf("老师:\t%d\t%s\t%d\t%d\n", pinfo[i].id, pinfo[i].name, pinfo[i].age, pinfo[i].t.jixiao);
    }
}

//查找
void find_msg(Stu * pinfo, int index)
{
    int id = 0;
    printf("请输入需要查找的学号:");
    scanf("%d", &id);
    for(int i = 0; i < index; i++)
    {
        if(id == (pinfo+i)->id)
        {
            printf("    \t学号\t姓名\t年龄\t成绩\n");
            if('s' == pinfo[i].flag)
                printf("学生:\t%d\t%s\t%d\t%d\n", pinfo[i].id, pinfo[i].name, pinfo[i].age, pinfo[i].t.score);
            else
                printf("老师:\t%d\t%s\t%d\t%d\n", pinfo[i].id, pinfo[i].name, pinfo[i].age, pinfo[i].t.jixiao);
            break;
        }
        if(i == index-1)
        {
            printf("查无此人!!!\n");
        }
    }
}

//删除数据
void delete(Stu * pinfo, int index)
{
    int id = 0;
    printf("请输入需要删除的学号:");
    scanf("%d", &id);
    int i = 0, j = 0;
    for(; i < index; i++)
    {
        if(id == pinfo[i].id)
        {
            printf("    \t学号\t姓名\t年龄\t成绩\n");
            if('s' == pinfo[i].flag)
                printf("学生:\t%d\t%s\t%d\t%d\n", pinfo[i].id, pinfo[i].name, pinfo[i].age, pinfo[i].t.score);
            else
                printf("老师:\t%d\t%s\t%d\t%d\n", pinfo[i].id, pinfo[i].name, pinfo[i].age, pinfo[i].t.jixiao);
            break;
        }
        if(i == index-1)
        {
            printf("查无此人!!!\n");
            return ;
        }
    }
    char de[5] = "";
    printf("是否删除y/n\n");
    getchar();
    scanf("%s",de);
    if(!strcmp(de,"y") || !strcmp(de,"Y"))
    {
        for(int j = i; j < index-1; j ++)
        {
            pinfo[j].id = pinfo[j+1].id;
            strcpy((pinfo+j)->name,(pinfo+j+1)->name);
            pinfo[j].age = pinfo[j+1].age;
            if('s' == pinfo[j].flag)
                pinfo[j].t.score = pinfo[j+1].t.score;
            else
                pinfo[j].t.jixiao = pinfo[j+1].t.jixiao;
        }
        printf("删除成功\n");
    }
}

//修改数据
void chage(Stu *pinfo, int index)
{
    int id = 0, i = 0;
    printf("请输入需要修改的学号:");
    scanf("%d", &id);
    for(; i < index; i++)//查找修改的人
    {
        if(id == pinfo[i].id)
        {
            printf("    \t学号\t姓名\t年龄\t成绩\n");
            if('s' == pinfo[i].flag)
                printf("学生:\t%d\t%s\t%d\t%d\n", pinfo[i].id, pinfo[i].name, pinfo[i].age, pinfo[i].t.score);
            else
                printf("老师:\t%d\t%s\t%d\t%d\n", pinfo[i].id, pinfo[i].name, pinfo[i].age, pinfo[i].t.jixiao);
            break;
        }
        if(i == index-1)
        {
            printf("查无此人\n");
            return;
        }
    }
    int a;
    printf("请输入需要修改的选项:1.学号 2.姓名 3.年龄 4.成绩\n");
    scanf("%d",&a);
    switch (a)
    {
    case 1:
        printf("请输入新的学号:");
        scanf("%d",&pinfo[i].id);
        break;
    case 2:
        printf("请输入新的姓名:");
        getchar();
        scanf("%s",(pinfo+i)->name);
        break;
    case 3:
        printf("请输入新的年龄:");
        scanf("%d",&pinfo[i].age);
        break;
    case 4:
        if('s' == pinfo[i].flag)
        {
            printf("请输入新的成绩:");
            scanf("%d",&pinfo[i].t.score);
        }
        else
        {
            printf("请输入新的绩效:");
            scanf("%hd",&pinfo[i].t.jixiao);
        }
        break;
    default:
        printf("输入有误。\n");
        break;
    }


}

主函数

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

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

	int choose = 0;
	while(1)
	{
        show();
		printf("请输入选择:");
		scanf("%d", &choose);
		switch(choose)
		{
		case 1:
			//录入学生 
			insert_stu(info, index);
			index++;
			break;
		case 2:
			//录入老师 
            insert_stu1(info, index);
			index++;
			break;
		case 3:
			//遍历数组
			show_msg(info, index);
			break;
		case 4:
			//删除数据
			delete(info,index);
			index--;
			break;
        case 5:
			//查找数组
			find_msg(info, index);
			break;
		case 6:
			//修改数据
			chage(info, index);
			break;
		case 0:
			//退出 
			return 0;
		default:
			printf("输入错误\n");
		}
	}
	return 0;
}

makefile

头文件部分
 Obj:=test.o main.o     
 Target:=1               
                             
 CC:=gcc                     
 CAN:=-c -o
-include ./makefile.cfg        
 
                               
$(Target):$(Obj)               
    $(CC) $^ -o $@
 
%.o:%.c
    $(CC) $< $(CAN) $@
 
 
clear:
    rm $(Obj) $(Target)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值