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语言是一种非常流行的编程语言,但在执行程序时,常会遇到各种问题。下面我们来看一些常见问题及解决方案。 1. 编译错误 在编译程序时,我们可能会遇到各种编译错误,如语法错误、未定义的变量或函数等。解决这些错误需要仔细检查代码,并修改错误的部分。 示例: #include <stdio.h> int main(…

    C 2023年5月23日
    00
  • C++小游戏tankwar之界面绘制的详细过程

    下面是“C++小游戏tankwar之界面绘制的详细过程”的完整攻略。 界面绘制的流程 初始化SDL 在使用SDL进行图形绘制前,需要进行SDL库的初始化。调用SDL_Init函数即可进行初始化。同时还需要对SDL图形界面进行设置,包括窗口大小、窗口名称等。 SDL_Init(SDL_INIT_VIDEO); SDL_Window* window = SDL_…

    C 2023年5月23日
    00
  • C语言实现自动售货机

    C语言实现自动售货机 介绍 自动售货机在我们的生活中随处可见,它们可以提高购物的便利性,节约时间和精力。本文介绍如何使用C语言实现一个简单的自动售货机。 设计思路 自动售货机主要包含以下几个部分:1. 商品展示界面2. 商品选择3. 支付界面4. 出货过程 实现步骤 1. 商品展示界面 首先需要在屏幕上显示商品的种类和价格,可以使用以下的代码块实现: pri…

    C 2023年5月23日
    00
  • C语言使用函数指针

    C语言中,函数指针是指向函数的指针变量。使用函数指针可以让程序具有更高的灵活性和可扩展性,能够更好地适应不同的需求。 1. 声明函数指针 声明函数指针的语法如下: 返回类型 (*指针变量名)(参数列表); 例如: int (*myFunc)(int a, int b); 上述代码中,声明了一个名为 myFunc 的指向返回类型为 int,参数列表为 (int…

    C 2023年5月9日
    00
  • C语言简明讲解操作符++和–的使用方法

    C语言简明讲解操作符++和–的使用方法 操作符++和–的基本概念 操作符++和–是C语言中的两种自增、自减操作符。它们作用于一个变量,可以将该变量的值自增1或自减1。 操作符++:将变量的值自增1,等同于var = var + 1。 操作符–:将变量的值自减1,等同于var = var – 1。 这两个操作符都可以在变量前面或后面使用,从而分别产生前…

    C 2023年5月23日
    00
  • 解读C++编译报错有迹可寻

    下面是“解读C++编译报错有迹可寻”的完整攻略,包含以下内容: 1. 什么是编译报错 在编写 C++ 程序时,由于语法、类型、函数调用等方面出现问题会导致编译失败,此时编译器会给出一个错误提示,我们称之为编译报错。编译报错是程序员最常见的错误类型之一,在进行调试时,要仔细分析编译报错信息找出错误所在。 2. 如何解读编译报错 一般来说,编译报错信息由以下部分…

    C 2023年5月23日
    00
  • C++实现DES加密算法实例解析

    C++实现DES加密算法实例解析 简介 DES(Data Encryption Standard)算法是一种对称加密算法,通常用于保护数据的机密性。与其他加密算法相比,它的优势在于速度快,代码简单,实现成本较低,因此在许多安全应用中广泛使用。 本教程将会详细介绍如何使用C++语言实现DES加密算法,并提供两个示例说明,使读者可以快速掌握DES加密算法的使用方…

    C 2023年5月23日
    00
  • 面试题积累_01

    1 如何判断一个数是否为奇数? //常规方法 bool isOdd_Method1(int n) { if (n % 2) return true; else return false; } //高效方法 bool isOdd_Method2(int n) { //奇数的二进制形式最后一位一定是1 return n & 0x1; } 注:二进制除了最…

    C语言 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部