如有漏洞,请批评指正!!!
#include
#include
#include
#define N 999
enum ID
{
profession=0,
amateur=1
};
typedef struct
{
char bh[100];//编号
char name[100];//姓名
enum ID sf;//身份
char dw[100];//段位
int s;//分数
}QISHOU;//定义结构体 改名为QISHOU
void print_menu()
{
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("**************************感谢使用!**************************\n");
}
//菜单
void EnterQishou(QISHOU *q,int *n)
{
int i;
FILE *fp=fopen("qs.txt","r");
if (!fp)
{
printf("无法打开,请重试!\n");
return;
}
rewind(fp);
fscanf(fp,"%d\n",n);
for(i=0;i<*n;i++)
{
fscanf(fp,"%s ",(*(q+i)).bh);
fscanf(fp,"%s ",(*(q+i)).name);
fscanf(fp,"%d ",&(*(q+i)).sf);
fscanf(fp,"%s ",(*(q+i)).dw);
fscanf(fp,"%d\n",&(*(q+i)).s);
}
fclose(fp);
printf("录入成功!");
}
//导入
void SaveQishou(QISHOU *q,int n)
{
FILE *fp=fopen("qs.txt","w");
if (!fp)
{
printf("无法打开,请重试!\n");
return;
}
int i;
rewind(fp);
fprintf(fp,"%d\n",n);
for (i=0;i=1000)
{
printf("超出存储最大量,请更改存储量!");
return;
}
else
{
printf("请输入增加人员个数:");
int num;
int i;
int l=0;
int gg=0;
int sf_x;
char w[100];
scanf("%d",&num);
(*(q+*n)).sf=(sf_x==0)?profession:amateur;
for(i=0;i=1)
{
getchar();
printf("是否修改该数据y/n?:");
scanf("%c",&ch);
if(ch!='Y'&&ch!='y'&&ch!='N'&&ch!='n')
{
printf("输入有误,请重新输入!");
getchar();
scanf("%c",&ch);
}
else
{
if(ch=='Y'||ch=='y')
{
printf("修改哪项信息(1-名字 2-身份(0-职业,1-业余)3-段位 4-等级分):");
int qq;
scanf("%d",&qq);
if(qq!=1&&qq!=2&&qq!=3&&qq!=4)
{
printf("输入有误,请重输!");
return 0;
}
printf("请输入修改信息:");
//修改等级分
if(qq==4)
{
int mm;
scanf("%d",&mm);
if(mm<0)
{
printf("分数不能为负!");
return;
}
(*(q+i)).s=mm;
}
else
{
//修改名字
if(qq==1)
{
char a[100];
getchar();
scanf("%s",&a);
int i;
for (i=0;a[i]!='\0';i++)
{
q[m-1].name[i]=a[i];
}
q[m-1].name[i]='\0';
}
//修改身份
if(qq==2)
{
int sf_x;
printf("(0-职业 1-业余):");
scanf("%d",&q[i].sf);
if(q[i].sf!=0&&q[i].sf!=1)
{
printf("输入错误!");
return;
}
}
//修改段位
if(qq==3)
{
char a[100];
getchar();
scanf("%s",&a);
int i;
int gg=0;
char hh[30][30]={"初段","二段","三段","四段","五段","六段","七段","八段","九段","10级","9级","8级","7级","6级","5级","4级","3级","2级","1级","9段","8段","7段","6段","5段","4段","3段","2段","1段"};
for(i=0;i<100;i++)
{
if(strcmp(a,hh[i])==0)
{
gg++;
}
}
if(gg==0)
{
printf("输入错误!");
return;
}
for (i=0;a[i]!='\0';i++)
{
q[m-1].dw[i]=a[i];
}
q[m-1].dw[i]='\0';
}
}
}
printf("修改成功!\n");
SaveQishou(q,*n);
printf("本地文件更新成功!\n");
printf("棋手信息如下:\n");
print(q,*n);
return q;
if(ch=='N'&&ch=='n')
{
printf("取消修改成功!");
return 0;
}
}
}
}
//修改
void DeleteQishou(QISHOU *q,int*n)
{
//EnterQishou(q,n);
int m=0;
int i;
char ch;
printf("输入棋手编号、姓名:");
char Pname[100];//姓名
char bih[100];//编号
scanf("%s",bih);
scanf("%s",Pname);
for(i=0;i<*n;i++)
{
if((strcmp(bih,(*(q+i)).bh))==0&&(strcmp(Pname,(*(q+i)).name))==0)
{
m=i+1;
break;
}
}
if(m==0)
{
printf("系统没有该人员信息!");
}
else
{
printf("棋手完整信息为:\n");
printf("%-8s\t",(*(q+i)).bh);
printf("%-8s\t",(*(q+i)).name);
printf("%-8s\t",((*(q+i)).sf==profession)?"职业":"业余");
printf("%-8s\t",(*(q+i)).dw);
printf("%-4d\n",(*(q+i)).s);
}
if (m>=1)
{
printf("是否删除该组数据y/n?:");
getchar();
scanf("%c",&ch);
if(ch!='Y'&&ch!='y'&&ch!='N'&&ch!='n')
{
printf("输入有误,请重新输入!");
getchar();
scanf("%c",&ch);
}
else
{
if(ch=='Y'||ch=='y')
{
for(i=m-1;i<*n-1;i++)
{
(*(q+i))=(*(q+i+1));
}
*n=*n-1;
printf("删除成功!\n");
SaveQishou(q,*n);
printf("数据保存文件成功!\n");
printf("完整棋手信息:\n");
print(q,*n);
}
if(ch=='N'&&ch=='n')
{
print(q,*n);
return ;
}
}
}
}
//删除
void StatisticsInformation(QISHOU *q,int num)
{
//EnterQishou(q,n);
printf("A. 统计某身份某段位棋手总数\n");
printf("B. 统计职业二段以上的棋手总数\n");
printf("C. 统计业余棋手总数\n");
printf("D. 退出当前功能\n");
printf("请选择(A-D):");
char ch;
int i;
int count=0;
getchar();
scanf("%c",&ch);
if(ch!='A'&&ch!='a'&&ch!='B'&&ch!='b'&&ch!='C'&&ch!='c'&&ch!='D'&&ch!='d')
{
printf("输入有误,请重新输入!");
getchar();
scanf("%c",&ch);
}
else
{
//统计某身份某段位
if(ch=='A'||ch=='a')
{
int a;//身份
char b[100];//段位
int gg=0;
int l=0;
getchar();
printf("请输入棋手身份(0-职业,1-业余):");
scanf("%d",&a);
if(a!=0&&a!=1)
{
printf("身份输入有误!");
return;
}
printf("请输入段位:");
scanf("%s",b);
char hh[20][20]={"初段","二段","三段","四段","五段","六段","七段","八段","九段"};
char xx[20][20]={"10级","9级","8级","7级","6级","5级","4级","3级","2级","1级","9段","8段","7段","6段","5段","4段","3段","2段","1段"};
if(a==0)
{
for(i=0;i<10;i++)
{
if(strcmp(b,hh[i])==0)
{
gg++;
}
}
if(gg==0)
{
printf("段位输入错误!");
return;
}
}
else if(a==1)
{
for(i=0;i<100;i++)
{
if(strcmp(b,xx[i])==0)
{
l++;
}
}
if(l==0)
{
printf("段位输入错误!");
return;
}
}
enum ID s_sf=(a==0)?profession:amateur;
for(i=0;i0)
{
count++;
printf("\n棋手编号\t棋手姓名\t棋手身份\t棋手段位\t等级分\n");
printf("%-8s\t",(*(q+i)).bh);
printf("%-8s\t",(*(q+i)).name);
printf("%-8s\t",((*(q+i)).sf==profession)?"职业":"业余");
printf("%-8s\t",(*(q+i)).dw);
printf("%-4d\n",(*(q+i)).s);
}
}
}
printf("统计成功!");
printf("当前选手数量为%d",count);
}
//统计职业棋手
if(ch=='C'||ch=='c')
{
for(i=0;i0)
{
a=(*(q+i));
(*(q+i))=(*(q+j));
(*(q+j))=a;
}
}
}
}
printf("排序成功!");
for(i=0;i0)
{
d=(*(q+i));
(*(q+i))=(*(q+j));
(*(q+j))=d;
}
}
}
printf("排序成功!\n");
for(i=0;i