用c语言写学生信息管理系统

学生信息管理系统 1 、制作管理系统 2、能实现信息录人、删除学生信息、修改信息、查询信息、排序。 信息包括,学号、姓名、性别、班级、本学朗三门以上学科成绩,平均成绩,总成绩、 最高成绩、最低成绩。 4.排序能够按照学号姓名,或各科成绩进行排序, 等级分组 5.显示所有记录

这个有现成的:https://ask.csdn.net/questions/7620251?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168690448416800186549240%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fask.%2522%257D&request_id=168690448416800186549240&biz_id=4&utm_medium=distribute.pc_search_result.none-task-ask_topic-2~ask~first_rank_ecpm_v1~ask_rank-1-7620251-null-null.pc_ask&utm_term=c%E8%AF%AD%E8%A8%80%E5%AD%A6%E7%94%9F%E6%88%90%E7%BB%A9%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F&spm=1018.2226.3001.4187

参考https://blog.csdn.net/weixin_44369212/article/details/89058548



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

#define MAX_STUDENTS 100

// 学生结构体
typedef struct {
    char id[20];
    char name[50];
    char gender[10];
    char clas[20];
    float scores[3];
    float averageScore;
    float totalScore;
    float maxScore;
    float minScore;
} Student;

// 全局学生数组和学生数量
Student students[MAX_STUDENTS];
int studentCount = 0;

// 辅助函数声明
int findStudentIndexById(const char* id);
void printStudent(const Student* student);
void printAllStudents();
void addStudent();
void deleteStudent();
void modifyStudent();
void searchStudent();
void sortStudents();
void groupStudents();

int main() {
    int choice;

    while (1) {
        printf("\n----------- 学生信息管理系统 -----------\n");
        printf("1. 显示所有学生信息\n");
        printf("2. 录入学生信息\n");
        printf("3. 删除学生信息\n");
        printf("4. 修改学生信息\n");
        printf("5. 查询学生信息\n");
        printf("6. 排序学生信息\n");
        printf("7. 分组学生信息\n");
        printf("0. 退出系统\n");
        printf("---------------------------------------\n");
        printf("请输入要进行的操作(0-7):");

        scanf("%d", &choice);

        switch (choice) {
        case 1:
            printAllStudents();
            break;
        case 2:
            addStudent();
            break;
        case 3:
            deleteStudent();
            break;
        case 4:
            modifyStudent();
            break;
        case 5:
            searchStudent();
            break;
        case 6:
            sortStudents();
            break;
        case 7:
            groupStudents();
            break;
        case 0:
            printf("感谢使用学生信息管理系统!\n");
            exit(0);
        default:
            printf("无效的选择,请重新输入!\n");
            break;
        }
    }

    return 0;
}

// 根据学号查找学生在数组中的索引
int findStudentIndexById(const char* id) {
    for (int i = 0; i < studentCount; i++) {
        if (strcmp(students[i].id, id) == 0) {
            return i;
        }
    }
    return -1;
}

// 打印学生信息
void printStudent(const Student* student) {
    printf("学号:%s\n", student->id);
    printf("姓名:%s\n", student->name);
    printf("性别:%s\n", student->gender);
    printf("班级:%s\n", student->clas);
    printf("学科成绩:\n");
    printf("  语文:%.2f\n", student->scores[0]);
    printf("  数学:%.2f\n", student->scores[1]);
    printf("  英语:%.2f\n", student->scores[2]);
    printf("平均成绩:%.2f\n", student->averageScore);
    printf("总成绩:%.2f\n", student->totalScore);
    printf("最高成绩:%.2f\n", student->maxScore);
    printf("最低成绩:%.2f\n", student->minScore);
    printf("\n");
}

// 打印所有学生信息
void printAllStudents() {
    printf("\n=========== 所有学生信息 ===========\n");
    for (int i = 0; i < studentCount; i++) {
        printStudent(&students[i]);
    }
    printf("共%d名学生\n", studentCount);
    printf("===================================\n");
}

