C语言实现简易学生成绩管理系统

C语言实现简易学生成绩管理系统攻略

系统需求

我们需要实现一个简单的学生成绩管理系统,满足以下需求:

  1. 学生姓名、学号、性别等基本信息的录入和管理;
  2. 课程成绩的录入和查询,包括成绩的增删改查功能;
  3. 可以根据学号、姓名、分数等条件进行查询排序;
  4. 可以将学生成绩信息保存在文件中。

实现步骤

设计数据结构

我们需要先设计数据结构,才能进行后续工作。根据上述需求,这里我们设计了如下的数据结构:

typedef struct student
{
    char id[20];    // 学号
    char name[20];  // 姓名
    char gender[5]; // 性别
    float score[5]; // 成绩
    float sum;      // 总成绩
    float avg;      // 平均成绩
} STUDENT;

编写基本功能

接下来,我们针对需求 1 和 2,分别编写录入学生信息和成绩信息的基本功能。

void add_student(STUDENT *s, int n); // 录入学生信息
void add_score(STUDENT *s, int n); // 录入成绩信息

这两个函数分别接受一个 STUDENT 结构体数组和数组大小作为参数,通过循环获取用户输入信息,然后填充到数组中。具体实现过程可以参考下面的示例代码。

void add_student(STUDENT *s, int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("请输入第 %d 个学生的信息:\n", i + 1);
        printf("学号:");
        scanf("%s", s[i].id);
        printf("姓名:");
        scanf("%s", s[i].name);
        printf("性别:");
        scanf("%s", s[i].gender);
    }
}

void add_score(STUDENT *s, int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("请输入第 %d 个学生的成绩:\n", i + 1);
        for (int j = 0; j < 5; j++)
        {
            printf("第 %d 门课程的成绩:", j + 1);
            scanf("%f", &(s[i].score[j]));
            s[i].sum += s[i].score[j];
        }
        s[i].avg = s[i].sum / 5;
    }
}

实现其他功能

针对需求 3,我们可以使用快速排序等算法实现根据学号、姓名、分数等条件进行查询排序。这里不再赘述实现细节,读者可以参考相关文献进行学习。

至于需求 4,我们可以使用文件读写相关的函数进行实现。以保存学生信息为例,我们可以编写如下的代码:

void save_student(STUDENT *s, int n)
{
    FILE *fp = fopen("students.dat", "w");
    if (fp == NULL)
    {
        printf("文件打开失败!\n");
        return;
    }

    for (int i = 0; i < n; i++)
    {
        fprintf(fp, "学号:%s\t姓名:%s\t性别:%s\t", s[i].id, s[i].name, s[i].gender);
        for (int j = 0; j < 5; j++)
        {
            fprintf(fp, "第%d门成绩:%.2f\t", j + 1, s[i].score[j]);
        }
        fprintf(fp, "总分:%.2f\t平均分:%.2f\n", s[i].sum, s[i].avg);
    }

    fclose(fp);
}

示例说明

示例一:录入学生信息和成绩信息

STUDENT s[3];
add_student(s, 3);
add_score(s, 3);

运行结果:

请输入第 1 个学生的信息:
学号:001
姓名:张三
性别:男
请输入第 2 个学生的信息:
学号:002
姓名:李四
性别:女
请输入第 3 个学生的信息:
学号:003
姓名:王五
性别:男
请输入第 1 个学生的成绩:
第 1 门课程的成绩:89
第 2 门课程的成绩:91
第 3 门课程的成绩:83
第 4 门课程的成绩:78
第 5 门课程的成绩:95
请输入第 2 个学生的成绩:
第 1 门课程的成绩:85
第 2 门课程的成绩:93
第 3 门课程的成绩:79
第 4 门课程的成绩:86
第 5 门课程的成绩:88
请输入第 3 个学生的成绩:
第 1 门课程的成绩:76
第 2 门课程的成绩:85
第 3 门课程的成绩:92
第 4 门课程的成绩:88
第 5 门课程的成绩:80

示例二:保存学生信息到文件

save_student(s, 3);

运行结果:在当前目录下生成了一个 students.dat 文件,文件内容如下:

