需要定制魏:QTWZPW,获取更多源码等
目录
学生社团管理系统
设若学生会下设若干社团,如文学社、书画社、摄影社等,学生可以申请加入多个社团,一个社团有人数的限制。
课题要求:
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;
}
感谢大家的阅读,如果大家发现代码中存在的细节方面的问题或者发现运行出错,欢迎大家留言,我们共同学习进步!!!