// 录入学生信息
void addStudent() {
    if (studentCount >= MAX_STUDENTS) {
        printf("学生信息已达到上限,无法继续添加!\n");
        return;
    }

    Student newStudent;
    printf("\n请输入学号:");
    scanf("%s", newStudent.id);

    // 检查学号是否已存在
    if (findStudentIndexById(newStudent.id) != -1) {
        printf("学号已存在,请重新输入!\n");
        return;
    }

    printf("请输入姓名:");
    scanf("%s", newStudent.name);

    printf("请输入性别:");
    scanf("%s", newStudent.gender);

    printf("请输入班级:");
    scanf("%s", newStudent.clas);

    printf("请输入语文成绩:");
    scanf("%f", &newStudent.scores[0]);

    printf("请输入数学成绩:");
    scanf("%f", &newStudent.scores[1]);

    printf("请输入英语成绩:");
    scanf("%f", &newStudent.scores[2]);

    // 计算平均成绩、总成绩、最高成绩和最低成绩
    newStudent.totalScore = newStudent.scores[0] + newStudent.scores[1] + newStudent.scores[2];
    newStudent.averageScore = newStudent.totalScore / 3.0;
    newStudent.maxScore = newStudent.scores[0];
    newStudent.minScore = newStudent.scores[0];
    for (int i = 1; i < 3; i++) {
        if (newStudent.scores[i] > newStudent.maxScore) {
            newStudent.maxScore = newStudent.scores[i];
        }
        if (newStudent.scores[i] < newStudent.minScore) {
            newStudent.minScore = newStudent.scores[i];
        }
    }

    // 将新学生信息添加到数组中
    students[studentCount] = newStudent;
    studentCount++;

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

// 删除学生信息
void deleteStudent() {
    char id[20];
    printf("\n请输入要删除的学生学号:");
    scanf("%s", id);

    int index = findStudentIndexById(id);
    if (index == -1) {
        printf("未找到学号为%s的学生!\n", id);
        return;
    }

    // 将要删除的学生信息从数组中移除
    for (int i = index; i < studentCount - 1; i++) {
        students[i] = students[i + 1];
    }
    studentCount--;

    printf("学生信息删除成功!\n");
}

// 修改学生信息
void modifyStudent() {
    char id[20];
    printf("\n请输入要修改的学生学号:");
    scanf("%s", id);

    int index = findStudentIndexById(id);
    if (index == -1) {
        printf("未找到学号为%s的学生!\n", id);
        return;
    }

    Student* student = &students[index];

    printf("学号:%s\n", student->id);
    printf("姓名:%s\n", student->name);
    printf("性别:%s\n", student->gender);
    printf("班级:%s\n", student->clas);
    printf("学科成绩:\n");
    printf("  语文:%.2f\n", student->scores[0]);
    printf("  数学:%.2f\n", student->scores[1]);
    printf("  英语:%.2f\n", student->scores[2]);
    printf("平均成绩:%.2f\n", student->averageScore);
    printf("总成绩:%.2f\n", student->totalScore);
    printf("最高成绩:%.2f\n", student->maxScore);
    printf("最低成绩:%.2f\n", student->minScore);

    printf("\n请输入新的学生信息:\n");

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

    printf("请输入性别:");
    scanf("%s", student->gender);

    printf("请输入班级:");
    scanf("%s", student->clas);

    printf("请输入语文成绩:");
    scanf("%f", &student->scores[0]);

    printf("请输入数学成绩:");
    scanf("%f", &student->scores[1]);

    printf("请输入英语成绩:");
    scanf("%f", &student->scores[2]);

    // 更新平均成绩、总成绩、最高成绩和最低成绩
    student->totalScore = student->scores[0] + student->scores[1] + student->scores[2];
    student->averageScore = student->totalScore / 3.0;
    student->maxScore = student->scores[0];
    student->minScore = student->scores[0];
    for (int i = 1; i < 3; i++) {
        if (student->scores[i] > student->maxScore) {
            student->maxScore = student->scores[i];
        }
        if (student->scores[i] < student->minScore) {
            student->minScore = student->scores[i];
        }
    }

    printf("学生信息修改成功!\n");
}

// 查找学生信息
void searchStudent() {
    char id[20];
    printf("\n请输入要查找的学生学号:");
    scanf("%s", id);

    int index = findStudentIndexById(id);
    if (index == -1) {
        printf("未找到学号为%s的学生!\n", id);
        return;
    }

    printf("\n=========== 查找到的学生信息 ===========\n");
    printStudent(&students[index]);
    printf("=======================================\n");
}

// 根据平均成绩排序学生信息
void sortStudents() {
    for (int i = 0; i < studentCount - 1; i++) {
        for (int j = 0; j < studentCount - i - 1; j++) {
            if (students[j].averageScore < students[j + 1].averageScore) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }

    printf("学生信息排序成功!\n");
}

// 分组学生信息
void groupStudents() {
    int groupCount;
    printf("\n请输入要分组的组数:");
    scanf("%d", &groupCount);

    if (groupCount <= 0 || groupCount > studentCount) {
        printf("无效的组数,请重新输入!\n");
        return;
    }

    int studentsPerGroup = studentCount / groupCount;
    int remainingStudents = studentCount % groupCount;

    int startIndex = 0;
    for (int i = 0; i < groupCount; i++) {
        int endIndex = startIndex + studentsPerGroup;
        if (remainingStudents > 0) {
            endIndex++;
            remainingStudents--;
        }

        printf("\n=========== 第%d组学生信息 ===========\n", i + 1);
        for (int j = startIndex; j < endIndex; j++) {
            printStudent(&students[j]);
        }
        printf("======================================\n");

        startIndex = endIndex;
    }
}

基于new bing 加以修改的编写:

img

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

#define MAX_STUDENT_NUM 100
#define MAX_NAME_LEN 20
#define MAX_CLASS_LEN 10

struct Student {
    int id;
    char name[MAX_NAME_LEN];
    char gender[5];
    char class[MAX_CLASS_LEN];
    float math_score;
    float english_score;
    float chinese_score;
    float average_score;
    float total_score;
};

int student_num = 0;
struct Student students[MAX_STUDENT_NUM];

void print_student(struct Student student) {
    printf("-------------------------------------------------------\n");
    printf("ID: %d, 姓名: %s, 性别: %s, 班级: %s\n", student.id, student.name, student.gender, student.class);
    printf("数学成绩: %.2f, 英语成绩: %.2f, 语文成绩: %.2f\n", student.math_score, student.english_score, student.chinese_score);
    printf("平均分: %.2f, 总分: %.2f\n", student.average_score, student.total_score);
}
void show_student() {
    for (int i = 0; i < student_num; i++) {
        print_student(students[i]);
    }
}
void add_student() {
    if (student_num >= MAX_STUDENT_NUM) {
        printf("无法添加更多学生\n");
        return;
    }

    struct Student new_student;
    printf("请输入学生的学号: ");
    scanf("%d", &new_student.id);
    getchar();
    printf("请输入学生的姓名: ");
    scanf("%s", new_student.name);
    getchar();
    printf("请输入学生的性别: ");
    scanf(" %s", new_student.gender);
    getchar();
    printf("请输入学生的班级: ");
    scanf("%s", new_student.class);
    getchar();
    printf("请输入学生的数学成绩: ");
    scanf("%f", &new_student.math_score);
    getchar();
    printf("请输入学生的英语成绩: ");
    scanf("%f", &new_student.english_score);
    getchar();
    printf("请输入学生的语文成绩: ");
    scanf("%f", &new_student.chinese_score);
    getchar();

    new_student.total_score = new_student.math_score + new_student.english_score + new_student.chinese_score;
    new_student.average_score = new_student.total_score / 3;

    students[student_num++] = new_student;
    printf("学生信息添加成功\n");
}

void delete_student() {
    int id;
    printf("请输入要删除的学生的学号: ");
    scanf("%d", &id);
    getchar();

    for (int i = 0; i < student_num; i++) {
        if (students[i].id == id) {
            for (int j = i; j < student_num - 1; j++) {
                students[j] = students[j + 1];
            }
            student_num--;
            printf("学生信息删除成功\n");
            return;
        }
    }

    printf("未找到学号为 %d 的学生\n", id);
}

void modify_student() {
    int id;
    printf("请输入要修改的学生的学号: ");
    scanf("%d", &id);
    getchar();

    for (int i = 0; i < student_num; i++) {
        if (students[i].id == id) {
            printf("请输入新的数学成绩: ");
            scanf("%f", &students[i].math_score);
            getchar();
            printf("请输入新的英语成绩: ");
            scanf("%f", &students[i].english_score);
            getchar();
            printf("请输入新的语文成绩: ");
            scanf("%f", &students[i].chinese_score);
            getchar();

            students[i].total_score = students[i].math_score + students[i].english_score + students[i].chinese_score;
            students[i].average_score = students[i].total_score / 3;

            printf("学生信息修改成功\n");
            return;
        }
    }

    printf("未找到学号为 %d 的学生\n", id);
}

void query_student() {
    int id;
    printf("请输入要查询的学生的学号: ");
    scanf("%d", &id);
    getchar();

    for (int i = 0; i < student_num; i++) {
        if (students[i].id == id) {
            print_student(students[i]);
            return;
        }
    }

    printf("未找到学号为 %d 的学生\n", id);
}

void sort_student() {
    int option;
    printf("请选择您要排序的科目:\n");
    printf("1. 数学成绩\n");
    printf("2. 英语成绩\n");
    printf("3. 语文成绩\n");
    printf("您的选择: ");
    scanf("%d", &option);

    switch(option) {
        case 1:
            for (int i = 0; i < student_num; i++) {
                for (int j = i + 1; j < student_num; j++) {
                    if (students[i].math_score < students[j].math_score) {
                        struct Student temp = students[i];
                        students[i] = students[j];
                        students[j] = temp;
                    }
                }
            }
            show_student();
            break;

        case 2:
            for (int i = 0; i < student_num; i++) {
                for (int j = i + 1; j < student_num; j++) {
                    if (students[i].english_score < students[j].english_score) {
                        struct Student temp = students[i];
                        students[i] = students[j];
                        students[j] = temp;
                    }
                }
            }
            show_student();
            break;

        case 3:
            for (int i = 0; i < student_num; i++) {
                for (int j = i + 1; j < student_num; j++) {
                    if (students[i].chinese_score < students[j].chinese_score) {
                        struct Student temp = students[i];
                        students[i] = students[j];
                        students[j] = temp;
                    }
                }
            }
            show_student();
            break;

        default:
            printf("无效选项\n");
            return;
    }

    printf("排序成功\n");
}



int main() {
    int option;
    while (1) {
        printf("\n          请选择您要执行的操作:\n");
        printf("-------------1. 添加学生信息-------------\n");
        printf("-------------2. 删除学生信息-------------\n");
        printf("-------------3. 修改学生信息-------------\n");
        printf("-------------4. 查询学生信息-------------\n");
        printf("-------------5. 排序学生信息-------------\n");
        printf("-------------6. 显示所有学生信息---------\n");
        printf("-------------7. 退出程序-----------------\n");
        printf("您的选择: ");
        scanf("%d", &option);

        switch(option) {
            case 1:
                add_student();
                break;

            case 2:
                delete_student();
                break;

            case 3:
                modify_student();
                break;

            case 4:
                query_student();
                break;

            case 5:
                sort_student();
                break;

            case 6:
                show_student();
                break;

            case 7:
                return 0;

            default:
                printf("无效选项\n");
                break;
        }
    }

    return 0;
}

学生信息管理系统——C语言版
https://blog.csdn.net/qq_63099085/article/details/126002741

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7452704
  • 这篇博客也不错, 你可以看下例 9.7 有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。
  • 除此之外, 这篇博客: 海大12年编程题1:现有30个学生记录包括以下信息: 学号,姓名,性别,年龄,三门课成绩,平均成绩。 设计一个完整的C语言程序,完成以下功能: 1.定义结构体数组,包含以上所有信息; 2.定义函数用来中的 三、执行结果 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

    输入:

    请输入第1个学生的学号,姓名,性别,年龄,三门课成绩:3 邹研研 女 22 90 80 140
    该学生的平均成绩为:103.33
    请输入第2个学生的学号,姓名,性别,年龄,三门课成绩:2 葛新龙 男 21 66 44 150
    该学生的平均成绩为:86.67
    请输入第3个学生的学号,姓名,性别,年龄,三门课成绩:1 李文杰 男 21 88 66 120
    该学生的平均成绩为:91.33
    

    输出:

    拍完序的结果为:
    3 邹研研 女 22 90 80 140 103.33
    1 葛新龙 男 21 66 44 150 86.67
    2 李文杰 男 21 88 66 120 91.33
    
  • 您还可以看一下 李月喜老师的企业微信开发第三方应用开发篇课程中的 回调配置概述,回调签名验证及消息解密集成 小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以为您设计学生信息管理系统。根据您的需求,这个系统需要具有以下功能:

    1.信息录入:可以在系统中录入学生的学号、姓名、性别、班级、各门学科成绩等信息;

    2.信息删除:可以根据需要删除学生的信息;

    3.信息修改:可以修改学生的各项信息,如姓名、班级等;

    4.信息查询:可以通过学号或姓名等关键字进行查询,查找学生的详细信息;

    5.信息排序:可以将学生的信息按学号、姓名、各科成绩进行排序,按升序或降序排列;

    6.等级分组:可以将学生按照成绩等级进行分组,并按照每个组的成绩平均分进行显示;

    7.显示所有学生记录:可以将所有学生的记录显示出来,包括学号、姓名、性别、班级、各科成绩、平均成绩、总成绩、最高成绩和最低成绩等。

    以下是系统的具体实现步骤:

    1.首先要定义学生结构体,包含学号、姓名、性别、班级、各科成绩、平均成绩、总成绩、最高成绩和最低成绩等信息;

    2.编写菜单界面,让用户可以选择想要进行的操作;

    3.通过switch语句,根据用户选择的操作,执行相应的功能函数;

    4.实现信息录入功能,可以通过scanf等输入函数获取用户输入的学生信息,然后将其保存到结构体数组中;

    5.实现信息删除功能,可以通过输入学号或姓名等关键字,从学生数组中删除对应的信息;

    6.实现信息修改功能,可以通过输入学号或姓名等关键字,找到对应的学生信息,然后修改其各项信息;

    7.实现信息查询功能,可以通过输入学号或姓名等关键字,找到对应的学生信息,然后将其详细信息显示出来;

    8.实现信息排序功能,可以通过选择排序关键字和排序方式(升序或降序),将学生的信息按照关键字进行排序;

    9.实现等级分组功能,可以将学生成绩按照一定规则进行分组,并按照每个组的成绩平均分进行显示;

    10.实现显示所有学生记录功能,可以将所有学生的记录显示出来,包括学号、姓名、性别、班级、各科成绩、平均成绩、总成绩、最高成绩和最低成绩等。

    以下是一个简单的示例程序,可以用来实现上述功能:

    include

    include

    include

    define MAX_STU_NUM 100 // 定义最大学生数

    define MAX_NAME_LEN 20 // 定义最大名字长度

    // 学生结构体 typedef struct { int num; // 学号 char name[MAX_NAME_LEN]; // 姓名 char sex; // 性别 int cls; // 班级 int score[3]; // 各科成绩 double avg; // 平均成绩 int tot; // 总成绩 int maxsc; // 最高成绩 int minsc; // 最低成绩 } student;

    student stu_array[MAX_STU_NUM]; // 学生数组 int stu_num; // 学生数

    // 菜单函数 void menu() { printf("=============================================\n"); printf(" 学生信息管理系统 \n"); printf("=============================================\n"); printf("1. 录入学生信息\n"); printf("2. 删除学生信息\n"); printf("3. 修改学生信息\n"); printf("4. 查询学生信息\n"); printf("5. 学生信息排序\n"); printf("6. 学生成绩分组\n"); printf("7. 显示所有学生记录\n"); printf("0. 退出程序\n"); printf("=============================================\n"); }

    // 录入学生信息函数 void input_stu_info() { printf("请输入学生数:"); scanf("%d", &stu_num); for (int i = 0; i < stu_num; i++) { printf("请输入第%d位学生的信息:\n", i + 1); printf("学号:"); scanf("%d", &stu_array[i].num); printf("姓名:"); scanf("%s", stu_array[i].name); printf("性别:"); scanf(" %c", &stu_array[i].sex); printf("班级:"); scanf("%d", &stu_array[i].cls); printf("语文成绩:"); scanf("%d", &stu_array[i].score[0]); printf("数学成绩:"); scanf("%d", &stu_array[i].score[1]); printf("英语成绩:"); scanf("%d", &stu_array[i].score[2]); stu_array[i].tot = stu_array[i].score[0] + stu_array[i].score[1] + stu_array[i].score[2]; // 计算总成绩 stu_array[i].avg = stu_array[i].tot / 3.0; // 计算平均成绩 stu_array[i].maxsc = stu_array[i].score[0]; stu_array[i].minsc = stu_array[i].score[0]; for (int j = 1; j < 3; j++) { // 计算最高成绩和最低成绩 if (stu_array[i].score[j] > stu_array[i].maxsc) { stu_array[i].maxsc = stu_array[i].score[j]; } else if (stu_array[i].score[j] < stu_array[i].minsc) { stu_array[i].minsc = stu_array[i].score[j]; } } } printf("学生信息录入完毕!\n"); }

    // 删除学生信息函数 void delete_stu_info() { int num; printf("请输入要删除学生的学号或姓名:"); scanf("%d", &num); for (int i = 0; i < stu_num; i++) { if (stu_array[i].num == num || strcmp(stu_array[i].name, num) == 0) { for (int j = i; j < stu_num - 1; j++) { // 从要删除的学生后一个位置开始,将后面的学生左移 stu_array[j] = stu_array[j + 1]; } stu_num--; printf("学生信息删除成功!\n"); return; } } printf("未找到匹配的学生信息!\n"); }

    // 修改学生信息函数 void modify_stu_info() { int num; printf("请输入要修改学生的学号或姓名:"); scanf("%d", &num); for (int i = 0; i < stu_num; i++) { if (stu_array[i].num == num || strcmp(stu_array[i].name, num) == 0) { printf("请输入要修改的信息(学号、姓名、性别、班级、三个科目成绩):\n"); printf("学号:"); scanf("%d", &stu_array[i].num); printf("姓名:"); scanf("%s", stu_array[i].name); printf("性别:"); scanf(" %c", &stu_array[i].sex); printf("班级:"); scanf("%d", &stu_array[i].cls); printf("语文成绩:"); scanf("%d", &stu_array[i].score[0]); printf("数学成绩:"); scanf("%d", &stu_array[i].score[1]); printf("英语成绩:"); scanf("%d", &stu_array[i].score[2]); stu_array[i].tot = stu_array[i].score[0] + stu_array[i].score[1] + stu_array[i].score[2]; stu_array[i].avg = stu_array[i].tot / 3.0; stu_array[i].maxsc = stu_array[i].score[0]; stu_array[i].minsc = stu_array[i].score[0]; for (int j = 1; j < 3; j++) { if (stu_array[i].score[j] > stu_array[i].maxsc) { stu_array[i].maxsc = stu_array[i].score[j]; } else if (stu_array[i].score[j] < stu_array[i].minsc) { stu_array[i].minsc = stu_array[i].score[j]; } } printf("学生信息修改成功!\n"); return; } } printf("未找到匹配的学生信息!\n"); }

    // 查询学生信息函数 void query_stu_info() { int num; char name[MAX_NAME_LEN]; printf("请输入要查询学生的学号或姓名:"); scanf("%d", &num); scanf("%s", name); // 需要先读取一个换行符,再读取名字,避免被输入函数误读为空字符串 for (int i = 0; i < stu_num; i++) { if (stu_array[i].num == num || strcmp(stu_array[i].name, name) == 0) { printf("学号:%d\n", stu_array[i].num); printf("姓名:%s\n", stu_array[i].name); printf("性别:%c\n", stu_array[i].sex); printf("班级:%d\n", stu_array[i].cls); printf("语文成绩:%d\n", stu_array[i].score[0]); printf("数学成绩:%d\n", stu_array[i].score[1]); printf("英语成绩:%d\n", stu_array[i].score[2]); printf("总成绩:%d\n", stu_array[i].tot); printf("平均成绩:%.2lf\n", stu_array[i].avg); printf("最高成绩:%d\n", stu_array[i].maxsc); printf("最低成绩:%d\n", stu_array[i].minsc); return; } } printf("未找到匹配的学生信息!\n"); }

    // 冒泡排序函数 void bubble_sort(student stu[], int n, int idx, int order) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (order == 0) { // 升序 if (stu[j].score[idx] > stu[j + 1].score[idx]) { student tmp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = tmp; } } else { // 降序 if (

来自百度GPT:

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

#define MAX_STUDENT_NUM 100

struct Student {
    char id[20];
    char name[20];
    char gender[10];
    char class[20];
    float scores[3];
    float average;
    float total;
    float maxScore;
    float minScore;
};

struct Student students[MAX_STUDENT_NUM];
int studentCount = 0;

void addStudent() {
    struct Student student;
    printf("请输入学生学号:");
    scanf("%s", student.id);
    printf("请输入学生姓名:");
    scanf("%s", student.name);
    printf("请输入学生性别:");
    scanf("%s", student.gender);
    printf("请输入学生班级:");
    scanf("%s", student.class);
    printf("请输入学生三门以上学科成绩:\\n");
    float totalScore = 0;
    float maxScore = 0;
    float minScore = 100;
    for (int i = 0; i < 3; i++) {
        printf("请输入第 %d 门课程成绩:", i + 1);
        scanf("%f", &student.scores[i]);
        totalScore += student.scores[i];
        if (student.scores[i] > maxScore) {
            maxScore = student.scores[i];
        }
        if (student.scores[i] < minScore) {
            minScore = student.scores[i];
        }
    }
    student.average = totalScore / 3;
    student.total = totalScore;
    student.maxScore = maxScore;
    student.minScore = minScore;
    students[studentCount++] = student;
    printf("添加成功!\\n");
}

void deleteStudent() {
    char id[20];
    printf("请输入要删除的学生学号:");
    scanf("%s", id);
    for (int i = 0; i < studentCount; i++) {
        if (strcmp(students[i].id, id) == 0) {
            for (int j = i; j < studentCount - 1; j++) {
                students[j] = students[j + 1];
            }
            studentCount--;
            printf("删除成功!\\n");
            return;
        }
    }
    printf("未找到该学生!\\n");
}

void modifyStudent() {
    char id[20];
    printf("请输入要修改的学生学号:");
    scanf("%s", id);
    for (int i = 0; i < studentCount; i++) {
        if (strcmp(students[i].id, id) == 0) {
            printf("请输入学生姓名:");
            scanf("%s", students[i].name);
            printf("请输入学生性别:");
            scanf("%s", students[i].gender);
            printf("请输入学生班级:");
            scanf("%s", students[i].class);
            printf("请输入学生三门以上学科成绩:\\n");
            float totalScore = 0;
            float maxScore = 0;
            float minScore = 100;
            for (int j = 0; j < 3; j++) {
                printf("请输入第 %d 门课程成绩:", j + 1);
                scanf("%f", &students[i].scores[j]);
                totalScore += students[i].scores[j];
                if (students[i].scores[j] > maxScore) {
                    maxScore = students[i].scores[j];
                }
                if (students[i].scores[j] < minScore) {
                    minScore = students[i].scores[j];
                }
            }
            students[i].average = totalScore / 3;
            students[i].total = totalScore;
            students[i].maxScore = maxScore;
            students[i].minScore = minScore;
            printf("修改成功!\\n");
            return;
        }
    }
    printf("未找到该学生!\\n");
}

void queryStudent() {
    char id[20];
    printf("请输入要查询的学生学号:");
    scanf("%s", id);
    for (int i = 0; i < studentCount; i++) {
        if (strcmp(students[i].id, id) == 0) {
            printf("学生学号:%s\\n", students[i].id);
            printf("学生姓名:%s\\n", students[i].name);
            printf("学生性别:%s\\n", students[i].gender);
            printf("学生班级:%s\\n", students[i].class);
            printf("学生成绩:\\n");
            for (int j = 0; j < 3; j++) {
                printf("  第 %d 门课程成绩:%f\\n", j + 1, students[i].scores[j]);
            }
            printf("学生平均成绩:%f\\n", students[i].average);
            printf("学生总成绩:%f\\n", students[i].total);
            printf("学生最高成绩:%f\\n", students[i].maxScore);
            printf("学生最低成绩:%f\\n", students[i].minScore);
            return;
        }
    }
    printf("未找到该学生!\\n");
}

void sortStudent() {
    int type;
    printf("请选择排序方式:\\n");
    printf("1.学号 2.姓名 3.三门以上学科平均成绩 4.三门以上学科总成绩 5.三门以上学科最高成绩 6.三门以上学科最低成绩\\n");
    scanf("%d", &type);
    switch (type) {
        case 1:
            for (int i = 0; i < studentCount - 1; i++) {
                for (int j = 0; j < studentCount - 1 - i; j++) {
                    if (strcmp(students[j].id, students[j + 1].id) > 0) {
                        struct Student temp = students[j];
                        students[j] = students[j + 1];
                        students[j + 1] = temp;
                    }
                }
            }
            break;
        case 2:
            for (int i = 0; i < studentCount - 1; i++) {
                for (int j = 0; j < studentCount - 1 - i; j++) {
                    if (strcmp(students[j].name, students[j + 1].name) > 0) {
                        struct Student temp = students[j];
                        students[j] = students[j + 1];
                        students[j + 1] = temp;
                    }
                }
            }
            break;
        case 3:
            for (int i = 0; i < studentCount - 1; i++) {
                for (int j = 0; j < studentCount - 1 - i; j++) {
                    if (students[j].average > students[j + 1].average) {
                        struct Student temp = students[j];
                        students[j] = students[j + 1];
                        students[j + 1] = temp;
                    }
                }
            }
            break;
        case 4:
            for (int i = 0; i < studentCount - 1; i++) {
                for (int j = 0; j < studentCount - 1 - i; j++) {
                    if (students[j].total > students[j + 1].total) {
                        struct Student temp = students[j];
                        students[j] = students[j + 1];
                        students[j + 1] = temp;
                    }
                }
            }
            break;
        case 5:
            for (int i = 0; i < studentCount - 1; i++) {
                for (int j = 0; j < studentCount - 1 - i; j++) {
                    if (students[j].maxScore > students[j + 1].maxScore) {
                        struct Student temp = students[j];
                        students[j] = students[j + 1];
                        students[j + 1] = temp;
                    }
                }
            }
            break;
        case 6:
            for (int i = 0; i < studentCount - 1; i++) {
                for (int j = 0; j < studentCount - 1 - i; j++) {
                    if (students[j].minScore > students[j + 1].minScore) {
                        struct Student temp = students[j];
                        students[j] = students[j + 1];
                        students[j + 1] = temp;
                    }
                }
            }
            break;
        default:
            printf("无效的排序方式!\\n");
            return;
    }
    printf("排序成功!\\n");
}

void showAllStudents() {
    if (studentCount == 0) {
        printf("没有学生记录!\\n");
    } else {
        printf("共有 %d 名学生记录:\\n", studentCount);
        for (int i = 0; i < studentCount; i++) {
            printf("%d. 学号:%s 姓名:%s 性别:%s 班级:%s\\n", i + 1, students[i].id, students[i].name, students[i].gender, students[i].class);
            printf("   成绩:语文 %f 数学 %f 英语 %f 平均 %f 总分 %f 最高分 %f 最低分 %f\\n", students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average, students[i].total, students[i].maxScore, students[i].minScore);
        }
    }
}

int main() {
    int choice;
    while (1) {
        printf("请选择操作:\\n");
        printf("1.添加学生 2.删除学生 3.修改学生信息 4.查询学生信息 5.排序学生信息 6.显示所有学生记录 7.退出\\n");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                addStudent();
                break;
            case 2:
                deleteStudent();
                break;
            case 3:
                modifyStudent();
                break;
            case 4:
                queryStudent();
                break;
            case 5:
                sortStudent();
                break;
            case 6:
                showAllStudents();
                break;
            case 7:
                printf("退出程序!\\n");
                return 0;
            default:
                printf("无效的操作!\\n");
                break;
        }
    }
    return 0;
}


纯手写,有帮助请采纳

img


//
#include<stdio.h>
#include<windows.h>
#define Max_stu_num 25
#define obj_num 3

char File_Path[]="student_inf.txt";

typedef struct
{
    char Name[25];         //姓名
    int Number;            //学号
    char gender[25];    //性别
    char city[25];            //籍贯
    int score[obj_num];            //数学成绩//语文成绩//英语成绩
    int Sum_score;     //总成绩
} Stu;

char obj_name[obj_num][25]= {"数学","语文","英语"};
double ave[obj_num];

double stu_avescore[Max_stu_num];    //平均成绩

Stu stu[Max_stu_num];
int count_stu=0;

void cal_sum_score(int index)
{
    stu[index].Sum_score=0;
    for(int j=0; j<obj_num; j++)
    {
        stu[index].Sum_score+=stu[index].score[j];
    }
}

void input()
{
    printf("输入姓名:\n");
    fflush(stdin);
    scanf("%s",stu[count_stu].Name);
    printf("输入学号:\n");
    fflush(stdin);
    scanf("%d",&stu[count_stu].Number);
    printf("输入性别:\n");
    fflush(stdin);
    scanf("%s",stu[count_stu].gender);
    printf("输入籍贯:\n");
    fflush(stdin);
    scanf("%s",stu[count_stu].city);
    for(int i=0; i<obj_num; i++)
    {
        printf("输入%s成绩:\n",obj_name[i]);
        fflush(stdin);
        scanf("%d",&stu[count_stu].score[i]);
    }
    cal_sum_score(count_stu);
    count_stu++;
}

void output_head()
{
    printf("姓名\t学号\t\t性别\t籍贯\t");
    for(int i=0; i<obj_num; i++)
    {
        printf("%s\t",obj_name[i]);
    }
    printf("总分\n");
}

void outputOne(int index)
{
    printf("%s\t",stu[index].Name);
    printf("%d\t",stu[index].Number);
    printf("%s\t",stu[index].gender);
    printf("%s\t",stu[index].city);
    for(int i=0; i<obj_num; i++)
    {
        printf("%d\t",stu[index].score[i]);
    }
    printf("%d\t",stu[index].Sum_score);
    printf("\n");
}

void output_all(int n)
{
    output_head();
    int j;
    for(j=0; j<n; j++)
    {
        outputOne(j);
    }
    printf("---------------------------------------------------\n");
}

int search(int number)
{
    int i,p=-1;
    for(i=0; i<count_stu; i++)
    {
        if(stu[i].Number==number)
        {
            p=i;
            return p;
        }
    }
    return -1;
}

void modify(int number)
{
    int index=search(number);
    if(index==-1)
    {
        printf("找不到该学号\n");
    }
    else
    {
        printf("学号%d的学生是第%d位\n",number,index+1);
        output_head();
        outputOne(index);
        puts("修改信息");
        printf("输入姓名:\n");
        fflush(stdin);
        scanf("%s",stu[index].Name);
        printf("输入学号:\n");
        fflush(stdin);
        scanf("%d",&stu[index].Number);
        stu[index].Sum_score=0;
        for(int i=0; i<obj_num; i++)
        {
            printf("输入%s成绩:\n",obj_name[i]);
            fflush(stdin);
            scanf("%d",&stu[index].score[i]);
            stu[index].Sum_score+=stu[index].score[i];
        }
        cal_sum_score(index);
        printf("修改成功\n");
    }
}

void del(int number)
{
    int index=search(number);
    if(index==-1)
    {
        printf("找不到该学号\n");
    }
    else
    {
        printf("学号%d的学生是第%d位\n",number,index+1);
        output_head();
        outputOne(index);
        int i;
        for(i=index; i<count_stu-1; i++)
        {
            stu[i]= stu[i+1];
        }
        printf("删除成功\n");
        count_stu--;
    }
}

double calave()
{
    int score_sum[obj_num]= {0};
    for(int i=0; i<count_stu; i++)
    {
        for(int j=0; j<obj_num; j++)
        {
            score_sum[j]+=stu[i].score[j];
        }
    }
    for(int j=0; j<obj_num; j++)
    {
        ave[j]=(double)score_sum[j]/count_stu;
    }
}

void save()
{
    FILE *fp;
    fp = fopen(File_Path,"w");
    if(fp == NULL)
    {
        printf("error!");
    }
    else
    {
        for(int j=0; j<count_stu; j++)
        {
            fprintf(fp,"%s %d ",stu[j].Name,stu[j].Number);
            fprintf(fp,"%s %s ",stu[j].gender,stu[j].city);
            for(int i=0; i<obj_num; i++)
            {
                fprintf(fp,"%d ",stu[j].score[i]);
            }
            fprintf(fp,"%d\n",stu[j].Sum_score);
        }
        printf("文件写入成功\n");
    }
    fclose(fp);
}

void read()
{
    FILE *fp;
    fp = fopen(File_Path,"r");
    int count=0;
    if(fp == NULL)
    {
        printf("error!");
    }
    else
    {
        int flag=2;
        int j=count_stu;
        do
        {
            flag=fscanf(fp,"%s %d ",stu[j].Name,&stu[j].Number);
            fscanf(fp,"%s %s ",stu[j].gender,stu[j].city);
            for(int i=0; i<obj_num; i++)
            {
                fscanf(fp,"%d ",&stu[j].score[i]);
            }
            fscanf(fp,"%d\n",&stu[j].Sum_score);
            if(flag!=-1)
            {
                cal_sum_score(count);
                count++;
            }
            j++;
        }
        while(flag>0);
        printf("文件读取成功\n");
        count_stu+=count;
    }
    fclose(fp);
}

void swap_stu_inf(Stu stu[],int a,int b)
{
    Stu tem=stu[a];
    stu[a]=stu[b];
    stu[b]=tem;
}
void BubbleSort_number(Stu stu[],int n)
{
    int j,k;
    Stu t;
    for(j=0; j<n-1; j++)
    {
        for(k=0; k<n-j-1; k++)
        {
            if(stu[k].Number>stu[k+1].Number)
            {
                t=stu[k];
                stu[k]=stu[k+1];
                stu[k+1]=t;
            }
        }
    }
}

void BubbleSort_score(Stu stu[],int n)
{
    int j,k;
    Stu t;
    for(j=0; j<n-1; j++)
    {
        for(k=0; k<n-j-1; k++)
        {
            if(stu[k].Sum_score<stu[k+1].Sum_score)
            {
                t=stu[k];
                stu[k]=stu[k+1];
                stu[k+1]=t;
            }
        }
    }
}

void out_aveScore()
{
    printf("平均分\t\t");
    for(int i=0; i<obj_num; i++)
    {
        printf("%.2lf\t",ave[i]);
    }
    printf("\n");
}

void cal_stu_avescore()
{
    for(int i=0; i<count_stu; i++)
    {
        stu_avescore[i]=(double)stu[i].Sum_score/obj_num;
    }
}

void color(short x)    //自定义函根据参数改变颜色
{
    if(x>=0 && x<=15)//参数在0-15的范围颜色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);    //只有一个参数,改变字体颜色
    else//默认的颜色白色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}

void put_stu_ave_score()
{
    cal_stu_avescore();
    printf("姓名\t学号\t平均分\n");
    for(int i=0; i<count_stu; i++)
    {
        if(stu_avescore[i]<60)
        {
            color(6);
        }
        printf("%s\t%d\t%.2f\n",stu[i].Name,stu[i].Number,stu_avescore[i]);
        color(7);
    }
    //color(7);
}


void sort_menu()
{
    puts("--------1.按学号排序------------------------------");
    puts("--------2.按总成绩排序----------------------------");
    puts("--------3.返回主菜单------------------------------");
    int option=0;
    fflush(stdin);
    scanf("%d",&option);
    if(option==1)
    {
        system("cls");
        BubbleSort_number(stu,count_stu);
        puts("排序完成");
        output_all(count_stu);
    }
    else if(option==2)
    {
        system("cls");
        BubbleSort_score(stu,count_stu);
        puts("排序完成");
        output_all(count_stu);
    }
    else if(option==3)
    {
        return;
    }
}
void count_stu_()
{
    printf("统计学生总数\n");
    printf("一共 %d 名学生\n",count_stu);
}
void insert(int index,Stu stu_)
{
    for(int i=count_stu+1; i>index; i--)
    {
        stu[i]=stu[i-1];
    }
    stu[index]=stu_;
    count_stu++;
    cal_sum_score(index);
}
void menu()
{
    int option=0;
    while(option!=11)
    {
        system("cls");
        printf("--------------------------------------------------------------------------------\n");
        printf("------学生信息管理--------------------------------------------------------------\n");
        printf("------1.录入学生信息  ----------------------------------------------------------\n");
        printf("------2.查找学生信息  ----------------------------------------------------------\n");
        printf("------3.删除学生信息  ----------------------------------------------------------\n");
        printf("------4.修改学生信息------------------------------------------------------------\n");
        printf("------5.学生信息排序------------------------------------------------------------\n");
        printf("------6.统计学生总数  ----------------------------------------------------------\n");
        printf("------7.显示所有学生信息--------------------------------------------------------\n");
        printf("------8.插入学生信息------------------------------------------------------------\n");
        printf("------9.文件读入  --------------------------------------------------------------\n");
        printf("------10.保存至文件--------------------------------------------------------------\n");
        printf("------11.退出系统---------------------------------------------------------------\n");
        printf("--------------------------------------------------------------------------------\n");
        printf("输入选项:\n");
        fflush(stdin);
        scanf("%d",&option);
        if(option==1)
        {
            system("cls");
            input();
            system("pause");
        }
        else if(option==2)
        {
            system("cls");
            //output(count_stu);
            int number;
            printf("输入要查找的学号:");
            fflush(stdin);
            scanf("%d",&number);
            int index=search(number);
            if(index==-1)
            {
                printf("查找失败\n");
            }
            else
            {
                printf("查找成功\n");
                output_head();
                outputOne(index);
            }
            system("pause");
        }
        else if(option==3)
        {
            system("cls");
            int number;
            printf("输入要删除的学号:");
            scanf("%d",&number);
            del(number);
            puts("完成");
            system("pause");
        }
        else if(option==4)
        {
            system("cls");
            output_all(count_stu);
            int number;
            printf("输入要修改成绩的学生对应的学号:");
            scanf("%d",&number);
            modify(number);
            system("pause");
        }
        else if(option==5)
        {
            system("cls");
            sort_menu();
            system("pause");
        }
        else if(option==6)
        {
            system("cls");
            count_stu_();
            system("pause");
        }
        else if(option==7)
        {
            system("cls");
            puts("显示所有学生信息");
            /**/
            output_all(count_stu);
            system("pause");
        }
        else if(option==8)
        {
            system("cls");
            int index;
            printf("输入要插入的位置(0~%d)",count_stu);
            scanf("%d",&index);
            Stu stu_;
            printf("输入姓名:\n");
            fflush(stdin);
            scanf("%s",stu_.Name);
            printf("输入学号:\n");
            fflush(stdin);
            scanf("%d",&stu_.Number);
            printf("输入性别:\n");
            fflush(stdin);
            scanf("%s",stu_.gender);
            printf("输入籍贯:\n");
            fflush(stdin);
            scanf("%s",stu_.city);
            for(int i=0; i<obj_num; i++)
            {
                printf("输入%s成绩:\n",obj_name[i]);
                fflush(stdin);
                scanf("%d",&stu_.score[i]);
            }

            insert(index,stu_);
            puts("插入完成");
            system("pause");
        }

        else if(option==9)
        {
            system("cls");
            read();
            system("pause");
        }
        else if(option==10)
        {
            system("cls");
            save();
            system("pause");
        }
        else if(option==11)
        {
            system("cls");
            return;
            system("pause");
        }
    }
}

int main()
{
    menu();
    return 0;
}


请看一下

#include<bits/stdc++.h>
using namespace std;
string s,w;
struct student {
    string name;
    int chinese,math,english,science;
    int total;
} a[10086];
int main() {
    int n,nn,z,anything=0;
    cin>>n;
    cout<<"please send in the students name and their chinese,math,English and science score"<<endl;
    for(int i=1; i<=n; i++) {
        cin>>a[i].name>>a[i].chinese>>a[i].math>>a[i].english>>a[i].science;
        a[i].total=a[i].chinese+a[i].math+a[i].english+a[i].science;
    }
    while(anything==0) {
        cout<<"what do you want to do? 1 send out all the students name and score. 2 reset the score of any student. 0 close"<<endl;
        cin>>nn;
        if(nn==1) {
            for(int i=1; i<=n; i++) {
                cout<<a[i].name<<" "<<a[i].chinese<<" "<<a[i].math<<" "<<a[i].english<<" "<<a[i].science<<endl;
            }
        }
        if(nn==2) {
            cout<<"which person you want to change? And what subject to which score?"<<endl;
            cin>>s>>w>>z;
            for(int i=1; i<=n; i++) {
                if(s==a[i].name) {
                    if(w=="chinese") {
                        a[i].chinese=z;
                    }
                    if(w=="math") {
                        a[i].math=z;
                    }
                    if(w=="English") {
                        a[i].english=z;
                    }
                    if(w=="science") {
                        a[i].science=z;
                    }
                }
            }
        }
        if(nn==0){
            return 0;
        } 
    }
}
 
 

先定义学生、学科成绩等实体,然后数据库可以使用mysql,进行一个增删改查就可以了,GUI界面可以用QT来写