学号:001  姓名:张三   性别:男    第1门成绩:89.00 第2门成绩:91.00 第3门成绩:83.00 第4门成绩:78.00 第5门成绩:95.00 总分:436.00   平均分:87.20
学号:002  姓名:李四   性别:女    第1门成绩:85.00 第2门成绩:93.00 第3门成绩:79.00 第4门成绩:86.00 第5门成绩:88.00 总分:431.00   平均分:86.20
学号:003  姓名:王五   性别:男    第1门成绩:76.00 第2门成绩:85.00 第3门成绩:92.00 第4门成绩:88.00 第5门成绩:80.00 总分:421.00   平均分:84.20

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简易学生成绩管理系统 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • win10系统升级提示错误代码0x80070006-0x2000c该怎么解决

    win10系统升级提示错误代码0x80070006-0x2000c的解决方法 出现win10系统升级提示错误代码0x80070006-0x2000c的原因很多,包括错误的系统配置,损坏的文件或注册表项,软件冲突等等。下面是一些常用的解决方法: 方法一:运行Windows更新故障排除工具 Windows更新故障排除工具是解决Win10升级问题的有力工具。以下是…

    C 2023年5月23日
    00
  • C语言如何求整数的位数及各位数字之和

    C语言如何求整数的位数及各位数字之和 求整数的位数 求整数的位数可以通过循环计算每一位上的数字来实现,具体过程如下: 定义一个变量count用于计数,初值为0; 使用循环,每次将整数除以10,直到整数变为0; 在循环中每执行一次,就将count加1; 最后输出count即可。 下面是一段示例代码: int count = 0; int num = 12345…

    C 2023年5月23日
    00
  • C语言 文件的打开与关闭详解及示例代码

    下面我将详细讲解“C语言 文件的打开与关闭详解及示例代码”的完整攻略。 一、文件的打开 文件的打开可以使用stdio.h库中提供的fopen函数实现。fopen函数的原型如下: FILE* fopen(const char* filename, const char* mode); 其中filename是文件名,mode是打开的模式,它们都是以字符串形式传递…

    C 2023年5月24日
    00
  • C++有限状态机实现计算器小程序

    C++有限状态机实现计算器小程序攻略 1. 什么是有限状态机? 有限状态机(FSM, Finite State Machine)是一种数学模型,它可以通过状态转移来描述一个系统的行为。在有限状态机中,系统从一个状态转移至另一个状态,这是通过一些输入(input)或者事件(event)来触发的。有限状态机包含三个要素: 状态集合 输入集合 状态转移 2. 怎样…

    C 2023年5月23日
    00
  • C++设计模式之享元模式(Flyweight)

    C++设计模式之享元模式(Flyweight)攻略 概述 享元模式是一种结构型设计模式,它的主要目标是减少对象的数量,通过尽可能多的与其他相似对象共享来最小化内存占用和计算量。 在享元模式中,所有共享对象都以一个单一的实例存在于内存中,因此系统需要考虑识别这些对象以便正确地重用已经存在的实例,而不是创建新的对象。具体实现时,享元模式通过将需要重复使用的属性划…

    C 2023年5月22日
    00
  • 详解c++良好的编程习惯与编程要点

    详解C++良好的编程习惯与编程要点 C++是一门广泛使用的编程语言,它的语法和特性非常丰富,同时也具有很高的灵活性。但是,如果我们没有遵循一些良好的编程习惯和编程要点,将会使我们的代码难以阅读和维护。下面我们将详细讲解C++良好的编程习惯与编程要点。 1. 命名规范 良好的命名规范是写出易读易懂的代码的关键。我们应该遵循以下命名规范: 变量名和函数名应该是有…

    C 2023年5月22日
    00
  • 深入理解Java虚拟机_动力节点Java学院整理

    深入理解Java虚拟机攻略 什么是Java虚拟机 Java虚拟机(Java Virtual Machine,JVM)是Java程序运行的基石,是一个能够运行Java字节码的虚拟计算机。Java虚拟机是Java技术的核心,它是Java程序跨平台特性的实现基础。理解Java虚拟机的工作原理和内部机制对于Java开发人员来说是非常重要的。 深入理解Java虚拟机的…

    C 2023年5月23日
    00
  • golang分层测试之http接口测试入门教程

    我来详细讲解“golang分层测试之http接口测试入门教程”的完整攻略。该攻略包括以下几个部分: 1.前置知识 在学习golang分层测试之http接口测试之前,需要掌握一些基础知识,包括但不限于: Golang基础语法 RESTful API基本概念 Http协议 JSON数据格式 2.环境搭建 在进行http接口测试之前,需要搭建一套测试环境。可以从以…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部