系统还包括两个角色-管理员和学生。管理员登录有以下功能: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); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 数学建模,尽量用matlab回答,论文格式
- ¥15 昨天挂载了一下u盘,然后拔了
- ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
- ¥20 易康econgnition精度验证
- ¥15 msix packaging tool打包问题
- ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
- ¥15 python的qt5界面
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能