学生成绩管理系统(C语言课设 )

这个学生成绩管理系统使用C语言编写,具有多项功能以方便管理学生信息和成绩。首先从文件中读取数据到系统中,并提供了多种功能(增删改查等)选项以满足不同的需求。

学生成绩管理系统功能:

  1. 显示学生信息
  2. 增加学生信息
  3. 删除学生信息
  4. 修改学生信息
  5. 查询学生信息
  6. 总分降序排序学生成绩
  7. 统计学生平均成绩
  8. 统计每科平均成绩
  9. 统计信息录入系统中人数
  10. 输出总成绩最高的学生信息
  11. 退出

运行示例:
运行之后要自己先往系统里面增加学生数据哦

注意:因为设涉及到文件操作,需要把下面文件读取和保存函数中的文件位置修改为自己所要保存的文件位置或者按照如下操作建立文件:

  1. 打开D盘新建一个文件夹 名字叫 学生成绩管理系统 (名字要一模一样哦)

  2. 在该文件夹中新建文本文档 命名为 xscjglxt (如下图:)

目录

1.函数声明

c 复制代码
void regist();//登录界面
void findid();//按照学号索引查询
void show();//查看所有的学生成绩信息
void del();//删除学生信息
void edit();//修改学生信息
void add();//添加学生信息
void mysort();//总分降序排序
void avegxs();//查询学生成绩平均值大于90的学生成绩
void avegkm();//查询学生成绩平均值小于60的学生成绩
void save();//保存学生信息到文件
void load();//从文件读取学生信息到内存
void menu();//菜单总录入人数
void maxn();//输出系统中总成绩最大的学生信息

2.结构体和全局变量定义

c 复制代码
typedef struct student
{
    char id[15];//学生学号
    char name[50];//学生姓名
    char sex[10];//学生性别
    char great[50];//学生班级
    int E,M,Y;//学生的英语、数学、语文成绩
    float ave;//学生的平均成绩
    int all;//学生的总成绩
}student;

student students[100];
static int length;//保存当前系统中的人数

3.主函数和主菜单函数

主函数运行之后首先从文件中读取学生信息到系统当中,然后显示系统菜单提供多种功能让用户选择。

c 复制代码
//主函数
int main()
{
    printf("登陆成功!");
    load();//从文件中读取信息到内测
    menu();//菜单
}
c 复制代码
void menu()//菜单
{
	while(1)
	{
	    regist();
	    int n;
        scanf("%d",&n);
        switch(n)
        {
            case 1:
                show();
                break;
            case 2:
                add();
                break;
            case 3:
                del();
                break;
            case 4:
                edit();
                break;
            case 5:
                findid();
                break;
            case 6:
                mysort();
                break;
            case 7:
                avegxs();
                break;
            case 8:
                avegkm();
                break;
            case 9:
                cens();
                break;
            case 10:
                maxn();
                break;
            case 11:
                exit(0);

        }
        save();
        printf("按任意键继续\n");
        getchar();
        getchar();
        system("cls");
	}

}
c 复制代码
void regist()//登录界面
{
    printf("\n\n\t*****************************学生信息管理系统******************************\n");
	printf("\t*                              1.显示学生信息                             *|\n");
	printf("\t*                              2.增加学生信息                             *|\n");
	printf("\t*                              3.删除学生信息                             *|\n");
	printf("\t*                              4.修改学生信息                             *|\n");
	printf("\t*                              5.查询学生信息                             *|\n");
	printf("\t*                              6.总分降序排序学生成绩                     *|\n");
	printf("\t*                              7.统计学生平均成绩                         *|\n");
	printf("\t*                              8.统计每科平均成绩                         *|\n");
    printf("\t*                              9.统计信息录入系统中人数                   *|\n");
    printf("\t*                              10.输出总成绩最高的学生信息                *|\n");
	printf("\t*                              11.退出                                    *|\n");
	printf("\t***************************************************************************\n");
	printf("请输入你要进行的操作:\n");
}

