学生成绩管理系统(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");
	}

}
相关推荐
若亦_Royi11 分钟前
C++ 的大括号的用法合集
开发语言·c++
Captain823Jack44 分钟前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
Captain823Jack1 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
6.942 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
Aileen_0v02 小时前
【AI驱动的数据结构:包装类的艺术与科学】
linux·数据结构·人工智能·笔记·网络协议·tcp/ip·whisper
是小胡嘛2 小时前
数据结构之旅:红黑树如何驱动 Set 和 Map
数据结构·算法
m0_748255022 小时前
前端常用算法集合
前端·算法
FF在路上2 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言