学生管理系统--makefile编写

1 篇文章 0 订阅
1 篇文章 0 订阅

linux系统中,使用makefile进行编写编译。makefile可以通过时间戳判断,来进行是否对此文件记性编

译,进而节约时间。

一、文件目录表

二、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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值