4.显示学生信息

这里会将系统中所有的学生信息显示到屏幕上

c 复制代码
void show()//查看所有的学生成绩信息
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    for(int i =0;i<length;i++)
    {


        printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
        printf("------------------------------------------------------------------------------------------------------------------------\n");

    }
}

5.增加学生信息

增加学生信息时会进行判定是否系统当中内存已满或者该学号已存在则不可以添加该学生信息(学号唯一)。

c 复制代码
void add()//添加学生信息
{
    int flag=0;
    if(length>=100)
    {
        printf("该班级人数已满!!!");
    }
    else{
    printf("请输入学生信息:\n");
    printf("学生姓名:");
    char op[50];
    scanf("%s",op);
    printf("学生学号:");
    char opp[50];
    scanf("%s",opp);
    for(int i=0;i<length;i++)
    {
        if(strcmp(opp,students[i].id)==0)flag=1;
    }
    if(flag==1)
    {
        printf("警告!!!该学号已存在!!!请返回修改!!!");
        return;
    }
    strcpy(students[length].name,op);
    strcpy(students[length].id,opp);
    printf("学生班级:");
    scanf("%s",students[length].great);
    printf("请输入学生性别:");
    scanf("%s",students[length].sex);
    printf("语文成绩:");
    scanf("%d",&students[length].Y);
    printf("数学成绩:");
    scanf("%d",&students[length].M);
    printf("英语成绩:");
    scanf("%d",&students[length].E);
    students[length].all=students[length].Y+students[length].M+students[length].E;
    students[length].ave=((float)(students[length].Y+students[length].M+students[length].E)/3);
    length++;
    }
}

6.删除学生信息

根据学生学号对学生信息进行删除

c 复制代码
void del()//删除学生信息
{
    printf("请输入该学生的学号:\n");
    char op[50];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            for(int j=i;j<length-1;j++)
                students[j]=students[j+1];
            flag=1;
            length--;
            break;
        }
    }
    if(!flag)printf("不存在该学号学生!!!请重新输入!!!\n");
}

7.修改学生信息

c 复制代码
void edit()//修改学生信息
{
    printf("请输入该学生学号:\n");
    char op[50];
    char opp[50];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            printf("请输入该学生新的信息:\n");

            strcpy(students[i].id,opp);
            printf("班级:");
            scanf("%s",students[i].great);
            printf("性别:");
            scanf("%s",students[i].sex);
            printf("语文成绩:");
            scanf("%d",&students[i].Y);
            printf("数学成绩:");
            scanf("%d",&students[i].M);
            printf("英语成绩:");
            scanf("%d",&students[i].E);
            students[i].ave=(students[i].Y+students[i].E+students[i].M)/3;
            students[i].all=students[i].Y+students[i].E+students[i].M;
            flag=1;
            break;
        }
    }
    if(flag==0)printf("该学生不存在\n");
}

8.查询学生信息

根据学号对学生信息进行查询

c 复制代码
void findid()//按照学号索引查询
{
    printf("请输入学生学号:\n");
    char op[15];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            printf("------------------------------------------------------------------------------------------------------------------------\n");
            printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
            printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d\n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
            printf("------------------------------------------------------------------------------------------------------------------------\n");
            flag=1;
        }
    }
    if(!flag)
    {
        printf("不存在该学号的学生\n");
    }
}

9.总分降序排序学生成绩

通过冒泡排序对学生信息按照学生总成绩从高到低进行排序

c 复制代码
void mysort()//总分降序排序
{
    student vis;
    for(int i=0;i<length;i++)
        for(int j=0;j<length-i-1;j++)
    {
        if(students[j].all<students[j+1].all)
        {
            vis=students[j];
            students[j]=students[j+1];
            students[j+1]=vis;
        }
    }
    show();
}

10.统计学生平均成绩

