有没有人可以看看怎么写

img

img


做一个学生系统,系统必须包含图中条件,但是我学艺不精,需要点拨点拨,希望有人可以提供点思路,谢谢!

课程设计:c++实现学生成绩管理系统_学生成绩管理系统c++课程设计_luffy5459的博客-CSDN博客 学生成绩管理系统课程设计,作为计算机科学专业学生的一门必修课,印象非常深刻,上机,编码,写报告,答辩,最后很多人勉强完成了功课,但是却很少能学到东西,算是一种遗憾吧,即使我们毕业了,仍然会想回去再做一便。 今天就来复习一遍这个课题,也让自己学习学习。 学生成绩管理系统,对于刚学编程的人来说,是有一些难度的,有循环要考虑,还需要注意界面打印,菜单管理,输入输出控制,文件读写操作,排序算法等等技巧。 学生成绩管理系统,可以分为如下几个功能: 主菜单:1、输入学生成..._学生成绩管理系统c++课程设计 https://blog.csdn.net/feinifi/article/details/110249811


#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;
    }
}

找ChatGPT