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

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

资源非常丰富,包含了学生信息管理系统需求分析文档,软件详细设计文档,安装部署手册及源程序。开发工具:软件架构:web应用程序,采用struts2加hibernate加spring框架。开发平台:J2EE 功能实现: 前台主页描述:顶部和底部均为各版块的公共部分,提供了一些导航链接,很方便用户操作。 左侧栏为用户信息及其班级信息展板,左侧底部展板用户显示一些班级公告信息, 右侧包括班级相册,可以自动播放,也可手动播放,还有一些班级的最新留言。 主页面只显示了最新的三条,用户可以通过头部导航条中的留言或“查看更多”导航 进入全部留言区,这里将为用户按时间先后顺序陈列出了所有的班级留言。您也可以 点击主页留言处的“我要留言”而进行留言。 班级模块描述:通过班级,用户可以查询本班的其他同学的信息,并且可以对信息的显示顺序进行排序, 排序可以按学号,姓名,年龄条件,再选择排序方式,点击查询即可。 留言模块描述:留言主要是方便大家讨论用的,用户可以发表留言信息,但如果内容不文明不科学,管理员可以删除。 这里也需说明一下,这里的留言没有设置留言评论的,感觉对于班级信息系统来说,也没这个必要,用户 有什么话要说,尽管留言即可,不过如果硬要针对某个人进行留言的话,用户也可以在留言中说明一下 即行,也没什么不方便的。 公告模块描述:特别说明一下,原本想将公告和活动分开处理的,但目前由于时间问题,暂且放在一起了,也就是 公告与活动是同一内容,然而这样做感觉也还可以,说得过去,这里的公告是一些班级的公告信息, 主要是由后台管理员(可以说是班长或班主任等)来发布的,只有管理员才能够直接操作公告信息, 前台用户这里只能够查看,其实这样没什么不妥,反而便于管理,也更符合常情。 其他模块描述:收藏和注销只是两个小功能,收藏是为了方便用户将本网页保存起来,这样以后就不必输入网址了。 而注销是必不可少的,用户登录后,当想退出时,就可以安全注销了,如果你现在还不想退出的话, 就别点击它哦,否而得重新登录的喔,仅作提示。 后台主页包括顶部公共模块,底部公告模块,左侧导航栏,中间显示区。其中顶部公共模块中的“主菜单”能够便捷的打开左侧的导航栏,“前台主页”是后台管理员查看前台主页信息,“后台主页”打开后台相关介绍信息的页面(登录成功后的主页面),“发布公告”方便管理员打开班级公告页面,便于发布新的公告,“数据维护”包括数据库备份与恢复,“系统设置”主要涉及到一些本系统的设置信息,由于时间及精力有限,这两块先预留着,以后再好好完善扩展。那个蓝色小按钮是控制中间页面是否隐藏左侧导航栏用的,而那两个黑色小按钮用于移动显示框的。 左侧导航栏主要包括了管理员信息的增删改查,学生信息的增删改查,班级公告信息的增删改查,班级留言信息的查询与删除。管理员单击各导航链接进入到相应页面,进行操作即可。 前后台页面美观,操作方便,尤其配有平台搭建介绍文档,很容易搭建系统平台。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值