c 复制代码
void avegxs()//查询学生成绩平均值
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 平均成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    for(int i=0;i<length;i++)
    {
        //if(students[i].ave>90)
        //{

            printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %.2lf    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all*1.0/length);
            printf("------------------------------------------------------------------------------------------------------------------------\n");

        //}
    }
}

11.统计每科平均成绩

c 复制代码
void avegkm()//查询各门平均值
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("语文成绩 | 数学成绩 | 英语成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    double ans1=0,ans2=0,ans3=0;
    for(int i=0;i<length;i++)
    {
        ans1+=students[i].Y;
        ans2+=students[i].M;
        ans3+=students[i].E;
    }
    ans1=ans1*1.0/length;
    ans2=ans2*1.0/length;
    ans3=ans3*1.0/length;
    printf("\n%.2lf    |    %.2lf    |    %.2lf    \n",ans1,ans2,ans3);
    printf("------------------------------------------------------------------------------------------------------------------------\n");

}

12.统计信息录入系统中人数

c 复制代码
void cens()
{
    printf("系统中共有%d个人的信息\n",length);
}

13.输出总成绩最高的学生信息

c 复制代码
void maxn()//查询学生成绩最高的学生信息
{
    int vis=students[0].all;
    for(int i=1;i<length;i++)
    {
        if(students[i].all>vis)vis=students[i].all;
    }
    for(int i=0;i<length;i++)
    {
        if(students[i].all==vis)
        {
        printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
        printf("------------------------------------------------------------------------------------------------------------------------\n");

        }
    }
}

14.从文件中读取数据(*注意这里的文件位置要改为自己的)

c 复制代码
void load()//从文件读取学生信息到内存
{
    FILE *fp=fopen("D:\\学生成绩管理系统\\xscjglxt.txt","r");
    if(fp==NULL)
    {
        printf("文件打开失败\n");

    }
    int i=0;
    while(fscanf(fp,"%s %s %s %s %d %d %d %f %d\n",
               students[i].id,
               students[i].name,
               students[i].great,
               students[i].sex,
               &students[i].Y,
               &students[i].M,
               &students[i].E,
               &students[i].ave,
               &students[i].all)==9)
    {
        i++;

    }
    length=i;
    fclose(fp);
}

15.将数据保存至文件(*注意这里的文件位置要改为自己的)

c 复制代码
void save()//保存学生信息到文件
{
    FILE *fp=fopen("D:\\学生成绩管理系统\\xscjglxt.txt","w");
    for(int i=0;i<length;i++)
    {
        fprintf(fp,"%s %s %s %s %d %d %d %f %d\n",
               students[i].id,
               students[i].name,
               students[i].great,
               students[i].sex,
               students[i].Y,
               students[i].M,
               students[i].E,
               students[i].ave,
               students[i].all);
    }
    fclose(fp);
}

16.源代码

这是博主在两年前大一时写的内容,代码中还有许多不足的地方可以优化,请大佬们谅解。

有问题欢迎联系博主QQ:1187574742

c 复制代码
#include<stdio.h>
#include<string.h>
void regist();//登录界面
void findid();//按照学号索引查询
void show();//查看所有的学生成绩信息
void del();//删除学生信息
void edit();//修改学生信息
void add();//添加学生信息
void mysort();//总分降序排序
void avegxs();//查询学生成绩平均值大于90的学生成绩
void avegkm();//查询学生成绩平均值小于60的学生成绩
void save();//保存学生信息到文件
void load();//从文件读取学生信息到内存
void menu();//菜单总录入人数
void maxn();//输出系统中总成绩最大的学生信息
typedef struct student
{
    char id[15];
    char name[50];
    char sex[10];
    char great[50];
    int E,M,Y;
    float ave;
    int all;
}student;

student students[100];
static int length;

int main()
{

    printf("登陆成功!");
    load();//从文件中读取信息到内侧
    menu();//菜单
}

