C语言学生成绩管理系统小设计

C语言学生成绩管理系统小设计攻略

1. 系统需求分析

为了设计一个学生成绩管理系统,我们需要先明确系统的需求,包括以下几个方面:

  1. 系统能够输入学生信息,包括学生的姓名和学号;
  2. 系统能够输入学生课程成绩;
  3. 系统能够计算学生课程成绩的平均分并展示;
  4. 系统能够按照平均分对学生进行排序并输出;
  5. 系统能够按照学号或者姓名进行查询相应学生成绩;
  6. 系统能够修改学生成绩信息;
  7. 系统能够删除学生信息。

2. 系统设计

2.1 数据结构设计

根据上述系统需求,我们可以设计出以下的数据结构:

typedef struct {
    int id;
    char name[20];
    float score;
} Student;

其中,id代表学生的学号,name代表学生的姓名,score代表学生的成绩。

2.2 功能模块设计

根据系统需求,我们可以将系统设计为以下几个功能模块:

  1. 输入学生信息模块:输入学生的姓名和学号;
  2. 输入学生成绩模块:输入学生的课程成绩;
  3. 计算成绩平均分模块:计算学生的平均分并展示;
  4. 按平均分排序模块:对学生按照平均分进行排序并输出;
  5. 按学号或姓名查询模块:查询相应学生成绩;
  6. 修改学生成绩模块:修改学生成绩信息;
  7. 删除学生信息模块:删除学生信息。

2.3 主函数设计

根据上述的功能模块设计,我们可以设计出以下主函数:

int main() {
    Student students[MAX_LENGTH];
    int count = 0;
    int choice;
    do {
        printf("=====Student Score Managment System===== \n");
        printf("1. Add student information.\n");
        printf("2. Add student score.\n");
        printf("3. Calculate the average score.\n");
        printf("4. Sort by average score.\n");
        printf("5. Search by id or name.\n");
        printf("6. Modify student score.\n");
        printf("7. Delete student information.\n");
        printf("0. Exit the system.\n");
        printf("Please enter your choice: ");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                inputStudent(students, &count);
                break;
            case 2:
                inputScore(students, &count);
                break;
            case 3:
                averageScore(students, count);
                break;
            case 4:
                sortScore(students, count);
                break;
            case 5:
                searchScore(students, count);
                break;
            case 6:
                modifyScore(students, count);
                break;
            case 7:
                deleteStudent(students, &count);
                break;
            case 0:
                break;
            default:
                printf("Invalid choice, please choose again.\n");
                break;
        }
    } while (choice != 0);
    return 0;
}

3. 示例说明

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

输入学生信息和成绩,可以通过如下代码实现:

void inputStudent(Student students[], int* count) {
    if (*count < MAX_LENGTH) {
        printf("Enter student id: ");
        scanf("%d", &(students[*count].id));
        printf("Enter student name: ");
        scanf("%s", students[*count].name);
        printf("Add student successfully!\n");
        (*count)++;
    } else {
        printf("The size of students array is not enough!\n");
    }
}

void inputScore(Student students[], int* count) {
    int id;
    printf("Enter student id: ");
    scanf("%d", &id);
    int i;
    for (i = 0; i < *count; i++) {
        if (students[i].id == id) {
            printf("Enter student score: ");
            scanf("%f", &(students[i].score));
            printf("Add score successfully!\n");
            return;
        }
    }
    printf("The student does not exist!\n");
}

3.2 示例二:计算成绩平均分并按平均分排序

计算成绩平均分并按平均分排序,可以通过如下代码实现:

void averageScore(Student students[], int count) {
    int i;
    float sum = 0;
    for (i = 0; i < count; i++) {
        sum += students[i].score;
    }
    printf("The average score is: %.2f\n", sum / count);
}

void sortScore(Student students[], int count) {
    int i, j, maxIndex;
    for (i = 0; i < count - 1; i++) {
        maxIndex = i;
        for (j = i + 1; j < count; j++) {
            if (students[j].score > students[maxIndex].score) {
                maxIndex = j;
            }
        }
        if (maxIndex != i) {
            Student temp = students[i];
            students[i] = students[maxIndex];
            students[maxIndex] = temp;
        }
    }
    printf("Sort by average score:\n");
    printf("id        name        score\n");
    for (i = 0; i < count; i++) {
        printf("%-10d%-12s%-8.2f\n", students[i].id, students[i].name, students[i].score);
    }
}

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

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

