编辑代码

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

// 定义学生结构体
struct Student {
    int id;
    char name[50];
    int score;
    struct Student *next;
};

// 定义老师结构体
struct Teacher {
    int id;
    char name[50];
    struct Teacher *next;
};

// 定义教室结构体
struct Classroom {
    int id;
    int capacity;
    struct Classroom *next;
};

// 全局变量,指向学生信息链表的头部
struct Student *studentHead = NULL;

// 全局变量,指向老师信息链表的头部
struct Teacher *teacherHead = NULL;

// 全局变量,指向教室信息链表的头部
struct Classroom *classroomHead = NULL;

// 函数声明
void insertStudent();
void insertTeacher();
void insertClassroom();
void displayMainMenu();
void printStudents();
void printTeachers();
void printClassrooms();
void deleteStudent(int id);
void deleteTeacher(int id);
void deleteClassroom(int id);
void manageScores(int id, int score);

// 插入学生信息
void insertStudent() {
    int id, score;
    char name[50];
    printf("请输入学生学号: ");
    scanf("%d", &id);
    printf("请输入学生姓名: ");
    scanf("%s", name);
    printf("请输入学生成绩: ");
    scanf("%d", &score);

    struct Student *newStudent = (struct Student*)malloc(sizeof(struct Student));
    newStudent->id = id;
    strcpy(newStudent->name, name);
    newStudent->score = score;
    newStudent->next = studentHead;
    studentHead = newStudent;
}

// 插入老师信息
void insertTeacher() {
    int id;
    char name[50];
    printf("请输入老师工号: ");
    scanf("%d", &id);
    printf("请输入老师姓名: ");
    scanf("%s", name);

    struct Teacher *newTeacher = (struct Teacher*)malloc(sizeof(struct Teacher));
    newTeacher->id = id;
    strcpy(newTeacher->name, name);
    newTeacher->next = teacherHead;
    teacherHead = newTeacher;
}

// 插入教室信息
void insertClassroom() {
    int id, capacity;
    printf("请输入教室编号: ");
    scanf("%d", &id);
    printf("请输入教室容量: ");
    scanf("%d", &capacity);

    struct Classroom *newClassroom = (struct Classroom*)malloc(sizeof(struct Classroom));
    newClassroom->id = id;
    newClassroom->capacity = capacity;
    newClassroom->next = classroomHead;
    classroomHead = newClassroom;
}

// 删除学生信息
void deleteStudent(int id) {
    struct Student *current = studentHead;
    struct Student *prev = NULL;

    while (current != NULL) {
        if (current->id == id) {
            if (prev == NULL) {
                studentHead = current->next;
            } else {
                prev->next = current->next;
            }
            free(current);
            return;
        }
        prev = current;
        current = current->next;
    }
    printf("未找到学号为 %d 的学生\n", id);
}

// 删除老师信息
void deleteTeacher(int id) {
    struct Teacher *current = teacherHead;
    struct Teacher *prev = NULL;

    while (current != NULL) {
        if (current->id == id) {
            if (prev == NULL) {
                teacherHead = current->next;
            } else {
                prev->next = current->next;
            }
            free(current);
            return;
        }
        prev = current;
        current = current->next;
    }
    printf("未找到工号为 %d 的老师\n", id);
}

// 删除教室信息
void deleteClassroom(int id) {
    struct Classroom *current = classroomHead;
    struct Classroom *prev = NULL;

    while (current != NULL) {
        if (current->id == id) {
            if (prev == NULL) {
                classroomHead = current->next;
            } else {
                prev->next = current->next;
            }
            free(current);
            return;
        }
        prev = current;
        current = current->next;
    }
    printf("未找到编号为 %d 的教室\n", id);
}
// 成绩管理
void manageScores(int id, int score) {
    struct Student *current = studentHead;
    while (current != NULL) {
        if (current->id == id) {
            current->score = score;
            return;
        }
        current = current->next;
    }
    printf("未找到学号为 %d 的学生\n", id);
}

// 显示主菜单
void displayMainMenu() {
    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("8. 删除老师\n");
    printf("9. 删除教室\n");
    printf("10. 成绩管理\n");
    printf("11. 退出\n");
}

// 打印所有学生信息
void printStudents() {
    struct Student *current = studentHead;
    printf("学生信息:\n");
    while (current != NULL) {
        printf("学号: %d, 姓名: %s, 成绩: %d\n", current->id, current->name, current->score);
        current = current->next;
    }
}

// 打印所有老师信息
void printTeachers() {
    struct Teacher *current = teacherHead;
    printf("老师信息:\n");
    while (current != NULL) {
        printf("工号: %d, 姓名: %s\n", current->id, current->name);
        current = current->next;
    }
}

// 打印所有教室信息
void printClassrooms() {
    struct Classroom *current = classroomHead;
    printf("教室信息:\n");
    while (current != NULL) {
        printf("编号: %d, 容量: %d\n", current->id, current->capacity);
        current = current->next;
    }
}

int main() {
    int choice;
    do {
        displayMainMenu();
        printf("请选择操作: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                insertStudent();
                break;
            case 2:
                insertTeacher();
                break;
            case 3:
                insertClassroom();
                break;
            case 4:
                printf("\n学生信息:\n");
                printStudents();
                break;
            case 5:
                printf("\n老师信息:\n");
                printTeachers();
                break;
            case 6:
                printf("\n教室信息:\n");
                printClassrooms();
                break;
            case 7: {
                int id;
                printf("请输入要删除的学生学号: ");
                scanf("%d", &id);
                deleteStudent(id);
                break;
            }
            case 8: {
                int id;
                printf("请输入要删除的老师工号: ");
                scanf("%d", &id);
                deleteTeacher(id);
                break;
            }
            case 9: {
                int id;
                printf("请输入要删除的教室编号: ");
                scanf("%d", &id);
                deleteClassroom(id);
                break;
            }
            case 10: {
                int id, score;
                printf("请输入学生学号: ");
                scanf("%d", &id);
                printf("请输入学生成绩: ");
                scanf("%d", &score);
                manageScores(id, score);
                break;
            }
            case 11:
                printf("退出程序\n");
                break;
            default:
                printf("无效的选项\n");
        }
    } while (choice != 12);

    return 0;
}