linux系统中,使用makefile进行编写编译。makefile可以通过时间戳判断,来进行是否对此文件记性编
译,进而节约时间。
一、文件目录表
![](https://i-blog.csdnimg.cn/blog_migrate/577f9b3e975c96ad67300e7c440a9432.png)
二、main文件
main.c:
#include "stdio.h"
#include "stdlib.h"
#include "help.h"
#include "Type.h"
#include "List.h"
#include "Average.h"
#include "Search.h"
#include "Sort.h"
#include "main.h"
int main(int argc, char const *argv[])
{
help();
char start;
scanf("%c",&start);
getchar();
while('Q'!=start)
{
switch(start)
{
case 'H':help();break;
case 'T':Type();break;
case 'L':List();break;
case 'A':Average();break;
case 'S':Search();break;
case 'P':Sort();break;
case 'C':system("clear");break;
case 'Q':break;
default :printf("错误命令!重新输入!\n");
}
printf("重新输入命令");
scanf("%c",&start);
getchar();
}
return 0;
}
main.h:
#ifndef _MAIN_
#define _MAIN_
#include"stdio.h"
int i;
int m;
struct student
{
int id;
float chinese;
float mach;
float english;
float average;
}stu[32],stu2[32];
#endif
三、菜单编译
//help.c:
#include"main.h"
void help()
{
printf("*******************************************\n");
printf(" * 学生管理系统--帮助菜单 *\n");
printf("*******************************************\n");
printf("* H = 显示帮助菜单 *\n");
printf("* T = 成绩录入 *\n");
printf("* A = 计算学生平均分 *\n");
printf("* L = 列出成绩表 *\n");
printf("* P = 按平均分由高到低排序 *\n");
printf("* S = 按学号查询学生成绩 *\n");
printf("* C = 清屏 *\n");
printf("* Q = 退出系统 *\n");
printf("*****************************************\n");
printf(" * Conyright <C> 2011.06.12 By *\n");
printf("******************************************\n");
}
//help.h:
#ifndef HELP_
#define _HELP_
void help();
#endif
四、录入成绩
//Type.c
#include"main.h"
void Type()
{
int o;
if(stu[0].id>=1&&stu[0].id<=32)
{
printf("里边存在数据,是否覆盖?输入1表示覆盖,输入2表示取消覆盖\n:");
scanf("%d",&o);getchar();
if(1==o)
o+1;
else
{
return;
}
}
printf("输入学生人数:\n");
scanf("%d",&m);
printf("学号 语文 数学 外语");
for(i=0;i<m;i++)
{
stu[i].id=i+1;
printf("\n%d ",stu[i].id);
scanf("%f %f %f",&stu[i].chinese,&stu[i].mach,&stu[i].english);
getchar();
stu[i].average=0;
// printf("%d %d %d",stu[i].chinese,stu[i].mach,stu[i].english);
}
}
//Type.h
#ifndef _TYPE_
#define _TYPE_
void Type();
#endif
五、列出成绩单
//List.c
#include"main.h"
void List()
{
if(stu[0].id<1||stu[0].id>32)
printf("成绩表为空!请先使用命令T录入学生成绩\n");
else if(stu[0].id>=1&&stu[0].id<=32)
{
printf("学号 语文 数学 外语 平均分\n");
for(i=0;i<m;i++)
printf(" %d %.2f %.2f %.2f %.2f\n",stu[i].id,stu[i].chinese,stu[i].mach,stu[i].english,stu[i].average);
}
}
//List.h
#ifndef _LIST_
#define _LIST_
void List();
#endif
六、求平均数
//Average.c
#include"main.h"
void Average()
{
if(stu[0].id<1||stu[0].id>32)
printf("成绩表为空!请先使用命令T录入学生成绩\n");
else if(stu[0].id>=1&&stu[0].id<=32)
{
for(i=0;i<m;i++)
stu[i].average=(stu[i].chinese+stu[i].mach+stu[i].english)/3.00;
printf("平均分已计算。请使用命令L查看!\n");
}
}
//Average.h
#ifndef _AVERAGE_
#define _AVERAGE_
void Average();
#endif
七、排序
//Sort.c
#include"main.h"
void Sort()
{
if(stu[0].id<1||stu[0].id>32)
printf("成绩表为空!请先使用命令T录入学生成绩\n");
else if(stu[0].id>=1&&stu[0].id<=32)
{
for(i=0;i<m-1;i++)
{
for(int j=0;j<m-1-i;j++)
if(stu[j].average<stu[j+1].average)
{
stu2[0].id=stu[j].id;
stu2[0].average=stu[j].average;
stu2[0].chinese=stu[j].chinese;
stu2[0].english=stu[j].english;
stu2[0].mach=stu[j].mach;
stu[j].id=stu[j+1].id;
stu[j].average=stu[j+1].average;
stu[j].chinese=stu[j+1].chinese;
stu[j].english=stu[j+1].english;
stu[j].mach=stu[j+1].mach;
stu[j+1].id=stu2[0].id;
stu[j+1].average=stu2[0].average;
stu[j+1].chinese=stu2[0].chinese;
stu[j+1].english=stu2[0].english;
stu[j+1].mach=stu2[0].mach;
}
}
printf("完成排序。请使用命令L查看!\n");
}
}
//Sort.h
#ifndef _SORT_
#define _SORT_
void Sort();
#endif
八、根据学号查找学生信息
//Search.c
#include"main.h"
void Search()
{
int o;
if(stu[0].id<1||stu[0].id>32)
printf("成绩表为空!请先使用命令T录入学生成绩\n");
else if(stu[0].id>=1&&stu[0].id<=32)
{
printf("请输入要查询的学生学号\n:");
scanf("%d",&o);getchar();
printf("学号 语文 数学 外语 平均分\n");
for(i=0;i<m;i++)
if(stu[i].id==o)
printf(" %d %.2f %.2f %.2f %.2f\n",stu[i].id,stu[i].chinese,stu[i].mach,stu[i].english,stu[i].average);
}
}
//Search.h
#ifndef _SEARCH_
#define _SEARCH_
void Search();
#endif
九、makefile编译
CC=gcc
CFLAGS=-c -g -O
OBJS= help.o Type.o List.o Average.o Search.o Sort.o main.o
student:$(OBJS)
gcc $(OBJS) -o $@
$(OBJS):%.o:%.c
$(CC) $(CFLAGS) $^ -o $@
.PHONY:clean
clean:
rm *.o student