学生社团管理系统(c语言)

需要定制魏:QTWZPW,获取更多源码等

目录

运行效果:

1.结构体设计

2.创建社团

3.修改社团信息

4.解散社团

5.添加学生

6.修改学生信息

7.删除学生

8.学生入社

9.学生退社

10.浏览学生所参加的社团

11.浏览社团中的成员

12.主菜单

完整代码:


学生社团管理系统

设若学生会下设若干社团,如文学社、书画社、摄影社等,学生可以申请加入多个社团,一个社团有人数的限制。
课题要求:
1)能够创建社团,社团的信息至少有:编号、名称、宗旨等:能够修改社团信息:能够解散社团;
2)能够添加、修改、删除学生信息,学生信息至少包括:学号、姓名、专业等
3)能够实现学生入社、退社等操作:
4)能够实现浏览学生所参加的社团,社团中的成员。

运行效果:

1.结构体设计

// 学生结构体
typedef struct {
    int studentNo;
    char name[MAX_NAME_LENGTH];
    char major[MAX_NAME_LENGTH];
    int clubCount;
    int clubs[MAX_CLUB_COUNT];
} Student;

// 社团结构体
typedef struct {
    int clubNo;
    char name[MAX_NAME_LENGTH];
    char purpose[MAX_NAME_LENGTH];
    int memberCount;
    int limit;
    int members[MAX_STUDENT_COUNT];
} Club;

2.创建社团

void createClub() {
    Club newClub;
    
    printf("请输入社团编号: ");
    scanf("%d", &newClub.clubNo);
    
    printf("请输入社团名称: ");
    scanf("%s", newClub.name);
    
    printf("请输入社团宗旨: ");
    scanf("%s", newClub.purpose);
    
    printf("请输入社团人数限制: ");
    scanf("%d", &newClub.limit);
    
    newClub.memberCount = 0;
    
    clubs[clubCount] = newClub;
    clubCount++;
    
    printf("社团创建成功!\n");
}

3.修改社团信息

void modifyClub() {
    int clubNo, choice;
    
    printf("请输入要修改的社团编号: ");
    scanf("%d", &clubNo);
    
    for (int i = 0; i < clubCount; i++) {
        if (clubs[i].clubNo == clubNo) {
            printf("请选择要修改的信息:\n");
            printf("1. 社团名称\n");
            printf("2. 社团宗旨\n");
            printf("3. 社团人数限制\n");
            printf("4. 返回主菜单\n");
            
            scanf("%d", &choice);
            
            switch (choice) {
                case 1:
                    printf("请输入新的社团名称: ");
                    scanf("%s", clubs[i].name);
                    break;
                case 2:
                    printf("请输入新的社团宗旨: ");
                    scanf("%s", clubs[i].purpose);
                    break;
                case 3:
                    printf("请输入新的社团人数限制: ");
                    scanf("%d", &clubs[i].limit);
                    break;
                case 4:
                    return;
                default:
                    printf("无效的选择!\n");
                    break;
            }
            
            printf("社团信息修改成功!\n");
            return;
        }
    }
    
    printf("找不到指定的社团!\n");
}

4.解散社团

void dissolveClub() {
    int clubNo;
    
    printf("请输入要解散的社团编号: ");
    scanf("%d", &clubNo);
    
    for (int i = 0; i < clubCount; i++) {
        if (clubs[i].clubNo == clubNo) {
            for (int j = 0; j < studentCount; j++) {
                for (int k = 0; k < students[j].clubCount; k++) {
                    if (students[j].clubs[k] == clubNo) {
                        // 学生退社
                        for (int m = k; m < students[j].clubCount - 1; m++) {
                            students[j].clubs[m] = students[j].clubs[m + 1];
                        }
                        
                        students[j].clubCount--;
                    }
                }
            }
            
            // 删除社团
            for (int n = i; n < clubCount - 1; n++) {
                clubs[n] = clubs[n + 1];
            }
            
            clubCount--;
            
            printf("社团解散成功!\n");
            return;
        }
    }
    
    printf("找不到指定的社团!\n");
}

5.添加学生

void addStudent() {
    Student newStudent;
    
    printf("请输入学号: ");
    scanf("%d", &newStudent.studentNo);
    
    printf("请输入姓名: ");
    scanf("%s", newStudent.name);
    
    printf("请输入专业: ");
    scanf("%s", newStudent.major);
    
    newStudent.clubCount = 0;
    
    students[studentCount] = newStudent;
    studentCount++;
    
    printf("学生添加成功!\n");
}

6.修改学生信息

