/*极限俱乐部会员信息系统*/
/*说明:《极限俱乐部会员信息系统》基本信息包括单位、姓名、性别、年龄、身高、体重六个基本信息,可以根据实际情况有所增减*/
#include "stdio.h" /*控制台I/O的头文件*/
#include "string.h" /*字符串函数的头文件*/
#include "stdlib.h" /*exit()函数的头文件*/
#define Max 100 /*定义最多可以输入的会员数*/
int Interface(char (*x)[20],int n); /*操作界面*/
int Add(int start,struct staff *p); /*增加会员数*/
void Display(struct staff *p,int start,int end); /*显示已存在的数据*/
void SortName(struct staff *p,int n); /*按姓名排序*/
void SortHeight(struct staff *p,int n); /*按身高排序(由高到低)*/
void SortWeight(struct staff *p,int n); /*按体重排序(由重到轻)*/
int Search (struct staff *p,char *t,int n); /*信息检索*/
int Find(struct staff *p,int n); /*信息查找*/
void Modify(struct staff *p,int n); /*信息修改*/
int Delete(struct staff *p,int n); /*信息删除*/
void Swap(struct staff *p1,struct staff *p2); /*会员信息互换*/
void SaveFile(struct staff *p,int n); /*文件存盘*/
char password[8]="7654321"; /*设置系统管理员密码*/
struct staff
{
char unit[60];
char name[20];
char sex[20];
int age;
int height;
int weight;
};
/**********************************************************\
主函数
\**********************************************************/
void main()
{
struct staff sta[Max]; /*定义结构数组*/
FILE *fp; /*结构数组,即可输入的最大会员数,最大值为声明中预定义的Max*/
int s; /*设置变量,以用于用户输入信息的接收,并将其作为转向函数的参数*/
int n=0; /*整型变量*/
char choice;
char pass[8];
int flag=0;
int w=3;
char menu[][20]={"添加","显示","按姓名排序","按身高排序",
"按体重排序","检索","修改","删除","存盘","返回"};
char openfile[10];
/**********************系统密码管理********************/
do{
printf("请输入管理员密码:\n");
scanf("%s",pass);
if(!strcmp(pass,password))
{
printf("PASS\n\n\n");
flag = 1;
break;
}
else
{
printf("密码错误,请重新输入:\n");
w--;
}
}
while(w>0);

if(!flag)
{
printf("你已连续三次输入错误,请确认后再使用本系统,谢谢!\n");
exit(0);
}
system("cls"); /*用system调用dos命令,清屏*/

/**********************打开已有文件********************/
printf ("\n 打开已有的文件\"staff_3.txt\"?(y/n)");
scanf("%s",openfile);
if((strcmp(openfile,"y")==NULL))
{
if((fp=fopen("d:\\staff_3.txt","r"))==NULL)
{
printf("不能打开文件!\n");
exit(0);
}
while (feof(fp)==0)
{
fscanf(fp,"%s%s%s%d%d%d%d\n",sta[n].unit,sta[n].name,sta[n].sex,&sta[n].age,&sta[n].height,&sta[n].weight);
n++;
}
fclose(fp);
}
else
printf("请创建一个新文件\"staff_3.txt\".\n");
system("cls"); /*用system调用dos命令,清屏*/
/**********************欢迎界面********************/
printf("~~~~~~~~~~~~~\t\t\t\t\t~~~~~~~~~~~~~\n");
printf("~~~~~~~~~~~~~\t\t\t\t\t~~~~~~~~~~~~~\n");
printf("\t\t欢迎进入会员医疗保健信息系统\n");
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\t\t\t\t\t%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
printf("\n\n\n\n");
printf("单位:北京极限俱乐部\n");
printf("地址:北京市西城区西四\n");
printf("会员热线:010-66886688");
printf("\n\n\n\n");
printf("==============\t\t==============\n");
printf("本系统由“天地人和软件有限公司”开发\n");
printf("地址:北京市海淀区学院路\n");
printf("作者:天天\n");
printf("==============\t\t==============\n");
printf("\n\n");
printf("\t\t请任意输入一个值并回车进入系统\n");
scanf("%s",&choice);
if(choice=='n'||choice=='N')
exit(1);
system("cls"); /*用system调用dos命令,清屏*/
do
{
s=Interface(menu,10); /*调用Interface()函数*/
switch (s) /*转向语句,选择以实现不同的功能*/
{
case 0,n=Add(n,sta);break;
case 1,Display(sta,0,n-1);break;
case 2,SortName(sta,n);break;
case 3,SortHeight(sta,n);break;
case 4,SortWeight(sta,n);break;
case 5,Find(sta,n);break;
case 6,Modify(sta,n);break;
case 7,n=Delete(sta,n);break;
case 8,SaveFile(sta,n);
}
}
while(s>=0&&s<=8);
}
/**********************************************************\
操作界面
\**********************************************************/
int Interface(char (*x)[20],int n)
{
int i;
int j;
printf("\n×××××××极限俱乐部会员信息系统×××××××\n");
do
{
for (j=0;j<n;j++)
printf("%2d.%s\n",j+1,x[j]);
printf("请从上述选项中选择:\n");
scanf("%d",&i); /*输入选项*/
}
while (i<0||i>n+1);
return (i-1);
}
/**********************************************************\
增添信息
\**********************************************************/
int Add(int start,struct staff *p)
{
int n;
for (n=start;n<Max;n++)
{
printf("\n [%d]请输入会员信息(按e键退出):\n",n+1); /*若要退出输入,则按e*/
printf("单位:");
scanf("%s",(p+n)->unit);
if (strcmp((p+n)->unit,"e")==0)break;
printf("姓名:");
scanf("%s",(p+n)->name);
printf("性别(Male/Female):");
scanf("%s",(p+n)->sex);
printf("年龄:");
scanf("%d",&((p+n)->age));
printf("身高(cm):");
scanf("%d",&((p+n)->height));
printf("体重(kg):");
scanf("%d",&((p+n)->weight));
}
return n;
}
/**********************************************************\
显示输入或者修改后的内容
\**********************************************************/
void Display(struct staff *p,int start,int end)
{
int i;
printf("\n%10s%10s%10s","单位","姓名","性别"); /*显示标题*/
printf("%10s%10s%10s","年龄","身高","体重"); /*显示数据信息*/
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(i=start;i<=end;i++)
{
printf("%10s%10s%10s",(p+i)->unit,(p+i)->name,(p+i)->sex);
printf("%10d%10d%10d",(p+i)->age,(p+i)->height,(p+i)->weight);
printf("\n");
}
}
/**********************************************************\
选择法按姓名排序(依据字典顺序)
\**********************************************************/
void SortName(struct staff *p,int n)
{
int i,j,k;
for (i=0;i<n-1;i++)
{
k=i;
for (j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)>0)k=j;
if(i!=k)Swap(p+k,p+i); /*交换会员姓名*/
}
printf("\n 完成姓名排序!\n");
}
/**********************************************************\
选择法按身高排序
\**********************************************************/
void SortHeight(struct staff *p,int n)
{
int i,j,k;
for (i=0;i<n-1;i++)
{
k=i;
for (j=i+1;j<n;j++)
if((p+k)->height<(p+j)->height)k=j;
if(i!=k)Swap(p+k,p+i); /*交换会员身高*/
}
printf("\n 完成身高排序!\n");
}
/**********************************************************\
选择法按体重排序
\**********************************************************/
void SortWeight(struct staff *p,int n)
{
int i,j,k;
for (i=0;i<n-1;i++)
{
k=i;
for (j=i+1;j<n;j++)
if((p+k)->weight<(p+j)->weight)k=j;
if(i!=k)Swap(p+k,p+i); /*交换会员姓名体重*/
}
printf("\n 完成体重排序!\n");
}
/**********************************************************\
按姓名检索
\**********************************************************/
int Find(struct staff *p,int n)
{
int i;
char str[20];
printf("\n 请输入会员姓名:");
scanf("%s",str);
i=Search(p,str,n); /*调用Search()函数*/
if(i==-1)
printf("没有匹配信息,请重试 %s!\n",str);
else
Display(p,i,i);
getchar();
return i;
}
/**********************************************************\
修改信息
\**********************************************************/
void Modify(struct staff *p,int n)
{
int i;
i=Find(p,n); /*调用Find()函数*/
if(i>=0) /*若找到匹配信息,则修改*/
{
printf("请输入新信息:\n");
printf("单位:");
scanf("%s",(p+i)->unit);
printf("姓名:");
scanf("%s",(p+i)->name);
printf("性别:");
scanf("%s",(p+i)->sex);
printf("年龄:");
scanf("%d",&((p+i)->age));
printf("身高(cm):");
scanf("%d",&((p+i)->height));
printf("体重(kg):");
scanf("%d",&((p+i)->weight));
printf("\n修改已完成!\n");
}
}
/**********************************************************\
删除信息
\**********************************************************/
int Delete(struct staff *p,int n)
{
int i;
i=Find(p,n); /*调用Find()函数*/
if(i>=0) /*若找到匹配信息,则删除*/
{
p[i]=p[n-1];
n=n-1;
printf("\n信息已删除!\n");
}
return n;
}
void Swap(struct staff *p1,struct staff *p2) /*两个会员信息互换*/
{
struct staff temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
int Search(struct staff *p,char *t,int n)
{
int i;
for (i=0;i<n;i++)
if(!strcmp((p+i)->name,t)) /*按姓名检索*/
return i;
return -1;
}
/**********************************************************\
保存文件
\**********************************************************/
void SaveFile(struct staff *p,int n)
{
FILE *fp1;
char i;
if((fp1=fopen("d:\\staff_3_new.txt","w"))==NULL) /*以文本方式生成并“写打开”文件*/
{
printf("不能打开文件!\n"); /*检测打开文件中出现的错误,并决定是否写入文件*/
exit(1);
}
for (i=0;i<n;i++)
{
if((fprintf(fp1,"%10s %10s %10s %10d %10d %10d \n",(p+i)->unit,(p+i)->name,
(p+i)->sex,(p+i)->age,(p+i)->height,(p+i)->weight))==NULL)
printf("文件写入出错!\n"); /*写入文件,如果为空,则提示出错*/
}
printf("\n 文件已保存!\n");
fclose(fp1); /*关闭文件*/
}