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

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

这是一个简化版的学生活动管理平台的完整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);
}

由于题目比较复杂,实现一个完整的系统需要编写大量的代码,涉及多个模块和功能,无法在一篇答案中完成。以下是一个简单的参考实现,仅供参考。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ACTIVITY_NUM 100
#define MAX_STUDENT_NUM 100

// 定义活动结构体
typedef struct {
    char name[20]; // 活动名称
    char time[20]; // 活动时间
    char place[20]; // 活动地点
    int num; // 参与人数
    char deadline[20]; // 报名截止时间
} Activity;

// 定义学生结构体
typedef struct {
    char name[20]; // 学生姓名
    char id[20]; // 学生学号
    char major[20]; // 学生专业
    char activity[20]; // 参加的活动名称
} Student;

// 定义管理员账户
const char admin_username[] = "admin";
const char admin_password[] = "123456";

// 定义活动数组和学生数组
Activity activities[MAX_ACTIVITY_NUM];
int activity_num = 0;
Student students[MAX_STUDENT_NUM];
int student_num = 0;

// 定义函数
void print_menu(void);
int login_as_admin(void);
void add_activity(void);
void view_activity(void);
void search_activity(void);
void delete_activity(void);
void random_select_student(void);
void modify_activity(void);
void save_data(void);
void load_data(void);
void print_student_info(Student student);
void print_activity_info(Activity activity);
void view_student_activity(void);
void add_student_activity(void);
void view_student_record(void);

// 主函数
int main(void) {
    int choice, logged_in = 0;
    do {
        print_menu();
        scanf("%d", &choice);
        switch (choice) {
            case 1: // 管理员登录
                logged_in = login_as_admin();
                if (logged_in) {
                    printf("登录成功!\n");
                } else {
                    printf("用户名或密码错误!\n");
                }
                break;
            case 2: // 学生登录
                // TODO: 实现学生登录功能
                break;
            case 3: // 退出系统
                printf("谢谢使用!\n");
                break;
            default:
                printf("无效选项,请重新选择!\n");
        }
    } while (choice != 3);
    return 0;
}

// 打印菜单
void print_menu(void) {
    printf("==============欢迎使用活动管理系统==============\n");
    printf("1.管理员登录\n");
    printf("2.学生登录\n");
    printf("3.退出系统\n");
    printf("请输入您的选择:");
}

// 管理员登录
int login_as_admin(void) {
    char username[20], password[20];
    printf("请输入用户名:");
    scanf("%s", username);
    printf("请输入密码:");
    scanf("%s", password);
    return (strcmp(username, admin_username) == 0 && strcmp(password, admin_password) == 0);
}

// 添加活动
void add_activity(void) {
    Activity activity;
    printf("请输入活动名称:");
    scanf("%s", activity.name);
    printf


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/388206
  • 你也可以参考下这篇文章:C语言--------学生管理系统(源代码)
  • 除此之外, 这篇博客: C语言--结构体---把学生信息放在一个结构体变量中,然后输出信息中的 代码区 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<stdio.h>
    main()
    {
     struct Student  //声明结构体类型
     {
      int num;
      char name[100];
      char sex;
      char addr[100];
     }a={118,"jenney",'w',"shandong"};//定义结构体变量并且初始化
     printf("No.%d \n name:%s\n sex:%c\n addr:%s\n",a.num,a.name,a.sex,a.addr);
     
    }
    

    注意:以0开头代表八进制,所以不用随便乱加
    C99标准允许对某一成员初始化,(是对结构体变量初始化,而不是类型初始化)
    srtuct Student b={.name=“jenney”}; //成员名之前有成员运算符
    1:.name:结构体变量b中的成员B.name.
    其余未被指定初始化的数值型成员被初始化为0,字符型成员被初始化为’\0’,指针型成员被初始化为NULL;


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^