<p>社团活动是我们每个大学生生活、学习和成长中不可或缺的重要组成部分。每个社团都有很多成员,每个成员又都有各自的特征和职责分工。本实验要求同学们根据自己所在社团实际情况,应用所学的线性表知识设计一个基本的社团管理系统。</p><p>具体要求:</p><p>1) 该系统该包含成员数据结构的详细定义;</p><p>2) 单链式储存方式存储成员信息;</p><p>3) 系统至少包含新成员入社、老成员退社、成员查询,以及两个社团并社和友好的人机交互等功能模块;</p>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef char CElemType;
typedef int ElemType;
typedef struct Link
{
CElemType studentNumber[22];//学号
CElemType name[20]; //姓名
CElemType phoneNumber[15]; //手机号
CElemType strongPoint[20]; //特征
CElemType role[10]; //角色
ElemType gender; //性别
ElemType age; //年龄
struct Link *next;
}LinkList,*PLinkList;
typedef struct Link1
{
CElemType shetuan[20]; //社团名字
ElemType len; //社团人数
ElemType maxLen; //社团最大人数
struct Link *next;
}MLinkList,*MPLinkList;
void xiugai(char *mima) //修改密码的子函数
{
char a[10];
printf("请输入新密码:\n");
scanf("%s",a);
strcpy(mima,a);
printf("修改成功\n");
}
void menu() //函数主菜单
{
printf("................ 主菜单 ................\n");
printf("................ 1.新成员入社 ................\n");
printf("................ 2.老成员退社 ................\n");
printf("................ 3.成员查询 ................\n");
printf("................ 4.两个社团并社................\n");
printf("................ 5.输入社团信息................\n");
printf("................ 6.修改密码 ................\n");
printf("................ 0.退出 ................\n");
}
void shetuanmenu() //输入社团属性菜单
{
printf("........输入格式........\n");
printf("社长 人数 最大人数\n");
}
void shetuan(MPLinkList &L) //输入社团属性
{
scanf("%s %d %d",L->shetuan,&L->len,&L->maxLen);
}
void rushemenu() //输入社团成员菜单
{
printf("..............................输入格式.............................\n");
printf("学号 姓名 手机号 特征 角色 性别(0表示女1表示男) 年龄\n");
}
void rushe(MPLinkList &L)//新成员入社
{
PLinkList q;
q=(PLinkList)malloc(sizeof(LinkList));
q->next=NULL;
scanf("%s %s %s %s %s %d %d",
q->studentNumber,q->name,q->phoneNumber,q->strongPoint,q->role,&q->gender,&q->age);
q->next=L->next;
L->next=q;
L->len++;
}
void tuishemenu() //退社菜单
{
printf("输入学号\n");
}
void tuishe(MPLinkList &L)//老成员退社
{
char a[20];
scanf("%s",a);
PLinkList q,p;
q=p=L->next;
while(p->next!=NULL)
{
if(!strcmp(p->next->studentNumber,a))
{
break;
}
}
if(q==p)
{
L->next=NULL;
}
else if(q->next==p||q->next!=NULL)
{
q->next->next=p->next;
}
free(p);
L->len--;
}
void displaymenu() //显示成员菜单
{
printf("学号 姓名 手机号 特征 角色 性别(0表示女1表示男) 年龄\n");
}
void memberdisplay(MPLinkList &L)//成员展示
{
PLinkList q;
q=L->next;
while(q!=NULL)
{
printf("%s %s %s %s %s %d %d\n",
q->studentNumber,q->name,q->phoneNumber,q->strongPoint,q->role,q->gender,q->age);
q=q->next;
}
}
void combinemenu()//合并社团菜单
{
printf("..............................合并.............................\n.");
}
void init(MPLinkList &A,MPLinkList &B)
{
B->len=A->len=0;
B->maxLen=A->maxLen=0;
strcpy(B->shetuan," ");
strcpy(A->shetuan," ");
A->next=NULL;
B->next=NULL;
}
void combine(MPLinkList &A,MPLinkList &B)//两个社团合并
{
A->len=A->len+B->len;
A->maxLen=A->maxLen+B->maxLen;
printf("输入社名\n");
scanf("%s",A->shetuan);
PLinkList q;
q=A->next;
while(q!=NULL&&q->next!=NULL)
q=q->next;
if(A->next==NULL)
A->next=B->next;
else
q->next=B->next;
free(B);
}
int main() //主函数
{
char mima[10]="123456"; //管理系统初始密码
MPLinkList A,B;
B=A=(MPLinkList)malloc(sizeof(MLinkList));
init(A,B);
char mi[10];
int t=0;
printf("请输入密码:(输错3次自动退出。)\n");
scanf("%s",mi);
while(strcmp(mi,mima))
{
printf("密码错误\n");
t++;
if(t==3)
exit(OK);
scanf("%s",mi);
}
menu();
int n;
printf("输入数字\n");
while(scanf("%d",&n)!=EOF&&n>=0&&n<=6)
{
switch(n)
{
case 1:
{
rushemenu(); //新成员加入
rushe(A);
break;
}
case 2:
{
tuishemenu(); //老成员退出
tuishe(A);
break;
}
case 3:
{
displaymenu(); //显示成员
memberdisplay(A);
break;
}
case 4:
{
combinemenu(); //合并
combine(A,B);
break;
}
case 5:
{
shetuanmenu(); //社团属性
shetuan(A);
break;
}
case 6:
{
xiugai(mima); //修改密码
printf("请输入密码:(输错3次自动退出。)\n");
scanf("%s",mi);
while(strcmp(mi,mima))
{
printf("密码错误\n");
t++;
if(t==3)
exit(OK);
scanf("%s",mi);
}
menu();
break;
}
case 0:
{
exit(OK);//退出
}
}
}
return 0;
}