void modifyStudent() {
    int studentNo, choice;
    
    printf("请输入要修改的学生学号: ");
    scanf("%d", &studentNo);
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            printf("请选择要修改的信息:\n");
            printf("1. 姓名\n");
            printf("2. 专业\n");
            printf("3. 返回主菜单\n");
            
            scanf("%d", &choice);
            
            switch (choice) {
                case 1:
                    printf("请输入新的姓名: ");
                    scanf("%s", students[i].name);
                    break;
                case 2:
                    printf("请输入新的专业: ");
                    scanf("%s", students[i].major);
                    break;
                case 3:
                    return;
                default:
                    printf("无效的选择!\n");
                    break;
            }
            
            printf("学生信息修改成功!\n");
            return;
        }
    }
    
    printf("找不到指定的学生!\n");
}

7.删除学生

void deleteStudent() {
    int studentNo;
    
    printf("请输入要删除的学生学号: ");
    scanf("%d", &studentNo);
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            // 学生退社
            for (int j = 0; j < students[i].clubCount; j++) {
                for (int k = 0; k < clubCount; k++) {
                    if (clubs[k].clubNo == students[i].clubs[j]) {
                        for (int m = 0; m < clubs[k].memberCount; m++) {
                            if (clubs[k].members[m] == studentNo) {
                                // 删除社团成员
                                for (int n = m; n < clubs[k].memberCount - 1; n++) {
                                    clubs[k].members[n] = clubs[k].members[n + 1];
                                }
                                
                                clubs[k].memberCount--;
                                break;
                            }
                        }
                    }
                }
            }
            
            // 删除学生
            for (int n = i; n < studentCount - 1; n++) {
                students[n] = students[n + 1];
            }
            
            studentCount--;
            
            printf("学生删除成功!\n");
            return;
        }
    }
    
    printf("找不到指定的学生!\n");
}

8.学生入社

void joinClub() {
    int studentNo, clubNo;
    
    printf("请输入要加入社团的学生学号: ");
    scanf("%d", &studentNo);
    
    printf("请输入要加入的社团编号: ");
    scanf("%d", &clubNo);
    
    Student *student = NULL;
    Club *club = NULL;
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            student = &students[i];
            break;
        }
    }
    
    for (int j = 0; j < clubCount; j++) {
        if (clubs[j].clubNo == clubNo) {
            club = &clubs[j];
            break;
        }
    }
    
    if (student == NULL || club == NULL) {
        printf("找不到指定的学生或社团!\n");
        return;
    }
    
    if (club->memberCount >= club->limit) {
        printf("该社团已达到人数限制,无法加入!\n");
        return;
    }
    
    for (int k = 0; k < student->clubCount; k++) {
        if (student->clubs[k] == clubNo) {
            printf("该学生已经加入了该社团!\n");
            return;
        }
    }
    
    student->clubs[student->clubCount] = clubNo;
    student->clubCount++;
    club->members[club->memberCount] = studentNo;
    club->memberCount++;
    
    printf("学生入社成功!\n");
}

9.学生退社

void quitClub() {
    int studentNo, clubNo;
    
    printf("请输入要退出社团的学生学号: ");
    scanf("%d", &studentNo);
    
    printf("请输入要退出的社团编号: ");
    scanf("%d", &clubNo);
    
    Student *student = NULL;
    Club *club = NULL;
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            student = &students[i];
            break;
        }
    }
    
    for (int j = 0; j < clubCount; j++) {
        if (clubs[j].clubNo == clubNo) {
            club = &clubs[j];
            break;
        }
    }
    
    if (student == NULL || club == NULL) {
        printf("找不到指定的学生或社团!\n");
        return;
    }
    
    int found = 0;
    
    for (int k = 0; k < student->clubCount; k++) {
        if (student->clubs[k] == clubNo) {
            // 删除学生在社团中的记录
            for (int m = k; m < student->clubCount - 1; m++) {
                student->clubs[m] = student->clubs[m + 1];
            }
            
            student->clubCount--;
            
            // 删除社团中的成员记录
            for (int n = 0; n < club->memberCount; n++) {
                if (club->members[n] == studentNo) {
                    for (int p = n; p < club->memberCount - 1; p++) {
                        club->members[p] = club->members[p + 1];
                    }
                    
                    club->memberCount--;
                    break;
                }
            }
            
            found = 1;
            break;
        }
    }
    
    if (found) {
        printf("学生退社成功!\n");
    } else {
        printf("该学生未加入该社团!\n");
    }
}

10.浏览学生所参加的社团

