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日

相关文章

  • 深入理解C++中常见的关键字含义

    深入理解C++中常见的关键字含义 C++ 是一门功能强大的编程语言,拥有众多的关键字,每个关键字都有其特定的含义和用途。本文将对其中常见的关键字进行讲解,帮助读者更好的理解和应用C++语言。 auto 关键字 auto 的含义是自动类型推导。它可以让编译器自动推导出变量的类型,简化代码书写,同时不会影响程序的性能。 示例1: auto x = 5; // 推…

    C 2023年5月23日
    00
  • C语言 常量详解及示例代码

    C语言 常量详解及示例代码 常量的概念 在程序运行中,我们常常使用一些固定的数值或字符串。为了方便起见,我们可以把这些固定的数值或字符串叫做常量。与变量不同的是,常量在程序运行时值是不发生变化的。 常量的分类 C语言中的常量主要有以下几类: 整型常量 实型常量 字符常量 字符串常量 枚举常量 下面我们将分别讲解这几类常量。 整型常量 整型常量是指不带小数部分…

    C 2023年5月23日
    00
  • C语言动态内存的分配实例详解

    C语言动态内存的分配实例详解 什么是动态内存分配 C语言中的内存分为两种:静态内存和动态内存。 静态内存是在程序编写的时候,由编译器在编译时分配的一块内存空间,也就是常说的栈和全局变量。静态内存在程序生命周期内都是存在的,由系统负责内存的分配和管理。 而动态内存分配,则是在程序执行过程中,需要临时分配一块内存空间,用于存储数据,这种分配方式就是动态内存分配。…

    C 2023年5月22日
    00
  • Win10无法开机0xc0000225错误代码解决方法

    当我们开机时,有时可能会遇到Win10无法开机的问题,面对这种情况,我们需要对问题进行诊断,找到错误原因并解决问题。其中,“Win10无法开机0xc0000225错误代码解决方法”就是我们需要掌握的一种处理方法。 什么是0xc0000225错误代码? 0xc0000225错误代码是指系统启动时,所需要加载的winload.exe文件出现错误或缺失引起的错误。…

    C 2023年5月23日
    00
  • thinkphp3.2同时连接两个数据库的简单方法

    想要在ThinkPHP 3.2中同时连接两个数据库,可以按照以下步骤进行: 1. 配置数据库连接参数 在ThinkPHP中,数据库连接参数是在./Application/Common/Conf/config.php文件中进行配置的。我们需要在这个文件中,将两个数据库的连接参数都进行配置。 以下是一个示例配置文件中同时连接两个MySQL数据库的配置代码: re…

    C 2023年5月23日
    00
  • C语言实现猜数字小项目

    C语言实现猜数字小项目 项目介绍 在本项目中,我们将使用C语言编写一个简单的猜数字游戏。玩家需要在规定时间内猜出一个随机数字,每猜一次,游戏将会告知玩家数字大小是否正确。 实现步骤 步骤1:生成随机数字 我们首先需要生成一个随机数字,使用C语言标准库中的rand()函数可以生成介于0和RAND_MAX之间的随机数,通过取模运算将其转换为我们需要的数字范围。 …

    C 2023年5月23日
    00
  • json中换行符的处理方法示例介绍

    对于”json中换行符的处理方法示例介绍”这个话题,下面我将进行详细讲解。 1. 问题描述 在JSON数据中,如果包含了换行符,我们在解析JSON字符串的时候很有可能会遇到一些问题。因此需要对JSON字符串中的换行符进行处理,以避免出现解析JSON时出错的情况。 2. 处理方法 2.1 用转义字符代替换行符 JSON字符串中的换行符可以用转义字符\n代替,这…

    C 2023年5月23日
    00
  • 算法详解之分支限界法的具体实现

    算法详解之分支限界法的具体实现 什么是分支限界法? 分支限界法是一种用于解决优化问题的算法。它通过分解问题成许多子问题,并考虑每个子问题的潜在解决方案,逐步推进过程,直到找到最优解。分支限界法首先生成初始解,并对所有可能的解进行评估,从中选择最优解来进行下一步的搜索。 具体实现 分支限界法的具体实现可以分为以下步骤: 生成初始解: 对于给定的问题,通过一定的…

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