相关文章

  • C#中的DataSet、string、DataTable、对象转换成Json的实现代码

    C#是一种现代面向对象编程语言,它非常适合创建Web应用程序。在这种情况下,使用规范的代码库和技术非常重要。DataSet、string、DataTable和对象转换成Json是C#中常用的途径,下面我们详细讲解它们的实现代码。 DataSet DataSet是Microsoft .NET Framework中的一个对象,它是由多个表组成的内存中的数据存储单…

    C 2023年5月23日
    00
  • C++中的friend函数详细解析

    C++中的friend函数详细解析 friend是C++语言中的一个关键字,用于在一个类中声明其它类或者函数成为友元,可以让友元类或者友元函数能够访问本类的私有成员。friend也是一个强大的功能,但是使用不当可能打破了类的封装性。 基本语法 在C++中,使用friend关键字声明一个友元类或者友元函数,例如: class MyClass{ private:…

    C 2023年5月22日
    00
  • C++类静态成员与类静态成员函数详解

    C++类静态成员与类静态成员函数详解 1. 什么是C++类的静态成员和静态成员函数? 1.1 静态成员 顾名思义,静态成员属于类而不是某个对象,与类的实例化无关。也就是说,无论有多少个类的对象被创建,静态成员的内存只分配一次,所有的类对象都共享这一内存空间。因此,静态成员也称为”类成员”。 C++类的静态成员可以是静态变量或静态函数。其中静态变量也称为类变量…

    C 2023年5月22日
    00
  • 基于C++编写一个键盘提示音程序

    关于基于C++编写一个键盘提示音程序的攻略,我将为您提供以下完整的指导: 步骤一:了解键盘输入的基础知识 在编写键盘提示音的程序之前,我们需要了解一些基础概念: 键盘布局:键盘上每一个按键的位置; 扫描码:键盘上每一个按键都有一个与之对应的扫描码,用于唯一地识别每一个按键; ASCII码:每一个扫描码都对应了一个ASCII码,用于标示按键所对应的字符。 步骤…

    C 2023年5月23日
    00
  • C++ 如何实现顺序栈(使用模板类)

    C++如何实现顺序栈(使用模板类) 什么是顺序栈? 顺序栈是一种使用数组存储数据的栈。在顺序栈中,栈顶指针指向存储栈顶元素的位置,栈顶指针的下标为 0 时表示栈为空。 如何实现顺序栈? 1.定义模板类 顺序栈可以通过 C++ 中的模板类来实现,这样可以使其具备更好的可扩展性和复用性。下面是一个使用模板类实现顺序栈的示例代码: template <cla…

    C 2023年5月22日
    00
  • log4j2 项目日志组件的实例代码

    以下是详细讲解“log4j2 项目日志组件的实例代码”的完整攻略。 什么是log4j2 log4j2是一个Java日志框架,可以提供高效灵活的日志记录服务,供各种Java应用程序使用。它是Apache软件基金会下的一个开源项目,其具备下列特点: 多种输出方式:文件、控制台、数据库等 丰富的API:易于使用、易于扩展 完善的日志级别:支持丰富的日志级别,能够控…

    C 2023年5月22日
    00
  • VCPKG安装和使用教程(经验总结)

    VCPKG安装和使用教程(经验总结) VCPKG是一个跨平台的C++库管理器,它可以简化C++库的安装和使用流程。本教程将详细讲解如何安装和使用VCPKG。 安装VCPKG 下载VCPKG 可以从VCPKG的GitHub仓库中下载最新版本的VCPKG:https://github.com/microsoft/vcpkg/releases 安装VCPKG 解压…

    C 2023年5月23日
    00
  • python中protobuf和json互相转换应用处理方法

    当我们需要在Python中进行数据传输时,常用的数据格式是JSON(JavaScript Object Notation)。由于JSON文本格式较为简洁,易于阅读和编写,因此在网络上广泛应用。但在某些应用场景下,JSON却存在着一些限制,如传输大量二进制数据时,每个字节需要被转义为字符串,这会大大增加传输数据的大小,降低传输效率。因此,一些开发者选择使用Pr…

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