• 基于C语言学生成绩管理系统的设计与开发


    一、前言

    • 学生成绩管理系统的开发与设计的背景

    在各类学校中,学生成绩管理都是一个非常重要的问题,传统的成绩管理记录和保存都非常困难,而
    且容易出错,查询也非常不方便。

    因此,在当今信息时代,学生成绩管理系统应运而生。它主要提供学生资料的输入、输出、查询、删除以及学生信息的排序等功能。

    本文基于C语言来开发和设计出写学生成绩管理系统程序,来达到学习C语言之后的综和的实际应用。

    二、学生成绩管理系统的主要功能介绍

    • 本系统基于C语言的应用,该系统要实现的功能主要有学生信息的增加、修改、查询、保存和排序等,具体如下。

    1、主要功能显示菜单,并有选择提示,可以根据提示输入不同字符以选择相应功能。

    2、建立学生信息数据,包括学号,姓名,5门课(语文、数学、英语、物理和计算机)的成绩。

    3、能实现学生信息的增加、删除。

    4、统计每个学生的平均成绩。

    5、按照平均分从大到小排序输出信息。

    6、任意输入一个学号,能够查出该学生的相关信息。

    7、学生的信息可以保存在txt文件中

    三、学生成绩管理系统的主要功能结构图

    • 学生成绩管理系统整采用函数封装具体功能的办法。

    将学生成绩管理系统的整体功能,划分为几个具体的模块。

    各个模块实现相应的功能。

    最后将各个的模块功能的函数,在主函数中调用即可实现学生成绩管理系统 的功能。

    • 学生成绩管理系统的各个模块如下图所示。

    在这里插入图片描述

    四、学生成绩管理系统的开发工具以及创建项目的过程

    4.1、学生成绩管理系统的开发工具

    学生成绩管理系统项目使用Visual Studio 2019作为开发工具。
    在这里插入图片描述

    4.2、学生成绩管理系统项目创建的过程

    1. 打开VS2019,选择语言为C++,所属平台为Windows,项目类型为控制台项目,并选择空项目,如下图所示
      在这里插入图片描述

    2. 然后输入项目的名称和选择项目的路径如下图所示

    在这里插入图片描述

    1. 创建好项目后,向项目中添加头文件和源文件如下所示

    在这里插入图片描述

    1. 编写相关的代码如下
    • Student.h头文件代码
    #ifndef STUDENT_H
    #define STUDENT_H
    
    #include 
    #include 
    
    
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • Student.c源文件代码
    #include "Student.h"
    
    
    int main()
    {
    	system("color 3E");
    
    
    
    
    	system("pause");
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    五、学生成绩管理系统的设计与开发的步骤

    5.1、学生成绩管理系统的主要程序流程图

    学生成绩管理系统
    主要功能如下

    1. 录入信息
    2. 输出信息
    3. 增加信息
    4. 查询信息
    5. 修改信息
    6. 输出信息
    7. 成绩排序
    8. 退出系统

    所以学生成绩管理系统的主要流程图如下所示
    在这里插入图片描述

    5.2、学生成绩管理系统的主菜单设计模块

    • 主菜单功能是起到提供给用户选择相应功能的提示的作用
    • 主菜单模块用来实现学生信息管理系统的主界面。
    • 主要完成的功能有主菜单显示、主菜单选项的输入选择、不同功能模块的调用,从而达到用户与该系统交互的目的。

    学生成绩管理系统的主菜单设计模块的代码如下

    // 菜单功能
    void stuMenu()
    {
        printf("********************************************\n");
        printf("*                                          *\n");
        printf("*             学生信息管理系统             *\n");
        printf("*                  主菜单                  *\n");
        printf("*                                          *\n");
        printf("*                1:录入信息                *\n");
        printf("*                                          *\n");
        printf("*                2:输出信息                *\n");
        printf("*                                          *\n");
        printf("*                3:增加信息                *\n");
        printf("*                                          *\n");
        printf("*                4:查询信息                *\n");
        printf("*                                          *\n");
        printf("*                5:修改信息                *\n");
        printf("*                                          *\n");
        printf("*                6:删除信息                *\n");
        printf("*                                          *\n");
        printf("*                7:成绩排序                *\n");
        printf("*                                          *\n");
        printf("*                0:退出系统                *\n");
        printf("*                                          *\n");
        printf("********************************************\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在主函数中调用主菜单显示函数

    int main()
    {
    	system("color 3E");
    
        while (1)
        {
            stuMenu();          // 主菜单
    
            break;
        }
    
    
    	system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    调试结果如下所示

    在这里插入图片描述

    5.3、学生成绩管理系统的退出功能模块

    • 学生成绩管理系统的退出功能模块主要是实现系统退出
    • 当用户更加主菜单的提示选择退出系统时,会退出学生成绩管理系统

    学生成绩管理系统的退出功能模块的代码如下

    // 退出功能
    void stuSystemQiut()
    {
        printf("***********************************************************************\n");
        printf("*                                                                     *\n");
        printf("*                           欢迎在一次使用                            *\n");
        printf("*                               退出!                                 *\n");
        printf("*                                                                     *\n");
        printf("***********************************************************************\n");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 在主函数中定义一个select变量
    • 该变量提供给用户进行选择的存储功能选择。
    • 在主函数中使用while循环、Switch选择功能来实现系统的功能

    主函数中while循环、Switch选择功能来实现系统的功能的代码如下所示

    int main()
    {
    	system("color 3E");
    
        int select = 0;
    
        while (1)
        {
            stuMenu();          // 主菜单
    
            printf("请输入选择项(0-7):");
            scanf("%d", &select);
    
            printf("\n");
    
            if (select > 0 && select < 8)
            {
                switch (select)
                {
                case 1: stuInput();       break;               // 录入信息
                case 2:        break;               // 输出信息
                case 3:      break;                 // 增加信息
                case 4:      break;                 // 查询信息
                case 5:          break;             // 修改信息
                case 6:       break;                // 删除信息
                case 7:        break;               // 成绩排序
                }
            }
            else if (select == 0)
            {
                stuSystemQiut();                    // 系统退出功能
                break;
            }
            else
            {
                printf("输入有误, 请重新输入!!!\n");
                
                system("pause");
                system("cls");
            }
        }
    
    
    	system("pause");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    可以看到,在系统运行的时候,当用户输入0时,就可以退出系统了

    调试结果如下所示

    在这里插入图片描述

    5.4、学生成绩管理系统的录入功能模块

    • 学生成绩管理系统的录入功能是实现学生信息录入的功能
    • 采用文件存储方式
    • 将学生数据存储与文件中
    • 可以方便使用学生的信息
    • 录入的功能是系统运行时,第一步要进行的操作
    • 本系统的录入功能是实现系统初始化登入时,将学生的信息录入文件中的功能。

    在头文件中定义学生结构体的代码如下

    #include 
    
    #define SIZE 10000
    
    typedef struct  tagStudent
    {
    	int n;                    /*顺序号*/
    
    	int sNum;                 /*学号*/
    	char sName[10];            /*姓名*/
    
    	int sCn;                  /*语文成绩*/
    	int sMaths;               /*数学成绩*/
    	int sEn;                  /*英语成绩*/
    	int sPhy;                 /*物理成绩*/
    	int sCom;                 /*计算机成绩*/
    
    	double sAvage;             /*平均成绩*/
    } Student, *pStudent;
    
    Student stu[SIZE];
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    学生成绩管理系统的录入功能模块的代码如下

    // 录入信息功能
    void stuInput()
    {
        int i;      // 定义变量
        FILE* fp;   // 定义文件指针
    
        fp = fopen("studentfile.txt", "wb");        // 打开二进制文件
    
        while(1)
        {
            printf("\n\r请输入序号i(当输入i=-1时,返回), i = ");        
    
            scanf("%d", &i);        // 输入学生的序号
    
            if (i == -1)
            {
                fclose(fp);
    
                system("pause");
                system("cls");
                return;
            }
            else            // 输入学生相关信息
            {
                printf("\n\r请输入学号(数字型):");
                scanf("%d", &stu[i].sNum);
    
                printf("\n\r请输入姓名(字符型):");
                scanf("%s", stu[i].sName);
    
                printf("\n\r请输入语文成绩(0~100):");
                scanf("%d", &stu[i].sCn);
    
                printf("\n\r请输入数学成绩(0~100):");
                scanf("%d", &stu[i].sMaths);
    
                printf("\n\r请输入英语成绩:(0~100)");
                scanf("%d", &stu[i].sEn);
    
                printf("\n\r请输入物理成绩:(0~100)");
                scanf("%d", &stu[i].sPhy);
    
                printf("\n\r请输入计算机成绩(0~100):");
                scanf("%d", &stu[i].sCom);
    
                stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0;
    
                stu[i].n = i + 1;
    
                fwrite(&stu[i], sizeof(Student), 1, fp);        // 将学生信息写入二进制文件中
            }
        }
    
        fclose(fp);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字1,进行学生信息的录入
    • 录入的学生信息可以存储与txt文件之中

    按F5调试结果如下

    在这里插入图片描述

    打开学生成绩管理系统的的目录,打开txt文件,如下所示

    在这里插入图片描述

    • 可以看做可以将学生的相关信息存储于txt类型的文章之中。
    • 可以方便使用文件查询学生的相关信息

    5.5、学生成绩管理系统的输出功能模块

    • 生成绩管理系统的输出功能模块主要是输出学生的相关信息
    • 学生成绩的成绩可以从文件中读取出来

    学生成绩管理系统的输出功能模块代码如下

    // 输出信息功能
    void stuOutput()
    {
        int i;      // 定义变量
        FILE* fp;   // 定义文件指针
    
        fp = fopen("studentfile.txt", "rb");        // 打开二进制文件
    
        printf("***********************************************************************\n");
        printf("    成绩列表\n");
        printf("-----------------------------------------------------------------------\n");
        printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
        printf("-----------------------------------------------------------------------\n");
    
        for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++)           // 从文件中输出学生信息
        {
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
        }
    
        printf("-----------------------------------------------------------------------\n");
    
        fclose(fp);
    
    
        system("pause");
        system("cls");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字2,进行学生信息的输出
    • 输出的学生信息从txt文件中读取出来

    按F5调试结果如下

    在这里插入图片描述

    • 可以看到,学生管理系统可以输出存储于文件之中的相关信息信息。
    • 可以方便用户查询各个学生的学习成绩情况。

    5.6、学生成绩管理系统的增加功能模块

    • 学生成绩管理系统的增加功能模块主要是实现学生信息添加的功能
    • 采用文件存储方式
    • 将学生数据存储与文件中
    • 在原有的学生信息基础上添加新的学生相关信息。
    • 添加功能可以方便用户增添学生的信息,并将文件存储与txt文件中。

    学生成绩管理系统的增加功能模块代码如下

    // 增加信息功能
    void stuAdd()
    {
        int i, s;      // 定义变量
        FILE* fp;      // 定义文件指针
    
        fp = fopen("studentfile.txt", "ab+");        // 打开二进制文件
    
        rewind(fp);
    
        printf("***********************************************************************\n");
        printf("      成绩列表\n");
        printf("-----------------------------------------------------------------------\n");
        printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
        printf("-----------------------------------------------------------------------\n");
    
        for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++) // 输出文件中的学生信息
        {
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n", 
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
        }
    
        printf("***********************************************************************\n");
    
        s = i;
    
        for (i = s; i < SIZE; i++)
        {
            printf("输入序号i(当输入i=-1时,返回):");
            scanf("%d", &i);
    
            if (i == -1 || i == 0)
            {
                fclose(fp);
    
                system("pause");
                system("cls");
    
                return;
            }
            else            // 增加学生信息
            {
                printf("\n\r请输入学号(数字型):");
                scanf("%d", &stu[i].sNum);
    
                printf("\n\r请输入姓名(字符型):");
                scanf("%s", stu[i].sName);
    
                printf("\n\r请输入语文成绩(0~100):");
                scanf("%d", &stu[i].sCn);
    
                printf("\n\r请输入数学成绩(0~100):");
                scanf("%d", &stu[i].sMaths);
    
                printf("\n\r请输入英语成绩:(0~100)");
                scanf("%d", &stu[i].sEn);
    
                printf("\n\r请输入物理成绩:(0~100)");
                scanf("%d", &stu[i].sPhy);
    
                printf("\n\r请输入计算机成绩(0~100):");
                scanf("%d", &stu[i].sCom);
    
                stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0;
    
                stu[i].n = i + 1;
    
                fwrite(&stu[i], sizeof(Student), 1, fp);
    
                printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                    stu[i].n, stu[i].sNum, stu[i].sName,
                    stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
            }
        }
    
        fclose(fp);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字3,进行学生信息的添加
    • 添加的学生信息存储与文件中
    • 新增加的信息信息可以输出显示

    按F5调试结果如下

    • 添加学生信息
      在这里插入图片描述
    • 返回学生成绩管理系统主菜单,根据主菜单信息的提示,选择数字2,进行学生信息的查询,查询刚刚

    添加的学生信息,查询结果如下所示
    在这里插入图片描述

    • 可以看到,学生成绩管理系统可以正确添加新的学生的相关信息。
    • 可以体现出程序没有错误。

    5.7、学生成绩管理系统的查询功能模块

    • 学生成绩管理系统的查询能模块主要是实现学生信息查询的功能

    • 从文件中读取学生信息数据。

    • 查询学生的信息是根据学生的学号进行查询。

    • 查询功能可以方便用户查询学生的信息,并将从文件中查询指定学生的信息输出显示。

    学生成绩管理系统的查询功能模块代码如下

    // 查询信息功能
    void stuSearch()
    {
        int i, num;      // 定义变量
        FILE* fp;        // 定义文件指针
    
        fp = fopen("studentfile.txt", "ab+");        // 打开二进制文件
    
        rewind(fp);
    
        printf("请输入要查找的学号:");
        scanf("%d", &num);
    
        for (i = 0; i <= SIZE; i++)
        {
            if (stu[i].sNum == num)
            {
                printf("***********************************************************************\n");
                printf("    查询结果\n");
                printf("-----------------------------------------------------------------------\n");
                printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
                printf("-----------------------------------------------------------------------\n");
    
                printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                    stu[i].n, stu[i].sNum, stu[i].sName,
                    stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
    
                printf("\n");
                system("pause");
                system("cls");
    
                fclose(fp);
                return;
            }
        }
    
    
        printf("***********************************************************************\n");
        printf("    查询结果\n");
        printf("-----------------------------------------------------------------------\n");
        printf("    没有查询到学生学号为:%d 的相关学生信息!!!\n", num);
        printf("-----------------------------------------------------------------------\n");
        printf("***********************************************************************\n\n");
    
        system("pause");
        system("cls");
    
        fclose(fp);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字4,进行学生信息的查询
    • 查询的学生信息存储与文件中
    • 查询到的学生信息可以进行显示

    按F5调试结果如下

    • 当输入的学号在文件中存在时
      在这里插入图片描述

    • 当输入的学号在文件中不存在时
      在这里插入图片描述

    • 从调试结果来看,学生成绩管理系统的查询功能实现了。

    • 可以查询存储于文件中的学生信息。

    5.8、学生成绩管理系统的修改功能模块

    • 学生成绩管理系统的修改能模块主要是实现学生信息修改的功能
    • 从文件中读取学生信息数据。
    • 先进行查询学生的信息是判断文件中是否有输入学号的学生相关数据。
    • 在进行根据查询到的学生信息进行修改。
    • 修改之后,可以显示出修改之后的学生信息。

    学生成绩管理系统的修改功能模块代码如下

    // 修改信息功能
    void stuModify()
    {
        int i, n, num, flag = 0;      // 定义变量
        FILE* fp;        // 定义文件指针
    
        fp = fopen("studentfile.txt", "ab+");        // 打开二进制文件
    
    
        printf("请输入要修改学生的学号:");
        scanf("%d", &num);
    
        for (i = 0; i <= SIZE; i++)
        {
            if (stu[i].sNum == num)
            {
                printf("***********************************************************************\n");
                printf("      成绩列表\n");
                printf("-----------------------------------------------------------------------\n");
                printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
                printf("-----------------------------------------------------------------------\n");
    
                printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                    stu[i].n, stu[i].sNum, stu[i].sName,
                    stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
    
                printf("-----------------------------------------------------------------------\n");
                printf("***********************************************************************\n");
    
                n = i;
                flag = 1;
    
                break;
            }
        }
    
    
        if (flag == 0)
        {
            printf("***********************************************************************\n");
            printf("    输入学生的学号错误!\n");
            printf("    请返回!\n");
            printf("***********************************************************************\n\n");
    
            system("pause");
            system("cls");
            return;
        }
    
        fp = fopen("studentfile.txt", "rb+");
    
        fseek(fp, n * sizeof(Student), 0);
    
        printf("\n\r请输入学号(数字型):");
        scanf("%d", &stu[i].sNum);
    
        printf("\n\r请输入姓名(字符型):");
        scanf("%s", stu[i].sName);
    
        printf("\n\r请输入语文成绩(0~100):");
        scanf("%d", &stu[i].sCn);
    
        printf("\n\r请输入数学成绩(0~100):");
        scanf("%d", &stu[i].sMaths);
    
        printf("\n\r请输入英语成绩:(0~100)");
        scanf("%d", &stu[i].sEn);
    
        printf("\n\r请输入物理成绩:(0~100)");
        scanf("%d", &stu[i].sPhy);
    
        printf("\n\r请输入计算机成绩(0~100):");
        scanf("%d", &stu[i].sCom);
    
        stu[i].sAvage = (stu[i].sCn + stu[i].sMaths + stu[i].sEn + stu[i].sPhy + stu[i].sCom) / 5.0;
    
        stu[i].n = i + 1;
    
        fwrite(&stu[i], sizeof(Student), 1, fp);
    
        fclose(fp);
    
        fp = fopen("studentfile.txt", "r");
    
        printf("***********************************************************************\n");
        printf("     修改信息成功\n");
        printf("      成绩列表\n");
        printf("-----------------------------------------------------------------------\n");
        printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
        printf("-----------------------------------------------------------------------\n");
    
        for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++)
        {
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
        }
    
        printf("-----------------------------------------------------------------------\n");
        printf("***********************************************************************\n\n");
    
        system("pause");
        system("cls");
    
        fclose(fp);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字5,进行学生信息的修改。
    • 先查询存储于文件中的学生信息。
    • 根据查询到的学生信息可以根据提示进行修改学生信息

    按F5调试结果如下

    • 当输入的学号在文件中存在时
      在这里插入图片描述

    • 当输入的学号在文件中不存在时
      在这里插入图片描述

    • 从调试结果来看,学生成绩管理系统的修改功能实现了。

    • 可以修改存储于文件中的学生相关信息。

    5.9、学生成绩管理系统的删除功能模块

    • 学生成绩管理系统的删除能模块主要是实现学生信息删除的功能
    • 从文件中读取学生信息数据。
    • 先进行查询学生的信息是判断文件中是否有输入学号的学生相关数据。
    • 在进行根据查询到的学生信息进行删除。
    • 删除之后,可以显示出删除之后,剩余的学生信息。

    学生成绩管理系统的修改功能模块代码如下

    // 删除信息功能
    void stuDelete()
    {
        FILE* fp;   // 文件指针变量
    
        int i, num, n;  // 定义变量
        int total = 0;
        int flag = 0;
    
        fp = fopen("studentfile.txt", "rb");  // 打开文件
    
        printf("***********************************************************************\n");
        printf("      成绩列表\n");
        printf("-----------------------------------------------------------------------\n");
        printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
        printf("-----------------------------------------------------------------------\n");
    
        for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++)
        {
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
        }
    
        printf("-----------------------------------------------------------------------\n");
        printf("***********************************************************************\n");
        fclose(fp);
    
        total = i - 1;
    
        printf("请输入要删除学生的学号:");
        scanf("%d", &num);
    
        for (i = 0; i <= SIZE; i++)
        {
            if (stu[i].sNum == num)
            {
                printf("***********************************************************************\n");
                printf("要删除的学生信息\n");
                printf("-----------------------------------------------------------------------\n");
                printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
                printf("-----------------------------------------------------------------------\n");
    
                printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                    stu[i].n, stu[i].sNum, stu[i].sName,
                    stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
    
                printf("-----------------------------------------------------------------------\n");
                printf("***********************************************************************\n");
    
                n = i + 1;
                flag = 1;
                break;
            }
        }
    
        if (flag == 0)
        {
            printf("***********************************************************************\n");
            printf("    输入错误!\n");
            printf("    请返回!\n");
            printf("***********************************************************************\n");
    
            system("pause");
            system("cls");
    
            return;
        }
    
        for (i = n; i <= total; i++)   // 删除学生信息
        {
            memcpy(&stu[i - 1], &stu[i], sizeof(Student));
        }
    
        memset(&stu[total], 0, sizeof(Student));
    
        fp = fopen("studentfile.txt", "w+");  // 打开文件
    
        for (i = 0; i < total; i++)
        {
            fwrite(&stu[i], sizeof(Student), 1, fp);  // 将学生数据写入文件中
        }
    
        fclose(fp);
    
        fp = fopen("studentfile.txt", "r");
    
        printf("***********************************************************************\n");
        printf("当前成绩列表\n");
        printf("-----------------------------------------------------------------------\n");
        printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
        printf("-----------------------------------------------------------------------\n");
    
        for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++)
        {
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
        }
    
        printf("-----------------------------------------------------------------------\n");
        printf("***********************************************************************\n");
    
        system("pause");
        system("cls");
    
        fclose(fp);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字6,进行学生信息的删除。
    • 先查询存储于文件中的学生信息。
    • 根据查询到的学生信息可以删除学生的信息。

    按F5调试结果如下

    • 先查询文件中存储的学生数据
      在这里插入图片描述

    • 当输入的学号在文件中存在时
      在这里插入图片描述

    • 当输入的学号在文件中不存在时
      在这里插入图片描述

    • 从调试结果来看,学生成绩管理系统的删除功能实现了。

    • 可以删除存储于文件中的学生相关信息。

    5.10、学生成绩管理系统的排序功能模块

    • 学生成绩管理系统的排序能模块主要是实现学生平均成绩信息排序的功能。
    • 从文件中读取学生信息数据。
    • 根据学生的平均成绩的高低进行排序。
    • 排序按照降序排列。
    • 可以显示学生成绩排序之前的学生信息和排序之后的学生信息。

    学生成绩管理系统的修改功能模块代码如下

    
    // 排序成绩功能
    void stuSort()
    {
        int i, j, n;  // 定义变量
        FILE* fp;    // 定义文件指针
    
        Student t;  // 定义结构体变量
    
        fp = fopen("studentfile.txt", "rb");  // 打开文件
    
        printf("***********************************************************************\n");
        printf("      成绩列表, 排序前\n");
        printf("-----------------------------------------------------------------------\n");
        printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
        printf("-----------------------------------------------------------------------\n");
    
        for (i = 0; fread(&stu[i], sizeof(Student), 1, fp) == 1; i++)
        {
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
        }
    
        printf("-----------------------------------------------------------------------\n");
        printf("***********************************************************************\n");
        fclose(fp);
    
        n = i;
    
        // 排序学生成绩信息
        for (i = 0; i < n; i++)  
        {
            for (j = i + 1; j < n; j++)
            {
                if (stu[i].sAvage < stu[j].sAvage)
                {
                    t = stu[i];
                    stu[i] = stu[j];
                    stu[j] = t;
                }
            }
        }
    
        fp = fopen("studentfiles.txt", "wb");  // 打开文件
    
        printf("\n***********************************************************************\n");
        printf("      成绩列表, 排序后\n");
        printf("-----------------------------------------------------------------------\n");
        printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
        printf("-----------------------------------------------------------------------\n");
        for (i = 0; i < n; i++)
        {
            printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",
                stu[i].n, stu[i].sNum, stu[i].sName,
                stu[i].sCn, stu[i].sMaths, stu[i].sEn, stu[i].sPhy, stu[i].sCom, stu[i].sAvage);
    
            fwrite(&stu[i], sizeof(Student), 1, fp);
        }
        printf("***********************************************************************\n");
    
        system("pause");
        system("cls");
    
        fclose(fp);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 进入学生成绩管理系统,根据主菜单信息的提示,选择数字7,进行学生成绩信息的排序。
    • 先查询存储于文件中的学生信息。
    • 根据查询到的学生信息可以根据学生平均成绩的高低进行排序。

    按F5调试结果如下
    在这里插入图片描述

    • 从调试结果来看,学生成绩管理系统的排序功能实现了。
    • 可以根据学生平均成绩进行排序。
    • 可以显示排序之前与之后的学生的相关信息。

    六、学生成绩管理系统的设计与开发的总结

    • 本文的学生成绩管理系统,可以使我们很快掌握C语言的综合应用。
    • 包括了C语言的文件操作
    • C语言的指针应用
    • C语言的结构体的应用
    • C语言函数的应用
    • C语言的循环的应用

    本学生成绩管理系统的主要功能是

    1. 录入信息
    2. 输出信息
    3. 增加信息
    4. 查询信息
    5. 修改信息
    6. 输出信息
    7. 成绩排序
    8. 退出系统
    • 通过本文的学生成绩管理系统,可以促进我们进一步掌握C语言的应用。
  • 相关阅读:
    137.【SpringCloud-快速搭建】
    python学习笔记7-图的建立常用技巧
    智慧城市/雪亮工程中网页低延迟多屏播放海康威视大华华为等监控视频解决方案
    【C++】
    贪心算法概念
    体验一下阿里云文字识别OCR
    【Mysql】Mysql获取排班时间段中的休息时间段方法
    SpringCloud微服务之重要术语详解
    android开发中常用的Eclipse快捷键详细整理
    Linux static_key原理与应用
  • 原文地址:https://blog.csdn.net/m0_47419053/article/details/126450206