系统还包括两个角色-管理员和学生。管理员登录有以下功能: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
不知道你这个问题是否已经解决, 如果还没有解决的话:#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;