C语言——学生管理系统

今天,我来分享我写的一个简易的学生管理系统。

    学生管理系统主要包括学生成绩输入、列出成绩表、计算平均分、按平均分排序、按学号搜索和菜单模块。采用make工具来管理文件,make工具的好处就是它可以根据文件更新的时间戳来查找到更改的文件,且只对修改的文件进行编译,可以大大减少编译的时间。

下面的代码是学生管理系统的主函数,运行程序后,程序中并没有存储学生的相关信息,所以当输入别的命令,都会提示需要先输入命令‘T’来录入学生的成绩。当录入成绩后,就可以执行其他的模块了。

#include<stdio.h>
#include<stdlib.h>
#include"common.h"
#include"Average.h"
#include"Help.h"
#include"List.h"
#include"Search.h"
#include"Sort.h"
#include"Type.h"
int n=0;//全局变量n来表示录入成绩学生的人数
int main(int argc, char const *argv[])
{
     struct student stu[32]={};
    char order;
    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("* Copyright <c> 2023.02.12 By sun*\n");
    printf("***********************************\n");
    printf("\n");
    while(1)
    {
        printf("请输入命令:");
        scanf(" %c",&order);
    
        if(n==0&&order!='T')
    {
        printf("成绩表为空!请先使用命令T录入学生成绩。\n");
    }
    switch(order)
    {
        case 'H':Help();break;//帮助菜单
        case 'T':Type(stu);break;//录入成绩
        case 'A':Average(stu);break;//计算平均分
        case 'L':List(stu);break;//输出成绩
        case 'P':Sort(stu);break;//平均分由高到低排序
        case 'S':Search(stu);break;//查询学生成绩
        case 'C':system("clear");break;//清屏
        case 'Q':return 0;break;
        default:printf("输入错误!\n");break;
    }
    }
    return 0;
}

接下来将介绍录入学生的信息,分别有学生ID、语文成绩、数学成绩、外语成绩、平均分。具体请看下图。

#ifndef __COMMON_H__
#define __COMMON_H__
struct student
{
    int Id;
    int Chinese;
    int Math;
    int English;
    float Aver;
};
#endif

然后是录入成绩模块,此系统学生的ID是按顺序自动生成的,输入时不需要输入ID和平均分。

#include<stdio.h>
#include"common.h"
extern int  n;
void Type(struct student *p)//录入成绩
{
    int i,num;
    int a;
    printf("请输入学生人数:");
    scanf("%d",&num);
    printf("请输入%d名学生的三门课成绩:\n",num);
    printf("学号 语文 数学 外语\n");
    for(i=0;i<num;i++)
    {
        a=n+i+1;
        printf("%d    ",a);
        (p+n+i)->Id=a;       
        scanf("%d %d %d",&((p+n+i)->Chinese),&((p+n+i)->Math),&((p+n+i)->English));
    }
    n=num+n;
}

列出成绩表模块:

#include<stdio.h>
#include"common.h"
extern int n;
void List(struct student *p)//输出成绩
{
    int i;
    printf("学生成绩如下:\n");
    printf("学号 语文 数学 外语 平均分\n");
    for(i=0;i<n;i++)
    {
        printf("%d    %d    %d    %d    %.1f    \n",(p+i)->Id,(p+i)->Chinese,(p+i)->Math,(p+i)->English,(p+i)->Aver);
    }
}

计算平均分模块:

#include<stdio.h>
#include"common.h"
void Average(struct student *p)//计算平均分
{
    int i=0;
    while((p+i)->Id!=0)
    {
        ((p+i)->Aver)=((p+i)->Chinese+(p+i)->Math+(p+i)->English)/3;
        i++;
    }
    printf("平均分已计算。请使用命令L查看。\n");
}

接下来是按照平均分进行由高到低进行排序:

#include<stdio.h>
#include"common.h"
extern int n;
void Sort(struct student *p)//平均分由高到低排序
{
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if((p+j)->Aver<(p+j+1)->Aver)
                {
                *(p+31)=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=*(p+31);
                }
        }
    }
    printf("完成排序。请使用命令L查看。\n");
}

按ID进行搜索模块:

#include<stdio.h>
#include"common.h"
extern int n;
void Search(struct student *p)//根据学号查询学生成绩
{
    int a;
    printf("请输入要查询的学生学号:");
    scanf("%d",&a);
    printf("学号 语文 数学 外语 平均分\n");
    for(int i=0;i<n;i++){
        if((p+i)->Id==a)
            printf("%d    %d    %d    %d    %.1f    \n",(p+i)->Id,(p+i)->Chinese,(p+i)->Math,(p+i)->English,(p+i)->Aver);     
    }
}

菜单模块:

#include<stdio.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("* Copyright <c> 2023.02.12 By sun*\n");
    printf("***********************************\n");
    printf("\n");
}

Makefile文件:

CC=gcc
OBJS=main.o Average.o Help.o List.o Search.o Sort.o Type.o
CFLAGS=-c -g -O
go:$(OBJS)
	$(CC) $(OBJS) -o $@
$(OBJS):%.o:%.c
	$(CC) $(CFLAGS) $^ -o $@
.PHONY:clean
clean:
	rm *.o

下图即为测试运行的部分结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值