C语言编程题,实现一个简易的学生成绩管理系统,实现基本的增删改查功能,以及展示学生成绩的统计信息。用户可以添加学生信息、记录成绩、计算平均成绩以及显示学生信息。

1、定义学生

可以使用一个结构体来表示学生信息,并使用一个数组来存储所有学生的信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define NAME_LENGTH 50

typedef struct {
    int id;
    char name[NAME_LENGTH];
    float scores[3];
    float average;
} Student;

int main() {
  printf("Hello, World!");
  return 0;
}

2、添加学生成绩

添加学生及其成绩过定义一个结构体Student来存储学生的姓名和成绩,并使用一个数组students来存储所有学生的信息。通过一个函数addStudent来实现添加学生的功能。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define NAME_LENGTH 50

typedef struct {
    int id;
    char name[NAME_LENGTH];
    float scores[3];
    float average;
} Student;

void addStudent(Student students[], int *studentCount) {
    if (*studentCount >= MAX_STUDENTS) {
        printf("学生人数已达到上限,无法添加更多学生。\n");
        return;
    }

    Student *student = &students[*studentCount];

    printf("请输入学生ID: ");
    scanf("%d", &student->id);

    printf("请输入学生姓名: ");
    scanf("%s", student->name);

    printf("请输入三门课的成绩:\n");
    for (int i = 0; i < 3; i++) {
        printf("成绩 %d: ", i + 1);
        scanf("%f", &student->scores[i]);
    }

    // 计算平均成绩
    student->average = (student->scores[0] + student->scores[1] + student->scores[2]) / 3.0;

    (*studentCount)++;
    printf("学生信息已添加成功!\n");
}

int main() {
  printf("Hello, World!");
  return 0;
}

3、删除学生成绩

用户输入要删除学生的学号,遍历学生数组,找到要删除的学生,将找到的学生后面的所有学生往前移动一位,覆盖被删除的学生,将学生总数减一。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define NAME_LENGTH 50

typedef struct {
    int id;
    char name[NAME_LENGTH];
    float scores[3];
    float average;
} Student;

void deleteStudent(Student students[], int *studentCount) {
    int id;
    printf("请输入要删除的学生ID: ");
    scanf("%d", &id);

    int found = 0;
    for (int i = 0; i < *studentCount; i++) {
        if (students[i].id == id) {
            found = 1;
            // 将后面的元素向前移动一位
            for (int j = i; j < *studentCount - 1; j++) {
                students[j] = students[j + 1];
            }
            (*studentCount)--;
            printf("学生ID为 %d 的信息已删除。\n", id);
            break;
        }
    }

    if (!found) {
        printf("未找到ID为 %d 的学生。\n", id);
    }
}

int main() {
  printf("Hello, World!");
  return 0;
}

4、显示学生成绩

定义了一个变量studentCount来跟踪当前存储的学生数量,以及一个函数displayStudentScores用于显示所有学生的成绩。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define NAME_LENGTH 50

typedef struct {
    int id;
    char name[NAME_LENGTH];
    float scores[3];
    float average;
} Student;

void displayStudents(Student students[], int studentCount) {
    printf("\n学生信息:\n");
    for (int i = 0; i < studentCount; i++) {
        printf("学生ID: %d\n", students[i].id);
        printf("姓名: %s\n", students[i].name);
        printf("成绩: %.2f, %.2f, %.2f\n", students[i].scores[0], students[i].scores[1], students[i].scores[2]);
        printf("平均成绩: %.2f\n", students[i].average);
        printf("----------------------------\n");
    }
}

int main() {
  printf("Hello, World!");
  return 0;
}

5、完整代码

一个简易的学生成绩管理系统,可以根据自己的需求进行扩展和完善。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define NAME_LENGTH 50

typedef struct {
    int id;
    char name[NAME_LENGTH];
    float scores[3];
    float average;
} Student;

void addStudent(Student students[], int *studentCount) {
    if (*studentCount >= MAX_STUDENTS) {
        printf("学生人数已达到上限,无法添加更多学生。\n");
        return;
    }

    Student *student = &students[*studentCount];

    printf("请输入学生ID: ");
    scanf("%d", &student->id);

    printf("请输入学生姓名: ");
    scanf("%s", student->name);

    printf("请输入三门课的成绩:\n");
    for (int i = 0; i < 3; i++) {
        printf("成绩 %d: ", i + 1);
        scanf("%f", &student->scores[i]);
    }

    // 计算平均成绩
    student->average = (student->scores[0] + student->scores[1] + student->scores[2]) / 3.0;

    (*studentCount)++;
    printf("学生信息已添加成功!\n");
}

void displayStudents(Student students[], int studentCount) {
    printf("\n学生信息:\n");
    for (int i = 0; i < studentCount; i++) {
        printf("学生ID: %d\n", students[i].id);
        printf("姓名: %s\n", students[i].name);
        printf("成绩: %.2f, %.2f, %.2f\n", students[i].scores[0], students[i].scores[1], students[i].scores[2]);
        printf("平均成绩: %.2f\n", students[i].average);
        printf("----------------------------\n");
    }
}

void deleteStudent(Student students[], int *studentCount) {
    int id;
    printf("请输入要删除的学生ID: ");
    scanf("%d", &id);

    int found = 0;
    for (int i = 0; i < *studentCount; i++) {
        if (students[i].id == id) {
            found = 1;
            // 将后面的元素向前移动一位
            for (int j = i; j < *studentCount - 1; j++) {
                students[j] = students[j + 1];
            }
            (*studentCount)--;
            printf("学生ID为 %d 的信息已删除。\n", id);
            break;
        }
    }

    if (!found) {
        printf("未找到ID为 %d 的学生。\n", id);
    }
}

int main() {
    Student students[MAX_STUDENTS];
    int studentCount = 0;
    int choice;

    while (1) {
        printf("\n学生成绩管理系统菜单:\n");
        printf("1. 添加学生\n");
        printf("2. 显示学生信息\n");
        printf("3. 删除学生\n");
        printf("4. 退出\n");
        printf("请选择操作: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addStudent(students, &studentCount);
                break;
            case 2:
                displayStudents(students, studentCount);
                break;
            case 3:
                deleteStudent(students, &studentCount);
                break;
            case 4:
                printf("退出系统。\n");
                exit(0);
            default:
                printf("无效的选择,请重试。\n");
        }
    }

    return 0;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表