社团管理系统C语言实现

<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;
}

  • 10
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值