void regist()//登录界面
{
    printf("\n\n\t*****************************学生信息管理系统******************************\n");
	printf("\t*                              1.显示学生信息                             *|\n");
	printf("\t*                              2.增加学生信息                             *|\n");
	printf("\t*                              3.删除学生信息                             *|\n");
	printf("\t*                              4.修改学生信息                             *|\n");
	printf("\t*                              5.查询学生信息                             *|\n");
	printf("\t*                              6.总分降序排序学生成绩                     *|\n");
	printf("\t*                              7.统计学生平均成绩                         *|\n");
	printf("\t*                              8.统计每科平均成绩                         *|\n");
    printf("\t*                              9.统计信息录入系统中人数                   *|\n");
    printf("\t*                              10.输出总成绩最高的学生信息                *|\n");
	printf("\t*                              11.退出                                    *|\n");
	printf("\t***************************************************************************\n");
	printf("请输入你要进行的操作:\n");
}
void findid()//按照学号索引查询
{
    printf("请输入学生学号:\n");
    char op[15];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            printf("------------------------------------------------------------------------------------------------------------------------\n");
            printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
            printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d\n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
            printf("------------------------------------------------------------------------------------------------------------------------\n");
            flag=1;
        }
    }
    if(!flag)
    {
        printf("不存在该学号的学生\n");
    }
}
void show()//查看所有的学生成绩信息
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    for(int i =0;i<length;i++)
    {


        printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
        printf("------------------------------------------------------------------------------------------------------------------------\n");

    }
}
void del()//删除学生信息
{
    printf("请输入该学生的学号:\n");
    char op[50];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            for(int j=i;j<length-1;j++)
                students[j]=students[j+1];
            flag=1;
            length--;
            break;
        }
    }
    if(!flag)printf("不存在该学号学生!!!请重新输入!!!\n");
}
void edit()//修改学生信息
{
    printf("请输入该学生学号:\n");
    char op[50];
    char opp[50];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            printf("请输入该学生新的信息:\n");

            strcpy(students[i].id,opp);
            printf("班级:");
            scanf("%s",students[i].great);
            printf("性别:");
            scanf("%s",students[i].sex);
            printf("语文成绩:");
            scanf("%d",&students[i].Y);
            printf("数学成绩:");
            scanf("%d",&students[i].M);
            printf("英语成绩:");
            scanf("%d",&students[i].E);
            students[i].ave=(students[i].Y+students[i].E+students[i].M)/3;
            students[i].all=students[i].Y+students[i].E+students[i].M;
            flag=1;
            break;
        }
    }
    if(flag==0)printf("该学生不存在\n");
}
void add()//添加学生信息
{
    int flag=0;
    if(length>=100)
    {
        printf("该班级人数已满!!!");
    }
    else{
    printf("请输入学生信息:\n");
    printf("学生姓名:");
    char op[50];
    scanf("%s",op);
    printf("学生学号:");
    char opp[50];
    scanf("%s",opp);
    for(int i=0;i<length;i++)
    {
        if(strcmp(opp,students[i].id)==0)flag=1;
    }
    if(flag==1)
    {
        printf("警告!!!该学号已存在!!!请返回修改!!!");
        return;
    }
    strcpy(students[length].name,op);
    strcpy(students[length].id,opp);
    printf("学生班级:");
    scanf("%s",students[length].great);
    printf("请输入学生性别:");
    scanf("%s",students[length].sex);
    printf("语文成绩:");
    scanf("%d",&students[length].Y);
    printf("数学成绩:");
    scanf("%d",&students[length].M);
    printf("英语成绩:");
    scanf("%d",&students[length].E);
    students[length].all=students[length].Y+students[length].M+students[length].E;
    students[length].ave=((float)(students[length].Y+students[length].M+students[length].E)/3);
    length++;
    }
}
void mysort()//总分降序排序
{
    student vis;
    for(int i=0;i<length;i++)
        for(int j=0;j<length-i-1;j++)
    {
        if(students[j].all<students[j+1].all)
        {
            vis=students[j];
            students[j]=students[j+1];
            students[j+1]=vis;
        }
    }
    show();
}
void maxn()//查询学生成绩最高的学生信息
{
    int vis=students[0].all;
    for(int i=1;i<length;i++)
    {
        if(students[i].all>vis)vis=students[i].all;
    }
    for(int i=0;i<length;i++)
    {
        if(students[i].all==vis)
        {
        printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
        printf("------------------------------------------------------------------------------------------------------------------------\n");

        }
    }
}
void avegxs()//查询学生成绩平均值
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 平均成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    for(int i=0;i<length;i++)
    {
        //if(students[i].ave>90)
        //{

            printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %.2lf    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all*1.0/length);
            printf("------------------------------------------------------------------------------------------------------------------------\n");

        //}
    }
}
void avegkm()//查询各门平均值
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("语文成绩 | 数学成绩 | 英语成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    double ans1=0,ans2=0,ans3=0;
    for(int i=0;i<length;i++)
    {
        ans1+=students[i].Y;
        ans2+=students[i].M;
        ans3+=students[i].E;
    }
    ans1=ans1*1.0/length;
    ans2=ans2*1.0/length;
    ans3=ans3*1.0/length;
    printf("\n%.2lf    |    %.2lf    |    %.2lf    \n",ans1,ans2,ans3);
    printf("------------------------------------------------------------------------------------------------------------------------\n");

}
void save()//保存学生信息到文件
{
    FILE *fp=fopen("D:\\学生成绩管理系统\\xscjglxt.txt","w");
    for(int i=0;i<length;i++)
    {
        fprintf(fp,"%s %s %s %s %d %d %d %f %d\n",
               students[i].id,
               students[i].name,
               students[i].great,
               students[i].sex,
               students[i].Y,
               students[i].M,
               students[i].E,
               students[i].ave,
               students[i].all);
    }
    fclose(fp);
}
void load()//从文件读取学生信息到内存
{
    FILE *fp=fopen("D:\\学生成绩管理系统\\xscjglxt.txt","r");
    if(fp==NULL)
    {
        printf("文件打开失败\n");

    }
    int i=0;
    while(fscanf(fp,"%s %s %s %s %d %d %d %f %d\n",
               students[i].id,
               students[i].name,
               students[i].great,
               students[i].sex,
               &students[i].Y,
               &students[i].M,
               &students[i].E,
               &students[i].ave,
               &students[i].all)==9)
    {
        i++;

    }
    length=i;
    fclose(fp);
}
void cens()
{
    printf("系统中共有%d个人的信息\n",length);
}
void menu()//菜单
{
	while(1)
	{
	    regist();
	    int n;
        scanf("%d",&n);
        switch(n)
        {
            case 1:
                show();
                break;
            case 2:
                add();
                break;
            case 3:
                del();
                break;
            case 4:
                edit();
                break;
            case 5:
                findid();
                break;
            case 6:
                mysort();
                break;
            case 7:
                avegxs();
                break;
            case 8:
                avegkm();
                break;
            case 9:
                cens();
                break;
            case 10:
                maxn();
                break;
            case 11:
                exit(0);

        }
        save();
        printf("按任意键继续\n");
        getchar();
        getchar();
        system("cls");
	}

}
相关推荐
小字节,大梦想27 分钟前
【C++】二叉搜索树
数据结构·c++
XKSYA(小巢校长)43 分钟前
NatGo我的世界联机篇
开发语言·php
Cons.W1 小时前
Codeforces Round 975 (Div. 1) C. Tree Pruning
c语言·开发语言·剪枝
我是哈哈hh1 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
憧憬成为原神糕手1 小时前
c++_ 多态
开发语言·c++
VBA63371 小时前
VBA信息获取与处理第三个专题第三节:工作薄在空闲后自动关闭
开发语言
Tisfy1 小时前
LeetCode 2187.完成旅途的最少时间:二分查找
算法·leetcode·二分查找·题解·二分
挥剑决浮云 -1 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
Mephisto.java1 小时前
【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
sql·算法·leetcode