void browseStudentClubs() {
    int studentNo;
    
    printf("请输入要浏览的学生学号: ");
    scanf("%d", &studentNo);
    
    Student *student = NULL;
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            student = &students[i];
            break;
        }
    }
    
    if (student == NULL) {
        printf("找不到指定的学生!\n");
        return;
    }
    
    printf("学生 %s 参加的社团有:\n", student->name);
    
    for (int j = 0; j < student->clubCount; j++) {
        int clubNo = student->clubs[j];
        
        for (int k = 0; k < clubCount; k++) {
            if (clubs[k].clubNo == clubNo) {
                printf("- 社团编号: %d, 社团名称: %s\n", clubs[k].clubNo, clubs[k].name);
                break;
            }
        }
    }
}

11.浏览社团中的成员

void browseClubMembers() {
    int clubNo;
    
    printf("请输入要浏览的社团编号: ");
    scanf("%d", &clubNo);
    
    Club *club = NULL;
    
    for (int i = 0; i < clubCount; i++) {
        if (clubs[i].clubNo == clubNo) {
            club = &clubs[i];
            break;
        }
    }
    
    if (club == NULL) {
        printf("找不到指定的社团!\n");
        return;
    }
    
    printf("社团 %s 的成员有:\n", club->name);
    
    for (int j = 0; j < club->memberCount; j++) {
        int studentNo = club->members[j];
        
        for (int k = 0; k < studentCount; k++) {
            if (students[k].studentNo == studentNo) {
                printf("- 学生学号: %d, 姓名: %s\n", students[k].studentNo, students[k].name);
                break;
            }
        }
    }
}

12.主菜单

void showMainMenu() {
    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. 浏览学生所参加的社团\n");
    printf("10. 浏览社团中的成员\n");
    printf("11. 退出系统\n");
}

int main() {
    int choice;
    
    do {
        showMainMenu();
        
        printf("请输入您的选择: ");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1:
                createClub();
                break;
            case 2:
                modifyClub();
                break;
            case 3:
                dissolveClub();
                break;
            case 4:
                addStudent();
                break;
            case 5:
                modifyStudent();
                break;
            case 6:
                deleteStudent();
                break;
            case 7:
                joinClub();
                break;
            case 8:
                quitClub();
                break;
            case 9:
                browseStudentClubs();
                break;
            case 10:
                browseClubMembers();
                break;
            case 11:
                printf("感谢使用学生社团管理系统,再见!\n");
                break;
            default:
                printf("无效的选择!\n");
                break;
        }
        
        printf("\n");
    } while (choice != 11);
    
    return 0;
}

完整代码:
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENT_COUNT 100
#define MAX_CLUB_COUNT 10
#define MAX_NAME_LENGTH 50

// 学生结构体
typedef struct {
    int studentNo;
    char name[MAX_NAME_LENGTH];
    char major[MAX_NAME_LENGTH];
    int clubCount;
    int clubs[MAX_CLUB_COUNT];
} Student;

// 社团结构体
typedef struct {
    int clubNo;
    char name[MAX_NAME_LENGTH];
    char purpose[MAX_NAME_LENGTH];
    int memberCount;
    int limit;
    int members[MAX_STUDENT_COUNT];
} Club;

// 全局变量
Student students[MAX_STUDENT_COUNT];
Club clubs[MAX_CLUB_COUNT];
int studentCount = 0;
int clubCount = 0;

// 创建社团
void createClub() {
    Club newClub;
    
    printf("请输入社团编号: ");
    scanf("%d", &newClub.clubNo);
    
    printf("请输入社团名称: ");
    scanf("%s", newClub.name);
    
    printf("请输入社团宗旨: ");
    scanf("%s", newClub.purpose);
    
    printf("请输入社团人数限制: ");
    scanf("%d", &newClub.limit);
    
    newClub.memberCount = 0;
    
    clubs[clubCount] = newClub;
    clubCount++;
    
    printf("社团创建成功!\n");
}

// 修改社团信息
void modifyClub() {
    int clubNo, choice;
    
    printf("请输入要修改的社团编号: ");
    scanf("%d", &clubNo);
    
    for (int i = 0; i < clubCount; i++) {
        if (clubs[i].clubNo == clubNo) {
            printf("请选择要修改的信息:\n");
            printf("1. 社团名称\n");
            printf("2. 社团宗旨\n");
            printf("3. 社团人数限制\n");
            printf("4. 返回主菜单\n");
            
            scanf("%d", &choice);
            
            switch (choice) {
                case 1:
                    printf("请输入新的社团名称: ");
                    scanf("%s", clubs[i].name);
                    break;
                case 2:
                    printf("请输入新的社团宗旨: ");
                    scanf("%s", clubs[i].purpose);
                    break;
                case 3:
                    printf("请输入新的社团人数限制: ");
                    scanf("%d", &clubs[i].limit);
                    break;
                case 4:
                    return;
                default:
                    printf("无效的选择!\n");
                    break;
            }
            
            printf("社团信息修改成功!\n");
            return;
        }
    }
    
    printf("找不到指定的社团!\n");
}

