班级同学信息管理系统C语言

该程序是一个使用C语言编写的简单学生信息管理系统,包括添加、删除、显示、排序和查询学生信息的功能。系统定义了一个学生结构体,存储姓名、学号、宿舍、QQ、电话和CET-4成绩等数据,并提供了按电话和姓名排序,以及按姓名或电话查找信息的选项。此外,还包含了对CET-4成绩的统计分析,如平均分、方差和及格率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

#define MAX_STUDENT_NUM 100 // 最大学生数

struct Student { // 定义学生结构体,包含不同信息变量
    char name[20];
    char id[20];
    char dormitory[20];
    char qq[20];
    char phone[20];
    int cet_score;
};

struct Student students[MAX_STUDENT_NUM]; // 存储所有学生信息

int student_num = 0; // 已添加学生数

void add_student() { // 添加一个学生信息
    if (student_num >= MAX_STUDENT_NUM) { // 学生已满
        printf("学生已满,无法添加!\n");
        return;
    }

    struct Student new_student; // 新建一个学生

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

    printf("请输入学生学号:");
    scanf("%s", new_student.id);

    printf("请输入学生宿舍号:");
    scanf("%s", new_student.dormitory);

    printf("请输入学生QQ号码:");
    scanf("%s", new_student.qq);

    printf("请输入学生电话号码:");
    scanf("%s", new_student.phone);

    printf("请输入学生CET-4成绩:");
    scanf("%d", &new_student.cet_score);

    students[student_num] = new_student; // 将新学生添加到学生列表
    student_num++;

    printf("学生 %s 添加成功!\n", new_student.name);
}

void delete_student() { // 删除一个学生信息
    printf("请输入要删除的学生姓名:");
    char name[20];
    scanf("%s", name);

    int index = -1; // 学生在数组中的下标

    for (int i = 0; i < student_num; i++) {
        if (strcmp(students[i].name, name) == 0) { // 找到学生
            index = i;
            break;
        }
    }

    if (index == -1) { // 学生不存在
        printf("学生 %s 不存在!\n", name);
        return;
    }

    struct Student deleted_student = students[index]; // 要删除的学生信息

    for (int i = index; i < student_num - 1; i++) {
        students[i] = students[i + 1]; // 将后面的学生前移
    }

    student_num--;

    printf("学生 %s 的信息已被删除!\n", deleted_student.name);
}

void show_all_students() { // 显示所有学生信息
    printf("姓名\t学号\t宿舍\tQQ号码\t\t电话号码\tCET-4成绩\n");

    for (int i = 0; i < student_num; i++) {
        printf("%s\t%s\t%s\t%s\t%s\t%d\n", students[i].name, students[i].id, students[i].dormitory,
               students[i].qq, students[i].phone, students[i].cet_score);
    }
}

void sort_by_phone() { // 根据电话号码排序学生信息
    for (int i = 0; i < student_num - 1; i++) {
        for (int j = 0; j < student_num - i - 1; j++) {
            if (strcmp(students[j].phone, students[j + 1].phone) > 0) { // 比较电话号码大小
                struct Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }

    printf("按电话号码排序后的学生信息:\n");
    show_all_students();
}

void sort_by_name() { // 根据姓名排序学生信息
    for (int i = 0; i < student_num - 1; i++) {
        for (int j = 0; j < student_num - i - 1; 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;
            }
        }
    }

    printf("按姓名排序后的学生信息:\n");
    show_all_students();
}

void search_phone_by_name() { // 按姓名查询电话号码
    printf("请输入要查询的学生姓名:");
    char name[20];
    scanf("%s", name);

    int index = -1; // 学生在数组中的下标

    for (int i = 0; i < student_num; i++) {
        if (strcmp(students[i].name, name) == 0) { // 找到学生
            index = i;
            break;
        }
    }

    if (index == -1) { // 学生不存在
        printf("学生 %s 不存在!\n", name);
        return;
    }

    printf("学生 %s 的电话号码为:%s\n", students[index].name, students[index].phone);
}

void search_name_by_phone() { // 按电话号码查询姓名
    printf("请输入要查询的学生电话号码:");
    char phone[20];
    scanf("%s", phone);

    int index = -1; // 学生在数组中的下标

    for (int i = 0; i < student_num; i++) {
        if (strcmp(students[i].phone, phone) == 0) { // 找到学生
            index = i;
            break;
        }
    }

    if (index == -1) { // 学生不存在
        printf("学生电话号码 %s 不存在!\n", phone);
        return;
    }

    printf("电话号码为 %s 的学生是:%s\n", students[index].phone, students[index].name);
}

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

    int index = -1; // 学生在数组中的下标

    for (int i = 0; i < student_num; i++) {
        if (strcmp(students[i].id, id) == 0) { // 找到学生
            index = i;
            break;
        }
    }

    if (index == -1) { // 学生不存在
        printf("学号 %s 的学生不存在!\n", id);
        return;
    }

    printf("请选择要修改的信息类型:\n");
    printf("1. 宿舍\n");
    printf("2. QQ号码\n");
    printf("请输入选项:");

    int choice;
    scanf("%d", &choice);

    // 根据用户选择的信息类型,读入新的信息并进行修改
    switch (choice) {
        case 1:
            printf("请输入新的宿舍:");
            scanf("%s", students[index].dormitory);
            printf("宿舍修改成功!\n");
            break;
        case 2:
            printf("请输入新的QQ号码:");
            scanf("%s", students[index].qq);
            printf("QQ号码修改成功!\n");
            break;
        default:
            printf("无效的选项!\n");
            break;
    }
}

void cet_analysis() { // CET 成绩分析
    int total_score = 0; // 总成绩
    double average_score; // 平均成绩
    double variance = 0; // 方差
    int pass_num = 0; // 及格人数
    double pass_rate; // 及格率

    for (int i = 0; i < student_num; i++) {
        total_score += students[i].cet_score;

        if (students[i].cet_score >= 425) {
            pass_num++;
        }
    }

    average_score = (double)total_score / student_num;
    pass_rate = (double)pass_num / student_num;

    for (int i = 0; i < student_num; i++) {
        variance += pow((students[i].cet_score - average_score), 2);
    }
    variance = variance / student_num;

    printf("全班CET-4成绩分析如下:\n");
    printf("平均成绩:%.2lf\n", average_score);
    printf("方差:%.2lf\n", variance);
    printf("及格率:%.2lf%%\n", pass_rate * 100);
}

int main() {
    // 显示菜单,提供各项功能
    while (1) {
        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. CET成绩分析\n");
        printf("0. 退出程序\n");
        printf("请选择要执行的操作:");

        int choice;
        scanf("%d", &choice);

        switch (choice) {
            case 0:
                printf("程序已退出!\n");
                return 0;
            case 1:
                add_student();
                break;
            case 2:
                delete_student();
                break;
            case 3:
                show_all_students();
                break;
            case 4:
                sort_by_phone();
                break;
            case 5:
                sort_by_name();
                break;
            case 6:
                search_phone_by_name();
                break;
            case 7:
                search_name_by_phone();
                break;
            case 8:
                modify_student();
                break;
            case 9:
                cet_analysis();
                break;
            default:
                printf("无效的选项!\n");
                break;
        }

        printf("\n");
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值