头文件
#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)