// 解散社团
void dissolveClub() {
    int clubNo;
    
    printf("请输入要解散的社团编号: ");
    scanf("%d", &clubNo);
    
    for (int i = 0; i < clubCount; i++) {
        if (clubs[i].clubNo == clubNo) {
            for (int j = 0; j < studentCount; j++) {
                for (int k = 0; k < students[j].clubCount; k++) {
                    if (students[j].clubs[k] == clubNo) {
                        // 学生退社
                        for (int m = k; m < students[j].clubCount - 1; m++) {
                            students[j].clubs[m] = students[j].clubs[m + 1];
                        }
                        
                        students[j].clubCount--;
                    }
                }
            }
            
            // 删除社团
            for (int n = i; n < clubCount - 1; n++) {
                clubs[n] = clubs[n + 1];
            }
            
            clubCount--;
            
            printf("社团解散成功!\n");
            return;
        }
    }
    
    printf("找不到指定的社团!\n");
}

// 添加学生
void addStudent() {
    Student newStudent;
    
    printf("请输入学号: ");
    scanf("%d", &newStudent.studentNo);
    
    printf("请输入姓名: ");
    scanf("%s", newStudent.name);
    
    printf("请输入专业: ");
    scanf("%s", newStudent.major);
    
    newStudent.clubCount = 0;
    
    students[studentCount] = newStudent;
    studentCount++;
    
    printf("学生添加成功!\n");
}

// 修改学生信息
void modifyStudent() {
    int studentNo, choice;
    
    printf("请输入要修改的学生学号: ");
    scanf("%d", &studentNo);
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            printf("请选择要修改的信息:\n");
            printf("1. 姓名\n");
            printf("2. 专业\n");
            printf("3. 返回主菜单\n");
            
            scanf("%d", &choice);
            
            switch (choice) {
                case 1:
                    printf("请输入新的姓名: ");
                    scanf("%s", students[i].name);
                    break;
                case 2:
                    printf("请输入新的专业: ");
                    scanf("%s", students[i].major);
                    break;
                case 3:
                    return;
                default:
                    printf("无效的选择!\n");
                    break;
            }
            
            printf("学生信息修改成功!\n");
            return;
        }
    }
    
    printf("找不到指定的学生!\n");
}

// 删除学生
void deleteStudent() {
    int studentNo;
    
    printf("请输入要删除的学生学号: ");
    scanf("%d", &studentNo);
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            // 学生退社
            for (int j = 0; j < students[i].clubCount; j++) {
                for (int k = 0; k < clubCount; k++) {
                    if (clubs[k].clubNo == students[i].clubs[j]) {
                        for (int m = 0; m < clubs[k].memberCount; m++) {
                            if (clubs[k].members[m] == studentNo) {
                                // 删除社团成员
                                for (int n = m; n < clubs[k].memberCount - 1; n++) {
                                    clubs[k].members[n] = clubs[k].members[n + 1];
                                }
                                
                                clubs[k].memberCount--;
                                break;
                            }
                        }
                    }
                }
            }
            
            // 删除学生
            for (int n = i; n < studentCount - 1; n++) {
                students[n] = students[n + 1];
            }
            
            studentCount--;
            
            printf("学生删除成功!\n");
            return;
        }
    }
    
    printf("找不到指定的学生!\n");
}

// 学生入社
void joinClub() {
    int studentNo, clubNo;
    
    printf("请输入要加入社团的学生学号: ");
    scanf("%d", &studentNo);
    
    printf("请输入要加入的社团编号: ");
    scanf("%d", &clubNo);
    
    Student *student = NULL;
    Club *club = NULL;
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            student = &students[i];
            break;
        }
    }
    
    for (int j = 0; j < clubCount; j++) {
        if (clubs[j].clubNo == clubNo) {
            club = &clubs[j];
            break;
        }
    }
    
    if (student == NULL || club == NULL) {
        printf("找不到指定的学生或社团!\n");
        return;
    }
    
    if (club->memberCount >= club->limit) {
        printf("该社团已达到人数限制,无法加入!\n");
        return;
    }
    
    for (int k = 0; k < student->clubCount; k++) {
        if (student->clubs[k] == clubNo) {
            printf("该学生已经加入了该社团!\n");
            return;
        }
    }
    
    student->clubs[student->clubCount] = clubNo;
    student->clubCount++;
    club->members[club->memberCount] = studentNo;
    club->memberCount++;
    
    printf("学生入社成功!\n");
}

