Bootstrap

C语言实现-学生成绩管理系统

学生成绩管理系统

一、具体实现思路

1. 定义学生结构体: 使用“struct student”定义了一个学生的数据结构,包括姓名、ID和成绩。
2. 登录验证: 使用“login”函数进行简单的用户名和密码验证。在示例中,用户名是“admin”,密码是“123456”。这部分可以根据实际需求进行修改和加强。
3. 主函数: 主函数“main”包含一个循环,根据用户选择调用不同的功能函数。用户可以选择添加学生、删除学生、修改学生信息、查找学生或退出系统。
4. 添加学生信息: “add_student”函数用于向学生数组中添加新的学生信息。用户需要输入姓名、ID和成绩。程序会检查是否已达到最大学生数量(50个)。
5. 删除学生信息: “delete_student”函数用于根据学生ID删除学生信息。用户输入要删除的学生ID,程序会在数组中查找并删除对应学生信息。
6. 修改学生信息: “update_student”函数用于根据学生ID修改学生姓名和成绩。用户输入要修改的学生ID,程序会在数组中查找并更新对应学生信息。
7. 查找学生信息: “search_student”函数包含一个子菜单,用户可以选择根据姓名或ID查找学生信息。程序会在数组中查找匹配的学生信息并显示。
8. 退出系统: 用户选择退出时,程序结束运行。

二、具体的程序实现:

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

// 定义结构体存储学生信息
struct student {
    char name[50];
    int id;
    float score;
};

// 定义函数声明
void add_student(struct student students[], int *num_students);
void delete_student(struct student students[], int *num_students);
void update_student(struct student students[], int num_students);
void search_student(struct student students[], int num_students);
int login();

int main() {
    struct student students[50];  // 存储最多50个学生信息
    int num_students = 0;  // 当前学生数量

    // 登录验证
    if (!login()) {
        printf("登录失败!\n");
        return 1;
    }

    int choice;
    do {
        // 显示菜单并读取用户输入
        printf("\n请选择操作:\n");
        printf("1. 添加学生\n");
        printf("2. 删除学生\n");
        printf("3. 修改学生信息\n");
        printf("4. 查找学生\n");
        printf("5. 退出\n");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                add_student(students, &num_students);  // 调用添加学生函数
                break;

            case 2:
                delete_student(students, &num_students);  // 调用删除学生函数
                break;

            case 3:
                update_student(students, num_students);  // 调用修改学生信息函数
                break;

            case 4:
                search_student(students, num_students);  // 调用查找学生函数
                break;

            case 5:
                printf("谢谢使用!\n");
                break;

            default:
                printf("无效输入,请重新输入。\n");
        }
    } while (choice != 5);

    return 0;
}

// 添加学生信息
void add_student(struct student students[], int *num_students) {
    if (*num_students == 50) {  // 学生数量已达上限
        printf("学生数量已满,无法继续添加。\n");
        return;
    }

    struct student new_student;
    printf("请输入学生姓名:\n");
    scanf("%s", new_student.name);
    printf("请输入学生ID:\n");
    scanf("%d", &new_student.id);
    printf("请输入学生成绩:\n");
    scanf("%f", &new_student.score);

    students[*num_students] = new_student;  // 将新学生信息存储到数组中
    (*num_students)++;  // 学生数量加1

    printf("添加成功!\n");
}

// 删除学生信息
void delete_student(struct student students[], int *num_students) {
    if (*num_students == 0) {  // 没有学生信息可供删除
        printf("当前没有学生信息可供删除。\n");
        return;
    }

    int id_to_delete;
    printf("请输入要删除的学生ID:\n");
    scanf("%d", &id_to_delete);

    int i;
    for (i = 0; i < *num_students; i++) {
        if (students[i].id == id_to_delete) {
            break;
        }
    }

    if (i == *num_students) {  // 没有找到对应ID的学生信息
        printf("未找到ID为%d的学生信息。\n", id_to_delete);
        return;
    }

    // 将最后一个学生信息覆盖要删除的学生信息,实现删除操作
    students[i] = students[(*num_students)-1];
    (*num_students)--;

    printf("删除成功!\n");
}

// 修改学生信息
void update_student(struct student students[], int num_students) {
    if (num_students == 0) {  // 没有学生信息可供修改
        printf("当前没有学生信息可供修改。\n");
        return;
    }

    int id_to_update;
    printf("请输入要修改的学生ID:\n");
    scanf("%d", &id_to_update);

    int i;
    for (i = 0; i < num_students; i++) {
        if (students[i].id == id_to_update) {
            // 找到对应ID的学生信息,读取新的学生姓名、学生成绩并更新
            printf("请输入学生姓名:\n");
            scanf("%s", students[i].name);
            printf("请输入学生成绩:\n");
            scanf("%f", &students[i].score);

            printf("修改成功!\n");
            return;
        }
    }

    // 没有找到对应ID的学生信息
    printf("未找到ID为%d的学生信息。\n", id_to_update);
}

// 查找学生信息
void search_student(struct student students[], int num_students) {
    if (num_students == 0) {  // 没有学生信息可供查找
        printf("当前没有学生信息可供查找。\n");
        return;
    }

    int choice;
    do {
        // 显示子菜单并读取用户输入
        printf("\n请选择查找方式:\n");
        printf("1. 根据姓名查找\n");
        printf("2. 根据ID查找\n");
        printf("3. 返回上一级菜单\n");
        scanf("%d", &choice);

        switch (choice) {
            case 1: {
                char name_to_search[50];
                printf("请输入要查找的学生姓名:\n");
                scanf("%s", name_to_search);

                int found = 0;
                for (int i = 0; i < num_students; i++) {
                    if (strcmp(students[i].name, name_to_search) == 0) {
                        printf("姓名:%s  ID:%d  成绩:%.2f\n", students[i].name, students[i].id, students[i].score);
                        found = 1;
                    }
                }

                if (!found) {
                    printf("未找到姓名为%s的学生信息。\n", name_to_search);
                }
                break;
            }

            case 2: {
                int id_to_search;
                printf("请输入要查找的学生ID:\n");
                scanf("%d", &id_to_search);

                int found = 0;
                for (int i = 0; i < num_students; i++) {
                    if (students[i].id == id_to_search) {
                        printf("姓名:%s  ID:%d  成绩:%.2f\n", students[i].name, students[i].id, students[i].score);
                        found = 1;
                        break;
                    }
                }

                if (!found) {
                    printf("未找到ID为%d的学生信息。\n", id_to_search);
                }
                break;
            }

            case 3:
                break;

            default:
                printf("无效输入,请重新输入。\n");
        }
    } while (choice != 3);
}


// 登录验证(简化版,仅用于演示)
int login() {
    char username[50];
    char password[50];

    printf("请输入用户名:\n");
    scanf("%s", username);
    printf("请输入密码:\n");
    scanf("%s", password);

    // 简单判断用户名密码是否正确
    if (strcmp(username, "admin") == 0 && strcmp(password, "123456") == 0) {
        return 1;
    } else {
        return 0;
    }
}

以上代码实现了一个简单的学生成绩管理系统,包含了增删改查四个功能,并且实现了登录验证。需要注意的是,此代码仅为示例代码,可能存在一些安全问题,实际使用时需要进行更加严格的安全措施。

;