C语言编写学生管理系统

用C语言程序编写一个菜单驱动的学生成绩管理程序。某个学生班-一个学 期的学生成绩管理,设课程数量为5门课程,学生人数为10人。

1、程序功能

(1)从键盘输入包括学号、姓名、各门课程及成绩(学生基本信息及所选科目成绩的录入);

(2)计算每个人的总分和平均分,并按照平均分排序;

(3)具有查询的功能;

(4)具有学生增加和减少功能;

(5)将原始数据和计算后的数据保存在磁盘文件student.xt中。

2、系统菜单

[1]输入(键盘输入若干条记录,相当于初始化)

[2]插入(插入一 条新记录)

[3] 查找(输入一个学生学号,输出其学生基本信息和各科成绩)[4] 删除(按姓名或学号查找, 删除一条学生记录)

[5] 统计(若按1, 则输入学生的学号统计该生的总分及平均分;若按2,则输入课程求该门课程的总平均分)

[6]排序(按学 号或按其他字段属性进行排序)

[7]存盘(将所有 数据以文件的形式存盘)

[0]退出(退出系统 )

参考下

img

参考:

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7615920
  • 这篇博客你也可以参考下:【C】9.5有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均分,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分)
  • 除此之外, 这篇博客: (C语言)有10个学生,每个学生的数据包括学号,姓名,3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课程成绩,平均分数)中的 有10个学生,每个学生的数据包括学号,姓名,3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号,姓名,3门课程成绩,平均分数) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #define N 10
    struct student {
    	int num;
    	char name[1024];
    	int score[3];
    };
    typedef struct student stu;
    void input(stu* p) {//输入
    	for (int i = 0; i < N; ++i) {
    		printf("请输入第%d个学生的信息\n", i + 1);
    		printf("请输入num\n");
    		scanf("%d", &(p + i)->num);
    		printf("请输入姓名\n");
    		scanf("%s", &(p + i)->name);
    		for (int j = 0; j < 3; ++j) {
    			printf("请输入score%d\n", j + 1);
    			scanf("%d", &(p + i)->score[j]);
    		}
    	}
    }
    void print(stu* p) {//输出
    	printf("%d\t", p->num);
    	printf("%s\t", p->name);
    	for (int j = 0; j < 3; ++j) {
    		printf("%d\t", p->score[j]);
    	}
    }
    double aver(stu* p) {//计算平均分
    	double sum = 0;
    	for (int i = 0; i < 3; ++i) {
    		sum += p->score[i];
    	}
    	return sum / N;
    }
    int excellect(stu* p) {//判断最高分,返回下标
    	double sum = 0;
    	double max = 0;
    	int record = 0;
    	for (int i = 0; i < N; ++i) {
    		sum = 0;
    		for (int j = 0; j < 3; ++j) {
    			sum += (p + i)->score[j];
    		}
    		if (max < sum) {
    			max = sum;
    			record = i;
    		}
    	}
    	return record;
    }
    void main() {
    	stu a[N];
    	stu* p = a;
    	input(p);
    	printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均\n");
    	for (int i = 0; i < N; i++) {
    		print(p + i);
    		printf("%f\n", aver(p + i));
    	}
    	printf("最高分的学生数据如下\n学号\t姓名\t成绩1\t成绩2\t成绩3\t平均\n");
    	int n = excellect(p);
    	print(p + n);
    	printf("%f\n", aver(p + n));
    	system("pause");
    }
    

    在这里插入图片描述

  • 以下回答来自chatgpt:

    C语言编写学生管理系统的菜单驱动程序

    根据问题描述,我们需要编写一个学生成绩管理程序,实现几个主要功能。下面是一个基本的解决方案,包含了所需的功能和关键提示。

    解决方案

    首先,我们需要使用一个结构体来表示学生的基本信息和成绩记录。结构体中包含学生的学号、姓名和一个数组来保存每门课程的成绩。

    #define MAX_COURSES 5
    #define MAX_NAME_LENGTH 20
    
    typedef struct {
        int studentId;
        char name[MAX_NAME_LENGTH];
        int grades[MAX_COURSES];
    } Student;
    

    接下来,我们需要一个数组来保存所有的学生记录,以及一个变量来跟踪当前已录入的学生数量。

    #define MAX_STUDENTS 100
    
    Student students[MAX_STUDENTS];
    int numStudents = 0;  // 当前已录入的学生数量
    

    接下来,我们可以根据需求实现每个功能:

    1. 录入学生基本信息和成绩记录。
    void addStudent() {
        if (numStudents >= MAX_STUDENTS) {
            printf("学生数量已达到上限,无法继续录入。\n");
            return;
        }
    
        Student newStudent;
    
        printf("请输入学生的学号: ");
        scanf("%d", &newStudent.studentId);
    
        printf("请输入学生的姓名: ");
        scanf("%s", newStudent.name);
    
        printf("请输入学生每门课程的成绩: ");
        for (int i = 0; i < MAX_COURSES; i++) {
            scanf("%d", &newStudent.grades[i]);
        }
    
        students[numStudents] = newStudent;
        numStudents++;
    }
    
    1. 计算每个学生的总分和平均分,并按照平均分排序。
    // 计算学生的总分
    int calculateTotalScore(Student student) {
        int total = 0;
        for (int i = 0; i < MAX_COURSES; i++) {
            total += student.grades[i];
        }
        return total;
    }
    
    // 计算学生的平均分
    double calculateAverageScore(Student student) {
        int total = calculateTotalScore(student);
        return (double) total / MAX_COURSES;
    }
    
    // 比较函数,用于排序
    int compareStudents(const void* a, const void* b) {
        Student* studentA = (Student*) a;
        Student* studentB = (Student*) b;
    
        double avgA = calculateAverageScore(*studentA);
        double avgB = calculateAverageScore(*studentB);
    
        // 按照平均分进行排序
        if (avgA < avgB) {
            return -1;
        } else if (avgA > avgB) {
            return 1;
        } else {
            return 0;
        }
    }
    
    void sortStudents() {
        qsort(students, numStudents, sizeof(Student), compareStudents);
    
        printf("学生按照平均分排序完毕。\n");
    }
    
    1. 查询学生基本信息和成绩。
    void searchStudent() {
        int studentId;
    
        printf("请输入要查询学生的学号: ");
        scanf("%d", &studentId);
    
        for (int i = 0; i < numStudents; i++) {
            if (students[i].studentId == studentId) {
                printf("学号: %d\n", students[i].studentId);
                printf("姓名: %s\n", students[i].name);
                printf("成绩: ");
                for (int j = 0; j < MAX_COURSES; j++) {
                    printf("%d ", students[i].grades[j]);
                }
                printf("\n");
                return;
            }
        }
    
        printf("未找到该学生。\n");
    }
    
    1. 添加和删除学生记录。
    void insertStudent() {
        if (numStudents >= MAX_STUDENTS) {
            printf("学生数量已达到上限,无法继续插入。\n");
            return;
        }
    
        Student newStudent;
    
        printf("请输入要插入学生的学号: ");
        scanf("%d", &newStudent.studentId);
    
        printf("请输入要插入学生的姓名: ");
        scanf("%s", newStudent.name);
    
        printf("请输入要插入学生每门课程的成绩: ");
        for (int i = 0; i < MAX_COURSES; i++) {
            scanf("%d", &newStudent.grades[i]);
        }
    
        int position;
        printf("请指定插入的位置(从0~%d): ", numStudents);
        scanf("%d", &position);
    
        if (position < 0 || position > numStudents) {
            printf("无效的插入位置。\n");
            return;
        }
    
        // 从指定位置开始,后移数组元素
        for (int i = numStudents; i > position; i--) {
            students[i] = students[i-1];
        }
    
        students[position] = newStudent;
        numStudents++;
    }
    
    void deleteStudent() {
        int studentId;
    
        printf("请输入要删除学生的学号: ");
        scanf("%d", &studentId);
    
        int position = -1;
        for (int i = 0; i < numStudents; i++) {
            if (students[i].studentId == studentId) {
                position = i;
                break;
            }
        }
    
        if (position == -1) {
            printf("未找到该学生。\n");
            return;
        }
    
        // 从指定位置开始,前移数组元素
        for (int i = position; i < numStudents-1; i++) {
            students[i] = students[i+1];
        }
    
        numStudents--;
        printf("已删除该学生。\n");
    }
    
    1. 保存数据到磁盘文件。
    // 将学生记录保存到文件
    void saveStudentsToFile() {
        FILE* file = fopen("student.txt", "w");
    
        if (file == NULL) {
            printf("无法打开文件。\n");
            return;
        }
    
        for (int i = 0; i < numStudents; i++) {
            fprintf(file, "%d %s", students[i].studentId, students[i].name);
    
            for (int j = 0; j < MAX_COURSES; j++) {
                fprintf(file, " %d", students[i].grades[j]);
            }
    
            fprintf(file, "\n");
        }
    
        fclose(file);
    }
    
    1. 实现菜单驱动程序。
    void printMenu() {
        printf("==============\n");
        printf("学生成绩管理系统\n");
        printf("==============\n");
        printf("1. 录入学生基本信息和成绩记录\n");
        printf("2. 计算每个学生的总分和平均分,并按照平均分排序\n");
        printf("3. 查询学生基本信息和成绩\n");
        printf("4. 添加和删除学生记录\n");
        printf("5. 保存数据到磁盘文件\n");
        printf("0. 退出系统\n");
        printf("请选择操作: ");
    }
    
    void menu() {
        int choice;
    
        do {
            printMenu();
            scanf("%d", &choice);
    
            switch (choice) {
                case 1:
                    addStudent();
                    break;
                case 2:
                    sortStudents();
                    break;
                case 3:
                    searchStudent();
                    break;
                case 4:
                    printf("请输入操作: (1. 插入 2. 删除): ");
    
                    int operation;
                    scanf("%d", &operation);
    
                    switch (operation) {
                        case 1:
                            insertStudent();
                            break;
                        case 2:
                            deleteStudent();
                            break;
                        default:
                            printf("无效的操作。\n");
                            break;
                    }
    
                    break;
                case 5:
                    saveStudentsToFile();
                    break;
                case 0:
                    printf("感谢使用学生成绩管理系统,再见!\n");
                    break;
                default:
                    printf("无效的选择。\n");
                    break;
            }
    
            printf("\n");
        } while (choice != 0);
    }
    
    1. 调用菜单程序。

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


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