// 学生退社
void quitClub() {
    int studentNo, clubNo;
    
    printf("请输入要退出社团的学生学号: ");
    scanf("%d", &studentNo);
    
    printf("请输入要退出的社团编号: ");
    scanf("%d", &clubNo);
    
    Student *student = NULL;
    Club *club = NULL;
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            student = &students[i];
            break;
        }
    }
    
    for (int j = 0; j < clubCount; j++) {
        if (clubs[j].clubNo == clubNo) {
            club = &clubs[j];
            break;
        }
    }
    
    if (student == NULL || club == NULL) {
        printf("找不到指定的学生或社团!\n");
        return;
    }
    
    int found = 0;
    
    for (int k = 0; k < student->clubCount; k++) {
        if (student->clubs[k] == clubNo) {
            // 删除学生在社团中的记录
            for (int m = k; m < student->clubCount - 1; m++) {
                student->clubs[m] = student->clubs[m + 1];
            }
            
            student->clubCount--;
            
            // 删除社团中的成员记录
            for (int n = 0; n < club->memberCount; n++) {
                if (club->members[n] == studentNo) {
                    for (int p = n; p < club->memberCount - 1; p++) {
                        club->members[p] = club->members[p + 1];
                    }
                    
                    club->memberCount--;
                    break;
                }
            }
            
            found = 1;
            break;
        }
    }
    
    if (found) {
        printf("学生退社成功!\n");
    } else {
        printf("该学生未加入该社团!\n");
    }
}

// 浏览学生所参加的社团
void browseStudentClubs() {
    int studentNo;
    
    printf("请输入要浏览的学生学号: ");
    scanf("%d", &studentNo);
    
    Student *student = NULL;
    
    for (int i = 0; i < studentCount; i++) {
        if (students[i].studentNo == studentNo) {
            student = &students[i];
            break;
        }
    }
    
    if (student == NULL) {
        printf("找不到指定的学生!\n");
        return;
    }
    
    printf("学生 %s 参加的社团有:\n", student->name);
    
    for (int j = 0; j < student->clubCount; j++) {
        int clubNo = student->clubs[j];
        
        for (int k = 0; k < clubCount; k++) {
            if (clubs[k].clubNo == clubNo) {
                printf("- 社团编号: %d, 社团名称: %s\n", clubs[k].clubNo, clubs[k].name);
                break;
            }
        }
    }
}

// 浏览社团中的成员
void browseClubMembers() {
    int clubNo;
    
    printf("请输入要浏览的社团编号: ");
    scanf("%d", &clubNo);
    
    Club *club = NULL;
    
    for (int i = 0; i < clubCount; i++) {
        if (clubs[i].clubNo == clubNo) {
            club = &clubs[i];
            break;
        }
    }
    
    if (club == NULL) {
        printf("找不到指定的社团!\n");
        return;
    }
    
    printf("社团 %s 的成员有:\n", club->name);
    
    for (int j = 0; j < club->memberCount; j++) {
        int studentNo = club->members[j];
        
        for (int k = 0; k < studentCount; k++) {
            if (students[k].studentNo == studentNo) {
                printf("- 学生学号: %d, 姓名: %s\n", students[k].studentNo, students[k].name);
                break;
            }
        }
    }
}

// 主菜单
void showMainMenu() {
    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. 浏览学生所参加的社团\n");
    printf("10. 浏览社团中的成员\n");
    printf("11. 退出系统\n");
}

int main() {
    int choice;
    
    do {
        showMainMenu();
        
        printf("请输入您的选择: ");
        scanf("%d", &choice);
        
        switch (choice) {
            case 1:
                createClub();
                break;
            case 2:
                modifyClub();
                break;
            case 3:
                dissolveClub();
                break;
            case 4:
                addStudent();
                break;
            case 5:
                modifyStudent();
                break;
            case 6:
                deleteStudent();
                break;
            case 7:
                joinClub();
                break;
            case 8:
                quitClub();
                break;
            case 9:
                browseStudentClubs();
                break;
            case 10:
                browseClubMembers();
                break;
            case 11:
                printf("感谢使用学生社团管理系统,再见!\n");
                break;
            default:
                printf("无效的选择!\n");
                break;
        }
        
        printf("\n");
    } while (choice != 11);
    
    return 0;
}

 感谢大家的阅读,如果大家发现代码中存在的细节方面的问题或者发现运行出错,欢迎大家留言,我们共同学习进步!!!

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值