编写一个基于结构体得学生成绩信息管理系统。

本关任务:编写一个基于结构体得学生成绩信息管理系统。主要功能如下: 1. 用结构体存放所有数据。 2. 每个功能都用函数实现。 3. 输入10个学生的学号和三门课程的成绩。 4. 计算每个学生的总分。 5. 按总分从高到低排序。 6. 加上名次一列。 7. 输出最后的二维表格样式的成绩,含学号、三门课成绩、总分、名次。

请填写五个函数完成相应功能的实现。其中:
input_data(STU s[]):输入原始数据函数。参数作用:
STU s[]:用来存放10个学生信息的结构体数组。
calculate(STU s[]):计算总分函数。参数作用:
STU s[]: 用于计算总分的学生信息结构体数组。
sort_total(STU s[]):根据总分降序排序函数。参数作用:
STU s[]: 用于总分排序的学生信息结构体数组。
add_rank(STU s[]):增加名次列函数。参数作用:
STU s[]: 用于添加名次的学生信息结构体数组(已排序)。
print_data(STU s[]):输出二维表格样式成绩的函数。参数作用:
STU s[]: 待打印输出的学生信息结构体数组。

#include <stdio.h>

// 定义学生结构体
typedef struct {
    int student_id;
    int score1;
    int score2;
    int score3;
    int total_score;
    int rank;
} Student;

// 输入原始数据函数
void input_data(Student STUs[]) {
    printf("请输入10个学生的学号和三门课程的成绩:\n");
    for (int i = 0; i < 10; i++) {
        printf("学生%d的学号:", i+1);
        scanf("%d", &STUs[i].student_id);
        printf("学生%d的第一门课成绩:", i+1);
        scanf("%d", &STUs[i].score1);
        printf("学生%d的第二门课成绩:", i+1);
        scanf("%d", &STUs[i].score2);
        printf("学生%d的第三门课成绩:", i+1);
        scanf("%d", &STUs[i].score3);
    }
}

// 计算总分函数
void calculate(Student STUs[]) {
    for (int i = 0; i < 10; i++) {
        STUs[i].total_score = STUs[i].score1 + STUs[i].score2 + STUs[i].score3;
    }
}

// 根据总分降序排序函数
void sort_total(Student STUs[]) {
    Student temp;
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9 - i; j++) {
            if (STUs[j].total_score < STUs[j+1].total_score) {
                temp = STUs[j];
                STUs[j] = STUs[j+1];
                STUs[j+1] = temp;
            }
        }
    }
}

// 增加名次列函数
void add_rank(Student STUs[]) {
    for (int i = 0; i < 10; i++) {
        STUs[i].rank = i + 1;
    }
}

// 输出二维表格样式成绩的函数
void print_data(Student STUs[]) {
    printf("学号\t成绩1\t成绩2\t成绩3\t总分\t名次\n");
    for (int i = 0; i < 10; i++) {
        printf("%d\t%d\t%d\t%d\t%d\t%d\n", STUs[i].student_id, STUs[i].score1, STUs[i].score2, STUs[i].score3, STUs[i].total_score, STUs[i].rank);
    }
}

int main() {
    Student students[10];
    int choice;
    
    printf("请选择操作:\n");
    printf("1. 输入学生信息\n");
    printf("2. 计算总分\n");
    printf("3. 按总分排序\n");
    printf("4. 增加名次列\n");
    printf("5. 输出成绩表格\n");
    printf("0. 退出\n");
    
    while (1) {
        printf("请输入操作编号:");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1:
                input_data(students);
                break;
            case 2:
                calculate(students);
                break;
            case 3:
                sort_total(students);
                break;
            case 4:
                add_rank(students);
                break;
            case 5:
                print_data(students);
                break;
            case 0:
                return 0;
            default:
                printf("输入有误,请重新输入。\n");
                break;
        }
    }
    return 0;
}

【以下回答由 GPT 生成】

1. input_data(STU s[])函数实现

def input_data(s):
    for i in range(len(s)):
        print("请输入第", i + 1, "个学生的信息:")
        s[i].student_id = input("学号:")

        for j in range(len(s[i].grades)):
            s[i].grades[j] = int(input("请输入第" + str(j + 1) + "门课程的成绩:"))

2. calculate(STU s[])函数实现

def calculate(s):
    for i in range(len(s)):
        s[i].total = sum(s[i].grades)

3. sort_total(STU s[])函数实现

def sort_total(s):
    s.sort(key=lambda x: x.total, reverse=True)

4. add_rank(STU s[])函数实现

def add_rank(s):
    for i in range(len(s)):
        s[i].rank = i + 1

5. print_data(STU s[])函数实现

def print_data(s):
    print("学号\t课程1\t课程2\t课程3\t总分\t名次")

    for i in range(len(s)):
        print(s[i].student_id, end='\t')

        for j in range(len(s[i].grades)):
            print(s[i].grades[j], end='\t')

        print(s[i].total, end='\t')
        print(s[i].rank)

完整代码示例

class STU:
    def __init__(self):
        self.student_id = None
        self.grades = [0] * 3
        self.total = 0
        self.rank = 0

def input_data(s):
    for i in range(len(s)):
        print("请输入第", i + 1, "个学生的信息:")
        s[i].student_id = input("学号:")

        for j in range(len(s[i].grades)):
            s[i].grades[j] = int(input("请输入第" + str(j + 1) + "门课程的成绩:"))

def calculate(s):
    for i in range(len(s)):
        s[i].total = sum(s[i].grades)

def sort_total(s):
    s.sort(key=lambda x: x.total, reverse=True)

def add_rank(s):
    for i in range(len(s)):
        s[i].rank = i + 1

def print_data(s):
    print("学号\t课程1\t课程2\t课程3\t总分\t名次")

    for i in range(len(s)):
        print(s[i].student_id, end='\t')

        for j in range(len(s[i].grades)):
            print(s[i].grades[j], end='\t')

        print(s[i].total, end='\t')
        print(s[i].rank)

def main():
    students = [STU()] * 10
    input_data(students)
    calculate(students)
    sort_total(students)
    add_rank(students)
    print_data(students)

if __name__ == "__main__":
    main()

请注意,以上代码示例是用Python编写的,使用了一个STU类来表示学生信息。请根据你所熟悉的编程语言进行相应的实现。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^