m0_74854410 2023-03-12 15:05 采纳率: 100%
浏览 49
已结题

用C语言写一个学生活动管理平台完整代码

系统还包括两个角色-管理员和学生。管理员登录有以下功能:1,活动信息录入功能-输入。2,增加活动信息。3,活动信息浏览-输出。4,按照活动名称查询。5,活动信息删除。6.随机选择学生参加。6,活动信息内容修改。7数据保存和读取。学生登录:1,浏览活动信息。2,报名参加活动内容。3查询参加活动记录

  • 写回答

3条回答 默认 最新

  • 紫薇东风折 2023-03-12 16:28
    关注

    这是一个简化版的学生活动管理平台的完整C语言代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    #define MAX_NAME_LEN 30
    #define MAX_DESC_LEN 100
    #define MAX_ACTIVITY_NUM 100
    #define MAX_PARTICIPANT_NUM 50
    
    // 活动结构体
    typedef struct activity {
        char name[MAX_NAME_LEN];
        char description[MAX_DESC_LEN];
        int participant_num;
        char participant_name[MAX_PARTICIPANT_NUM][MAX_NAME_LEN];
    } Activity;
    
    // 学生结构体
    typedef struct student {
        char name[MAX_NAME_LEN];
        char activity_name[MAX_NAME_LEN];
    } Student;
    
    // 全局变量
    Activity activities[MAX_ACTIVITY_NUM];
    int activity_count = 0;
    Student students[MAX_PARTICIPANT_NUM];
    int student_count = 0;
    
    // 函数声明
    void print_menu();
    void login_as_admin();
    void login_as_student();
    void add_activity();
    void view_activity();
    void search_activity();
    void delete_activity();
    void modify_activity();
    void save_data();
    void load_data();
    void random_select();
    
    int main() {
        load_data(); // 加载数据
        print_menu(); // 打印菜单
        return 0;
    }
    
    // 打印菜单
    void print_menu() {
        int choice;
        printf("\n================================\n");
        printf("请选择您的登录角色:\n");
        printf("1. 管理员\n");
        printf("2. 学生\n");
        printf("3. 退出\n");
        printf("================================\n");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                login_as_admin();
                break;
            case 2:
                login_as_student();
                break;
            case 3:
                save_data(); // 退出前保存数据
                exit(0);
            default:
                printf("输入错误,请重新输入!\n");
                print_menu();
        }
    }
    
    // 管理员登录
    void login_as_admin() {
        int choice;
        printf("\n请输入管理员密码:");
        char password[20];
        scanf("%s", password);
        if (strcmp(password, "admin") != 0) {
            printf("密码错误,请重新登录!\n");
            print_menu();
        }
        printf("================================\n");
        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("================================\n");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                add_activity();
                break;
            case 2:
                add_activity();
                break;
            case 3:
                view_activity();
                break;
            case 4:
                search_activity();
                break;
            case 5:
                delete_activity();
                break;
            case 6:
                random_select();
                break;
            case 7:
                modify_activity();
                break;
            case 8:
                print_menu();
                break;
            default:
                printf("输入错误,请重新输入!\n");
                login_as_admin();
        }
    }
    
    // 学生登录
    void login_as_student() {
        char name[MAX_NAME_LEN];
        printf("\n请输入您的姓名:");
        scanf("%s", name);
        printf("================================\n");
        printf("欢迎学生 %s!请选择您的操作:\n", name);
        printf("1. 浏览活动信息\n");
        printf("2. 报名参加活动\n");
        printf("3. 查询参加活动记录\n");
        printf("4. 返回菜单\n");
        printf("================================\n");
        int choice;
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                view_activity();
                break;
            case 2:
                char activity_name[MAX_NAME_LEN];
                printf("\n请输入您要参加的活动名称:");
                scanf("%s", activity_name);
                for (int i = 0; i < activity_count; i++) {
                    if (strcmp(activities[i].name, activity_name) == 0) {
                        // 添加参与人员
                        strcpy(activities[i].participant_name[activities[i].participant_num], name);
                        activities[i].participant_num++;
                        // 记录学生参加的活动
                        strcpy(students[student_count].name, name);
                        strcpy(students[student_count].activity_name, activity_name);
                        student_count++;
                        printf("报名成功!\n");
                        return;
                    }
                }
                printf("未找到该活动,请重新输入!\n");
                login_as_student();
                break;
            case 3:
                printf("\n您参加的活动记录如下:\n");
                for (int i = 0; i < student_count; i++) {
                    if (strcmp(students[i].name, name) == 0) {
                        printf("活动名称:%s\n", students[i].activity_name);
                    }
                }
                break;
            case 4:
                print_menu();
                break;
            default:
                printf("输入错误,请重新输入!\n");
                login_as_student();
        }
    }
    
    // 添加活动信息
    void add_activity() {
        printf("\n请输入活动名称:");
        char name[MAX_NAME_LEN];
        scanf("%s", name);
        printf("请输入活动描述:");
        char description[MAX_DESC_LEN];
        scanf("%s", description);
        strcpy(activities[activity_count].name, name);
        strcpy(activities[activity_count].description, description);
        activities[activity_count].participant_num = 0;
        activity_count++;
        printf("添加成功!\n");
        login_as_admin();
    }
    
    // 浏览活动信息
    void view_activity() {
        printf("\n所有活动信息如下:\n");
        for (int i = 0; i < activity_count; i++) {
            printf("活动名称:%s\n", activities[i].name);
            printf("活动描述:%s\n", activities[i].description);
            printf("参加人员:\n");
            for (int j = 0; j < activities[i].participant_num; j++) {
                printf("%s\n", activities[i].participant_name[j]);
            }
            printf("\n");
        }
        if (activity_count == 0) {
            printf("没有活动信息!\n");
        }
        if (strcmp(activities[activity_count - 1].name, "") == 0) {
            activity_count--; // 删除未成功添加的活动
        }
        if (strcmp(students[student_count - 1].name, "") == 0) {
            student_count--; // 删除未成功添加的学生
        }
        if (strcmp(activities[activity_count - 1].name, "") != 0) {
            login_as_admin(); // 继续管理员操作
        } else {
            print_menu(); // 回到主菜单
        }
    }
    
    // 按照活动名称查询活动信息
    void search_activity() {
        printf("\n请输入要查询的活动名称:");
        char name[MAX_NAME_LEN];
        scanf("%s", name);
        for (int i = 0; i < activity_count; i++) {
            if (strcmp(activities[i].name, name) == 0) {
                printf("活动名称:%s\n", activities[i].name);
                printf("活动描述:%s\n", activities[i].description);
                printf("参加人员:\n");
                for (int j = 0; j < activities[i].participant_num; j++) {
                    printf("%s\n", activities[i].participant_name[j]);
                }
                printf("\n");
                login_as_admin();
                return;
            }
        }
        printf("未找到该活动,请重新输入!\n");
        search_activity();
    }
    
    // 删除活动信息
    void delete_activity() {
        printf("\n请输入要删除的活动名称:");
        char name[MAX_NAME_LEN];
        scanf("%s", name);
        for (int i = 0; i < activity_count; i++) {
            if (strcmp(activities[i].name, name) == 0) {
                for (int j = i; j < activity_count - 1; j++) {
                    activities[j] = activities[j + 1];
                }
                activity_count--;
                printf("删除成功!\n");
                login_as_admin();
                return;
            }
        }
        printf("未找到该活动,请重新输入!\n");
        delete_activity();
    }
    
    // 修改活动信息
    void modify_activity() {
        printf("\n请输入要修改的活动名称:");
        char name[MAX_NAME_LEN];
        scanf("%s", name);
        for (int i = 0; i < activity_count; i++) {
            if (strcmp(activities[i].name, name) == 0) {
                printf("请输入新的活动名称:");
                scanf("%s", activities[i].name);
                printf("请输入新的活动描述:");
                scanf("%s", activities[i].description);
                printf("修改成功!\n");
                login_as_admin();
                return;
            }
        }
        printf("未找到该活动,请重新输入!\n");
        modify_activity();
    }
    
    // 随机选择学生参加活动
    void random_select() {
        printf("\n请输入要选择人数:");
        int num;
        scanf("%d", &num);
        if (activity_count == 0) {
            printf("没有活动信息!\n");
            login_as_admin();
        } else if (students[0].name[0] == '\0') {
            printf("没有学生信息!\n");
            login_as_admin();
        } else {
            srand(time(NULL)); // 设置随机数种子
            int selected_students[num];
            int selected_count = 0;
            while (selected_count < num) {
                int index = rand() % student_count;
                if (selected_count == 0 || !strstr(students[selected_students[selected_count - 1]].activity_name, students[index].activity_name)) {
                    printf("第%d个被选中的学生是:%s\n", selected_count + 1, students[index].name);
                    selected_students[selected_count] = index;
                    selected_count++;
                }
            }
            printf("共选择了%d个学生!\n", num);
            login_as_admin();
        }
    }
    
    // 保存数据到文件中
    void save_data() {
        FILE *fp;
        fp = fopen("data.txt", "w");
        fprintf(fp, "%d\n", activity_count);
        for (int i = 0; i < activity_count; i++) {
            fprintf(fp, "%s %s %d", activities[i].name, activities[i].description, activities[i].participant_num);
            for (int j = 0; j < activities[i].participant_num; j++) {
                fprintf(fp, " %s", activities[i].participant_name[j]);
            }
            fprintf(fp, "\n");
        }
        fprintf(fp, "%d\n", student_count);
        for (int i = 0; i < student_count; i++) {
            fprintf(fp, "%s %s\n", students[i].name, students[i].activity_name);
        }
        fclose(fp);
    }
    
    // 从文件中加载数据
    void load_data() {
        FILE *fp;
        fp = fopen("data.txt", "r");
        if (fp == NULL) {
            return;
        }
        fscanf(fp, "%d", &activity_count);
        for (int i = 0; i < activity_count; i++) {
            fscanf(fp, "%s %s %d", activities[i].name, activities[i].description, &activities[i].participant_num);
            for (int j = 0; j < activities[i].participant_num; j++) {
                fscanf(fp, "%s", activities[i].participant_name[j]);
            }
        }
        fscanf(fp, "%d", &student_count);
        for (int i = 0; i < student_count; i++) {
            fscanf(fp, "%s %s", students[i].name, students[i].activity_name);
        }
        fclose(fp);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能